Simple pbuilder variant using Docker
MIT License
Simple
pbuilder
variant using Docker as the container backend.
The following packages are required on the system for this project to function:
dpkg-dev
jq
The biggest selling point of this tool is that it uses Docker. It is always a good idea to base a project on a well-maintained codebase.
Another advantage of this tool is zero configuration. Unlike pbuilder
or
sbuild
that requires you to create a base image first or write
/etc/pbuilderrc
, you can just build your pacakges right after you install it
via NPM.
Most commands of and options accepted by Voidbuilder have similar simantics of
those of pbuilder
. When in doubt, consult the manual of pbuilder
.
In order to keep the code simple and short, this project will not implement all
features of pbuilder
. But it may have a few exclusive features, mostly for
serving some common use-cases, due to its in-house nature.
This is similar to using pbuilder
. Just build the source-only bundle of a
package and run voidbuilder build foo_1.0-1.dsc
.
Run voidbuilder update
and it will try pulling the latest version of the base
image from the a Docker registry. This sub-command does not perform a system
update for the image, despite the manual of pbuilder
states so.
This is where Voidbuilder is different from pbuilder
in the container logic.
A system update will be performed before every build. As a result, a build takes
significantly longer to finish than pbuilder
, but it catches the most hidden
errors in the dependency graph.
As mentioned above, every build takes a long time. A compromise must be made, hence this feature.
Run voidbuilder login [root of a source package]
and you will be logged into
a container where:
/build/source
After that, you can try building the package as many times as you like without needing to initialize the environment everytime you start the build. And because the source directory is mounted instead of copied, you can experiment on the package with your favorite text editor on the host machine.
Without specifying a directory, this sub-command works the same as
pbuilder login
.
Tips: As your Docker instance will most likely be running in root, it is a good idea to prevent the upstream files from being tampered by the root permission. To do that, some practices should be remembered:
--target=
when using dpkg-buildpackage
.In order to build a package on another architecture, just use a Docker image
built for it (e.g. arm64v8/debian:sid
). But for this to work, the host
machine must has qemu-user-static
and binfmt-support
installed.
This section describes some implementation details.
BUILDPLACE/
${UUID-v4}/
apt-cache/
hooks/
source/
agent-*.sh
sources.list
*.dsc
*.debian.tar.*
*.orig.tar.*