Switch to bsdtar strategy for deterministic cpio

This commit is contained in:
Lance Vick 2020-10-20 01:02:39 -07:00
parent fa079ab953
commit 434d641c46
Signed by: lrvick
GPG Key ID: 8E47A1EC35A1551D
1 changed files with 14 additions and 6 deletions

View File

@ -1,16 +1,24 @@
diff --git a/fs/cpio/cpio.mk b/fs/cpio/cpio.mk diff --git a/fs/cpio/cpio.mk b/fs/cpio/cpio.mk
index 28a435dd5e..81f8c393d1 100644 index 28a435dd5e..72923ded47 100644
--- a/fs/cpio/cpio.mk --- a/fs/cpio/cpio.mk
+++ b/fs/cpio/cpio.mk +++ b/fs/cpio/cpio.mk
@@ -37,7 +37,11 @@ ROOTFS_CPIO_OPTS += --reproducible @@ -32,12 +32,17 @@ ROOTFS_CPIO_PRE_GEN_HOOKS += ROOTFS_CPIO_ADD_INIT
# --reproducible option was introduced in cpio v2.12, which may not be
# available in some old distributions, so we build host-cpio
ifeq ($(BR2_REPRODUCIBLE),y)
-ROOTFS_CPIO_DEPENDENCIES += host-cpio
-ROOTFS_CPIO_OPTS += --reproducible
+ROOTFS_CPIO_DEPENDENCIES += host-cpio host-libarchive
endif endif
define ROOTFS_CPIO_CMD define ROOTFS_CPIO_CMD
- cd $(TARGET_DIR) && find . | cpio $(ROOTFS_CPIO_OPTS) --quiet -o -H newc > $@ - cd $(TARGET_DIR) && find . | cpio $(ROOTFS_CPIO_OPTS) --quiet -o -H newc > $@
+ cd $(TARGET_DIR) && \ + cd $(TARGET_DIR) \
+ find . \ + && find . -mindepth 1 -execdir touch -hcd "@0" "{}" + \
+ | LC_ALL=C sort \ + && find . -mindepth 1 -printf '%P\0' \
+ | cpio $(ROOTFS_CPIO_OPTS) --quiet -o -H newc \ + | sort -z \
+ | LANG=C bsdtar --null -cnf - -T - \
+ | LANG=C bsdtar --uid 0 --gid 0 --null -cf - --format=newc @- \
+ > $@ + > $@
endef endef