xdeb — build a set of Debian packages
xdeb [-C file] [-a architecture] [-b builddir] [-d destdir]
[--apt-source] [--prefer-apt] [--only-explicit] [-f] [--debug]
[--generate-graph] [--generate-compact-graph] [--no-clean-after]
[--no-lintian] [--sequence] [--list-builds] [--all] [-x package]
[--no-native-import] package [...]
xdeb --convert [-C file] [-a architecture] [--no-convert-install]
Traditionally, Debian-format packages (as used in Debian, Ubuntu, and so
on) have been built natively. However it is often useful to be able to
cross-build packages, and sometimes whole systems.
xdeb provides this functionality in a convenient form by providing build-
ordering, cross-dependency satisfaction, and cross-building all in one
xdeb takes a set of target package names or names of directories
containing packages, and builds those packages for the specified
architecture (or for the native architecture if unspecified), in an
appropriate sequence. As builds complete, it will install packages
necessary to satisfy build-dependencies for subsequent stages. When
necessary, it will convert foreign-architecture binary packages to
packages that can be installed safely on the native architecture without
conflicts. When cross-compiling, it checks to ensure that programs were
not accidentally built to run on the build architecture, which is a
common failure mode.
xdeb fetches source code using apt-get(8). It defaults to using the
build-system APT configuration, so you should ensure that a repository
containing packages of the target architecture is specified on the
deb [arch=armel] http://ports.ubuntu.com/ubuntu-ports maverick main
deb-src http://ports.ubuntu.com/ubuntu-ports maverick main universe
Multiple repositories can be specified and APT pinning and release-
default options used to provide preferred source repositories. xdeb will
respect APT policy.
-C, --config-file file
Read file as an additional configuration file.
-a, --architecture architecture
Build packages for architecture rather than for the native
architecture. Configuration file option: architecture.
-b, --build-directory builddir
Build packages in builddir rather than in the current directory.
This option may be given multiple times; in that case, the first
builddir will be used for packages fetched using apt-get and as the
default destination directory, but otherwise all supplied
directories will be scanned for packages and treated equivalently.
Configuration file option: builddirs.
-d, --dest-directory destdir
Leave successfully built packages in destdir rather than in the
first build directory. Configuration file option: destdir.
Fetch source code using apt-get. If this is not specified, then
only packages in any builddir will be built, and only those
packages will be used to expand dependencies for build sequencing.
Configuration file option: apt_source.
Prefer source packages available using apt-get, even if an older
version of the package is already available in the build directory.
This option implies --apt-source. Configuration file option:
Only build packages explicitly listed on the command line. For all
other packages, import native builds rather than attempting to
cross-compile them. This may produce less complete builds in some
cases, but if the native repository is reasonably complete then it
greatly reduces the number of builds that need to be run and it
avoids many problems with build-dependency loops.
Rebuild packages even if the source code appears to be unchanged.
xdeb relies on the version number in debian/changelog to detect
changes. Configuration file option: force_rebuild.
Emit extra messages useful for debugging build sequencing.
Configuration file option: debug.
Emit dot graph version of debug build dependency information. See
README-graph for further details. Configuration file option:
Emit dot graph version of debug build dependency information, but
without the intermediate binary dependencies, in order to produce a
more readable graph. See README-graph for further details.
Configuration file option: generate-compact-graph.
Use as many jobs as there are CPUs on the system. Configuration
file option: parallel.
Do not clean each source tree after building.
Do not run lintian(1) to check whether cross-compiled packages were
built for the requested architecture. This can speed up builds
when you are sure that all packages are cross-safe, but is
otherwise not recommended. Configuration file option: lintian
(defaults to true).
Just show the build sequence, but don't actually build anything.
Only packages whose names are suffixed with ‘*’ will be built; the
rest are listed for information only. Configuration file option:
List all current successful builds for the selected architecture in
the build directory. Configuration file option: list_builds.
Build all packages in the working tree. Configuration file option:
-x, --exclude package
Exclude package from the list of packages computed by --all. It
will only be built if required to satisfy dependencies.
Configuration file option: exclude.
Normally, xdeb will import native builds of certain packages rather
than attempting to cross-build them. This option disables that
behaviour. Use this when working on fixing cross-builds of the
packages in question.
Rather than building, convert a set of foreign-architecture binary
packages to packages that can be installed safely on the native
architecture without conflicts, as though they had just been built
by xdeb. This silently ignores any packages that cannot usefully
Normally, xdeb --convert will install packages after converting
them for use on the native architecture. This option suppresses
Site-wide configuration file. xdeb will also look for xdeb.cfg in
the directory alongside its own executable, to support running from
its own build directory.
Read from the current directory as a per-project configuration
file. You may supply additional configuration files using the -C
The configuration file is a ConfigParser-format (a.k.a. "INI file") file.
Recognised sections are Lists and Options. The Lists section lists
specific packages that are exceptions from various built-in rules; see
the supplied site-wide configuration file for examples. The Options
section may be used to provide defaults for any values not explicitly set
on the command line.
It is also possible to have a xdeb.cfg configuration file in a directory
containing an individual package. Such configuration files may include a
Package section, with the following optional keys:
Relative path to the directory that really contains the package's
files. This directory will need to contain a debian subdirectory
in order to build properly (which may be created due to another
option in this section). This option is useful when package files
are fetched from another repository, and some extra work is needed
to put the debian subdirectory in place.
Create debian as a symbolic link to the value of this option.
ADVICE ON OPERATION
Generally speaking, you can re-run xdeb on failures and it will start
again with the last package it tried to build. If the first builddir and
destdir are the same, then xdeb will not notice that a package had not
been successfully built in a previous run if it contained objects for the
wrong architecture, or if it failed to run dpkg-cross or dpkg -i. In
this case, you may need to remove the .changes file for that package
before trying again. We recommend that destdir be set to a directory
which is not a build directory.
xdeb was originally written by Colin Watson ⟨firstname.lastname@example.org⟩ for
Chromium OS, and then renamed to xdeb for more general use.
xdeb is copyright © 2009, 2010 The Chromium OS Authors, © 2010 Canonical