[Soc-coordination] Bootstrappable Debian - Report 3 + N + 2

P. J. McDermott pjm at nac.net
Mon Aug 20 01:42:46 UTC 2012


This is the final report for the "Bootstrappable Debian" project
mentored by Wookey and co-mentored by Jonathan Austin.

Copies of this report are sent to the debian-bootstrap and
debian-embedded lists.


Project Summary
===============

I implemented in dpkg [1] and sbuild [2] support for "build profiles".
I then built [3] some packages in "stage1" and "nodocs" profiles to
break dependency cycles.  I also fixed [4][5] problems that are
preventing some base system packages from being cross built.

[1]: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=661538#136
[2]: http://bootstrap.pehjota.net/sbuild/sbuild-build-profiles.debdiff
[3]: http://bootstrap.pehjota.net/staged/
[4]: http://bootstrap.pehjota.net/cross/
[5]: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683751#65


Tools
=====

dpkg
----

Since submitting the patch to implement build profiles in dpkg, I
realized that:

  * I forgot to document the new options in Dpkg::Deps::deps_parse() and
  * A "use_profile" option was missing from deps_parse().

I submitted to bug #661538 [6] an updated patch in which these issues
are corrected.

[6]: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=661538#151

sbuild
------

I had previously patched sbuild to support build profiles and properly
reduce them in build dependencies.  A profile could be selected using
the "--profile=<profile>" option of sbuild(1).

Since I wrote the original patch, Wookey and I discussed sbuild's
interfaces for specifying profiles.  We agreed that sbuild should also
allow profile selection through an environment variable.  So I updated
my patch [2] to make sbuild(1) use the value of DEB_BUILD_PROFILE unless
the "--profile=<profile>" option is given.  Now the following example
shell command language simple command works as expected:

    $ DEB_BUILD_PROFILE=stage1 sbuild --build=i386 --host=i386 -d sid \
    > krb5_1.10.1+dfsg-1.1.dsc


Multiarch Cross Building
========================

When bootstrapping a new Debian architecture, at least the base system
needs to be cross built; however, many packages in Debian fail to cross
build.

In many cases, this is at least in part simply because cross build
dependencies can't be resolved.  So in my work to cross build the base
system, I've been marking certain dependent binary packages as being
able to satisfy dependencies of packages either of any architecture or
of only the same architecture.

Build Tools
-----------

The following binary packages provide some of the tools used when
building base system packages:

  * autoconf
  * bash-completion
  * dh-buildinfo
  * docbook-xml
  * po-debconf
  * texi2html

I added to these packages a "Multi-Arch: foreign" control field,
indicating that the packages provide architecture-independent interfaces
and can therefore satisfy build dependencies of source packages being
built for any host architecture.

gettext
-------

The gettext binary package in Debian provides internationalization tools
often used by other source packages at build time.  It also provides
development files to complement the libgettextpo0 and libasprintf0c2
library packages.

Because of the presence of these architecture-dependent development
files, gettext can't simply be marked "Multi-Arch: foreign" like most
other utility packages can be.

Johannes Schauer, Steve Langasek, Santiago Vila, and I discussed this
issue in bug #683751 [7].

The solution Steve used in Ubuntu was to mark gettext "Multi-Arch:
allowed" and add ":any" architecture specifiers to the build dependency
lists of many packages.  This worked well for Ubuntu and avoided the
introduction into Ubuntu of major changes not present in Debian.
However, it has the disadvantage of requiring metadata changes in many
source packages simply to describe an interface offered by the gettext
package.

I felt that a better option would be to split the library development
files out of the gettext package.  As a result of such a split, gettext
would provide only architecture-independent interfaces (and could be
marked "Multi-Arch: foreign") and a new libgettext-dev package would
provide architecture-dependent interfaces (and therefore must be marked
"Multi-Arch: same").

libgettext-dev would provide libgettextpo-dev and libasprintf-dev, the
virtual packages on which source packages should depend if they are to
use the libgettextpo.so and libasprintf.so objects, respectively.
Therefore, this split maintains compatibility with existing build
dependency lists.  Any incompatibilities that might exist are bugs in
the depending source packages.

I submitted a patch [5] implementing this split in gettext.

[7]: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683751

"Packages" Indices Patches
--------------------------

I wrote a script [8] to generate, twice a day, patches [9][10] against
the "Packages" indices of Debian sid's main component for architectures
i386 and armhf.  These patches include the "Multi-Arch" fields I've
added to packages to resolve cross build dependency issues.

The patches are similar to the "Sources" index patch [11] I mentioned in
my previous report.

[8]: http://bootstrap.pehjota.net/cross/packages/patchpackages.sh
[9]:
http://bootstrap.pehjota.net/cross/packages/Packages-sid-main-i386.patch
[10]:
http://bootstrap.pehjota.net/cross/packages/Packages-sid-main-armhf.patch
[11]: http://bootstrap.pehjota.net/staged/sources/Sources.patch

-- 
P. J. McDermott                                        (_/@\_)    ,--.
http://www.pehjota.net/                           o    < o o >   / oo \
http://www.pehjota.net/contact.html                 o   \ `-/    | <> |.
                                                o o o    "~v    /_\--/_/



More information about the Soc-coordination mailing list