sensible-utils: please make sensible-utils build reproducibly

Ximin Luo infinity0 at debian.org
Wed Jun 28 16:25:00 UTC 2017


Ximin Luo:
> Hi, here is an updated patch - it gets rid of filesystem and umask differences, which started cropping up. I think previously I was testing with an older version of reprotest, which didn't properly test these differences.
> 
> I also took the chance to refactor the rules file slightly, for readability.
> 

Hi, I have updated the patch and uploaded this to DELAYED/14.

The patch is attached, it's the same one as before just with a "more official" changelog.

X

-- 
GPG: ed25519/56034877E1F87C35
GPG: rsa4096/1318EFAC5FBBDBCE
https://github.com/infinity0/pubkeys.git
-------------- next part --------------
diff -Nru sensible-utils-0.0.9/debian/changelog sensible-utils-0.0.9+nmu1/debian/changelog
--- sensible-utils-0.0.9/debian/changelog	2013-06-06 14:19:53.000000000 +0200
+++ sensible-utils-0.0.9+nmu1/debian/changelog	2017-06-28 18:17:02.000000000 +0200
@@ -1,3 +1,20 @@
+sensible-utils (0.0.9+nmu1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+
+  [ Jérémy Bobbio ]
+  * Make package build reproducibly:
+    - Stop recording current time when creating gzip files.
+    - Fix mtimes before creating binary packages.
+
+  [ Ximin Luo ]
+  * Make package build reproducible, pt 2:
+    - Sort file list, to avoid filesystem differences.
+    - Explicitly install every language man dir, to avoid umask differences.
+    - Slightly refactoring for readability.
+
+ -- Ximin Luo <infinity0 at debian.org>  Wed, 28 Jun 2017 18:17:02 +0200
+
 sensible-utils (0.0.9) unstable; urgency=low
 
   * Fix bashism in select-editor
diff -Nru sensible-utils-0.0.9/debian/rules sensible-utils-0.0.9+nmu1/debian/rules
--- sensible-utils-0.0.9/debian/rules	2012-05-14 09:23:19.000000000 +0200
+++ sensible-utils-0.0.9+nmu1/debian/rules	2017-06-28 18:11:41.000000000 +0200
@@ -9,6 +9,11 @@
 INSTALL_SCRIPT  = $(INSTALL) -p    -o root -g root  -m  755
 INSTALL_DIR     = $(INSTALL) -p -d -o root -g root  -m  755
 
+MAN_LANGS = de es fr it ja pl
+MAN_DIRS = $(MAN_LANGS:%=debian/sensible-utils/usr/share/man/%/man1)
+
+BUILD_DATE := $(shell dpkg-parsechangelog | sed -n -e 's/^Date: //p')
+
 DEB_BUILD_ARCH_OS ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS)
 DEB_BUILD_GNU_TYPE = $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
 DEB_HOST_GNU_TYPE = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
@@ -52,41 +57,30 @@
 	$(INSTALL_DIR) debian/sensible-utils/DEBIAN \
 		       debian/sensible-utils/usr/bin \
 		       debian/sensible-utils/usr/share/man/man1 \
+		       $(MAN_DIRS) \
 		       debian/sensible-utils/usr/lib/mime/packages \
 		       debian/sensible-utils/usr/share/doc/$(package)
 	$(MAKE) install DESTDIR=$(CURDIR)/debian/sensible-utils INSTALL_PROGRAM="$(INSTALL_PROGRAM)"
 
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/fr/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/fr/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/pl/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/pl/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/es/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/es/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/de/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/de/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/ja/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/ja/man1/sensible-browser.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/it/man1/sensible-pager.1.gz
-	ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/it/man1/sensible-browser.1.gz
+	set -e; for i in "" $(MAN_LANGS); do \
+		ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/$$i/man1/sensible-pager.1.gz; \
+		ln -s sensible-editor.1.gz debian/sensible-utils/usr/share/man/$$i/man1/sensible-browser.1.gz; \
+	done
 	$(INSTALL_FILE) debian/changelog debian/sensible-utils/usr/share/doc/$(package)
 	find debian/sensible-utils/usr/share/man/man1 \
-	     debian/sensible-utils/usr/share/man/es/man1 \
-	     debian/sensible-utils/usr/share/man/fr/man1 \
-	     debian/sensible-utils/usr/share/man/pl/man1 \
-	     debian/sensible-utils/usr/share/man/de/man1 \
-	     debian/sensible-utils/usr/share/man/ja/man1 \
-	     debian/sensible-utils/usr/share/man/it/man1 \
-             debian/sensible-utils/usr/share/doc/$(package) -type f | xargs gzip -9
+	     $(MAN_DIRS) \
+	     debian/sensible-utils/usr/share/doc/$(package) -type f | xargs gzip -9n
 	$(INSTALL_FILE) debian/copyright debian/sensible-utils/usr/share/doc/$(package)
 	$(INSTALL_SCRIPT) debian/postinst debian/sensible-utils/DEBIAN/
 	$(INSTALL_SCRIPT) debian/postrm debian/sensible-utils/DEBIAN/
 	$(INSTALL_FILE) debian/mime debian/sensible-utils/usr/lib/mime/packages/sensible-utils
 
-	cd debian/sensible-utils && find * -type f ! -regex '^DEBIAN/.*' -print0 | xargs -r0 md5sum > DEBIAN/md5sums
+	cd debian/sensible-utils && find * -type f ! -regex '^DEBIAN/.*' -print0 | \
+	     LC_ALL=C.UTF-8 sort -z | xargs -r0 md5sum > DEBIAN/md5sums
 
 	dpkg-gencontrol -Pdebian/sensible-utils
+	find debian/sensible-utils -depth -newermt '$(BUILD_DATE)' -print0 | \
+		xargs -0r touch --no-dereference --date='$(BUILD_DATE)'
 	dpkg --build debian/sensible-utils ..
 
 define checkdir


More information about the Reproducible-bugs mailing list