0.2.0 • Public • Published

Voidbuilder is a simple pbuilder variant using Docker as the container backend. Because of a lack of contributors, this project won't aim to support every feature of pbuilder, instead it keeps being as simple as possible.

The following Debian packages are required for this project to function:

  • docker-ce | docker.io
  • dpkg-dev
  • lintian (optional)

There is currently no plan to put it into Debian's archive. But if someone is going to, please make it a native package.

As the project executes Docker commands, it is better to install Voidbuilder globally and run with sudo.


The biggest selling point of this tool is that it uses Docker, thus benefitting all the goodies from that beloved project such as copy-on-write, instant job-canceling and well-maintained code.

Another advantage of this tool is zero configuration. Unlike pbuilder or sbuild that requires you to create a base image first or even touch /etc/pbuilderrc, you can just build your pacakges right after you install it via NPM. Every time Voidbuilder runs a build it creates a one-time container based on the BASE_IMAGE value in the config. By default it's set as the latest Debian image from the official registry, so just remember to run voidbuilder update occasionally.

Most commands of and options accepted by Voidbuilder have similar simantics of those of pbuilder. When in doubt, consult the manual of pbuilder.

Building a Package

This is similar to using pbuilder. Just build the source-only bundle of a package (which essentially includes a .dsc and the source tarballs) and run voidbuilder build foo_1.0-1.dsc.

Updaing the Base Image

Run voidbuilder update and it will try pulling the latest version of the base base image from the a Docker registry.

This is where Voidbuilder is different from pbuilder in the container logic. Everytime Voidbuilder builds a package, it creates a container based on the base image, updates the system, installs build-tools, and then installs the build-dependencies and starts the build. As a result, a build takes significantly longer to finish than pbuilder, but it catches the most hidden errors in the dependency graph.

Login to a Disposeable Development Environment

As mentioned above, every build of Voidbuilder takes a long time. A compromise must be taken, hence this feature.

Run voidbuilder login [root of a source package] and you will be logged into a container with build-tools and build-dependencies installed and the source package directory mounted at /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.

Foreign Architectures

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.

Internal Details

This section describes the implementation details that helps keep tracking of the development.

Build Place Structure

└── ${UUID-v4}/
    ├── apt-cache/
    ├── hooks/
    ├── source/
    ├── agent-*.sh
    ├── sources.list
    ├── *.dsc
    ├── *.debian.tar.*
    └── *.orig.tar.*


npm i voidbuilder

Downloadsweekly downloads








last publish


  • avatar
Report a vulnerability