---
name: "xdeb"
section: "1"
platform: "linux"
package: "xdeb"
version: "0.6.7"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/xdeb"
---

# xdeb(1)

build a set of Debian packages

## NAME

**xdeb** – build a set of Debian packages

## SYNOPSIS

**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**\] *package*.deb \[...\]

## DESCRIPTION

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 tool.

**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)](/apt-get/8.md). 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 relevant machine/chroot.

e.g.\
 deb \[arch=armel\] http://ports.ubuntu.com/ubuntu-ports maverick main universe\
 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.

## OPTIONS

- **-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.

- **-****-apt-source**

  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-apt**

  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: prefer\_apt.

- **-****-only-explicit**

  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.

- **-f**,

  **-****-force-rebuild** 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.

- **-****-debug**

  Emit extra messages useful for debugging build sequencing. Configuration file option: debug.

- **-****-generate-graph**

  Emit dot graph version of debug build dependency information. See README-graph for further details. Configuration file option: generate-graph.

- **-****-generate-compact-graph**

  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.

- **-****-parallel**

  Use as many jobs as there are CPUs on the system. Configuration file option: parallel.

- **-****-no-clean-after**

  Do not clean each source tree after building.

- **-****-no-lintian**

  Do not run [lintian(1)](/lintian/1.md) 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).

- **-****-sequence**

  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: sequence.

- **-****-list-builds**

  List all current successful builds for the selected *architecture* in the build directory. Configuration file option: list\_builds.

- **-****-all**

  Build all packages in the working tree. Configuration file option: all.

- **-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.

- **-****-no-native-import**

  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.

- **-****-convert**

  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 be converted.

- **-****-no-convert-install**

  Normally, **xdeb** **-****-convert** will install packages after converting them for use on the native architecture. This option suppresses that behaviour.

## FILES

- */etc/xdeb/xdeb.cfg*

  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.

- *.xdeb*, *xdeb.cfg*

  Read from the current directory as a per-project configuration file. You may supply additional configuration files using the **-C** option.

## CONFIGURATION FILE

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:

- directory

  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.

- debian\_symlink

  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.

## AUTHORS

**xdeb** was originally written by Colin Watson ⟨cjwatson@canonical.com⟩ for Chromium OS, and then renamed to **xdeb** for more general use.

**xdeb** is copyright © 2009, 2010 The Chromium OS Authors, © 2010 Canonical Ltd.
