CGRateS for Debian ------------------ CGRateS dependencies are not packaged separately, an additional component is used alongside the upstream tarball. For package builds both tarballs need to be updated. The build.sh script in the debian directory automates the process. It creates the .orig.tar.gz using git archive, and uses go get to download the sources for the dependencies component. The script then proceed to build the package in a cowbuilder chroot. The script has a few dependencies: git To get the commit details for the package version distro-info To get the release version for the distribution dpkg-dev To parse the debian/changelog file and dpkg-buildpackage devscripts To set the package version and distribution pbuilder To build the package with pdebuild cowbuilder To have a more performant chroot Because the clean target is also executed outside the chroot these build dependencies need to be installed outside the chroot too: debhelper For dh sequencer support in debian/rules dh-golang For the golang buildsystem used by debhelper The cowbuilder chroots should have the upstream Go installed after creation: sudo -i export CODENAME=bookworm export VERSION=1.21.4 cowbuilder --create \ --distribution ${CODENAME} \ --architecture amd64 \ --basepath /var/cache/pbuilder/base-${CODENAME}+go.cow \ --mirror http://ftp.nl.debian.org/debian/ \ --components 'main contrib non-free non-free-firmware' wget https://go.dev/dl/go${VERSION}.linux-amd64.tar.gz -P /tmp tar xavf /tmp/go${VERSION}.linux-amd64.tar.gz \ -C /var/cache/pbuilder/base-${CODENAME}+go.cow/usr/local echo "export PATH=\$PATH:/usr/local/go/bin" >> /var/cache/pbuilder/base-${CODENAME}+go.cow/root/.bashrc To upgrade the Go version in an existing chroot replace /usr/local/go in the chroot: sudo -i export CODENAME=bookworm export VERSION=1.21.6 wget https://go.dev/dl/go${VERSION}.linux-amd64.tar.gz -P /tmp rm -rf /var/cache/pbuilder/base-${CODENAME}+go.cow/usr/local/go/ tar xavf /tmp/go${VERSION}.linux-amd64.tar.gz \ -C /var/cache/pbuilder/base-${CODENAME}+go.cow/usr/local To not have the upstream Go installed outside the chroot, the packaged Go can be used: GO=/usr/lib/go-1.21/bin/go make -C packages/ deb To have the build artifacts alongside the source package in the parent directory instead of /var/cache/pbuilder/result configure the path in ~/.pbuilderrc: BUILDRESULT=".." To have lintian run after the package build in the chroot configure the hook: sudo -i mkdir -p /var/cache/pbuilder/hooks.d cat < /var/cache/pbuilder/hooks.d/B90lintian #!/bin/bash if [ -n "\${LINTIAN}" ] && [ "\${LINTIAN}" = "0" ]; then echo echo "Not running lintian" echo exit 0 fi install_packages() { apt-get -y "\${APTGETOPT[@]}" install "\$@" rc=\$? if [ "\${rc}" -ne 0 ]; then echo echo "Not running lintian" echo exit 0 fi } install_packages lintian set -e echo "+++ lintian output +++" #su -c "lintian -I --show-overrides /tmp/buildd/*.changes" - pbuilder # use this version if you don't want lintian to fail the build su -c "lintian -I --show-overrides --pedantic -E /tmp/buildd/*.changes; :" - pbuilder echo "+++ end of lintian output +++" EOF And configure the path to the hooks directory in ~/.pbuilderrc: HOOKDIR="/var/cache/pbuilder/hooks.d/" To skip running the lintian set LINTIAN=0 in the environment. When the lintian package fails to install, like during perl transitions, the build won't fail.