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 /_\--/_/ -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

