Over the last couple of weeks, I have been working on getting binary packages for Varnish modules built. In the current version, you need to have a built, unpacked source tree to build a module against. This is being fixed in the next version, but until then, I needed to provide this in the build environment somehow.
RPMs were surprisingly easy, since our RPM build setup is much simpler and doesn’t use mock/mach or other chroot-based tools. Just make a source RPM available and unpack + compile that.
Debian packages on the other hand, they were not easy to get going.
My first problem was to just get the Varnish source package into the
chroot. I ended up making a directory in /var/lib/sbuild/build
which is exposed as /build
once sbuild
runs. The other hard part
was getting Varnish itself built. sbuild
exposes two hooks that
could work: a pre-build
hook and a chroot-setup
hook. Neither
worked: Pre-build is called before the chroot is set up, so we can’t
build Varnish. Chroot-setup is run before the build-dependencies are
installed and it runs as the user invoking sbuild
, so it can’t
install packages.
Sparc32 and similar architectures use the linux32
tool to set the
personality before building packages. I ended up abusing this, so I
set HOME to a temporary directory where I create a .sbuildrc
which sets
$build_env_cmnd
to a script which in turns unpacks the Varnish
source, builds it and then chains to dpkg-buildpackage
. Of course,
the build-dependencies for modules don’t include all the
build-dependencies for Varnish itself, so I have to extract those from
the Varnish source package too.
No source available at this point, mostly because it’s beyond ugly. I’ll see if I can get it cleaned up.