From 21e8e54d22e2db7382aa3788c98489580f80b28a Mon Sep 17 00:00:00 2001 From: Serge Schneider Date: Tue, 23 Jul 2024 13:39:53 +0100 Subject: [PATCH] export-image: generate sbom file if syft is available --- export-image/05-finalise/01-run.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/export-image/05-finalise/01-run.sh b/export-image/05-finalise/01-run.sh index 771aa7a..89c60b9 100755 --- a/export-image/05-finalise/01-run.sh +++ b/export-image/05-finalise/01-run.sh @@ -2,6 +2,7 @@ IMG_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.img" INFO_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.info" +SBOM_FILE="${STAGE_WORK_DIR}/${IMG_FILENAME}${IMG_SUFFIX}.sbom" sed -i 's/^update_initramfs=.*/update_initramfs=all/' "${ROOTFS_DIR}/etc/initramfs-tools/update-initramfs.conf" @@ -61,10 +62,8 @@ if ! [ -L "${ROOTFS_DIR}/boot/issue.txt" ]; then ln -s firmware/issue.txt "${ROOTFS_DIR}/boot/issue.txt" fi - cp "$ROOTFS_DIR/etc/rpi-issue" "$INFO_FILE" - { if [ -f "$ROOTFS_DIR/usr/share/doc/raspberrypi-kernel/changelog.Debian.gz" ]; then firmware=$(zgrep "firmware as of" \ @@ -83,6 +82,14 @@ cp "$ROOTFS_DIR/etc/rpi-issue" "$INFO_FILE" dpkg -l --root "$ROOTFS_DIR" } >> "$INFO_FILE" +if hash syft 2>/dev/null; then + syft scan dir:"${ROOTFS_DIR}" \ + --base-path="${ROOTFS_DIR}" \ + --source-name="${IMG_NAME}${IMG_SUFFIX}" \ + --source-version="${IMG_DATE}" \ + -o spdx-json="${SBOM_FILE}" +fi + ROOT_DEV="$(awk "\$2 == \"${ROOTFS_DIR}\" {print \$1}" /etc/mtab)" unmount "${ROOTFS_DIR}" @@ -115,4 +122,7 @@ none | *) ;; esac +if [ -f "${SBOM_FILE}" ]; then + xz -c "${SBOM_FILE}" > "$DEPLOY_DIR/image_$(basename "${SBOM_FILE}").xz" +fi cp "$INFO_FILE" "$DEPLOY_DIR/"