summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGregor <dan.mcgregor@usask.ca>2024-09-19 10:24:59 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2024-09-20 15:59:03 +0100
commit43de7f8bc0b896f89499186f570d05707371ed86 (patch)
tree84e06b5fad2e24028dbe3017d0cdf7d396e50925
parent924fe94ff51419177c1661ac1a2cdacf373dbbf4 (diff)
downloadpoky-43de7f8bc0b896f89499186f570d05707371ed86.tar.gz
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 (From OE-Core rev: 24d85d626aaad7eee7ba064410b80947e4f2faea) Signed-off-by: Dan McGregor <dan.mcgregor@usask.ca> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes-recipe/image_types.bbclass5
1 files changed, 4 insertions, 1 deletions
diff --git a/meta/classes-recipe/image_types.bbclass b/meta/classes-recipe/image_types.bbclass
index b230add314..87d6effc6c 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}"
145 145
146IMAGE_CMD_TAR ?= "tar" 146IMAGE_CMD_TAR ?= "tar"
147# ignore return code 1 "file changed as we read it" as other tasks(e.g. do_image_wic) may be hardlinking rootfs 147# ignore return code 1 "file changed as we read it" as other tasks(e.g. do_image_wic) may be hardlinking rootfs
148IMAGE_CMD:tar = "${IMAGE_CMD_TAR} --sort=name --format=posix --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}.tar -C ${IMAGE_ROOTFS} . || [ $? -eq 1 ]" 148IMAGE_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 ]"
149SPDX_IMAGE_PURPOSE:tar = "archive" 149SPDX_IMAGE_PURPOSE:tar = "archive"
150 150
151do_image_cpio[cleandirs] += "${WORKDIR}/cpio_append" 151do_image_cpio[cleandirs] += "${WORKDIR}/cpio_append"
@@ -283,6 +283,7 @@ EXTRA_IMAGECMD:f2fs ?= ""
283# otherwise mkfs.vfat will automatically pick one. 283# otherwise mkfs.vfat will automatically pick one.
284EXTRA_IMAGECMD:vfat ?= "" 284EXTRA_IMAGECMD:vfat ?= ""
285 285
286do_image_tar[depends] += "tar-replacement-native:do_populate_sysroot"
286do_image_cpio[depends] += "cpio-native:do_populate_sysroot" 287do_image_cpio[depends] += "cpio-native:do_populate_sysroot"
287do_image_jffs2[depends] += "mtd-utils-native:do_populate_sysroot" 288do_image_jffs2[depends] += "mtd-utils-native:do_populate_sysroot"
288do_image_cramfs[depends] += "util-linux-native:do_populate_sysroot" 289do_image_cramfs[depends] += "util-linux-native:do_populate_sysroot"
@@ -391,3 +392,5 @@ IMAGE_TYPES_MASKED ?= ""
391 392
392# bmap requires python3 to be in the PATH 393# bmap requires python3 to be in the PATH
393EXTRANATIVEPATH += "${@'python3-native' if d.getVar('IMAGE_FSTYPES').find('.bmap') else ''}" 394EXTRANATIVEPATH += "${@'python3-native' if d.getVar('IMAGE_FSTYPES').find('.bmap') else ''}"
395# reproducible tar requires our tar, not the host's
396EXTRANATIVEPATH += "${@'tar-native' if 'tar' in d.getVar('IMAGE_FSTYPES') else ''}"