An alternate XiVO skaro repository

The alternate skaro repository was assembled from the source and debian GIT repositories and complemented with packages found in the official dak. Some virtual packages ( skaro, dahdi-linux-modules) where hand made. A Makefile target was created to update all the XiVO packages from git at once. The 1.2.42 was released with optimizations ensuring that only the necessary packages are compiled.

composing skaro

The gallifrey repository is made of packages built from the GIT repositories, some extracted from the official repository because they are not under GIT and others built for the occasion (kernel-modules and meta-packages). The source of each package is documented in /var/cache/packaging-farm/build/skaro/Makefile which is the meta-package that depends on all the others:

# bntools  asterisk-chan-sccp
CHILD_PACKAGES = asterisk dahdi-linux dahdi-linux-modules dahdi-tools freeswitch libpri pf-xivo-base-config pf-xivo-confgen pf-xivo-cti-server pf-xivo-extra pf-xivo-fetchfw pf-xivo-lib-js pf-xivo-lib-python pf-xivo-monitoring pf-xivo-provisioning pf-xivo-sounds pf-xivo-sysconfd pf-xivo-utils pf-xivo-web-interface pf-asterisk-res-watchdog pf-xivo pf-xivo-backup
# Waiting to be completed:
# bntools chan_sccp
        # Submitted from the GIT repositories
        for dir in agid asterisk base-config confgen ctiservers dahdi-linux dahdi-tools extra fetchfw freeswitch lib-javascript lib-python monitoring provisioning sysconfd uti\
ls wanpipe web-interface xivo_ha xivo-sounds ; do packaging-farm DIRECTORY=$$dir submit ; done
        # When symbolic links needs to be resolved before building the source package
        for dir in res_watchdog ; do RSYNC_OPTIONS=--copy-unsafe-links packaging-farm DIRECTORY=$$dir submit ; done
        # Retrieved from because they are not in the GIT repositories
        # deb-src squeeze-xivo-skaro-dev main
        # virtual packages : pf-xivo pf-xivo-backup
        for package in libpri pf-xivo pf-xivo-backup  ; do ( rm -fr $$package ; mkdir $$package ; cd $$package ; apt-get source $$package ) ; done

ROLE = meta-package

The hand made packages (i.e. Makefiles) can be retrieved from their respective repositories:


The packages are built for two architectures : i386 and x86_64


Mirroring the directory is enough to get all the information required to re-install a packaging-farm from scratch.
It can be used by adding the following to /etc/apt/sources.list

deb skaro-squeeze main


The pf-xivo-extra produced an error:

cp: cannot stat `debian/tmp/README': No such file or directory
dh_install: cp -a debian/tmp/README debian/pf-xivo-extra/usr/share/pf-xivo-extra// returned exit code 1

Nicolas Hicher logged in the machine and went to debug into the chroot used to create the package:

packaging-farm --cd pf-xivo-extra DISTRIBUTION=squeeze ARCHITECTURE=x86_64 chroot-login

It turns out that the package is not properly built from git. The corrupted the source distribution when called twice on the same package. The problem was fixed in the new 1.2.42 packaging-farm release.
The i386 squeeze chroot had a flaw that forced the installation of x11 when installing the devscripts package. The chroot was re-created using the following:

pbuilder --create --architecture i386 --distribution squeeze --basetgz /var/cache/pbuilder/squeeze-i386.tgz

The only package that could not be rebuilt was pf-asterisk-res-watchdog and a bug was reported regarding its missing build depend to python.

managing timestamps when submitting a package

The oneliner that could be used to rebuild XiVO with all the updates from the git repositories is :

cd /var/cache/packaging-farm/build/skaro ; make submit ; packaging-farm skaro

It involves calling for all known packages and therefore trigger a recompilation of each package, even those that were not changed since the last compilation. That can be avoided by selecting the relevant packages, using a method similar to the one described in a previous post. To avoid a manual selection, the was modified to do nothing if it notices that the git repositories do not contain any commit more recent than the timestamp updated when the last compilation completed successfully.

function need_update() {
    local package="$1"
    local dir="$2"
    local suite="$3"
    local xivo="$4"

    if [ ! -f ${DEPENDS_DIR}/${package} ] ; then
        return 0
        modified=$(stat --terse --printf=%Y ${DEPENDS_DIR}/${package})
            cd ${VCS_DIR}/sources/xivo-${xivo}/${dir}
            git log -1 --after=${modified} .
            cd ${VCS_DIR}/debian/${suite}-xivo-${xivo}/${package}
            git log -1 --after=${modified} .
        ) > /tmp/submit$$
        [ -s /tmp/submit$$ ]
        rm /tmp/submit$$
        return $result