Source: lsof
Version: 4.86+dfsg-1
Severity: wishlist
Tags: patch
User: reproducible-builds@lists.alioth.debian.org
Usertags: timestamps username hostname uname

Hi!

As part of the “reproducible builds” project, we have identified that
lsof build process captured too much information about its build
environment. This unfortunately prevents lsof from building
reproducibly.

The attached patch will make lsof builds reproducible by preventing
username, hostname, kernel version, and build time from being captured
as part of the build process. For build time, a patch over upstream code
is added to allow LSOF_CCDATE to be preset by an environment variable,
just like LSOF_HOST and others.

 [1]: https://wiki.debian.org/ReproducibleBuilds

-- 
Lunar                                .''`. 
lu...@debian.org                    : :Ⓐ  :  # apt-get install anarchism
                                    `. `'` 
                                      `-   
diff -Nru lsof-4.86+dfsg/debian/changelog lsof-4.86+dfsg/debian/changelog
--- lsof-4.86+dfsg/debian/changelog	2012-04-25 08:11:26.000000000 +0200
+++ lsof-4.86+dfsg/debian/changelog	2014-09-22 11:31:24.000000000 +0200
@@ -1,3 +1,11 @@
+lsof (4.86+dfsg-1.0reproducible1) UNRELEASED; urgency=medium
+
+  * Allow LSOF_CCDATE to be overriden by an environment variable.
+  * Ensure build reproducibility by preventing Configure to capture
+    username, hostname, kernel version, and build time.
+
+ -- Jérémy Bobbio <lu...@debian.org>  Mon, 22 Sep 2014 09:13:54 +0000
+
 lsof (4.86+dfsg-1) unstable; urgency=low
 
   [ Nicholas Bamber ]
diff -Nru lsof-4.86+dfsg/debian/patches/preset-ccdate lsof-4.86+dfsg/debian/patches/preset-ccdate
--- lsof-4.86+dfsg/debian/patches/preset-ccdate	1970-01-01 01:00:00.000000000 +0100
+++ lsof-4.86+dfsg/debian/patches/preset-ccdate	2014-09-22 11:35:59.000000000 +0200
@@ -0,0 +1,235 @@
+Description: Allow LSOF_CCDATE to be overriden by an environment variable
+ Capturing the current time as part of the build process does not make it
+ deterministic. By allowing the LSOF_CCDATE to be externally set, the current
+ time can be removed or preset.
+Author: Jérémy Bobbio <lu...@debian.org>
+Last-Update: 2014-09-22
+
+--- lsof-4.86+dfsg.orig/dialects/aix/Makefile
++++ lsof-4.86+dfsg/dialects/aix/Makefile
+@@ -84,7 +84,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@echo '#define	LSOF_CINFO	"${CINFO}"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
+--- lsof-4.86+dfsg.orig/dialects/darwin/kmem/Makefile
++++ lsof-4.86+dfsg/dialects/darwin/kmem/Makefile
+@@ -88,7 +88,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@echo '#define  LSOF_CINFO      "${CINFO}"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
+--- lsof-4.86+dfsg.orig/dialects/darwin/libproc/Makefile
++++ lsof-4.86+dfsg/dialects/darwin/libproc/Makefile
+@@ -92,7 +92,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@echo '#define  LSOF_CINFO      "${CINFO}"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
+--- lsof-4.86+dfsg.orig/dialects/du/Makefile
++++ lsof-4.86+dfsg/dialects/du/Makefile
+@@ -76,7 +76,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
+ 	  echo '#define	LSOF_HOST	"'`uname -n`'"' >> version.h; \
+--- lsof-4.86+dfsg.orig/dialects/freebsd/Makefile
++++ lsof-4.86+dfsg/dialects/freebsd/Makefile
+@@ -76,7 +76,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
+ 	  echo '#define	LSOF_HOST	"'`uname -n`'"' >> version.h; \
+--- lsof-4.86+dfsg.orig/dialects/hpux/kmem/Makefile
++++ lsof-4.86+dfsg/dialects/hpux/kmem/Makefile
+@@ -78,7 +78,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@echo '#define	LSOF_CINFO	"${CINFO}"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
+--- lsof-4.86+dfsg.orig/dialects/hpux/pstat/Makefile
++++ lsof-4.86+dfsg/dialects/hpux/pstat/Makefile
+@@ -75,7 +75,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@echo '#define	LSOF_CINFO	"${CINFO}"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
+--- lsof-4.86+dfsg.orig/dialects/linux/Makefile
++++ lsof-4.86+dfsg/dialects/linux/Makefile
+@@ -78,7 +78,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@echo '#define	LSOF_CINFO	"${CINFO}"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
+--- lsof-4.86+dfsg.orig/dialects/n+obsd/Makefile
++++ lsof-4.86+dfsg/dialects/n+obsd/Makefile
+@@ -81,7 +81,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
+ 	  echo '#define	LSOF_HOST	"'`uname -n`'"' >> version.h; \
+--- lsof-4.86+dfsg.orig/dialects/n+os/Makefile
++++ lsof-4.86+dfsg/dialects/n+os/Makefile
+@@ -87,7 +87,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@echo '#define	LSOF_LDFLAGS	"${CFGL}"' >> version.h
+ 	@if [ "X${LSOF_LOGNAME}" = "X" ]; then \
+--- lsof-4.86+dfsg.orig/dialects/osr/Makefile
++++ lsof-4.86+dfsg/dialects/osr/Makefile
+@@ -87,7 +87,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@echo '#define	LSOF_LDFLAGS	"${CFGL}"' >> version.h
+ 	@if [ "X${LSOF_LOGNAME}" = "X" ]; then \
+--- lsof-4.86+dfsg.orig/dialects/sun/Makefile
++++ lsof-4.86+dfsg/dialects/sun/Makefile
+@@ -75,7 +75,15 @@ version.h:	FRC
+ 	@echo '#define	LSOF_BLDCMT	"${LSOF_BLDCMT}"' > version.h;
+ 	@echo '#define	LSOF_CC		"${CC}"' >> version.h
+ 	@echo '#define	LSOF_CCV	"${CCV}"' >> version.h
+-	@echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h
++	@if [ "X${LSOF_CCDATE}" = "X" ]; then \
++	  echo '#define	LSOF_CCDATE	"'`date`'"' >> version.h; \
++	else \
++	  if [ "${LSOF_CCDATE}" = "none" ]; then \
++	    echo '#define	LSOF_CCDATE	""' >> version.h; \
++	  else \
++	    echo '#define	LSOF_CCDATE	"${LSOF_CCDATE}"' >> version.h; \
++	  fi \
++	fi
+ 	@echo '#define	LSOF_CCFLAGS	"'`echo ${CFLAGS} | sed 's/\\\\(/\\(/g' | sed 's/\\\\)/\\)/g' | sed 's/"/\\\\"/g'`'"' >> version.h
+ 	@echo '#define	LSOF_CINFO	"${CINFO}"' >> version.h
+ 	@if [ "X${LSOF_HOST}" = "X" ]; then \
diff -Nru lsof-4.86+dfsg/debian/patches/series lsof-4.86+dfsg/debian/patches/series
--- lsof-4.86+dfsg/debian/patches/series	2012-04-20 20:58:54.000000000 +0200
+++ lsof-4.86+dfsg/debian/patches/series	2014-09-22 11:32:10.000000000 +0200
@@ -1,3 +1,4 @@
 manpage
 examples
 tests
+preset-ccdate
diff -Nru lsof-4.86+dfsg/debian/rules lsof-4.86+dfsg/debian/rules
--- lsof-4.86+dfsg/debian/rules	2012-04-25 08:14:09.000000000 +0200
+++ lsof-4.86+dfsg/debian/rules	2014-09-22 11:36:12.000000000 +0200
@@ -17,6 +17,14 @@
 export LSOF_CFGF
 LSOF_CFGL := $(shell dpkg-buildflags --get LDFLAGS)
 export LSOF_CFGL
+# prevent recording of details of the build environment to ensure build
+# reproducibility
+LSOF_CCDATE := none
+LSOF_HOST := none
+LSOF_LOGNAME := none
+LSOF_SYSINFO := none
+LSOF_USER := none
+export LSOF_CCDATE LSOF_HOST LSOF_LOGNAME LSOF_SYSINFO LSOF_USER
 
 override_dh_auto_clean:
 	dh_auto_clean

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Reply via email to