fs/cpio: make cpio rootfs reproducible
authorAtharva Lele <itsatharva@gmail.com>
Tue, 16 Jul 2019 17:35:18 +0000 (23:05 +0530)
committerThomas Petazzoni <thomas.petazzoni@bootlin.com>
Wed, 17 Jul 2019 06:53:03 +0000 (08:53 +0200)
Pass the recommended argument in the CPIO manual to make cpio archives
reproducible.

Reference: https://www.gnu.org/software/cpio/manual/cpio.html#Copy_002dpass-mode

Pre-patch diffoscope output: https://gitlab.com/snippets/1874745
Post-patch: https://gitlab.com/snippets/1874746

We can see that post-patch, the archive related differences are removed.
The differences are arising from utils/bin/getconf. This will have to
be investigated further. However, that is unrelated to cpio.

Signed-off-by: Atharva Lele <itsatharva@gmail.com>
Reviewed-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
fs/cpio/cpio.mk

index 1f0cafe62fb42a6ce4dc24337c188d2ac29cf280..8b133f3875e79e87bf6bb94cf0035153831e309f 100644 (file)
@@ -29,8 +29,15 @@ endif # BR2_ROOTFS_DEVICE_CREATION_STATIC
 
 ROOTFS_CPIO_PRE_GEN_HOOKS += ROOTFS_CPIO_ADD_INIT
 
+# --repoducible 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
+endif
+
 define ROOTFS_CPIO_CMD
-       cd $(TARGET_DIR) && find . | cpio --quiet -o -H newc > $@
+       cd $(TARGET_DIR) && find . | cpio $(ROOTFS_CPIO_OPTS) --quiet -o -H newc > $@
 endef
 
 ifeq ($(BR2_TARGET_ROOTFS_CPIO_UIMAGE),y)