Negatory. Postpone Mission.
Unleash awesomeness. Private packages, team management tools, and powerful integrations. Get started with npm Orgs »

voidbuilder

0.3.0 • Public • Published

JavaScript Style Guide

Voidbuilder is a simple pbuilder variant using Docker as the container backend.

The following packages are required on the system for this project to function:

  • Docker
  • dpkg-dev
  • Lintian (optional)

Features

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.

Building a Package

This is similar to using pbuilder. Just build the source-only bundle of a package 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 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.

Login to a Disposeable Development Environment

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-dependencies are installed
  • The directory of the source package is 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.

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:

  • Use --target= when using dpkg-buildpackage.
  • Do not use Quilt inside the container.
  • Clean before existing the container.

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 some implementation details.

Build Place Structure

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

install

npm i voidbuilder

Downloadsweekly downloads

2

version

0.3.0

license

MIT

repository

Gitsalsa

last publish

collaborators

  • avatar
Report a vulnerability