Source: unbound
Version: 1.5.10-3
Tags: patch
User: helm...@debian.org
Usertags: rebootstrap

Recently, gnutls28 gained a build dependency on libunbound-dev. This has
posed a problem to bootstrapping since unbound needs python and python
has a pile of dependencies. Thus we (mainly Andreas Metzler and me)
looked into how we could tackle this issue and came up with a number of
solutions. They generally fall into two categories:

a) Add a build profile to gnutls82 that disables use of libunbound-dev.
b) Add a build profile to unbound that disables use of python.

Option a) is difficult, because libgnutls28-dev contains dane
components, which need libunbound-dev. The idea here was to have
libgnutls28-dev provide libgnutls-dane-dev iff building stageless.
However, such a conditional provides cannot be expressed in the
Package-List header of a .dsc file and it makes using diffoscope for
validating profiles non-trivial. Splitting gnutls28 into even smaller
real packages didn't seem nice either.

Thus I looked into adding a nopython profile to unbound. The unbound
packaging is nicely split into four build passes of which the last two
are for python2 and python3 respectively. Unfortunately, the daemon
build pass also uses python3 (for plugins), so for the bootstrap
purpose, we'll have to disable it as well. Instead of adding a complex
set of profiles nopython, nodaemon and e.g. noutils, I propose adding a
"libonly" profile. This solution is implemented in the attached patch.

Both solutions work in practise. We prefer adding the profile to
unbound, because the diff looks more maintainable and simpler.

I ask the readers of d-cross@l.d.o to consider this solution. In case
there are no objections in a reasonable amount of time (e.g. a week), I
ask Robert Edmonds to apply the patch to unbound. In the mean time, I'll
apply in rebootstrap to remove any urgency from this issue. Having it
fixed in stretch would be nice nonetheless.

Helmut
diff --minimal -Nru unbound-1.5.10/debian/changelog 
unbound-1.5.10/debian/changelog
--- unbound-1.5.10/debian/changelog     2016-11-27 20:41:30.000000000 +0100
+++ unbound-1.5.10/debian/changelog     2016-12-01 13:17:55.000000000 +0100
@@ -1,3 +1,10 @@
+unbound (1.5.10-3.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Add pkg.unbound.libonly build profile. (Closes: #-1)
+
+ -- Helmut Grohne <hel...@subdivi.de>  Thu, 01 Dec 2016 13:17:55 +0100
+
 unbound (1.5.10-3) unstable; urgency=medium
 
   [ Helmut Grohne ]
diff --minimal -Nru unbound-1.5.10/debian/control unbound-1.5.10/debian/control
--- unbound-1.5.10/debian/control       2016-11-27 20:41:30.000000000 +0100
+++ unbound-1.5.10/debian/control       2016-12-01 13:17:55.000000000 +0100
@@ -9,26 +9,26 @@
  autotools-dev,
  bison,
  debhelper (>= 9~),
- dh-apparmor,
+ dh-apparmor <!pkg.unbound.libonly>,
  dh-autoreconf,
- dh-python,
- dh-systemd,
+ dh-python <!pkg.unbound.libonly>,
+ dh-systemd <!pkg.unbound.libonly>,
  dpkg-dev (>= 1.16.1~),
  flex,
  libevent-dev,
  libexpat1-dev,
- libfstrm-dev,
- libprotobuf-c-dev,
- libssl-dev,
+ libfstrm-dev <!pkg.unbound.libonly>,
+ libprotobuf-c-dev <!pkg.unbound.libonly>,
+ libssl-dev <!pkg.unbound.libonly>,
  libtool,
  nettle-dev,
  pkg-config,
- protobuf-c-compiler,
- python-all-dev:any (>= 2.6.6-3~),
- libpython-all-dev (>= 2.6.6-3~),
- python3-all-dev:any,
- libpython3-all-dev,
- swig,
+ protobuf-c-compiler <!pkg.unbound.libonly>,
+ python-all-dev:any (>= 2.6.6-3~) <!pkg.unbound.libonly>,
+ libpython-all-dev (>= 2.6.6-3~) <!pkg.unbound.libonly>,
+ python3-all-dev:any <!pkg.unbound.libonly>,
+ libpython3-all-dev <!pkg.unbound.libonly>,
+ swig <!pkg.unbound.libonly>,
 Standards-Version: 3.9.8
 Homepage: https://www.unbound.net/
 Vcs-Browser: https://anonscm.debian.org/cgit/pkg-dns/unbound.git
@@ -69,6 +69,7 @@
  ${misc:Depends},
  ${python:Depends},
  ${shlibs:Depends},
+Build-Profiles: <!pkg.unbound.libonly>
 Description: library implementing DNS resolution and validation (Python 
bindings)
  Python extension module for libunbound.
  .
@@ -83,6 +84,7 @@
  ${misc:Depends},
  ${python3:Depends},
  ${shlibs:Depends},
+Build-Profiles: <!pkg.unbound.libonly>
 Description: library implementing DNS resolution and validation (Python3 
bindings)
  Python3 extension module for libunbound.
  .
@@ -102,6 +104,7 @@
 Enhances:
  munin-node,
 Suggests: apparmor
+Build-Profiles: <!pkg.unbound.libonly>
 Description: validating, recursive, caching DNS resolver
  Unbound is a recursive-only caching DNS server which can perform DNSSEC
  validation of results. It implements only a minimal amount of authoritative
@@ -120,6 +123,7 @@
  unbound (<< 1.4.13-1),
 Breaks:
  unbound (<< 1.4.13-1),
+Build-Profiles: <!pkg.unbound.libonly>
 Description: utility to securely fetch the root DNS trust anchor
  unbound-anchor is a utility which securely fetches or updates the root DNS
  zone trust anchor. A copy of the current root anchor and root update
@@ -131,6 +135,7 @@
 Depends:
  ${misc:Depends},
  ${shlibs:Depends},
+Build-Profiles: <!pkg.unbound.libonly>
 Description: reimplementation of the 'host' command
  This package provides the 'unbound-host' program that is bundled with the
  Unbound domain name server. This version differs from the one provided in the
diff --minimal -Nru unbound-1.5.10/debian/libunbound-dev.install 
unbound-1.5.10/debian/libunbound-dev.install
--- unbound-1.5.10/debian/libunbound-dev.install        2016-11-27 
20:41:30.000000000 +0100
+++ unbound-1.5.10/debian/libunbound-dev.install        2016-12-01 
13:17:55.000000000 +0100
@@ -1,2 +1,2 @@
-usr/include/unbound.h usr/include
-usr/share/man/man3/libunbound.3 usr/share/man/man3
+debian/tmp-lib/usr/include/unbound.h usr/include
+debian/tmp-lib/usr/share/man/man3/libunbound.3 usr/share/man/man3
diff --minimal -Nru unbound-1.5.10/debian/rules unbound-1.5.10/debian/rules
--- unbound-1.5.10/debian/rules 2016-11-27 20:41:30.000000000 +0100
+++ unbound-1.5.10/debian/rules 2016-12-01 13:17:55.000000000 +0100
@@ -8,6 +8,7 @@
 endif
 
 LIBRARY = libunbound2
+DOPACKAGES = $(shell dh_listpackages)
 
 export DEB_BUILD_MAINT_OPTIONS = hardening=+all
 DPKG_EXPORT_BUILDFLAGS = 1
@@ -27,6 +28,7 @@
        dh_autoreconf
        dh_autotools-dev_updateconfig
 
+ifneq (,$(filter unbound unbound-anchor unbound-host,$(DOPACKAGES)))
        # first build -- build unbound daemon
        PYTHON_VERSION="$(shell py3versions -vd)" \
        CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="-Wl,--as-needed 
$(LDFLAGS)" \
@@ -43,6 +45,7 @@
        $(MAKE)
        $(MAKE) install DESTDIR="$(CURDIR)/debian/tmp"
        $(MAKE) clean
+endif
 
        # second build -- build libunbound only, against nettle
        CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="-Wl,--as-needed 
$(LDFLAGS)" \
@@ -61,6 +64,7 @@
                
$(CURDIR)/debian/libunbound-dev/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/libunbound.pc
        $(MAKE) clean
 
+ifneq (,$(filter python-unbound,$(DOPACKAGES)))
        # third build - pyunbound for Python 2
        PYTHON_VERSION="$(shell pyversions -vd)" \
        CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="-Wl,--as-needed 
$(LDFLAGS)" \
@@ -77,7 +81,9 @@
                libunbound/python/unbound.py \
                debian/python-unbound/usr/lib/$(shell pyversions 
-d)/dist-packages
        $(MAKE) clean
+endif
 
+ifneq (,$(filter python3-unbound,$(DOPACKAGES)))
        # fourth build - pyunbound for Python 3
        PYTHON_VERSION="$(shell py3versions -vd)" \
        CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="-Wl,--as-needed 
$(LDFLAGS)" \
@@ -94,9 +100,11 @@
                libunbound/python/unbound.py \
                debian/python3-unbound/usr/lib/$(shell py3versions 
-d)/dist-packages
        $(MAKE) clean
+endif
 
        dh_installdirs
 
+ifneq (,$(filter unbound unbound-anchor unbound-host,$(DOPACKAGES)))
        dh_systemd_enable -p unbound
        dh_systemd_enable -p unbound --name=unbound-resolvconf
        dh_systemd_start -p unbound unbound.service
@@ -109,6 +117,7 @@
        install -m 0644 doc/example.conf 
debian/unbound/usr/share/doc/unbound/examples/unbound.conf
        install -m 0644 contrib/update-anchor.sh 
debian/unbound/usr/share/doc/unbound/contrib
        install -D -m 0755 contrib/unbound_munin_ 
debian/unbound/usr/share/munin/plugins/unbound_munin_
+endif
 
        mkdir -p debian/libunbound-dev/usr/lib/$(DEB_HOST_MULTIARCH)
        mv \
@@ -126,14 +135,20 @@
        dh_installchangelogs
        dh_installdocs
        dh_installman
+ifneq (,$(filter python-unbound,$(DOPACKAGES)))
        dh_python2 --no-guessing-versions
+endif
+ifneq (,$(filter python3-unbound,$(DOPACKAGES)))
        dh_python3
+endif
        dh_strip
        dh_compress -Xusr/share/doc/unbound/examples/unbound.conf
 
+ifneq (,$(filter unbound unbound-anchor unbound-host,$(DOPACKAGES)))
        mkdir -p debian/unbound/etc/apparmor.d
        cp debian/apparmor-profile 
debian/unbound/etc/apparmor.d/usr.sbin.unbound
        dh_apparmor --profile-name=usr.sbin.unbound -punbound
+endif
 
        dh_fixperms
        dh_makeshlibs

Reply via email to