Bug#882511: dpkg-buildpackage: should allow caller to force inclusion of source in buildinfo

Ximin Luo infinity0 at debian.org
Thu Nov 23 15:23:29 UTC 2017


Package: dpkg-dev
Version: 1.19.0.4
Severity: wishlist
Tags: patch

Dear Maintainer,

dpkg-buildpackage currently does not automatically list the source .dsc nor
its hash in the call to dpkg-genbuildinfo when doing a binary-only build. This
is understandable because in a binary-only build, dpkg-buildpackage does not
have any concept of a source package and therefore does not know (and cannot
verify) if the working tree was actually generated from any .dsc or not.

However, the caller knows this information, and it is useful for reproducible
builds to track exactly which (i.e. hash-wise) source code generates which
binary packages. So it should be possible for the caller to tell
dpkg-buildpackage, "yes please do include the .dsc hash in the buildinfo, I am
telling you it is correct, you can assume this safely".

Tools like sbuild/pbuilder could then do this, as well as users or rebuilders.

The attached patch implements this in the simplest way possible. It allows the
caller to run something like:

  $ dpkg-buildpackage --no-sign -b --buildinfo-option=--build=full

The resulting $pkg_$ver_$arch.buildinfo then contains the .dsc and its hash.

However this requires the caller to know which option to pass, which would either be

  --buildinfo-option=--build=full
  --buildinfo-option=--build=any,source
  --buildinfo-option=--build=all,source

depending on whether the original build request (to dpkg-buildpackage) was a -b, -B, or -A.

For this reason, it may be better (more usable) to add a --force-source-in-buildinfo
flag (or similar name) and when this is switched on, do this instead:

-push @buildinfo_opts, "--build=$build_types" if build_has_none(BUILD_DEFAULT);
+push @buildinfo_opts, "--build=$build_types,source" if build_has_none(BUILD_DEFAULT);

Let me know if you like this idea and I'll be happy to implement that instead of
the attached patch.

X

-- System Information:
Debian Release: buster/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 'testing-debug'), (300, 'unstable'), (200, 'experimental'), (1, 'experimental-debug')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.13.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8), LANGUAGE=en_GB:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages dpkg-dev depends on:
ii  binutils      2.29.1-8
ii  bzip2         1.0.6-8.1
ii  libdpkg-perl  1.19.0.4
ii  make          4.1-9.1
ii  patch         2.7.5-1+b2
ii  perl          5.26.1-2
ii  tar           1.29b-2
ii  xz-utils      5.2.2-1.3

Versions of packages dpkg-dev recommends:
ii  build-essential          12.4
ii  clang-4.0 [c-compiler]   1:4.0.1-8
ii  fakeroot                 1.22-2
ii  gcc [c-compiler]         4:7.2.0-1d1
ii  gcc-7 [c-compiler]       7.2.0-16
ii  gnupg                    2.2.2-1
ii  gnupg2                   2.2.2-1
ii  gpgv                     2.2.2-1
ii  libalgorithm-merge-perl  0.08-3

Versions of packages dpkg-dev suggests:
ii  debian-keyring  2017.08.28

-- no debconf information

-- debsums errors found:
debsums: changed file /usr/bin/dpkg-buildpackage (from dpkg-dev package)
-------------- next part --------------
diff --git a/scripts/dpkg-buildpackage.pl b/scripts/dpkg-buildpackage.pl
index f759ba4a6..2250403db 100755
--- a/scripts/dpkg-buildpackage.pl
+++ b/scripts/dpkg-buildpackage.pl
@@ -27,6 +27,7 @@ use Cwd;
 use File::Temp qw(tempdir);
 use File::Basename;
 use File::Copy;
+use List::Util qw(none);
 use POSIX qw(:sys_wait_h);
 
 use Dpkg ();
@@ -574,7 +575,9 @@ if (build_has_any(BUILD_BINARY)) {
 
 run_hook('buildinfo', 1);
 
-push @buildinfo_opts, "--build=$build_types" if build_has_none(BUILD_DEFAULT);
+if (none { index($_, '--build=') == 0 } @buildinfo_opts) {
+    push @buildinfo_opts, "--build=$build_types" if build_has_none(BUILD_DEFAULT);
+}
 push @buildinfo_opts, "--admindir=$admindir" if $admindir;
 
 run_cmd('dpkg-genbuildinfo', @buildinfo_opts);


More information about the Reproducible-builds mailing list