From 24d85d626aaad7eee7ba064410b80947e4f2faea Mon Sep 17 00:00:00 2001 From: Dan McGregor Date: Thu, 19 Sep 2024 10:24:59 -0600 Subject: [PATCH] image_types: make tar images more reproducible Use tar-native from our build system. GNU tar changed its behaviour starting with version 1.35. It no longer stores device numbers for regular, non-device files. Since some supported host distributions still use 1.34, rely on tar-native for consistency. Strip atime and ctime from tar archives, they're not necessary and can change from invocation to invocation. Eliminate them from the tar output as suggested in the tar 1.35 documentation[1]. [1] https://www.gnu.org/software/tar/manual/html_node/Reproducibility.html Signed-off-by: Dan McGregor Signed-off-by: Richard Purdie --- meta/classes-recipe/image_types.bbclass | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/meta/classes-recipe/image_types.bbclass b/meta/classes-recipe/image_types.bbclass index b230add3141..87d6effc6cf 100644 --- a/meta/classes-recipe/image_types.bbclass +++ b/meta/classes-recipe/image_types.bbclass @@ -145,7 +145,7 @@ IMAGE_CMD:vfat = "oe_mkvfatfs ${EXTRA_IMAGECMD}" IMAGE_CMD_TAR ?= "tar" # ignore return code 1 "file changed as we read it" as other tasks(e.g. do_image_wic) may be hardlinking rootfs -IMAGE_CMD:tar = "${IMAGE_CMD_TAR} --sort=name --format=posix --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}.tar -C ${IMAGE_ROOTFS} . || [ $? -eq 1 ]" +IMAGE_CMD:tar = "${IMAGE_CMD_TAR} --sort=name --format=posix --pax-option=delete=atime,delete=ctime --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}.tar -C ${IMAGE_ROOTFS} . || [ $? -eq 1 ]" SPDX_IMAGE_PURPOSE:tar = "archive" do_image_cpio[cleandirs] += "${WORKDIR}/cpio_append" @@ -283,6 +283,7 @@ EXTRA_IMAGECMD:f2fs ?= "" # otherwise mkfs.vfat will automatically pick one. EXTRA_IMAGECMD:vfat ?= "" +do_image_tar[depends] += "tar-replacement-native:do_populate_sysroot" do_image_cpio[depends] += "cpio-native:do_populate_sysroot" do_image_jffs2[depends] += "mtd-utils-native:do_populate_sysroot" do_image_cramfs[depends] += "util-linux-native:do_populate_sysroot" @@ -391,3 +392,5 @@ IMAGE_TYPES_MASKED ?= "" # bmap requires python3 to be in the PATH EXTRANATIVEPATH += "${@'python3-native' if d.getVar('IMAGE_FSTYPES').find('.bmap') else ''}" +# reproducible tar requires our tar, not the host's +EXTRANATIVEPATH += "${@'tar-native' if 'tar' in d.getVar('IMAGE_FSTYPES') else ''}" -- 2.47.3