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. X -- GPG: ed25519/56034877E1F87C35 GPG: rsa4096/1318EFAC5FBBDBCE https://github.com/infinity0/pubkeys.git
diff -Nru sensible-utils-0.0.9/debian/changelog sensible-utils-0.0.9.0~reproducible1/debian/changelog --- sensible-utils-0.0.9/debian/changelog 2013-06-06 14:19:53.000000000 +0200 +++ sensible-utils-0.0.9.0~reproducible1/debian/changelog 2017-05-09 19:08:51.000000000 +0200 @@ -1,3 +1,18 @@ +sensible-utils (0.0.9.0~reproducible1) UNRELEASED; urgency=low + + [ 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 <infini...@debian.org> Tue, 09 May 2017 19:08:51 +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.0~reproducible1/debian/rules --- sensible-utils-0.0.9/debian/rules 2012-05-14 09:23:19.000000000 +0200 +++ sensible-utils-0.0.9.0~reproducible1/debian/rules 2017-05-09 19:05:54.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