From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7349178779910012928 X-Forwarded-Encrypted: i=2; AJvYcCWJDPbuuTqz27ehcQdCGDT07cQ0HesPNnRsMgdxNBs7iI/ZliZA7LVxU2b/q8qpjAtXrRMLX47CT0kW/F1X1r8OL5trrULEedlD5Ro= X-Received: by 2002:a25:80ce:0:b0:dc2:201a:7f1a with SMTP id c14-20020a2580ce000000b00dc2201a7f1amr1152838ybm.30.1711114025390; Fri, 22 Mar 2024 06:27:05 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a25:df12:0:b0:dcc:4b24:c0de with SMTP id w18-20020a25df12000000b00dcc4b24c0dels54731ybg.0.-pod-prod-00-us; Fri, 22 Mar 2024 06:27:03 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWanuK6Bd25AjpPpXBiAbeORTJSlLsfAyKu3ggk8fdk5Ij2zGvlsuStTKXowbX5TFNGg+bM+29CSrKkVEj2rYZhhjJQ8GOzLfGz1VA= X-Google-Smtp-Source: AGHT+IEXPyEzoJ1pDeIW1f73qTWkIxfxCX1DYpL0w5Ida8oSnPovgqxiz5RyQOsUDhyRGJ3ZXqv0 X-Received: by 2002:a25:4b83:0:b0:dc6:d513:cd3 with SMTP id y125-20020a254b83000000b00dc6d5130cd3mr1150889yba.31.1711114022835; Fri, 22 Mar 2024 06:27:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1711114022; cv=none; d=google.com; s=arc-20160816; b=I5YTMBAe+uszsPpQfob/i3oswkjQgfAPlNH8vd0QftZPNgGfC+qWg4rSYEWoz7UKtS htYoN/kg+qJzuWtsrFMF87hxzZ5MlAUJ8Cdv/HGCbT9VgJxvYyhtxu0BSOMb0QTEfVXU LGfI6C1PJKMZ3+Z/n3f2Z6uymHsfk3vbJEgoJkTFomukFN4qhGJaYiKaoFC+8Ry0AluA Hm749YYWahuT2+cBSdFo+06UWdUEZ64G1/gRTVabiOyuHeLFc+kaxNDQpNLMWZyFI0LT J6sYNusRmvGNNZYuF2zFjcmUQdMngr80kiYJqVk9csFwzAYxcksn2CAvkt3gh0npiqyf Vzpg== 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=nxu9x1DOsKaKmx3SOR6tSlyd/x7n2+nqVkjrFbRJwEw=; fh=rpHsxb7lPfJJgFX8BDY3/IlKBNbRtI9Z0SHxGoqscuk=; b=N7L4M+HhVT5HmEnYRS4/ZQP/2wYZsnvn5n+2iDozfhVAFZWl7VpdwVvXc87He8y7QL RslS2+bID6Gd/E1Ox4OfIwMcNq0DKaAs568MMa+aDDspdRaOrmVACD0kSgiYNoR2Vlxe rlRRcNAcasn04ZUsB4FIFNNcHZ1BmNLW6cIcMhFoR3zpw2a0JOEZO6JnS3IgrWKrxx/O MqU93SAWVt6sjMHO5hQFevRXk2VKnrip8TR56gJtDpYJmIlh851Ns49AbOqcxcCSabET LEE+g7dTOr9XY11WHAi+vUduQAk3ON2iGrlHMDekPJD0j+Em8ba5ZN106EtDBda0a1fE jDbw==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=AK8RtZav; spf=pass (google.com: domain of fm-51332-202403221327012944e38fd11c3ddf4b-b4lno0@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) smtp.mailfrom=fm-51332-202403221327012944e38fd11c3ddf4b-B4lNO0@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Return-Path: 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 g193-20020a25dbca000000b00dcd162eec7esi113251ybf.2.2024.03.22.06.27.02 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Mar 2024 06:27:02 -0700 (PDT) Received-SPF: pass (google.com: domain of fm-51332-202403221327012944e38fd11c3ddf4b-b4lno0@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) client-ip=185.136.64.226; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=AK8RtZav; spf=pass (google.com: domain of fm-51332-202403221327012944e38fd11c3ddf4b-b4lno0@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) smtp.mailfrom=fm-51332-202403221327012944e38fd11c3ddf4b-B4lNO0@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: by mta-64-226.siemens.flowmailer.net with ESMTPSA id 202403221327012944e38fd11c3ddf4b for ; Fri, 22 Mar 2024 14:27:01 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=Quirin.Gylstorff@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=nxu9x1DOsKaKmx3SOR6tSlyd/x7n2+nqVkjrFbRJwEw=; b=AK8RtZavDZL7Im/if4Ylx+ock6fLzLi69sHwfyyGUVRnVG+O1ykMwKY4F1NBxpPk7n0EOZ PRM0Y7eHne03XnXtMu1z6ZQ6DgLj2E0+2wJn7aaQeC33uq7lctTbtRebcQtBJwUppapPpHjJ H0Bh7G82pH7AmYC6RdwOUYXUCPyiY=; From: Quirin Gylstorff To: felix.moessbauer@siemens.com, isar-users@googlegroups.com Subject: [PATCH] isar-installer: copy installer-target direct to rootfs Date: Fri, 22 Mar 2024 14:25:00 +0100 Message-ID: <20240322132700.218096-1-Quirin.Gylstorff@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-51332:519-21489:flowmailer X-TUID: o0hkRjJpctyY From: Quirin Gylstorff It reduce the build time of the installer build as we don't apply gzip on an already zipped target. It also reduce the size of the sstate cache. Signed-off-by: Quirin Gylstorff --- .../classes/installer-add-rootfs.bbclass | 43 ++++++++++++++++++ .../images/isar-image-installer.bb | 2 +- .../store-target-image_0.1.bb | 25 ----------- meta/classes/rootfs-add-files.bbclass | 44 +++++++++++++++++++ 4 files changed, 88 insertions(+), 26 deletions(-) create mode 100644 meta-isar/classes/installer-add-rootfs.bbclass delete mode 100644 meta-isar/recipes-installer/store-target-image/store-target-image_0.1.bb create mode 100644 meta/classes/rootfs-add-files.bbclass diff --git a/meta-isar/classes/installer-add-rootfs.bbclass b/meta-isar/classes/installer-add-rootfs.bbclass new file mode 100644 index 00000000..4f6a2f92 --- /dev/null +++ b/meta-isar/classes/installer-add-rootfs.bbclass @@ -0,0 +1,43 @@ +# Copy the target image to the installer image +# +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# +# SPDX-License-Identifier: MIT + +inherit rootfs-add-files + +INSTALLER_MC ??= "isar-installer" +INSTALLER_TARGET_IMAGE ??= "isar-image-base" +INSTALLER_TARGET_MC ??= "installer-target" +INSTALLER_TARGET_DISTRO ??= "${DISTRO}" +INSTALLER_TARGET_MACHINE ??= "${MACHINE}" + +IMG_DATA_FILE ??= "${INSTALLER_TARGET_IMAGE}-${INSTALLER_TARGET_DISTRO}-${INSTALLER_TARGET_MACHINE}" +IMAGE_DATA_POSTFIX ??= "wic.zst" +IMAGE_DATA_POSTFIX:buster ??= "wic.xz" +IMAGE_DATA_POSTFIX:bullseye ??= "wic.xz" + +ROOTFS_POSTPROCESS_ADDITIONAL_FILES ??= "installer-target" + +def get_installer_source(d): + installer_target_image = d.getVar('INSTALLER_TARGET_IMAGE') or "" + if not installer_target_image: + return "" + deploy_dir = d.getVar('DEPLOY_DIR_IMAGE') + image_data = d.getVAR('IMAGE_DATA_FILE') + image_data_postfix = d.getVAR('IMAGE_DATA_POSTFIX') + return f"{deploy_dir}/{image_data}.{image_data_postfix}" + +def get_installer_destination(d): + installer_target_image = d.getVar('INSTALLER_TARGET_IMAGE') or "" + if not installer_target_image: + return "/install/keep" + image_data = d.getVAR('IMAGE_DATA_FILE') + image_data_postfix = d.getVAR('IMAGE_DATA_POSTFIX') + return f"/install/{image_data}.{image_data_postfix}" + +ROOTFS_POSTPROCESS_ADDITIONAL_FILE_installer-target[source] = "${@ get_installer_source(d)}" +ROOTFS_POSTPROCESS_ADDITIONAL_FILE_installer-target[destination] = "${@ get_installer_destination(d)}" + +rootfs_add_files[mcdepends] = "mc:${INSTALLER_MC}:${INSTALLER_TARGET_MC}:${INSTALLER_TARGET_IMAGE}:do_image_wic" diff --git a/meta-isar/recipes-core/images/isar-image-installer.bb b/meta-isar/recipes-core/images/isar-image-installer.bb index 27de03d5..34fb5daf 100644 --- a/meta-isar/recipes-core/images/isar-image-installer.bb +++ b/meta-isar/recipes-core/images/isar-image-installer.bb @@ -4,6 +4,7 @@ # SPDX-License-Identifier: MIT inherit image +inherit installer-add-rootfs DESCRIPTION = "Example of a ISAR based Installer Image" # Use variable to switch easily to another wks @@ -11,7 +12,6 @@ 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/store-target-image/store-target-image_0.1.bb b/meta-isar/recipes-installer/store-target-image/store-target-image_0.1.bb deleted file mode 100644 index 2f72412b..00000000 --- a/meta-isar/recipes-installer/store-target-image/store-target-image_0.1.bb +++ /dev/null @@ -1,25 +0,0 @@ -# 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/classes/rootfs-add-files.bbclass b/meta/classes/rootfs-add-files.bbclass new file mode 100644 index 00000000..e547c45a --- /dev/null +++ b/meta/classes/rootfs-add-files.bbclass @@ -0,0 +1,44 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2024 +# This class allows to add a file directly to +# the rootfs. +# An example usecase would be an installer which +# contains an complete rootfs added with multiconfig. +ROOTFS_INSTALL_COMMAND =+ "rootfs_add_files" +ROOTFS_ADDITIONAL_FILES ??= "" + +# ROOTFS_POSTPROCESS_ADDITIONAL_FILES ??= "installer-target" +# +# ROOTFS_POSTPROCESS_ADDITIONAL_FILE_installer-target[source] = \ +# "${DEPLOY_DIR_IMAGE}/${IMG_DATA_FILE}.${IMAGE_DATA_POSTFIX}" +# ROOTFS_POSTPROCESS_ADDITIONAL_FILE_installer-target[destination] = \ +# "/install/${IMG_DATA_FILE}.${IMAGE_DATA_POSTFIX}" + + +python rootfs_add_files() { + import os + if d.getVar("SOURCE_DATE_EPOCH") != None: + os.environ["SOURCE_DATE_EPOCH"] = d.getVar("SOURCE_DATE_EPOCH") + + postprocess_additional_files = d.getVar('ROOTFS_ADDITIONAL_FILES').split() + rootfsdir = d.getVar("ROOTFSDIR") + + for entry in postprocess_additional_files: + additional_file_entry = f"ROOTFS_ADDITIONAL_FILE_{entry}" + destination = d.getVarFlag(additional_file_entry, "destination") or "" + source = d.getVarFlag(additional_file_entry, "source") or "" + if os.path.exists(f"{rootfsdir}/{destination}"): + bb.process.run([ "/usr/bin/rm", "-f", f"{destination}"]) + + # empty source creates only an empty destination file + if not source: + dest_dir = os.path.dirname(destination) + bb.process.run(["sudo", "-E", "/usr/bin/install", "-d", "-m", "600", f"{rootfsdir}/{dest_dir}" ]) + bb.process.run(["sudo", "-E", "/usr/bin/touch", f"{rootfsdir}/{destination}" ]) + return + + if not os.path.exists(f"{source}"): + bb.error(f"{source} does not exists and cannot be copied to the rootfs!") + # no recursive copy only single files + bb.process.run(["sudo", "-E", "/usr/bin/install", "-D", "-m", "600", f"{source}", f"{rootfsdir}/{destination}" ]) +} -- 2.43.0