Most XiVO pacakges were rebuilt from sources using the corresponding debian repository, except for misdn. It revealed bugs in the recently implemented features of packaging-farm. They were fixed and it was the opportunity write an extensive man page. Minor packaging bugs were reported and a debate on the version number conventions started.
packaging-farm documentation
The XiVO package submission was documented but the packaging-farm command line that is used to build the submitted packages was not. An extensive manual page was written, focusing on the developer and the packager point of view. It does not go into the details of the packaging-farm implementation but should be enough for most purposes.
packaging-farm(1) packaging-farm(1)
NAME
packaging-farm - build package from sources for multiple distributions
SYNOPSIS
packaging-farm SUBMIT=xivo [OPTIONS] submit
packaging-farm SUBMIT=pokersource [OPTIONS] submit
packaging-farm generate
packaging-farm [OPTIONS] package_name
DESCRIPTION
The first forms packaging-farm SUBMIT=... submit creates job request
for packaging-farm and stores it in /var/cache/packaging-farm/sources
For instance
packaging-farm SUBMIT=xivo DIRECTORY=asterisk submit
will create a source package in /var/cache/packaging-
farm/sources/asterisk
The last form builds the package_name package as found in
/var/cache/packaging-farm/sources and stores the result in
/var/lib/packaging-farm as repositories specific to each distribution
that can be browsed at http://localhost/packaging-farm/
For instance packaging-farm asterisk would create a i386 repository
that can be added to the /etc/apt/sources.list file as:
deb http://localhost/packaging-farm/asterisk/gnulinux/debian/i386/squeeze/src ./
deb-src http://localhost/packaging-farm/asterisk/gnulinux/debian/i386/squeeze/src ./
The form before last
packaging-farm SUBMIT=xivo DIRECTORY=asterisk submit
recomputes the dependency graph at /var/cache/packaging-farm/depends.mk
by scanning /var/cache/packaging-farm/sources and creates the default
Makefiles if needed in /var/cache/packaging-farm/build
BUILD FILES
The packaging farm jobs are described in files found in the directory
/var/cache/packaging-farm/build under a directory named after the pack-
age. It contains a Makefile which instructs packaging-farm about what
needs to be done. When a new source is submitted to the farm with pack-
aging-farm submit a default Makefile is created if it does not exist
yet.
For example, /var/cache/packaging-farm/build/asterisk/Makefile con-
tains:
PACKAGE=asterisk
LIBDIR ?= /usr/lib/packaging-farm
include /usr/lib/packaging-farm/Makefile
The following variables can be set in the Makefile. They are common to
all packages.
ROLE the default value is package and it can be set to meta-package
(see the META PACKAGES section for more information) or kernel-
module (see the KERNEL MODULE section for more information).
PACKAGE
is the name of the meta package and it must match the name of
the directory in which the Makefile is found.
DISTRIBUTIONS
is the white space separated list of distributions for which a
package must be built. The default value can be displayed with
packaging-farm --var DISTRIBUTIONS and the list of supported
distributions can be displayed with packaging-farm --var SUP-
PORTED_DISTRIBUTIONS
ARCHITECTURES
is the white space separated list of architectures for which a
package must be built. The default value can be displayed with
packaging-farm --var ARCHITECTURES and the list of supported
architectures can be displayed with packaging-farm --var SUP-
PORTED_ARCHITECTURES
META PACKAGES
A meta package is the aggregation of packages into a repository that
has the same format as the official repositories. The definition of the
meta package is found in the /var/cache/packaging-farm/build
For instance, the skaro meta package can be defined by creating the
/var/cache/packaging-farm/build/skaro/Makefile with the following con-
tent:
PACKAGE=skaro
DISTRIBUTIONS=squeeze
COMPONENT=main
ARCHITECTURES=i386 x86_64
CHILD_PACKAGES = asterisk dahdi-linux
ROLE = meta-package
LIBDIR ?= /usr/lib/packaging-farm
include ${LIBDIR}/Makefile
and the resulting repository can be added to /etc/apt/sources.list
with:
deb http://localhost/packaging-farm/asterisk/gnulinux/debian skaro-squeeze main
deb-src http://localhost/packaging-farm/asterisk/gnulinux/debian skaro-squeeze main
CHILD_PACKAGES
the white space separated list of packages to be aggregated into
the meta-package. The list of known packages can be displayed
with packaging-farm --var PACKAGES
COMPONENT
is the component, in the Debian GNU/Linux sense, provided by the
meta package. It must be a single string.
KERNEL MODULES
Binary kernel modules are built from kernel module source packages
using module-assistant(1).
For instance /var/cache/packaging-farm/build/dahdi-linux-modules/Make-
file contains:
ROLE=kernel-module
PACKAGE=dahdi-linux-modules
MODULE=dahdi-linux-source
DISTRIBUTIONS=squeeze
ARCHITECTURES=i386 x86_64
LIBDIR ?= /usr/lib/packaging-farm
include ${LIBDIR}/Makefile
MODULE the package that will be given to module-assistant(1) to create
binary kernel module packages.
DEPENDENCIES
packaging-farm needs a dependency graph to figure out which package
needs to be built in order for the others to succeed. This is done with
packaging-farm depends
and must be run manually when modifying a meta package (see the META
PACKAGES section). It is run as part of
packaging-farm submit
The dependency graph is output in /var/cache/packaging-farm/depends.mk
and the dependency timestamps that remember what was built is in the
directory /var/cache/packaging-farm/depends For instance a file
/var/cache/packaging-farm/depends/asterisk dated march 28th, 2011 means
that asterisk was successfully built on that date.
DEBUGGING
The output is extremely verbose. If the build of a package (say aster-
isk) fails for a given distribution (say squeeze) for a given architec-
ture (say i386), it is archived at /var/cache/packaging-farm/build/ask-
terisk/build/squeeze-i386.out
When run from the command line, the output from 'BUILD START' to 'BUILD
END' is displayed in case of a failure and the relevant message is
likely to be in the last few lines. The error handling policy through-
out packaging-farm is to abort as soon as a failure occurs.
The chroot used to build the package can be entered for further inves-
tigation with the command:
packaging-farm --cd asterisk DISTRIBUTION=squeeze ARCHITECTURE=x86_64 chroot-login
Note that the content of the chroot will be reset to a virgin installa-
tion when the next build of the packag is run with
packaging-farm asterisk
Note that the chroot must be exited before running a new build. If
still in the chroot, the build will fail.
USE CASE : IMPORT PACKAGE
Paul wants to build the package libpri found at http://dak.proforma-
tique.com/debian
He add the
deb-src http://dak.proformatique.com/debian squeeze-xivo-skaro-dev main
line in /etc/apt/sources.list.
He downloads it into the sources directory of packaging-farm:
apt-get update
mkdir /var/cache/packaging-farm/sources/libpri
cd /var/cache/packaging-farm/sources/libpri
apt-get source libpri
packaging-farm generate
He builds the package for the default distributions and architectures:
packaging-farm libpri
SEE ALSO
submit-xivo.sh(1)
AUTHORS
Loic Dachary <loic@gnu.org>
local packaging-farm(1)
packaging-farm 1.2.35
A new release was published with the manual page displayed above and the following bug fixes and improvements.
The BUILD START and BUILD END markers are added to the output so that it is easier for the developer to figure out the relevant errors. It is also used by the showerrors target. The showerrors target is run after building a package so that the command line user does not need to dig in the verbose output to find the source of the problem. The showerrors target was added to display the build log of a given package for a given architecture and a given distribution, if and only if it failed to build. The ARCHITECTURES variable is exported so that packging-farm – -var ARCHITECTURES can be used to display the default value. submit-xivo.sh creates a new entry in the debian/changelog when processing a package. If this entry is not committed because GIT_DRY_RUN=true was set, it will prevent a git pull. The command git reset –hard HEAD is run to get rid of such pending modifications. The .orig.tar.gz created contained a spurious directory named after the package : it was removed and its content moved back to the root. A third party package is detected when a *-VERSION file is found in the sources directory instead of SOURCE- VERSION which is more restrictive
XiVO bug fixes and versions
While attempting to recompile the XiVO packages, the following bugs were filled together with the patches fixing them.
- freeswitch patch : cdbs dependency + version insensitive package
- dahdi-linux patch : version insensitive packaging
- asterisk patch : misdn depencencies in skaro-squeeze
- dahdi-tools patch : version insensitive packaging
Discussing with Nicolas Hicher on irc.freenode.net#xivo about these patches led to a debate about the versions of the packages which was brought to the development mailing list
The libpri library is not yet available in the xivo skaro source repositories and it was imported as described in the corresponding use case in the packaging-farm manual page.
Architecture
A draft workflow description for packaging-farm was drawn. However, it turns out to be at a level of detail that most packaging-farm users would find useless. It would belong to an implementor guide.
============== net =============
+---------------+ +-----------------+
| Debian GIT | | Sources GIT |
+------+--------+ +--------+--------+
| |
v v === /var/cache/packaging-farm ==
+---------------+ +------------------+
| VCS/debian | | VCS/sources |
+-------------+-+ +--+---------------+
| |
v v
+----------------+
( submit-xivo.sh )
+--+-------------+
| v
| +------------------+
v | sources/skaro +------>------->----------------+
| +------------------+ |
+--------------------+ |
| sources/asterisk +-------------------------------->------->----------------+
+--------------------+ |
|
+--------------------+ +-------------------------+ |
| depends.mk +-------------<-------------( packaging-farm depends )-<-+
+--+-----------------+ +-------------------------+ |
| |
| +-------------------------+ |
| +---------------------------+--( packaging-farm generate )-<-+
| | | +-------------------------+
| v v
| | |
v +--------+-----------+ +---------+---------+
| | build/asterisk | | build/skaro |
| +--------+-----------+ +-------+-----------+
| v v
| | | +----------------------+
+-------------->----------->-------------+-------------( packaging-farm skaro )
+-+--------+-----------+
=== /var/cache/packaging-farm/build/{asterisk,skaro} == | |
| |
+---------------------------------------+ +--------v--------v-----------+
| build/debian/i386/squeeze <--------( packaging-farm chroot-login )
+---------------------------------------+ +-----------------------------+
+---------------------------------------+ +-----------------------------+
| build/debian/i386/squeeze/usr/src <--------( packaging-farm all )
+---------------------------------------+ +-----------------------------+
| |
=== /var/cache/packaging-farm/build/asterisk == | |
etc... | |
===== /var/lib/packaging-farm ================= | |
v v
+------------------+ | |
| asterisk +------------------<--------------+ |
+------------------+ |
+------------------+ |
| skaro +------------------<-----------------------+
+------------------+
===== target system ===========================
deb http://xivo.dachary.org/packaging-farm/skaro/gnulinux/debian skaro-squeeze main
deb-src http://xivo.dachary.org/packaging-farm/skaro/gnulinux/debian skaro-squeeze main

