From patchwork Tue Jan 21 10:12:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Moessbauer X-Patchwork-Id: 4018 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Tue, 21 Jan 2025 11:13:10 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-lf1-f64.google.com (mail-lf1-f64.google.com [209.85.167.64]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 50LAD9mc025882 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 21 Jan 2025 11:13:09 +0100 Received: by mail-lf1-f64.google.com with SMTP id 2adb3069b0e04-53e1bddea1dsf3388671e87.2 for ; Tue, 21 Jan 2025 02:13:09 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1737454383; cv=pass; d=google.com; s=arc-20240605; b=Btt4+rWHENYMQdWVIT/KXVeaCyCQoUlk2/L/1BQXab0cGCeYht1nyNZmGliSnIyx0C NqyXnHPw7iYljGuaTZoCi596rNq26tL+Aun9x1vp83/2y4TSxoPzIf0Q5/Wz41GVB3Y1 i/YDncj/KNJRZdFY6cuIKLWBhATEyhEyK/3xKBk8rC8Ldo8ToLqPoHt3flWpIp+fGL0f gdcCMQi19gVijGY1is4Jw7OLy8r3HWIiyzKaeDhoN14EO/uKguRT4n3ZdxxoZzGPxh4K G3OFFDTiHc3gkxV/CTwbj6w8mkVchlGaOF9R5DM0hQkSA9kDZECxlt0VaBObaOeVXMsq FAZg== 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=lsUCZl2+4E5wwxP48HEtMTaFJxVvFH+A01AVsOnsP4M=; fh=oYpJyxc7fmtSMqjuxtV6WKBTe3SywzaeV9hltzr92Mk=; b=M3ett2Nyna2zHLVFkOJ5NG69uAS+l19q7SI0Ya8jY19rGbiPTfesBpMSob3rcotxbV RjV9Gzk1/w9l6XpkkH9vTfRkCSuvwZG3d7IZHg295S6NneLkMJAYmvT0w5Zua5VqZD8q u3yE5m8GeRgxa9fUlLHqxR/8bS0LaBX4hAptU3TjtnIuXTXpx5aF5xnsccW03ukjWFAF lIuWRGlYJruxQRR7RlSsVGMWPs5FYXmo83EsL2pn3Ne6Oq/Q+gu9HwbwJH7gpkQkt5Ob MBMky2+R1JwQyZZcC9lF3o8Ivy/hhYC4rJf1+qKNXtXFe9q5ri9LOBK42ijMm3uyuH3z kUAg==; darn=isar-build.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=GggXx4WC; spf=pass (google.com: domain of fm-1321639-20250121101259636e9458f49e91692a-tbijrl@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) smtp.mailfrom=fm-1321639-20250121101259636e9458f49e91692a-TbIJrl@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=1737454383; x=1738059183; 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=lsUCZl2+4E5wwxP48HEtMTaFJxVvFH+A01AVsOnsP4M=; b=DztkJD6fdcGyoStQIDAjBZukh1hwSMLi4ZZC1jrueujF+wFXiOA8tFbGsiNv2BcmxO RMH+ZZkeRmhJhcIxjy6UDuwutIREfBaS5RpZ0y09frV/zB9Tk2IvDeSh+AMQ6fWs/gzB hUvNK5Qs1vqYF8SjShFa+8VwO8feigMFimzihqLaIbjnnbIWaAidS11EDzpIYn/qvQsK f3pp2OHjmo0GsgP9XeXzaI93wRQXOqw8J+h+x+E80xgRiSMPpHiuXt71/4TNA9Na17hT awCmjzrqSnrjmLiIZUdO0nZ8HJUNXI+b8tvPAX7aHxXoBu4fMVs/YXWwP9/pNnuyRlwS TFKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737454383; x=1738059183; 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=lsUCZl2+4E5wwxP48HEtMTaFJxVvFH+A01AVsOnsP4M=; b=jCAyFHNHjw26MIMEKq78ix1Q6N9kOPwPJgczbnDKPAfcotHawv3bPV5nCRL//C6q7B XjNrGImOqCwJaqOmINRXgOtYfsqXxf1aOAlbJwNX71Z5a4ieRyIXJLnrXs5AYxr3XfEN Tc5x5CewW/gnbxlC7OX47t45cgp5gRbMz9jl9BxxTs6EKXYEq9ICQUFF8IsGn3jWV0J1 3v70ftC3a89QTrbxtDZRNQxp5P1Wt33ShqePcn3R9TTbtE6yzVGN28mOIz8Zxjw03oaZ /YWf8h8JOOYiS3Ol8OWHKOXbLzlCrts9+9eMe89HeerbyRTCaA/gwUAg4Lyvxq3y7ddP NFFg== X-Forwarded-Encrypted: i=2; AJvYcCWwEZfvC3E2iVJRAl4Q5/5wpSBLa4tY1g3+wOq3rfeQYUk1FWdxub5FHLku2L4wLbKEaQGc0jk=@isar-build.org X-Gm-Message-State: AOJu0YysccwSAVnct4aByAkF+4ic8rPm3qOhB/Oue46/HEnJI9rDDAds LOIm+ffbcLO+zhcUwAcFOc5VV7wwXcETXcBpbyTorf0mePpGFLZk X-Google-Smtp-Source: AGHT+IH0nnqThgqUDt7bGN+sKUwSIyir2+CBJlLjsnPTREi4rhtBpHVRJ68WUv6YFUb/gho4MdT/zg== X-Received: by 2002:a05:6512:b23:b0:53e:fa8b:822e with SMTP id 2adb3069b0e04-5439c28258dmr5070770e87.37.1737454382607; Tue, 21 Jan 2025 02:13:02 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:6512:3f09:b0:540:c34b:91f3 with SMTP id 2adb3069b0e04-543ae297c37ls473818e87.2.-pod-prod-02-eu; Tue, 21 Jan 2025 02:13:00 -0800 (PST) X-Received: by 2002:ac2:5611:0:b0:540:2543:1b19 with SMTP id 2adb3069b0e04-5439c251de3mr5445822e87.24.1737454379782; Tue, 21 Jan 2025 02:12:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1737454379; cv=none; d=google.com; s=arc-20240605; b=d9kaungsV85Vhep3603GjMOLK1D3Rrsx7Or7r0Q6GIRpyEQQBENaiwzllM6EB+g+RB yzqqZup+97arkj+z+7KIENmyfglw/RJKD+nfQJVgMGqyLxsYubWHqAWr4QKYrKDXssxj 2GbZMwfcimRmP/3KS4JRROFfJb6QRKjlD2Rn+Qg37mjXc8JJQPvZeY70zmqzpK60Xb9p wnMSNLyV0NkXP0eC2h88hdCmdCmtKKtsF7M+rPIR62+rF5QETF+XPf946SqDSjf0vawh jZqUI/BDucm60RfKl1FVHGXUvou5unnpwjl0f9ajYvJIecvV7pTyFp74Udd/Rl0r7XXe oDOw== 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=NbcxwwNCgx5Ct2Ylm6KK7O2kyTg82HprZBUf9YO/+ytQmvO/D5gfvA0fLo3P9wb9pU SFQNCCWw+bDNVQR+Hs8sZf8cwJem0UGFwBhWXCHLMYnzkwrAUo71c59s30GnagSWQctw clQStFveLECcncnrjQFphOqdlhvglKOcawaCwo568P0PlO0Ij23A87hDhSNgg556P4gU sCbMwmknclzzcp8gwoWmlNHDVBJhl0JWXtmFIbDFqom8Jv2r9nzqFHT9cqHuLdnR3gQW eIKEnR07oPSk1b7yTnhvMKmoqm2kI1qjOOCvC3x7zFTRaHr8J3KwsdJ7LlBEmEpJ4rnK s9sQ==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=GggXx4WC; spf=pass (google.com: domain of fm-1321639-20250121101259636e9458f49e91692a-tbijrl@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) smtp.mailfrom=fm-1321639-20250121101259636e9458f49e91692a-TbIJrl@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-65-227.siemens.flowmailer.net (mta-65-227.siemens.flowmailer.net. [185.136.65.227]) by gmr-mx.google.com with ESMTPS id 2adb3069b0e04-5439af04c52si247794e87.2.2025.01.21.02.12.59 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Jan 2025 02:12:59 -0800 (PST) Received-SPF: pass (google.com: domain of fm-1321639-20250121101259636e9458f49e91692a-tbijrl@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) client-ip=185.136.65.227; Received: by mta-65-227.siemens.flowmailer.net with ESMTPSA id 20250121101259636e9458f49e91692a for ; Tue, 21 Jan 2025 11:12:59 +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 2/5] wic: add ISAR version of isohybrid-efi plugin Date: Tue, 21 Jan 2025 11:12:49 +0100 Message-ID: <20250121101252.324899-3-felix.moessbauer@siemens.com> In-Reply-To: <20250121101252.324899-1-felix.moessbauer@siemens.com> References: <20250121101252.324899-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=GggXx4WC; spf=pass (google.com: domain of fm-1321639-20250121101259636e9458f49e91692a-tbijrl@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) smtp.mailfrom=fm-1321639-20250121101259636e9458f49e91692a-TbIJrl@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