From patchwork Thu Jan 23 09:52:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Moessbauer X-Patchwork-Id: 4024 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Thu, 23 Jan 2025 10:53:05 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-lf1-f58.google.com (mail-lf1-f58.google.com [209.85.167.58]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 50N9r4m7006430 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 23 Jan 2025 10:53:04 +0100 Received: by mail-lf1-f58.google.com with SMTP id 2adb3069b0e04-53f167e95e6sf354977e87.1 for ; Thu, 23 Jan 2025 01:53:04 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1737625979; cv=pass; d=google.com; s=arc-20240605; b=KPWJYamOpiP8/v8YIg/XDu4wkoF/wSngOqtT1f3sncQ/JFq4zQ4CTCdwv0Jo8cCae3 mZpJszveT4rUT6bb7qE24R7qGGsZYnK1rSVnqH5qCyH00ZhhgROdAeEfM6Yockoj1Tnc DhiT/i52gzFkzDRdMtDjZcgSuFAWwauHcqzny1YCARqsGdtlSC53y3cJD0eMoahC3qZm PYI0tinAYRHAbrahrGnCPtMxY4pjjMX1sX3HmuG5Svng1t5xU0A3bXJMMHejwqSqSu1t 8pVoyM9jl/z1SoBuKns6SKErYpvSJt9uoitDXG8Lh6+zhFCfuQBBAzw446/VOTEw84ii AQjA== 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=S6v3l3SAB/HSHqAbMjXlhcj2G2IKDERDFv7gNVrjCnQ=; fh=tlinZKX7US6tm41pJ29bpYNDJOkjX4T7eygwWmggMVA=; b=cw3a/okOFhIuhM2U+A1+HFiuKIWe30nwBgq5u2jIBUDHGxVGA+Knj7YEVqNbs8DF40 eHa9dmQg2+hTFGrwBCZUeRxa67jFI3oTAteeP0Gr9C0cEXe7EjlH035tdXhh6XbYSQnH wv9eRhb9RqDGjwiVzlLh2lIPufEm+ntdKy1gIHgnKcNVO8uVpiK6jBehqJlB6/IS9B1B /Z7oXbKdxis/niUS1hhkfDosF7MKWZNeppRntiWlcX2UlXbCTyoER0rl6wl+wcaF7v4e V+ONr7MisnMiAXPPZIjquq/3hrQx/fyHWadZ+2nZ14g7zVC9xVnPkrtA3kA3j5c0jPIP yvyg==; darn=isar-build.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=IUbDi8Ix; spf=pass (google.com: domain of fm-1321639-202501230952543ebc5d2d231fee7be0-rs8ysc@rts-flowmailer.siemens.com designates 185.136.64.227 as permitted sender) smtp.mailfrom=fm-1321639-202501230952543ebc5d2d231fee7be0-Rs8ySC@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=1737625979; x=1738230779; 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=S6v3l3SAB/HSHqAbMjXlhcj2G2IKDERDFv7gNVrjCnQ=; b=XD12Ms+lC9sTQG/ZzB0+7XGmn0yWG1jrr+ItyoVlIcku1tvgHKk9X/1Nx46owetr+F gB/TwbnvtWYsKh+Nn+Q08XaPzrtNjr9LAy4UdTk8wCSTeuuMRmLWtwAoC7eArL3jIGJ7 48pg7z9dnd5QlYosojq5VrEjpn/lNkmrLlKEun4AbxfazzkiAYBrZdGlmFqgMbd/sb/P /HIYitalfagzgW8KsHfNZuUk3MeEK1zJYMb8u4+aXBNRBoRTNp4kY/oxKzwn81SxYO31 u6d1PcTulIE+KBGSVe4EoeIMsvvyBkEh3RopyUJNCVkP/2a/jInGPTUTHIgOmtlLpzdP FLbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737625979; x=1738230779; 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=S6v3l3SAB/HSHqAbMjXlhcj2G2IKDERDFv7gNVrjCnQ=; b=eUyd43WG1IOo3Bu9oeLYM62ymmkX2otnzAosORFO9/Hw5/nLLI6xXsZvj+WbEdZ7a9 1lAzGXB1k+5X5r81Kwq2C2t8lUzpBo/3AwWsWOKN8jE4uLAZ3ACELL1ctWrs2k2z3JFB WPZ8W+kZroPg4gOYUUiZtDeG5teb1Tie87bODilxBoI63PREi5i6AMaJsJPI7gPD5+jz x60/uAVmSQHPKtG8cIrALB0x9MCLDgqoQAzvanDiR++BbK/kkRHwaOFTbpDgXT51s8uD VSYWY4i/TNY30XENxnyukcf1eU/vDuEK3QuvdIUt7FrDFc45d7YEJ82cwGDTTfohgt70 Epcw== X-Forwarded-Encrypted: i=2; AJvYcCW/lP6Z6R2DieoegnQ4AZGsWphMB8uMCa4JB1IJDJrxkk12Y3ZZCkSRJE12LYwVsnPmXQpfa7Q=@isar-build.org X-Gm-Message-State: AOJu0YxAVd6E/z8ZQNlZTHcxLc/6bAFT6FDXyBD7Ck9p6Zgk+ASevASY nM69FLpSjl6hlKdArf6ocQ8SOQju+b94clt2a9BHMbKji2xiAKGj X-Google-Smtp-Source: AGHT+IE9kN+FyHsIZQW6o65XV6a5sPlsxLBEGzY8udsmcqZApCbNsD+UvkE/pnOJ97rfc0tC/laFsQ== X-Received: by 2002:a05:6512:908:b0:542:2e05:313b with SMTP id 2adb3069b0e04-543c2248e44mr795592e87.21.1737625977627; Thu, 23 Jan 2025 01:52:57 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a19:6456:0:b0:543:9a60:e55e with SMTP id 2adb3069b0e04-543c23e5c03ls118311e87.0.-pod-prod-00-eu; Thu, 23 Jan 2025 01:52:55 -0800 (PST) X-Received: by 2002:ac2:414e:0:b0:542:28af:816 with SMTP id 2adb3069b0e04-543c22302d7mr786952e87.20.1737625975030; Thu, 23 Jan 2025 01:52:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1737625975; cv=none; d=google.com; s=arc-20240605; b=fNSIKJk00pwL3qzHTSwpu1SnBSmSIfJyiYDCfs6ji1uhOzDGwao6t02SCY7Qlu7pjI Mm+WzVJndw8hKFBQ6bH8GWyCsQlzINNB30R4oW0wR37RHqRi7SInuZk8T9QCWN7N9ngb 6pVwzCv4mfdfYngzy7BLxzeIeai9jsiwv2ZlSfaAPxmbXJMN71/MLOAJ40NVbq7gilYB WEL+r56XvL0HvcfcLqysr0m4rYAYIEDF9YzQpyY6boXoT+4vVVVk1dV33+d3o9lw01qO 1u+5g+uAFrk8yIShzU5QQEIPPNXqrBL1kqKsjNMvZ/jCTKw8hrwKAujHsYYsDopk5Qu4 KRpQ== 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=ljTMzgF5s1XF3pm6fXQGYbVaCS2nqgffCKyMztawLQkMwbm/J0Gtp/Hrz04/0at42H NovdQm1fiy9u0lITowgwajfctHxp7/s3suDAmcm8Koq9JVpre84aAxITiY/8mqGoB2PR r0xCiLNdnMrWmnmoEgF1G/AKeXktgb5b2Vr2Qgz1d9JWrnBmGqQzAl/Qvg+1uz0o6fnm O3ZKMYA9pWKYKsulvgu6r4D6KhkorKDOgn89X8nHikrwNNHCtHEGSglUA2e7EJPMmrv1 CD5SEsgBRCOE6MJJSeoKvpUbTd7FUS2H/hVqa2yqMlUtln7RBMJtn/eX83sLYDski45g 1u/Q==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=IUbDi8Ix; spf=pass (google.com: domain of fm-1321639-202501230952543ebc5d2d231fee7be0-rs8ysc@rts-flowmailer.siemens.com designates 185.136.64.227 as permitted sender) smtp.mailfrom=fm-1321639-202501230952543ebc5d2d231fee7be0-Rs8ySC@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-64-227.siemens.flowmailer.net (mta-64-227.siemens.flowmailer.net. [185.136.64.227]) by gmr-mx.google.com with ESMTPS id 2adb3069b0e04-5439af04b4bsi361903e87.1.2025.01.23.01.52.54 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 23 Jan 2025 01:52:54 -0800 (PST) Received-SPF: pass (google.com: domain of fm-1321639-202501230952543ebc5d2d231fee7be0-rs8ysc@rts-flowmailer.siemens.com designates 185.136.64.227 as permitted sender) client-ip=185.136.64.227; Received: by mta-64-227.siemens.flowmailer.net with ESMTPSA id 202501230952543ebc5d2d231fee7be0 for ; Thu, 23 Jan 2025 10:52:54 +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 v2 2/7] wic: add ISAR version of isohybrid-efi plugin Date: Thu, 23 Jan 2025 10:52:18 +0100 Message-Id: <20250123095223.2928575-3-felix.moessbauer@siemens.com> In-Reply-To: <20250123095223.2928575-1-felix.moessbauer@siemens.com> References: <20250123095223.2928575-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=IUbDi8Ix; spf=pass (google.com: domain of fm-1321639-202501230952543ebc5d2d231fee7be0-rs8ysc@rts-flowmailer.siemens.com designates 185.136.64.227 as permitted sender) smtp.mailfrom=fm-1321639-202501230952543ebc5d2d231fee7be0-Rs8ySC@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