[Reproducible-builds] Bug#794792: freeipmi: please make the build reproducible

Johannes Schauer josch at debian.org
Fri Aug 7 04:45:29 UTC 2015


Hi,

just some (hopefully helpful) comments about your freeipmi patch. Not CC-ing
the bug so that it's completely up to you whether you want to address my
comments or not.

Quoting Dhole (2015-08-06 19:13:22)
> The attached patch replaces the timestamp in the docs with the latest
> debian/changelog entry timestamp. Once applied, freeipmi can be built
> reproducibly in our current experimental framework.
>
> [...]
>
> --- freeipmi-1.4.9/debian/patches/honour-SOURCE_DATE_EPOCH.patch        1970-01-01 01:00:00.000000000 +0100
> +++ freeipmi-1.4.9/debian/patches/honour-SOURCE_DATE_EPOCH.patch        2015-08-06 17:18:43.000000000 +0200
> @@ -0,0 +1,21 @@
> +Description: Honour SOURCE_DATE_EPOCH in manpages
> + .
> + freeipmi (1.4.9-1.1) UNRELEASED; urgency=medium
> + .
> +   * Non-maintainer upload.
> +   * Replace man pages dates with the timestamp from the latest
> +     debian/changelog entry using the variable SOURCE_DATE_EPOCH to make the
> +     package build reproducibly.
> +Author: Eduard Sanou <dhole at openmailbox.org>

Usually, you would not put the debian/changelog entry as a patch Description.
See here for samples of how to describe patches best and which headers you can
and/or should use: http://dep.debian.net/deps/dep3/

> +--- freeipmi-1.4.9.orig/configure
> ++++ freeipmi-1.4.9/configure
> +@@ -2723,7 +2723,7 @@ ac_config_headers="$ac_config_headers co
> + ac_config_files="$ac_config_files freeipmi.spec Makefile bmc-device/Makefile bmc-info/Makefile bmc-watchdog/Makefile common/Makefile common/debugutil/Makefile common/miscutil/Makefile common/parsecommon/Makefile common/pingtool/Makefile common/portability/Makefile common/toolcommon/Makefile contrib/Makefile doc/Makefile etc/Makefile ipmi-chassis/Makefile ipmi-config/Makefile ipmi-dcmi/Makefile ipmi-fru/Makefile ipmi-locate/Makefile ipmi-oem/Makefile ipmi-pet/Makefile ipmi-raw/Makefile ipmi-sel/Makefile ipmi-sensors/Makefile ipmiconsole/Makefile ipmidetect/Makefile ipmidetectd/Makefile ipmiping/Makefile ipmipower/Makefile ipmiseld/Makefile libfreeipmi/Makefile libfreeipmi/libfreeipmi.pc libfreeipmi/include/Makefile libfreeipmi/include/freeipmi/freeipmi.h libipmiconsole/Makefile libipmiconsole/ipmiconsole.h libipmiconsole/libipmiconsole.pc libipmidetect/Makefile libipmidetect/ipmidetect.h libipmidetect/libipmidetect.pc libipmimonitoring/Makefile libipmimonitoring/ipmi_monitoring.h libipmimonitoring/libipmimonitoring.pc man/Makefile man/bmc-device.8.pre man/bmc-info.8.pre man/bmc-watchdog.8.pre man/freeipmi.conf.5.pre man/freeipmi.7.pre man/ipmi-chassis.8.pre man/ipmi-config.8.pre man/ipmi-config.conf.5.pre man/ipmi-dcmi.8.pre man/ipmi-fru.8.pre man/ipmi-locate.8.pre man/ipmi-oem.8.pre man/ipmi-pet.8.pre man/ipmi-raw.8.pre man/ipmi-sel.8.pre man/ipmi-sensors.8.pre man/ipmiconsole.8.pre man/ipmidetect.8.pre man/ipmidetect.conf.5.pre man/ipmidetectd.8.pre man/ipmidetectd.conf.5.pre man/ipmiping.8.pre man/ipmipower.8.pre man/ipmiseld.8.pre man/ipmiseld.conf.5.pre man/libfreeipmi.3.pre man/freeipmi_interpret_sensor.conf.5.pre man/freeipmi_interpret_sel.conf.5.pre man/libipmiconsole.3.pre man/libipmiconsole.conf.5.pre man/libipmidetect.3.pre man/libipmimonitoring.3.pre man/rmcpping.8.pre rmcpping/Makefile"
> + 
> + 
> +-ISODATE=`date +%Y-%m-%d`
> ++ISODATE=`date -u -d @$SOURCE_DATE_EPOCH +%Y-%m-%d`
> + 
> + 
> + # libfreeipmi libtool versioning

The file you are patching here, ./configure, is autogenerated from another file
called ./configure.ac in the freeimpi sources. Maintainers are encouraged to
rebuild their ./configure file from ./configure.ac at build time for various
reasons but even if the freeimpi maintainer does not decide to do that in the
near future, your changes will probably be overwritten by the next upstream
release which changes the ./configure.ac and thus regenerates ./configure. It
is thus better to patch the source of ./configure in ./configure.ac about here:
http://sources.debian.net/src/freeipmi/1.4.9-1/configure.ac/#L109 and suggest
to upstream to call dh with `--with --autoreconf` instead of their current
`--with autotools_dev` in debian/rules.

Secondly, you might want to consider to write the patch such that it can be
accepted by upstream. The first part of that is to make the changes against
./configure.ac instead of ./configure as described above. The other requirement
would be that you conditionally use $SOURCE_DATE_EPOCH depending on whether it
has been set or not. In its current state, upstream would not be able to accept
your patch, even if it was against ./configure.ac, because nobody would set
$SOURCE_DATE_EPOCH and thus their build would fail. It is in the interest of
the Debian maintainer that they can forward your patches to upstream and get
them accepted there so that they don't have to carry and maintain your patch
forever.

> --- freeipmi-1.4.9/debian/rules 2015-07-01 16:09:12.000000000 +0200
> +++ freeipmi-1.4.9/debian/rules 2015-08-06 17:12:52.000000000 +0200
> @@ -1,6 +1,8 @@
>  #!/usr/bin/make -f
>  # -*- makefile -*-
>  
> +export SOURCE_DATE_EPOCH = $(shell date -d "$$(dpkg-parsechangelog --count 1 -SDate)" +%s)
> +
>  # --fail-missing for dh_install
>  # --link-doc for dh_installdocs
>  %:

It looks to me as if freeipmi was using dh for building. Are you sure that you
have to manually export SOURCE_DATE_EPOCH? What is the condition under which
one has to export SOURCE_DATE_EPOCH even in dh-based debian/rules files?

Thanks for your work!

cheers, josch
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: signature
URL: <http://lists.alioth.debian.org/pipermail/reproducible-builds/attachments/20150807/84414294/attachment.sig>


More information about the Reproducible-builds mailing list