The Debian Packaging Tools Hierarchy
From low-level to high-level:
LOCAL CHROOT GIT
----- ------ ---
debhelper
^
|
|
dpkg-buildpackage <-------+
^ |
| |
| |
debuild cowbuilder
^
|
|
pdebuild <---- git-pbuilder
^ ^
| |
| |
pbuild gbp buildpackage
Quick Start
There are three main ways to build a Debian package:
Use
dpk-buildpackage
.Use
pbuild
.Use
gbp buildpackage
.
Using dpk-buildpackage
The simplest of the three package build tools, and what the other tools
are built on, is dpk-buildpackage
. To build:
# dpkg-buildpackage --unsigned-source --unsigned-changes
Pros:
Simple to run.
Allows the changing of source code without git commits or quilt patches(??) (with native packages only??).
Cons:
- Requires all the packages listed in the Build-Depends field of the control file to be installed on the system where run.
Using pbuild
Later.
debhelper
debhelper
is suite of programs each of which does a small part of the
Debian packaging build. You rarely run these explicitly, but it is
important to know about them as you may need to use some of them in your
Debian rules
file.
For a list of all the debhlper commands see the debhelper
man page.
dpkg-buildpackage
The dpkg-buildpackage
program builds the source and binary packages
using dpkg-source
and the debhelper
commands. To build package:
# We like to sign the source and binary package later:
dpkg-buildpackage --unsigned-source --unsigned-changes
# To build the binary backage only (no source)
dpkg-buildpackage -b --unsigned-source --unsigned-changes
Note that running dpkg-buildpackage
will leave new files in your
Debian package directory.
The system on which you run dpkg-buildpackage
must have all the packages
listed in the Build-Depends
field of the control
file or the build
will fail. You can avoid this requirement by using one of the higher-level
packaging tools such as debuild
or gbp buildpackage
.
Changes to the code
If you want to test package building, and you are building a native
package, it is usually easiiest to use dpkg-buildpackage
. Wth the
higher-level packaging tools, changing the source code will cause the
package biuld to stop and ask you to commit your changes.
For non-native packages, ....
debuild
The debuild
program calls dpkg-buildpackage
, lintian
, and then signs
the package using debsign
. Options at the end are passed to
dpkg-buildpackage
. The following are essentially equivalent:
# debuild --no-lintian -us -uc
# dpkg-build-package --unsigned-source --unsigned-changes
(For some reason debuild
does not like --unsigned-source
and
--unsigned-changes
, so use -us
and -uc
instead).
cowbuilder
(chroot)
The cowbuilder
utility is part of pbuilder
and is used to build a
Debian package inside a chroot. This gives a "clean-room" Debian package
build. For this to work, each Debian distribution must have a
chroot at
/var/cache/pbuilder/base-<distribution>.cow
, for example,
/var/cache/pbuilder/base-stretch.cow
.
Note that to run cowbuilder
you must have sudo privileges. For example,
the following line in //etc/sudoers
grants all users belonging to the
root
group permission to run sudo cowbuilder
%root ALL = NOPASSWD: /usr/sbin/cowbuilder
See also the man page for pbuilderrc
.
pdebuild
(chroot)
Wrapper around pbuilder
. Here is an example of its use where
we invoke pbuilder
using cowbuilder
pdebuild --pbuilder cowbuilder --buildresult .. \
--debbuildopts -i -- \
--basepath /var/cache/pbuilder/base-stretch.cow \
--distribution stretch --configfile /etc/pbuilder/stretch
This is roughly equivalent to
# sudo cowbuilder build ... <some .dsc file>
pbuild
The pbuild
is a convenience wrapper around pdebuild
. For example,
pbuild stretch
calls
pdebuild --pbuilder cowbuilder --buildresult .. \
--debbuildopts -i -- \
--basepath /var/cache/pbuilder/base-stretch.cow \
--distribution stretch --configfile /etc/pbuilder/stretch
git-pbuilder
(GIT)
The git-pbuilder
program is meant to be called by gbp buldpackage
and
wraps pdebuild
tpically
gbp buildpackage
(GIT plus CHROOT)
The gbp
suite of commands are used to maintain Debian packages in
git. In particular, we use gbp buildpackage
to build a Debian package
inside a git repository containing the package source code. Invoking
gbp buildpackage
does several things including calling one of the
lower-level package bulding tools such as debuild
or cowbuilder
.
The .gbp.conf
configuration file
You configure gbp
by adding settings to .gbp.conf
in your home
directory. For example, the following
[DEFAULT]
builder = git-pbuilder
cleaner = fakeroot debian/rules clean
pristine-tar = True
[buildpackage]
export-dir = ../build-area/
tarball-dir = ../tarballs/
[import-orig]
dch = False