From patchwork Fri Jan 24 12:35:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Moessbauer X-Patchwork-Id: 4036 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Fri, 24 Jan 2025 13:36:12 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-lf1-f63.google.com (mail-lf1-f63.google.com [209.85.167.63]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 50OCaBMj013570 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 24 Jan 2025 13:36:11 +0100 Received: by mail-lf1-f63.google.com with SMTP id 2adb3069b0e04-5426f59d5c0sf1127576e87.2 for ; Fri, 24 Jan 2025 04:36:11 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1737722164; cv=pass; d=google.com; s=arc-20240605; b=ffZTvdtJ1mYq3vgODBo3OLmcIbTRULkF54Cj2mJ8MTprt8Izy9GjTf6znDO8L2yRHD dg7lMjjLDcdD10COjRagPca8XGntglQR25C//ZAqCY1ERmR5CIdgjaQmSEDh/nEhyErK pRGM1zcQ22ucvbPJK0A1NMOmcaH7XRq617TrgfMwgeWe2EFe58cEOr2uIp9nrJNnJCvE Uy6hkLLt2Ue1xYlqe86AXgVqpOYzrGSIvGMu0c7gLOeHj2Dl/RNwdY5o3DqMJXBlUejl jwSDElmQN+w6/NYkJ53wHnTiZ15RrkaCG/S5uZQjDSvRdfWxwtmXNIyJE+M8VRHicjBa o60A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:feedback-id:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=BZnyy9SCau8VljfIT0ckKX9JfpNhWGObke/7KjUhloU=; fh=9/Ztvc3+43G3lE/it9W3I516i6AIbISusqGc2TckN8g=; b=IoO45GB7jVjxop8xxXlRoJCJzZW7s5BkHCnLlPLxtUolM2e3AQugGyqFBNs5YPCjSg OtDz4t93iUFfQgN3K+B6pYceOecHdtwrpme9oAuyn8Mf6R+6rVUYd20W+JdP4WiOLMpt K9lQGDyY8xRRFO+SBq5MnKW4YTx0Fz6bZilCz2vf2/0Mx8ZSfaWyWki1i6H/90jhXtLx jjNmFr68r010TF/d+4xNiAuJzIrsnbuoR45tt1C+C8QwZVtrA6nvwRiQNYoKZw0/ZTeB 87P+W2zyFa6g0TBxFm85mRgsAWdO1c5xxqSZhH67vE4Zklri5xtn7H96pCGIzQ/bcpoR j12A==; darn=isar-build.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=WyhOi9YE; spf=pass (google.com: domain of fm-1321639-202501241236008b6993125e32217e4f-3oqfb9@rts-flowmailer.siemens.com designates 185.136.65.226 as permitted sender) smtp.mailfrom=fm-1321639-202501241236008b6993125e32217e4f-3oQFb9@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1737722164; x=1738326964; darn=isar-build.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=BZnyy9SCau8VljfIT0ckKX9JfpNhWGObke/7KjUhloU=; b=vOAVhINvRP5nzV5FNactdn9+PrImtRR0d6eK2wAKY6J02vRecakoSpdpY/IWNUftok f+zFOsFBu4FDXK3S9Nch3jjd2cyI3Bbn0hOwVIFaof3xTfrWngp7axcAnv6QufiT8NTw vsbmalZXW9Xd6xgQ1h3paOyvTwXhcC9cix7E1gbmE+FtAr63Wk87iMNrAYRVAav5VL7Y 0JrShV9bcTx9MxhqIHbodEz3G7Q34dDlatwfDmuVKnF6ectOOqFogIwmYez/3toiwsSh CJGdmsn4d4Kq9Cb6wDuZrIxToMd0NxUWM/i3FjFDuNdmv79PWqxTDZii8dDXR+IwdsuJ FKtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737722164; x=1738326964; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-beenthere:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=BZnyy9SCau8VljfIT0ckKX9JfpNhWGObke/7KjUhloU=; b=lCaha6pFrCS1RtU7Omm5jnvN46iT4kRUZfglWAY/3BurMUZMvo+4k0UsRXgI3ISODi zPYVEHyWdFSkZui9QD5oj7E+J5slZy46QWkZiQTNTaVoZv6o/aPgZak5tf53D6onGJ15 N0MAmAHwQ99vrluCjka9uJhjSOmIpCENjwJWql8UVKnOVFkPFbTYSESVTG6tzxach4k+ KxGFZw13nHlEJlPEeZOf7bvcqsMn0+VP9z+69+lgtunLTgn9k7WuMTHRZ/3ooHtDW+1x XIXTl+cGkt+uxBg5gM4/icohIBXeaHd4C1+RbG0qi5PaY52jrUyJvyta0cETEYnB6/bZ xyqQ== X-Forwarded-Encrypted: i=2; AJvYcCVRBRrDqZ95Pacdl7/bIXqh1TsdPg37LYbFEIAJT4/Lc9SmYSA3JLiXapwVgjZ/2xedCPGTDqg=@isar-build.org X-Gm-Message-State: AOJu0YzJOd/2R2bwCi7kLFkL/ULoZ2H546KpC/8k6H67KdOTXnsLAUm7 /GRleYMpALJcDN5YfX5l1b/V4xtl8LWB3N57lx7dZs+CkQjniOjq X-Google-Smtp-Source: AGHT+IE1c8xF11Imi6j4uz7YRxsTj5Zv3w705HmDqWxIeD8QQfM80htK2qV0o3bk4fkdAGFlq6/twg== X-Received: by 2002:a05:6512:1252:b0:540:3566:5397 with SMTP id 2adb3069b0e04-5439c229208mr11158017e87.22.1737722163944; Fri, 24 Jan 2025 04:36:03 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a19:e004:0:b0:540:22e0:1f6d with SMTP id 2adb3069b0e04-543c23e0d34ls372819e87.0.-pod-prod-07-eu; Fri, 24 Jan 2025 04:36:01 -0800 (PST) X-Received: by 2002:ac2:41d7:0:b0:542:62e6:4517 with SMTP id 2adb3069b0e04-5439c2289d6mr8196358e87.12.1737722161276; Fri, 24 Jan 2025 04:36:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1737722161; cv=none; d=google.com; s=arc-20240605; b=ks//lo4/uT1d7cRNO5PCzvP3uWghz+W4eZHN6SOpNOC1C81l3ckGeyhrPCjIw0FKRa j+aotE93ZvTtCd/nHadTdubZxLNS4Awrz8elIA/AWppmzXSAuUpBboLXHSG7vORf3jAU RXDX6qtrzDEitAihGUHIxYl/iJetf6FqQlUKl56FLbc4a//ggz+R9BbjSgyxaz6evOu7 adrRnBeA3IFr3Wacw5J5YpXkQ9wyX/EssjFS56WpC218vWxKXAOKNEwlWtNxPaCBR1LM p+twR6iNH+H3YJOHlUQwYqtkw2oZ1AqV8cFW86SSh4PKGtqxw9lIH/1zslxU2v6jzlr+ YwqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=feedback-id:content-transfer-encoding:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=ZbLOhl80gbV2bSiuY9N4dAptMeBobewG3bgfOi83Q14=; fh=Bo8ZbdhPy/JbmTSxHxcgeG9JPAXIanSEMBVfErZw+70=; b=U1hd7hVSXVf1ejG+BeDpguNb+b6/U59Ef8Da3wn0NcEELW1I8qPzYAyn5dRmAkcz6j ODJGXSk+CKKwZwSavgQxI5ot/0FIowmDyL/fS3rYKhALgex/FtDbBAPnypyZ2FKDbIaZ 4uoyljYMCZD9XHMLzlsZGXOPPnSZUZSNDlB+G9xRO33j3gN2/KFhdj80auSnymWjDWgu /ebczE8h190/T0jz6IWwkTWI2GNPTYo6bgTT8062e2oJAx0zHJ6pQ5TsgsFsey6uAB0t Ti3aA8Uw1pSkXqyspf1DGMjqxKclJWcD9+MkjthupJJz7QIHGLf3JnWlqpzy/GhpJ5xQ o7kg==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=WyhOi9YE; spf=pass (google.com: domain of fm-1321639-202501241236008b6993125e32217e4f-3oqfb9@rts-flowmailer.siemens.com designates 185.136.65.226 as permitted sender) smtp.mailfrom=fm-1321639-202501241236008b6993125e32217e4f-3oQFb9@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-65-226.siemens.flowmailer.net (mta-65-226.siemens.flowmailer.net. [185.136.65.226]) by gmr-mx.google.com with ESMTPS id 2adb3069b0e04-543c8231e51si44330e87.5.2025.01.24.04.36.01 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 Jan 2025 04:36:01 -0800 (PST) Received-SPF: pass (google.com: domain of fm-1321639-202501241236008b6993125e32217e4f-3oqfb9@rts-flowmailer.siemens.com designates 185.136.65.226 as permitted sender) client-ip=185.136.65.226; Received: by mta-65-226.siemens.flowmailer.net with ESMTPSA id 202501241236008b6993125e32217e4f for ; Fri, 24 Jan 2025 13:36:00 +0100 X-Patchwork-Original-From: "'Felix Moessbauer' via isar-users" From: Felix Moessbauer To: isar-users@googlegroups.com Cc: clara.kowalsky@siemens.com, florian.bezdeka@siemens.com, jan.kiszka@siemens.com, Felix Moessbauer Subject: [PATCH v3 2/7] wic: add ISAR version of isohybrid-efi plugin Date: Fri, 24 Jan 2025 13:35:40 +0100 Message-Id: <20250124123545.3500274-3-felix.moessbauer@siemens.com> In-Reply-To: <20250124123545.3500274-1-felix.moessbauer@siemens.com> References: <20250124123545.3500274-1-felix.moessbauer@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1321639:519-21489:flowmailer X-Original-Sender: felix.moessbauer@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=WyhOi9YE; spf=pass (google.com: domain of fm-1321639-202501241236008b6993125e32217e4f-3oqfb9@rts-flowmailer.siemens.com designates 185.136.65.226 as permitted sender) smtp.mailfrom=fm-1321639-202501241236008b6993125e32217e4f-3oQFb9@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: Felix Moessbauer Reply-To: Felix Moessbauer Precedence: list Mailing-list: list isar-users@googlegroups.com; contact isar-users+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: isar-users@googlegroups.com X-Google-Group-Id: 914930254986 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,RCVD_IN_RP_CERTIFIED, RCVD_IN_RP_RNBL,RCVD_IN_RP_SAFE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= This adds support to generate a hybrid grub-efi + syslinux ISO9660 image. The patch is written in an add-only style to simplify updates of the upstream plugin. Signed-off-by: Felix Moessbauer --- .../plugins/source/isoimage-isohybrid-isar.py | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/meta/scripts/lib/wic/plugins/source/isoimage-isohybrid-isar.py b/meta/scripts/lib/wic/plugins/source/isoimage-isohybrid-isar.py index afc9ea0f..b46527b8 100644 --- a/meta/scripts/lib/wic/plugins/source/isoimage-isohybrid-isar.py +++ b/meta/scripts/lib/wic/plugins/source/isoimage-isohybrid-isar.py @@ -18,6 +18,12 @@ from wic.engine import get_custom_config from wic.pluginbase import SourcePlugin from wic.misc import exec_cmd, exec_native_cmd, get_bitbake_var +# allow plugins to import from isarpluginbase +if '__file__' in globals(): + import sys + sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..") +from isarpluginbase import (isar_get_filenames, isar_populate_boot_cmd) + logger = logging.getLogger('wic') class IsoImagePlugin(SourcePlugin): @@ -44,6 +50,7 @@ class IsoImagePlugin(SourcePlugin): """ name = 'isoimage-isohybrid' + name = 'isoimage-isohybrid-isar' @classmethod def do_configure_syslinux(cls, creator, cr_workdir): @@ -71,6 +78,9 @@ class IsoImagePlugin(SourcePlugin): syslinux_conf += "LABEL boot\n" kernel = get_bitbake_var("KERNEL_IMAGETYPE") + kernel, initrd = isar_get_filenames( + get_bitbake_var("IMAGE_ROOTFS"), get_bitbake_var("KERNEL_FILE") + ) if get_bitbake_var("INITRAMFS_IMAGE_BUNDLE") == "1": if get_bitbake_var("INITRAMFS_IMAGE"): kernel = "%s-%s.bin" % \ @@ -80,6 +90,13 @@ class IsoImagePlugin(SourcePlugin): syslinux_conf += "APPEND initrd=/initrd LABEL=boot %s\n" \ % bootloader.append + # replace initrd with correct one + if initrd: + syslinux_conf = syslinux_conf.replace( + "initrd=/initrd", "initrd=/%s" % initrd) + else: + raise WicError("Couldn't find initrd, exiting.") + logger.debug("Writing syslinux config %s/ISO/isolinux/isolinux.cfg", cr_workdir) @@ -125,9 +142,23 @@ class IsoImagePlugin(SourcePlugin): kernel = "%s-%s.bin" % \ (get_bitbake_var("KERNEL_IMAGETYPE"), get_bitbake_var("INITRAMFS_LINK_NAME")) + kernel, initrd = isar_get_filenames( + get_bitbake_var("IMAGE_ROOTFS"), get_bitbake_var("KERNEL_FILE") + ) + + bootloader.append = bootloader.append or "" grubefi_conf += "linux /%s rootwait %s\n" \ % (kernel, bootloader.append) grubefi_conf += "initrd /initrd \n" + grubefi_conf = '\n'.join(grubefi_conf.splitlines()[:-1]) + '\n' + + if initrd: + initrds = initrd.split(';') + grubefi_conf += "initrd" + for rd in initrds: + grubefi_conf += " /%s" % rd + grubefi_conf += "\n" + grubefi_conf += "}\n" if splashline: @@ -156,12 +187,14 @@ class IsoImagePlugin(SourcePlugin): raise WicError("Couldn't find IMAGE_BASENAME, exiting.") image_type = get_bitbake_var("INITRAMFS_FSTYPES") + image_type = image_type or "img" if not image_type: raise WicError("Couldn't find INITRAMFS_FSTYPES, exiting.") machine = os.path.basename(initrd_dir) pattern = '%s/%s*%s.%s' % (initrd_dir, image_name, machine, image_type) + pattern = '%s/%s-%s-initrd.%s' % (initrd_dir, image_name, machine, image_type) files = glob.glob(pattern) if files: initrd = files[0] @@ -227,6 +260,12 @@ class IsoImagePlugin(SourcePlugin): logger.debug("Payload directory: %s", payload_dir) shutil.copytree(payload_dir, iso_dir, symlinks=True, dirs_exist_ok=True) + if source_params.get('payload'): + payload = source_params.get('payload') + + logger.debug("Payload: %s", payload) + os.mkdir('%s/live' % iso_dir) + shutil.copy(payload, '%s/live' % iso_dir) @classmethod def do_prepare_partition(cls, part, source_params, creator, cr_workdir, @@ -299,6 +338,7 @@ class IsoImagePlugin(SourcePlugin): install_cmd = "install -m 0644 %s/%s %s/%s" % \ (kernel_dir, kernel, isodir, kernel) + install_cmd = isar_populate_boot_cmd(rootfs_dir, isodir) exec_cmd(install_cmd) #Create bootloader for efi boot @@ -313,19 +353,46 @@ class IsoImagePlugin(SourcePlugin): # Builds bootx64.efi/bootia32.efi if ISODIR didn't exist or # didn't contains it target_arch = get_bitbake_var("TARGET_SYS") + distro_arch = get_bitbake_var("DISTRO_ARCH") + if distro_arch == "amd64": + target_arch = "x86_64" + else: + target_arch = distro_arch + if not target_arch: raise WicError("Coludn't find target architecture") if re.match("x86_64", target_arch): + grub_target = "x86_64-efi" grub_src_image = "grub-efi-bootx64.efi" grub_dest_image = "bootx64.efi" + grub_modules = "multiboot efi_uga iorw ata " + if get_bitbake_var("DISTRO").startswith("ubuntu") and \ + os.path.exists('/usr/lib/grub/x86_64-efi/linuxefi.mod'): + grub_modules += "linuxefi " elif re.match('i.86', target_arch): + grub_target = "i386-efi" grub_src_image = "grub-efi-bootia32.efi" grub_dest_image = "bootia32.efi" + grub_modules = "multiboot efi_uga iorw ata " else: raise WicError("grub-efi is incompatible with target %s" % target_arch) + if not os.path.isfile("%s/%s" \ + % (target_dir, grub_dest_image)): + grub_cmd = "grub-mkimage -p /EFI/BOOT " + grub_cmd += "-O %s -o %s/%s " \ + % (grub_target, target_dir, grub_dest_image) + grub_cmd += "part_gpt part_msdos ntfs ntfscomp fat ext2 " + grub_cmd += "normal chain boot configfile linux " + grub_cmd += "search efi_gop font gfxterm gfxmenu " + grub_cmd += "terminal minicmd test loadenv echo help " + grub_cmd += "reboot serial terminfo iso9660 loopback tar " + grub_cmd += "memdisk ls search_fs_uuid udf btrfs xfs lvm " + grub_cmd += "reiserfs regexp " + grub_modules + exec_cmd(grub_cmd) + grub_target = os.path.join(target_dir, grub_dest_image) if not os.path.isfile(grub_target): grub_src = os.path.join(deploy_dir, grub_src_image) @@ -393,18 +460,23 @@ class IsoImagePlugin(SourcePlugin): cls.do_configure_syslinux(creator, cr_workdir) install_cmd = "install -m 444 %s/syslinux/ldlinux.sys " % syslinux_dir + # different name in Debian + install_cmd = "install -m 444 %s/syslinux/modules/bios/ldlinux.c32 " % syslinux_dir install_cmd += "%s/isolinux/ldlinux.sys" % isodir exec_cmd(install_cmd) install_cmd = "install -m 444 %s/syslinux/isohdpfx.bin " % syslinux_dir + install_cmd = install_cmd.replace('/syslinux/', '/ISOLINUX/') install_cmd += "%s/isolinux/isohdpfx.bin" % isodir exec_cmd(install_cmd) install_cmd = "install -m 644 %s/syslinux/isolinux.bin " % syslinux_dir + install_cmd = install_cmd.replace('/syslinux/', '/ISOLINUX/') install_cmd += "%s/isolinux/isolinux.bin" % isodir exec_cmd(install_cmd) install_cmd = "install -m 644 %s/syslinux/ldlinux.c32 " % syslinux_dir + install_cmd = install_cmd.replace('/syslinux/', '/syslinux/modules/bios/') install_cmd += "%s/isolinux/ldlinux.c32" % isodir exec_cmd(install_cmd) @@ -415,6 +487,8 @@ class IsoImagePlugin(SourcePlugin): efi_img = "efi.img" mkisofs_cmd = "mkisofs -V %s " % part.label + # use xorriso from Debian + mkisofs_cmd = "xorriso -as mkisofs -V %s " % part.label mkisofs_cmd += "-o %s -U " % iso_img mkisofs_cmd += "-J -joliet-long -r -iso-level 2 -b %s " % iso_bootimg mkisofs_cmd += "-c %s -no-emul-boot -boot-load-size 4 " % iso_bootcat