diff options
| author | Dan McGregor <dan.mcgregor@usask.ca> | 2024-09-19 10:24:59 -0600 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2024-09-20 15:59:03 +0100 |
| commit | 43de7f8bc0b896f89499186f570d05707371ed86 (patch) | |
| tree | 84e06b5fad2e24028dbe3017d0cdf7d396e50925 | |
| parent | 924fe94ff51419177c1661ac1a2cdacf373dbbf4 (diff) | |
| download | poky-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.bbclass | 5 |
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 | ||
| 146 | IMAGE_CMD_TAR ?= "tar" | 146 | IMAGE_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 |
| 148 | IMAGE_CMD:tar = "${IMAGE_CMD_TAR} --sort=name --format=posix --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}.tar -C ${IMAGE_ROOTFS} . || [ $? -eq 1 ]" | 148 | 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 ]" |
| 149 | SPDX_IMAGE_PURPOSE:tar = "archive" | 149 | SPDX_IMAGE_PURPOSE:tar = "archive" |
| 150 | 150 | ||
| 151 | do_image_cpio[cleandirs] += "${WORKDIR}/cpio_append" | 151 | do_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. |
| 284 | EXTRA_IMAGECMD:vfat ?= "" | 284 | EXTRA_IMAGECMD:vfat ?= "" |
| 285 | 285 | ||
| 286 | do_image_tar[depends] += "tar-replacement-native:do_populate_sysroot" | ||
| 286 | do_image_cpio[depends] += "cpio-native:do_populate_sysroot" | 287 | do_image_cpio[depends] += "cpio-native:do_populate_sysroot" |
| 287 | do_image_jffs2[depends] += "mtd-utils-native:do_populate_sysroot" | 288 | do_image_jffs2[depends] += "mtd-utils-native:do_populate_sysroot" |
| 288 | do_image_cramfs[depends] += "util-linux-native:do_populate_sysroot" | 289 | do_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 |
| 393 | EXTRANATIVEPATH += "${@'python3-native' if d.getVar('IMAGE_FSTYPES').find('.bmap') else ''}" | 394 | EXTRANATIVEPATH += "${@'python3-native' if d.getVar('IMAGE_FSTYPES').find('.bmap') else ''}" |
| 395 | # reproducible tar requires our tar, not the host's | ||
| 396 | EXTRANATIVEPATH += "${@'tar-native' if 'tar' in d.getVar('IMAGE_FSTYPES') else ''}" | ||
