Packaging

What does it takes for Bio++ to enter the official repositories of Debian GNU/Linux ? =Request For Packaging= The first step is to ask for a Debian Developer to package the software. This is called a RFP as in Request For Packaging and it is done by filling a bug report against the wnpp pseudo package. Since Debian packages for Bio++ are already provided the task of the Debian Developer is facilitated. Even when Debian packages are already available, the odds of seducing a Debian Developer into taking responsibility for the package is small. The quality standards for a package entering Debian are higher than what is implemented by the amateur packager. However, meeting these standards is not a difficult task when using the proper tools. =Resolving packages dependencies= Using pbuilder ensures that the package can be built on a virgin Debian GNU/Linux installation. When trying a build on a machine used for other purposes, it is common forget that it can't be built unless a specific library is already installed. apt-get install pbuilder pbuilder --create Will create a virgin GNU/Linux and archive it in a tar.gz (in /var/cache/pbuilder). It can then be used to build the package (for instance libbpp-core) as follows: pbuilder --build libbpp-core_2.0.1.dsc will copy the package in a chroot extracted from the archive created by pbuilder and try to build it. When finished the result can be found in /var/cache/pbuilder/result. =Packages interdependencies= What should be done for libbpp-seq to build ? It relies on libpp-core which is not standard in Debian and should retrieve it from a previous build. Assuming a web server is installed locally, a Debian repository can be built as follows: ln -s /var/cache/pbuilder/result /var/www/result and a reference to this repository can be added to the pbuilder chroot as follows: pbuilder --login --save-after-login echo deb http://localhost/result/ ./ >> /etc/apt/sources.list Control-D From now on, building a package will lookup this repository in addition to the standard ones. Whenever a new package is added to this repository, as a result of a successfull call to pbuilder, the pbuilder chroot must be updated as follows: ( cd /var/www/result ; dpkg-scanpackages . /dev/null | gzip > Packages.gz ; dpkg-scansources . /dev/null | gzip > Sources.gz ) pbuilder --update Julien Dutheil used this technique to ensure that the Build-Depends of each package was accurate. =Packaging farm= In order to review the packages, Loic Dachary created a dedicated virtual machine and installed packaging-farm on it. It essentially does the same as the above with less manual tweaking but the learning curve is steeper. The source packages were downloaded into /var/cache/packaging-farm/sources : /var/cache/packaging-farm/sources/bppphyview/bppphyview_0.1.0.dsc /var/cache/packaging-farm/sources/bppphyview/bppphyview_0.1.0.tar.gz	/var/cache/packaging-farm/sources/bppsuite/bppsuite_0.6.0-2.dsc /var/cache/packaging-farm/sources/bppsuite/bppsuite_0.6.0-2.tar.gz	/var/cache/packaging-farm/sources/libbpp-core/libbpp-core_2.0.1.dsc /var/cache/packaging-farm/sources/libbpp-core/libbpp-core_2.0.1.tar.gz	/var/cache/packaging-farm/sources/libbpp-phyl/libbpp-phyl_2.0.1.dsc /var/cache/packaging-farm/sources/libbpp-phyl/libbpp-phyl_2.0.1.tar.gz	/var/cache/packaging-farm/sources/libbpp-popgen/libbpp-popgen_2.0.0-1.dsc /var/cache/packaging-farm/sources/libbpp-popgen/libbpp-popgen_2.0.0-1.tar.gz	/var/cache/packaging-farm/sources/libbpp-qt/libbpp-qt_2.0.0.dsc /var/cache/packaging-farm/sources/libbpp-qt/libbpp-qt_2.0.0.tar.gz	/var/cache/packaging-farm/sources/libbpp-raa/libbpp-raa_2.0.0-1.dsc /var/cache/packaging-farm/sources/libbpp-raa/libbpp-raa_2.0.0-1.tar.gz	/var/cache/packaging-farm/sources/libbpp-seq/libbpp-seq_2.0.0-1.dsc /var/cache/packaging-farm/sources/libbpp-seq/libbpp-seq_2.0.0-1.tar.gz For each of them a Makefile was created with the form: PACKAGE=libbpp-core DISTRIBUTIONS=unstable ARCHITECTURES=i386 x86_64 LIBDIR ?= /usr/lib/packaging-farm include ${LIBDIR}/Makefile Using the information from the debian/control files, the dependencies between each package was calculated with: packaging-farm depends and each package was built, both for i386 and adm64, with packaging-farm libbpp-seq # which built libbpp-core first because it depends on it	packaging-farm bppsuite etc. The generated packages have been aggretated in a repository that can be used on a Debian GNU/Linux unstable by adding to /etc/apt/sources.list deb http://biopp.dachary.org/packaging-farm/bpp/gnulinux/debian bpp main deb-src http://biopp.dachary.org/packaging-farm/bpp/gnulinux/debian bpp main Which allows to install bppsuite with a single apt-get install bppsuite apt-get install bppsuite Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libbpp-core libbpp-core-dev libbpp-phyl libbpp-phyl-dev libbpp-seq libbpp-seq-dev The following NEW packages will be installed: bppsuite libbpp-core libbpp-core-dev libbpp-phyl libbpp-phyl-dev libbpp-seq libbpp-seq-dev 7 newly installed, 0 to remove Need to get 10.5MB of archives. After this operation, 43.6MB of additional disk space will be used. Do you want to continue [Y/n]? y	Get:1 http://biopp.dachary.org unstable/main libbpp-core 2.0.1 [589kB] Get:2 http://biopp.dachary.org unstable/main libbpp-core-dev 2.0.1 [1,310kB] Get:3 http://biopp.dachary.org unstable/main libbpp-seq-dev 2.0.0-1 [1,227kB] Get:4 http://biopp.dachary.org unstable/main libbpp-seq 2.0.0-1 [540kB] Get:5 http://biopp.dachary.org unstable/main libbpp-phyl-dev 2.0.1 [4,660kB] Get:6 http://biopp.dachary.org unstable/main libbpp-phyl 2.0.1 [1,779kB] Get:7 http://biopp.dachary.org unstable/main bppsuite 0.6.0-2 [410kB] Fetched 10.5MB in 18s (575kB/s) Selecting previously deselected package libbpp-core. (Reading database ... 330640 files and directories currently installed.) Unpacking libbpp-core (from .../libbpp-core_2.0.1_amd64.deb) ... Selecting previously deselected package libbpp-core-dev. Unpacking libbpp-core-dev (from .../libbpp-core-dev_2.0.1_amd64.deb) ... Preparing to replace libbpp-seq-dev 1.7.1 (using .../libbpp-seq-dev_2.0.0-1_amd64.deb) ... Unpacking replacement libbpp-seq-dev ... Preparing to replace libbpp-seq 1.7.1 (using .../libbpp-seq_2.0.0-1_amd64.deb) ... Unpacking replacement libbpp-seq ... Preparing to replace libbpp-phyl-dev 1.9.1 (using .../libbpp-phyl-dev_2.0.1_amd64.deb) ... Unpacking replacement libbpp-phyl-dev ... Preparing to replace libbpp-phyl 1.9.1 (using .../libbpp-phyl_2.0.1_amd64.deb) ... Unpacking replacement libbpp-phyl ... Selecting previously deselected package bppsuite. Unpacking bppsuite (from .../bppsuite_0.6.0-2_amd64.deb) ... Processing triggers for install-info ... install-info: warning: no info dir entry in `/usr/share/info/ispell.info.gz' install-info: warning: no info dir entry in `/usr/share/info/bppsuite.info.gz' Setting up libbpp-core (2.0.1) ... Setting up libbpp-core-dev (2.0.1) ... Setting up libbpp-seq (2.0.0-1) ... Setting up libbpp-seq-dev (2.0.0-1) ... Setting up libbpp-phyl (2.0.1) ... Setting up libbpp-phyl-dev (2.0.1) ... Setting up bppsuite (0.6.0-2) ... =Further work=
 * Submit the RFP
 * Run lintian on the generated packages