@@ -143,7 +143,7 @@ check_for_wic_warnings() {
fi
}
-do_image_wic[depends] += "${@bb.utils.contains('ROOTFS_FEATURES', 'generate-sbom', 'sbom-chroot:do_sbomchroot_deploy', '', d)}"
+do_image_wic[depends] += "${@bb.utils.contains('ROOTFS_FEATURES', 'generate-sbom', 'sbom-chroot:do_build', '', d)}"
do_image_wic[file-checksums] += "${WKS_FILE_CHECKSUM}"
IMAGE_CMD:wic() {
generate_wic_image
new file mode 100644
@@ -0,0 +1,30 @@
+# This software is a part of Isar.
+# Copyright (c) Siemens AG, 2026
+#
+# Inherit this class to deploy the rootfs as a compressed tarball
+# and remove the (local) extracted rootfs after deployment.
+
+ROOTFS_TAR_FLAGS ?= ""
+ROOTFS_ZSTD_CLEVEL ?= "8"
+ROOTFS_DEPLOY_DIR ?= "${DEPLOY_DIR}/chroot-${PN}"
+ROOTFS_DEPLOY_FILE ?= "${ROOTFS_DEPLOY_DIR}/${HOST_DISTRO}-${HOST_ARCH}_${DISTRO}-${DISTRO_ARCH}.tar.zst"
+
+do_rootfs_deploy[dirs] = "${ROOTFS_DEPLOY_DIR}"
+do_rootfs_deploy[network] = "${TASK_USE_SUDO}"
+do_rootfs_deploy() {
+ # deploy with empty var to make it smaller
+ lopts="--one-file-system"
+ ZSTD="zstd -${ROOTFS_ZSTD_CLEVEL} -T${ZSTD_THREADS}"
+
+ run_privileged \
+ tar -C ${ROOTFSDIR} -cpS $lopts ${ROOTFS_TAR_FLAGS} . \
+ | $ZSTD > ${ROOTFS_DEPLOY_FILE}
+ # cleanup extracted rootfs
+ run_privileged rm -rf ${ROOTFSDIR}
+}
+addtask do_rootfs_deploy before do_build after do_rootfs
+
+CLEANFUNCS += "rootfs_deploy_clean"
+rootfs_deploy_clean() {
+ rm -rf ${ROOTFS_DEPLOY_FILE}
+}
@@ -79,7 +79,7 @@ do_generate_sbom[cleandirs] += "${SBOM_LOCAL_DEPLOYDIR}"
do_generate_sbom[sstate-inputdirs] = "${SBOM_LOCAL_DEPLOYDIR}"
do_generate_sbom[sstate-outputdirs] = "${DEPLOY_DIR_SBOM}"
do_generate_sbom[network] = "${TASK_USE_SUDO}"
-do_generate_sbom[depends] += "sbom-chroot:do_sbomchroot_deploy"
+do_generate_sbom[depends] += "sbom-chroot:do_build"
python do_generate_sbom() {
sbom_doc_uuid(d)
try:
@@ -26,17 +26,8 @@ SBOM_IMAGE_INSTALL = "python3-debsbom python3-spdx-tools python3-cyclonedx-lib"
ROOTFSDIR = "${WORKDIR}/rootfs"
ROOTFS_PACKAGES = "${SBOM_IMAGE_INSTALL}"
-do_sbomchroot_deploy[dirs] = "${SBOM_DIR}"
-do_sbomchroot_deploy[network] = "${TASK_USE_SUDO}"
-do_sbomchroot_deploy() {
- # deploy with empty var to make it smaller
- lopts="--one-file-system --exclude=var/*"
- ZSTD="zstd -${SSTATE_ZSTD_CLEVEL} -T${ZSTD_THREADS}"
-
- run_privileged \
- tar -C ${ROOTFSDIR} -cpS $lopts ${ROOTFS_TAR_ATTR_FLAGS} . \
- | $ZSTD > ${SBOM_CHROOT}
- # cleanup extracted rootfs
- run_privileged rm -rf ${ROOTFSDIR}
-}
-addtask do_sbomchroot_deploy before do_build after do_rootfs
+inherit rootfs-deploy
+
+ROOTFS_DEPLOY_DIR = "${SBOM_DIR}"
+ROOTFS_DEPLOY_FILE = "${SBOM_CHROOT}"
+ROOTFS_TAR_FLAGS += "--exclude=var/*"
@@ -70,28 +70,12 @@ ROOTFS_POSTPROCESS_COMMAND:remove = "rootfs_cleanup_base_apt"
DEPLOY_SCHROOT = "${@d.getVar('SCHROOT_' + d.getVar('SBUILD_VARIANT').upper() + '_DIR')}${SBUILD_SCHROOT_SUFFIX}"
-sbuildchroot_deploy_tree() {
- ln -Tfsr "${ROOTFSDIR}" "${DEPLOY_SCHROOT}"
-}
-sbuildchroot_deploy_tar() {
- lopts="--one-file-system --exclude=var/cache/apt/archives --exclude=isar-apt"
- # we cannot use pzstd, as this results in a different magic
- # (zstd skippable frame) which is not detected by sbuild
- # https://salsa.debian.org/debian/sbuild/-/blob/d975d388a98627a0d7d112791e441c27a6d529df/lib/Sbuild/ChrootUnshare.pm#L608
- ZSTD="zstd -${SSTATE_ZSTD_CLEVEL} -T${ZSTD_THREADS}"
- run_privileged \
- tar -C ${ROOTFSDIR} -cpS $lopts ${ROOTFS_TAR_ATTR_FLAGS} . \
- | $ZSTD > ${DEPLOY_SCHROOT}.tar.zst
- # cleanup extracted rootfs
- run_privileged rm -rf ${ROOTFSDIR}
-}
+inherit rootfs-deploy
+
+ROOTFS_DEPLOY_DIR = "${DEPLOY_DIR}/schroot-${SBUILD_VARIANT}"
+ROOTFS_DEPLOY_FILE = "${DEPLOY_SCHROOT}"
+ROOTFS_DEPLOY_FILE:unshare = "${DEPLOY_SCHROOT}.tar.zst"
-do_sbuildchroot_deploy[network] = "${TASK_USE_SUDO}"
-do_sbuildchroot_deploy[dirs] += "${DEPLOY_DIR}/schroot-${SBUILD_VARIANT}"
-python do_sbuildchroot_deploy() {
- if d.getVar('ISAR_CHROOT_MODE') == 'unshare':
- bb.build.exec_func('sbuildchroot_deploy_tar', d)
- else:
- bb.build.exec_func('sbuildchroot_deploy_tree', d)
+do_rootfs_deploy:schroot() {
+ ln -Tfsr "${ROOTFSDIR}" "${ROOTFS_DEPLOY_FILE}"
}
-addtask sbuildchroot_deploy before do_build after do_rootfs
We already have two locations where the generated rootfs is deployed as an artifact. We now generalize the logic and hide it behind an interface. We further register a function to remove the generated artifact on clean. Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com> --- meta/classes-recipe/imagetypes_wic.bbclass | 2 +- meta/classes-recipe/rootfs-deploy.bbclass | 30 +++++++++++++++++++ meta/classes/sbom.bbclass | 2 +- .../sbom-chroot/sbom-chroot.bb | 19 ++++-------- .../sbuild-chroot/sbuild-chroot.inc | 30 +++++-------------- 5 files changed, 44 insertions(+), 39 deletions(-) create mode 100644 meta/classes-recipe/rootfs-deploy.bbclass