Use pBuilder to build packages for Ubuntu

With pBuilder you can set up a chroot environment and build packages for different Linux distributions on one machine. In this article I will show how to set up pBuilder on Ubuntu 10.04. But it should also work on other Linux distributions like Debian.

Build a package

At first we have to install the required packages pbuilder, debootstrap and devscripts.

$ apt-get install pbuilder debootstrap devscripts

Now it should be possible to create a build environment with the following command.

$ sudo pbuilder create

But we want to build packages for different Linux distributions so we have to create a script called .pbuilderrc in our home directory.

COMPONENTS="main restricted universe multiverse"

: ${DIST:="$(lsb_release --short --codename)"}

: ${ARCH:="$(dpkg --print-architecture)"}

if [ -n "${ARCH}" ]; then

# include extra stuff
if [ -n "${EXTRA}" -a -f ~/.pbuilderrc.$EXTRA ]; then
 . ~/.pbuilderrc.${EXTRA}

With this modification it's possible to set some configuration values for a single Linux distribution or a PPA. We create a file called to build test packages before uploading the source files to


After this step we can create our build environment with the new options.

$ sudo DIST=lucid EXTRA=my-ppa pbuilder create

It's also possible to build 32Bit packages on a 64Bit system.

$ sudo DIST=lucid ARCH=i386 EXTRA=my-ppa pbuilder create

To build the package we have to do the following.

$ sudo DIST=lucid EXTRA=my-ppa pbuilder build my-package.dsc

Or we use the ARCH parameter.

$ sudo DIST=lucid ARCH=i386 EXTRA=my-ppa pbuilder build my-package.dsc

On a 64Bit system the results are available in the /var/cache/pbuilder/lucid-amd64-my-ppa/result/ directory.

Use local packages

To use the packages locally build we have to set up a local package repository. So install the needed packages dput and mini-dinstall.

$ sudo apt-get install dput mini-dinstall

Now we create a configuration file called .mini-dinstall.conf in our home directory.

architectures = all, i386, amd64, powerpc
archivedir = /var/cache/archive/
use_dnotify = 0
verify_sigs = 0
extra_keyrings = ~/.gnupg/pubring.gpg
mail_on_success = 0
archive_style = flat
poll_time = 10
mail_log_level = NONE


To upload the packages successfully to our local repository we have to set up dput. So we create a file called

method = local
incoming = /var/cache/archive/mini-dinstall/incoming
allow_non-us_software = 1
run_dinstall = 0
post_upload_command = mini-dinstall --batch
allow_unsigned_uploads = 1

It's time to create the directories and set the access rights.

$ sudo mkdir -p /var/cache/archive/mini-dinstall/incoming
$ sudo chown -R $USER /var/cache/archive/

After we successfully build a package we can upload it locally.

$ dput local my-package.changes

To use the local repository in our pBuilder environment we have to define it in the config file It should look like this.

OTHERMIRROR="deb file:///var/cache/archive $DIST/"

Verwandte Artikel