From patchwork Mon Mar 11 13:32:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Quirin Gylstorff X-Patchwork-Id: 3388 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Mon, 11 Mar 2024 14:33:29 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-pj1-f61.google.com (mail-pj1-f61.google.com [209.85.216.61]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 42BDXLFO006725 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 11 Mar 2024 14:33:22 +0100 Received: by mail-pj1-f61.google.com with SMTP id 98e67ed59e1d1-29bff709d71sf936016a91.0 for ; Mon, 11 Mar 2024 06:33:22 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710163995; cv=pass; d=google.com; s=arc-20160816; b=tpiHwtmJGpkPq9A6X+XDLbkXxEvQ/LON134RM+gj6El7MLI7SjX8ktcyGm6VLJWaK/ p91xoWnuciQYOrRHPj83E+92AHwFnOrae1hcIhR01kQgoPCfxEHgFqYXSSUfGcQV0cKQ L7AIaiBwEJju0QB8KVqoiGnuGdsaIanoW70QshTeH1HpGHGotRDuinUb45Z62f0AmerS jmbQQ963hsmAwsrOnFU1A0BvIKVtEeS6KvTappMeUr8SnbgE9TgCnhdjD2ALxk/8WM4H 0jiQAtF3+4Ijmj7hcWKYgfatAxsR4B/LJk1K93pIdksdmvSfkwjs3b/4U83K/uW4XZ08 2qZg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:feedback-id:mime-version :message-id:date:subject:to:from:dkim-signature; bh=VUypxl3zUDSiocC1vQFGyywNqZtFiUy4wr2pd8ZCsFc=; fh=v+qiSzqYI3AfKFVKI2NSVsQKn9RwU3KK5WnFNvKiTO8=; b=eeH9pXh7nHD61noWrkjmS4sfF1kn1NUAPrhi6mJlcVp8iAPidyKuTM9Mi66RK1kiIe H0gxZYavpkgv31G5XSNOQb8C/SLXGVVWUhq18F5c18Ylz/paN1CVTIHHHkDds/gR1w8r ekx8pzssUiGKyE6SshyuBxVOBKFT3kVotYRHofJaBLzMXPmMYas85Y3YCXKFi0I6jATL y/37mLrJrJuNEMTA4vfmNpXKAvHbpcvtMgVhrFtLW/HWYRqQljbN8e6x+NxZiCp0kAmx VOPVAIxcHzc8jGSjQnqMC/EnsGR4FktY6zP5a/+UxMPh5Ung3wic2ILlTRgMH+yeRkzD AQbA==; darn=isar-build.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b="Lvm/vB6G"; spf=pass (google.com: domain of fm-51332-202403111333106999cc3f18059f6700-paibnw@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) smtp.mailfrom=fm-51332-202403111333106999cc3f18059f6700-paIBnw@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=1710163995; x=1710768795; 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:message-id:date:subject:to:from:from:to:cc:subject :date:message-id:reply-to; bh=VUypxl3zUDSiocC1vQFGyywNqZtFiUy4wr2pd8ZCsFc=; b=MD8uFsbC+SRQziIcAO0c10JTv69PE4x5ikbXOecQJMCX739l1ac9wlWtqGkSrl7/xo 6CKJVEF4S7WqbWI8his237zEUIX+p2q8RmsoKBRc4UQRSj18wWe9wk3B2b4lXq/Ovmx1 9RHmTmYdUpxBPUKwHI+OmDgI7VYpWp7PJpeZ/iX7sE/FwWI40vhR8D+WpyzeWbV9rbKc DYRfsLuO5J8OyB/XKjAVwP5NggLck1V8J+v006pLvf94oafsgob391ODHa86Y/8GOvt0 0Vgg2Os84baa4sEuNpv92CvSVfikDFCg7NzCy0j5WSSe9GRiRKnJaktEOfJTbddJ5oeV qs9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710163995; x=1710768795; 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:message-id:date:subject:to:from:x-beenthere :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=VUypxl3zUDSiocC1vQFGyywNqZtFiUy4wr2pd8ZCsFc=; b=YKc8SYLirjYUivU7YQhGDuy/r2YgXlL/Tv4K9EsRr1QXs5EyMQuZEdfJNIicJgLART yZPS2WI5U0XcK9BfuKhe6aG7YoxYcXMN+jnX4Eau5cNfKhN/ZOUnwPX/+ZeM9/3q/Y7Z PwkzctuORNUVkLSQPYm7tTQnkFj/UKQ6kvVuM174CcbVptFN29cZ/BcTuUvlATAs44pR ackP9C0XE/xetAGdTAR9TYGJ8c6HwNE792vKL8578R30iuJfa+EN3elq5AEleSbJDg90 FON0qK12QNTv0E55MTqp9Z8IC0H0O0LMruBPORmZIE7MIjTwUpoD2Rm9XZvJ43/xdkwl ZB0Q== X-Forwarded-Encrypted: i=2; AJvYcCUi6GGPZnkZzCmVnvLOSasqIyMkLq2Oe+THgWfNwnYQ9PW+3Bx0qIg82qyfzEF9AHYyKTHFRfScq4zZThD1kBRpBUkEBjA= X-Gm-Message-State: AOJu0YyGeyoUDTq4I40KFvpwDBSTFRVeEhhakQT/aW+dhubhoWqUH84P tc5tSdldA/1rXLK/JsBtKietMLTkJEAG+IQBqtOVRM+X0Wga3DFX X-Google-Smtp-Source: AGHT+IHYemIXMd4Ft60x3U24Yr5cjW69EozDOVnI+WPDKPc508C/lOIfEtxU3KEWsh4SrCXLaVAfTw== X-Received: by 2002:a17:90a:d98b:b0:29b:af61:fb34 with SMTP id d11-20020a17090ad98b00b0029baf61fb34mr5690747pjv.34.1710163994929; Mon, 11 Mar 2024 06:33:14 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a17:90a:c387:b0:29b:e0ee:9070 with SMTP id h7-20020a17090ac38700b0029be0ee9070ls896543pjt.1.-pod-prod-08-us; Mon, 11 Mar 2024 06:33:13 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUO6CE+E6epnR5Yeo8xtyfUAy8zY41as93CnByBmHWpk7eUcaqIWPRuMdUEwDwnlXsZmo7JtnVoxu5xwsliAz2tGPDlNghQU7PiD9g= X-Received: by 2002:a17:90a:fd92:b0:29b:bd2c:7238 with SMTP id cx18-20020a17090afd9200b0029bbd2c7238mr4927116pjb.7.1710163993626; Mon, 11 Mar 2024 06:33:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710163993; cv=none; d=google.com; s=arc-20160816; b=aH3lCrWM7HA85ZuMik9POENroYpFpwdL6XSKFfY/u5X7mxzrznl/8yhNBfMvYCXOrd y4aZ3CP4OnLyWssXZEEzHm7Bl5MzesEVCh3uLbHN0GLhgAhbuggKbWHRT2x7x4YurK9N eVxfxDyY2l7Y17eYIjGbR6v699EafeCzdj69E2MqakyfTSqJvdqp2M/B2j38dTsDI9lF Ob50kEjoj/srBOZ39zPTJz9buPFlOpBIIlKjzZZCjiGJW3tMGcD8X5fbCu4n4j72W+7v BZP7WZpB8B3xMAPkKZQmDFWTDw9ez8m0v6A3DgbkkHDXvuCrZSJrWdqnsgyWC6sN3/kL WCkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=feedback-id:content-transfer-encoding:mime-version:message-id:date :subject:to:from:dkim-signature; bh=wksRvIx/velJopYn1by9oMMU35bYAM5pVUUTsGoqZik=; fh=Jq2zqfuvFtwAjgHfuadW1i31L6IMRIKMCRCFNbvS4Mo=; b=ERy8ZOpwNLzkdueS4IPtruxEEdLVheavgnxJJGztJ8lLRf66x1ZccD7uiXNIL3UdmB Z6Yu95biaWohQeKr/20dCn2N+Hrv/xUKWfN7cWtS4r8jeOGjTV4FLwyMyhebmPNheSbF UBG4bpNVFJ0cNer6pjjfvbA1LqNRKnzVR56ychv56TE52FD3SiRNzeJlj48bHV1boc0n QE/RWrX5W/1dSb3e5HBzfTOgwBIllLvPlQTylqptW2BK/fM+p7qcV0dUapXKO518XQgd ukRmVJ1UmTyLz+KUW4EPaHKam0niYp8h62scZd/hNNKdADT1lHiaALONfIYIgeKAEroR Ur4Q==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b="Lvm/vB6G"; spf=pass (google.com: domain of fm-51332-202403111333106999cc3f18059f6700-paibnw@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) smtp.mailfrom=fm-51332-202403111333106999cc3f18059f6700-paIBnw@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-64-226.siemens.flowmailer.net (mta-64-226.siemens.flowmailer.net. [185.136.64.226]) by gmr-mx.google.com with ESMTPS id l4-20020a17090a72c400b0029b9bc543d6si395073pjk.0.2024.03.11.06.33.13 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Mar 2024 06:33:13 -0700 (PDT) Received-SPF: pass (google.com: domain of fm-51332-202403111333106999cc3f18059f6700-paibnw@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) client-ip=185.136.64.226; Received: by mta-64-226.siemens.flowmailer.net with ESMTPSA id 202403111333106999cc3f18059f6700 for ; Mon, 11 Mar 2024 14:33:11 +0100 X-Patchwork-Original-From: "'Quirin Gylstorff' via isar-users" From: Quirin Gylstorff To: felix.moessbauer@siemens.com, isar-users@googlegroups.com, jan.kiszka@siemens.com Subject: [PATCH v4] add simple installer to isar Date: Mon, 11 Mar 2024 14:32:56 +0100 Message-ID: <20240311133310.1995709-1-Quirin.Gylstorff@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-51332:519-21489:flowmailer X-Original-Sender: quirin.gylstorff@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b="Lvm/vB6G"; spf=pass (google.com: domain of fm-51332-202403111333106999cc3f18059f6700-paibnw@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) smtp.mailfrom=fm-51332-202403111333106999cc3f18059f6700-paIBnw@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: Quirin Gylstorff Reply-To: Quirin Gylstorff 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=-1.2 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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?= From: Quirin Gylstorff This is a example to create installer image which contains another target image. It uses a multiconfig aproach to seperate the settings of the installer from the target settings. Signed-off-by: Quirin Gylstorff --- Changes v4: - rebase onto next - add serial console output - add missing isar-installer - fixed fstye - exclude /install from rootfs - show raw bmaptool progress Changes v3: - remove disk size - add menu to select disk image if no wic image was found - allow empty target this will - set INSTALLDATA partition size to 4G - use --change-directory in wks file Changes v2: - Add dialog in case of multiple disk targets - Add dialog before starting the installtion This was added as there was no indication that an installation occurs - add `--use-uuid` for boot section in installer wic to avoid an error if the target disk is mount as /dev/sda - remove unnecessary /bin/sh from getty override kas/image/Kconfig | 17 +++ kas/image/isar-image-installer.yaml | 13 +++ .../conf/multiconfig/installer-target.conf | 10 ++ .../conf/multiconfig/isar-installer.conf | 5 + .../images/isar-image-installer.bb | 17 +++ .../deploy-image/deploy-image_0.1.bb | 23 ++++ .../deploy-image/files/deploy-image-wic.sh | 107 ++++++++++++++++++ .../deploy-image/files/install.override.conf | 5 + .../store-target-image_0.1.bb | 25 ++++ .../lib/wic/canned-wks/installer-efi.wks.in | 9 ++ 10 files changed, 231 insertions(+) create mode 100644 kas/image/isar-image-installer.yaml create mode 100644 meta-isar/conf/multiconfig/installer-target.conf create mode 100644 meta-isar/conf/multiconfig/isar-installer.conf create mode 100644 meta-isar/recipes-core/images/isar-image-installer.bb create mode 100644 meta-isar/recipes-installer/deploy-image/deploy-image_0.1.bb create mode 100644 meta-isar/recipes-installer/deploy-image/files/deploy-image-wic.sh create mode 100644 meta-isar/recipes-installer/deploy-image/files/install.override.conf create mode 100644 meta-isar/recipes-installer/store-target-image/store-target-image_0.1.bb create mode 100644 meta-isar/scripts/lib/wic/canned-wks/installer-efi.wks.in diff --git a/kas/image/Kconfig b/kas/image/Kconfig index 8e617386..bc789064 100644 --- a/kas/image/Kconfig +++ b/kas/image/Kconfig @@ -22,11 +22,28 @@ config IMAGE_DEBUG help This image includes some tools preinstalled useful for debug. +menuconfig IMAGE_INSTALLER + bool "Installer image" + help + This image contains a target image and scripts to install the target image on a device. + +config INSTALLER_TARGET_IMAGE + string "Install Base or Debug image" + default "isar-image-base" + help + This selects the target image of the installer: + - isar-image-base + - isar-image-debug + If left empty it will generate a installer image without payload. + The user of that image needs then to copy a image to the partition + labeled INSTALLDATA. + depends on IMAGE_INSTALLER endchoice config KAS_INCLUDE_IMAGE string default "kas/image/isar-image-base.yaml" if IMAGE_BASE default "kas/image/isar-image-debug.yaml" if IMAGE_DEBUG + default "kas/image/isar-image-installer.yaml" if IMAGE_INSTALLER endmenu diff --git a/kas/image/isar-image-installer.yaml b/kas/image/isar-image-installer.yaml new file mode 100644 index 00000000..970e0a89 --- /dev/null +++ b/kas/image/isar-image-installer.yaml @@ -0,0 +1,13 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# +# SPDX-License-Identifier: MIT + +header: + version: 14 + +target: mc:isar-installer:isar-image-installer + +local_conf_header: + installer_multiconfig: | + BBMULTICONFIG += "isar-installer installer-target" diff --git a/meta-isar/conf/multiconfig/installer-target.conf b/meta-isar/conf/multiconfig/installer-target.conf new file mode 100644 index 00000000..3b53b58f --- /dev/null +++ b/meta-isar/conf/multiconfig/installer-target.conf @@ -0,0 +1,10 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# +# SPDX-License-Identifier: MIT + +TARGET_IMAGE_FSTYPE = "wic.zst" +TARGET_IMAGE_FSTYPE:buster = "wic.xz" +TARGET_IMAGE_FSTYPE:bullseye = "wic.xz" + +IMAGE_FSTYPES += "${TARGET_IMAGE_FSTYPE}" diff --git a/meta-isar/conf/multiconfig/isar-installer.conf b/meta-isar/conf/multiconfig/isar-installer.conf new file mode 100644 index 00000000..11afcb85 --- /dev/null +++ b/meta-isar/conf/multiconfig/isar-installer.conf @@ -0,0 +1,5 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# +# SPDX-License-Identifier: MIT + diff --git a/meta-isar/recipes-core/images/isar-image-installer.bb b/meta-isar/recipes-core/images/isar-image-installer.bb new file mode 100644 index 00000000..27de03d5 --- /dev/null +++ b/meta-isar/recipes-core/images/isar-image-installer.bb @@ -0,0 +1,17 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# +# SPDX-License-Identifier: MIT + +inherit image +DESCRIPTION = "Example of a ISAR based Installer Image" + +# Use variable to switch easily to another wks +INSTALLER_WKS_FILE ??= "installer-efi.wks.in" +WKS_FILE = "${INSTALLER_WKS_FILE}" +IMAGER_INSTALL:wic:append = " systemd-boot" + +IMAGE_INSTALL += "store-target-image" +IMAGE_INSTALL += "deploy-image" + +IMAGE_INSTALL:remove = "expand-on-first-boot" diff --git a/meta-isar/recipes-installer/deploy-image/deploy-image_0.1.bb b/meta-isar/recipes-installer/deploy-image/deploy-image_0.1.bb new file mode 100644 index 00000000..ea047849 --- /dev/null +++ b/meta-isar/recipes-installer/deploy-image/deploy-image_0.1.bb @@ -0,0 +1,23 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# +# SPDX-License-Identifier: MIT + +DESCRIPTION = "add target image to rootfs" + + +inherit dpkg-raw + +SRC_URI = "file://deploy-image-wic.sh \ + file://install.override.conf \ + " +DEPENDS = "store-target-image" +DEBIAN_DEPENDS = "store-target-image, bmap-tools, pv, dialog, util-linux, parted, fdisk, gdisk, pigz, xz-utils, pbzip2, zstd" +do_install[cleandirs] = "${D}/usr/bin/ \ + ${D}/usr/lib/systemd/system/getty@tty1.service.d/ \ + ${D}/usr/lib/systemd/system/serial-getty@ttyS0.service.d/" +do_install() { + install -m 0755 ${WORKDIR}/deploy-image-wic.sh ${D}/usr/bin/deploy-image-wic.sh + install -m 0600 ${WORKDIR}/install.override.conf ${D}/usr/lib/systemd/system/getty@tty1.service.d/override.conf + install -m 0600 ${WORKDIR}/install.override.conf ${D}/usr/lib/systemd/system/serial-getty@ttyS0.service.d/override.conf +} diff --git a/meta-isar/recipes-installer/deploy-image/files/deploy-image-wic.sh b/meta-isar/recipes-installer/deploy-image/files/deploy-image-wic.sh new file mode 100644 index 00000000..6a28f6ef --- /dev/null +++ b/meta-isar/recipes-installer/deploy-image/files/deploy-image-wic.sh @@ -0,0 +1,107 @@ +#!/usr/bin/env bash +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# +# SPDX-License-Identifier: MIT + +installdata=${INSTALL_DATA:-/install} + +DISK_IMAGE=$(find "$installdata" -type f -iname "*.wic*" -a -not -iname "*.wic.bmap") +if [ -z "$DISK_IMAGE" ]; then + pushd "$installdata" + shopt -s nullglob + array=(*) + shopt -u nullglob + DISK_IMAGE=$(dialog --clear \ + --no-tags --menu "Select image to be installed" 10 60 3 \ + "${array[@]}" --output-fd 1) + popd +fi +if [ ! -f "$DISK_IMAGE" ]; then + dialog --msgbox "Could not find an image to install. Installation aborted." 7 60 + exit 1 +fi +DISK_BMAP=$(find "$installdata" -type f -iname "$DISK_IMAGE.bmap") +# inspired by poky/meta/recipes-core/initrdscripts/files/install-efi.sh + +target_device_list="" +current_root_dev=$(grep "[[:blank:]]/[[:blank:]]" /proc/mounts | awk '{print $1}') +current_root_dev=${current_root_dev#\/dev/} +case $current_root_dev in + mmcblk*) + ;; + nvme*) + ;; + *) + current_root_dev=${current_root_dev%%[0-9]*} + ;; +esac + +echo "Searching for target device..." + +devices=$(find /sys/block/ -type b,c,f,l -not -iname "mmcblk*" -printf "%f\n") || true +mmc_devices=$(find /sys/block/ -type b,c,f,l -iname "mmcblk[0-9]" -printf "%f\n") || true +devices="$devices $mmc_devices" + +for device in $devices; do + case $device in + loop*) + # skip loop device + ;; + mtd*) + ;; + sr*) + # skip CDROM device + ;; + ram*) + # skip ram device + ;; + *) + case $device in + $current_root_dev*) + # skip the device we are running from + ;; + *) + target_device_list="$target_device_list $device" + ;; + esac + ;; + esac +done + +if [ -z "${target_device_list}" ]; then + dialog --msgbox "You need another device (besides the live device /dev/${current_root_dev}) to install the image. Installation aborted." 7 60 + exit 1 +fi + +if [ "$(echo "$target_device_list" | wc -w)" -gt 1 ]; then + array=() + for target in $target_device_list; do + array+=("$target" "/dev/$target") + done + TARGET_DEVICE=$(dialog --clear \ + --no-tags --menu "Select device to install $DISK_IMAGE" 10 60 3 \ + "${array[@]}" --output-fd 1) + +else + TARGET_DEVICE=$(echo "$target_device_list" | tr -d " ") +fi + +dialog --msgbox "Start installing '$DISK_IMAGE' to '$TARGET_DEVICE'." 7 60 + +set -e +bmap_options="" +if [ -z "$DISK_BMAP" ]; then + bmap_options="--nobmap" +fi +clear +if ! bmaptool copy "${bmap_options}" "$DISK_IMAGE" "/dev/${TARGET_DEVICE}"; then + exit 1 +fi + +# we need to umount before reboot to avoid +# data corruption due to the use of vfat. +umount "$installdata" +sync +dialog --title "Reboot" --msgbox "Installation is successful. System will be rebooted. Please remove the USB stick." 7 60 +reboot diff --git a/meta-isar/recipes-installer/deploy-image/files/install.override.conf b/meta-isar/recipes-installer/deploy-image/files/install.override.conf new file mode 100644 index 00000000..73874caa --- /dev/null +++ b/meta-isar/recipes-installer/deploy-image/files/install.override.conf @@ -0,0 +1,5 @@ +[Service] +ExecStart= +ExecStart=/usr/bin/deploy-image-wic.sh +StandardInput=tty +StandardOutput=tty diff --git a/meta-isar/recipes-installer/store-target-image/store-target-image_0.1.bb b/meta-isar/recipes-installer/store-target-image/store-target-image_0.1.bb new file mode 100644 index 00000000..2f72412b --- /dev/null +++ b/meta-isar/recipes-installer/store-target-image/store-target-image_0.1.bb @@ -0,0 +1,25 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# +# SPDX-License-Identifier: MIT + +DESCRIPTION = "Add a given target image to rootfs" + +inherit dpkg-raw + +INSTALLER_TARGET_IMAGE ??= "isar-image-base" +IMG_DATA_FILE ??= "${INSTALLER_TARGET_IMAGE}-${DISTRO}-${MACHINE}" +IMG_DATA_POSTFIX ??= "wic.zst" +IMG_DATA_POSTFIX:buster ??= "wic.xz" +IMG_DATA_POSTFIX:bullseye ??= "wic.xz" +do_install[mcdepends] = "${@ 'mc:isar-installer:installer-target:' + d.getVar('INSTALLER_TARGET_IMAGE') + ':do_image_wic' if d.getVar('INSTALLER_TARGET_IMAGE') else ''}" +do_install[cleandirs] = "${D}/install/" +do_install() { + if [ -f ${DEPLOY_DIR_IMAGE}/${IMG_DATA_FILE}.${IMG_DATA_POSTFIX} ]; then + install -m 0600 ${DEPLOY_DIR_IMAGE}/${IMG_DATA_FILE}.${IMG_DATA_POSTFIX} ${D}/install/ + install -m 0600 ${DEPLOY_DIR_IMAGE}/${IMG_DATA_FILE}.wic.bmap ${D}/install/ + else + # mcopy cannot handle .keep or empty directory , therefore use visible file + touch ${D}/install/keep + fi +} diff --git a/meta-isar/scripts/lib/wic/canned-wks/installer-efi.wks.in b/meta-isar/scripts/lib/wic/canned-wks/installer-efi.wks.in new file mode 100644 index 00000000..62c045b6 --- /dev/null +++ b/meta-isar/scripts/lib/wic/canned-wks/installer-efi.wks.in @@ -0,0 +1,9 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# +# SPDX-License-Identifier: MIT + +bootloader --ptable gpt --timeout 3 --append "rootwait console=ttyS0,115200 console=tty0 earlyprintk" +part /boot --source bootimg-efi-isar --sourceparams "loader=systemd-boot" --label efi --part-type EF00 --align 1024 --use-uuid +part / --source rootfs --fstype ext4 --exclude-path=install --label installroot --align 1024 --use-uuid +part /install --source rootfs --change-directory=install --label INSTALLDATA --size 4G --fstype=vfat --use-uuid --align 1024