[3/8] rootfs: make tarring of sstate artifact reproducible

Message ID 20260820083014.3377283-4-felix.moessbauer@siemens.com
State New
Headers show
Series Make all sstate artifacts reproducible | expand

Commit Message

Felix Moessbauer Aug. 20, 2026, 8:30 a.m. UTC
To reduce the sstate cache size and profit from the hashequiv server, we
need to make the sstate artifacts reproducible. For that, we remove the
-S/--sparse parameter, as the sparse maps itself are not reproducible.
Further, we need to drop the atime and ctime of the extended
attributes which, which point to GNU tar's volatile atime/ctime entries
rather than an actual xattr value.

With these changes, the tarring itself is bit-by-bit reproducible.

Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
---
 meta/classes-recipe/rootfs.bbclass | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Patch

diff --git a/meta/classes-recipe/rootfs.bbclass b/meta/classes-recipe/rootfs.bbclass
index b85cb59a..e67a0214 100644
--- a/meta/classes-recipe/rootfs.bbclass
+++ b/meta/classes-recipe/rootfs.bbclass
@@ -643,7 +643,7 @@  SSTATETASKS += "do_rootfs_install"
 SSTATECREATEFUNCS += "rootfs_install_sstate_prepare"
 SSTATEPOSTINSTFUNCS += "rootfs_install_sstate_finalize"
 
-SSTATE_TAR_ATTR_FLAGS ?= "--xattrs --xattrs-include='*'"
+SSTATE_TAR_ATTR_FLAGS ?= "--xattrs --xattrs-include='*' --pax-option=delete=atime,delete=ctime"
 
 # the rootfs is owned by root, so we need some sudoing to pack and unpack
 rootfs_install_sstate_prepare() {
@@ -657,8 +657,8 @@  rootfs_install_sstate_prepare() {
 
     run_privileged_heredoc <<'EOF'
         mount -o bind,private '${ROOTFSDIR}' '${WORKDIR}/mnt/rootfs' -o ro
-        lopts="--one-file-system"
-        tar -C ${WORKDIR}/mnt/rootfs -cpSf rootfs.tar $lopts ${SSTATE_TAR_ATTR_FLAGS} .
+        lopts="--one-file-system --sort=name"
+        tar -C ${WORKDIR}/mnt/rootfs -cpf rootfs.tar $lopts ${SSTATE_TAR_ATTR_FLAGS} .
         umount -q ${WORKDIR}/mnt/rootfs
 EOF
     if [ -f ${WORKDIR}/${ROOTFS_APT_STATE} ]; then