NAME¶
sbuild - build debian packages from source
SYNOPSIS¶
sbuild [
-h|
--help |
-V|
--version]
[
-v|
--verbose |
-q|
--quiet]
[
-D|
--debug] [
-A|
--arch-all]
[
--archive=archive]
[
-d|
--dist=distribution]
[
-c|
--chroot=chroot] [
--arch=architecture]
[
--build=architecture] [
--host=architecture]
[
-s|
--source] [
--force-orig-source]
[
--make-binNMU=changelog-entry]
[
--binNMU=NMU-version]
[
--append-to-version=string]
[
--add-depends=dependency]
[
--add-conflicts=dependency]
[
--add-depends-arch=dependency]
[
--add-conflicts-arch=dependency]
[
--add-depends-indep=dependency]
[
--add-conflicts-indep=dependency]
[
-m|
--maintainer=maintainer]
[
-e|
--uploader=uploader]
[
-k|
--keyid=key-id] [
-j|
--jobs=n]
[
--debbuildopt=option] [
--debbuildopts=options]
[
--dpkg-source-opt=options]
[
--dpkg-source-opts=options]
[
-p|
--purge=purge-mode]
[
--purge-build=purge-mode]
[
--purge-deps=purge-mode]
[
--purge-session=purge-mode] [
-b|
--batch]
[
-n|
--nolog] [
--run-lintian] [
--no-run-lintian]
[
--lintian-opt=options] [
--lintian-opts=options]
[
--run-piuparts] [
--no-run-piuparts]
[
--piuparts-opt=options] [
--piuparts-opts=options]
[
--piuparts-root-arg=options]
[
--piuparts-root-args=options]
[
--pre-build-commands=string]
[
--chroot-setup-commands=string]
[
--chroot-cleanup-commands=string]
[
--post-build-commands=string]
[
--log-external-command-output] [
--log-external-command-error]
[
--setup-hook=hook-script]
[
--build-dep-resolver=resolver]
[
--resolve-alternatives|
--no-resolve-alternatives]
[
PACKAGE[
.dsc]]
DESCRIPTION¶
sbuild rebuilds Debian binary packages from the corresponding Debian
source, installing any missing source dependencies. The build takes place in a
dedicated clean build environment (chroot), rather than on the host system.
sbuild can fetch the Debian source over a network, or it can use locally
available sources.
sbuild is given a packages to process as the argument
PACKAGE[.dsc]. This
argument is in the form of either a debianized package source directory, a
source package name along with a version in the form
package_version,
or a .dsc file. If no arguments are given, the current working directory is
passed as an argument.
For arguments given as source directories, dpkg-source is first run to produce a
source .dsc file. Then, the package is built using the .dsc produced. For
arguments in the form
package_version, apt is used to download the
source package. For arguments given as a .dsc file, sbuild builds the source
packages directly. For .dsc files in remote locations, the source packages are
downloaded first, then built.
It is also possible to run external commands with sbuild. See the section
EXTERNAL COMMANDS for more on this.
sbuild mails the build logs to a user. It is configured by the
configuration files
/etc/sbuild/sbuild.conf and
~/.sbuildrc. An
example sbuildrc is available in
/usr/share/doc/sbuild/examples/example.sbuildrc.
You can build either using a local package with its .dsc file or a remote one by
specifying an explicit dpkg version.
Note: When using schroot (recommended), the chroot having the name (or alias) of
the specified distribution will be used; schroot uses a chroot named
$distribution-$arch-sbuild,
$distribution-sbuild,
$distribution-$arch or
$distribution, in that order of
preference. The -c or --chroot option may be used to override the chroot to be
used. When configured to use sudo (deprecated), sbuild will look for a symlink
to a chroot with the same name as the distribution specified. sbuild will use
a symlink to the chroot located in
/etc/sbuild/chroot/$distribution, or
must be run in a directory containing a
chroot-$distribution symlink to
the chroot (not recommended, but done for backward compatibility).
OPTIONS¶
- -h, --help
- Display this manual.
- -V, --version
- Print version information.
- --add-depends=dependency
- --add-conflicts=dependency
- --add-depends-arch=dependency
- --add-conflicts-arch=dependency
- --add-depends-indep=dependency
- --add-conflicts-indep=dependency
- These options add a build dependencies to the source
package being built, in addition to the build dependency information
specified in debian/control. These dependencies will be concatenated
directly to the Build-Depends, Build-Conflicts, Build-Depends-Arch,
Build-Conflicts-Arch, Build-Depends-Indep and Build-Conflicts-Indep
dependencies, respectively. The options may be used any number of times to
add multiple dependencies. The format is identical to the format used in
debian/control.
- --arch=architecture
- Build using the architecture specified. A chroot named
$distribution-$arch-sbuild or $distribution-arch is searched
for, in that order of preference. The chroot must be installed and
configured appropriately to build as that architecture, e.g. using
personality=linux32 to build i386 packages on an amd64 system. Note
that this option is equivalent to "--host=architecture
--build=architecture".
- --host=architecture
- Build using the host architecture specified. A chroot named
$distribution-$arch-sbuild or $distribution-arch is searched
for, in that order of preference. This option is only useful for
cross-building when used together with --build.
- --build=architecture
- Build using the build architecture specified. This option
is only useful for cross-building when used together with --host.
- -A, --arch-all
- Also build Architecture: all packages, i.e. use
dpkg-buildpackage -b instead of -B.
- --no-arch-all
- Do not build Architecture: all packages, i.e. use
dpkg-buildpackage -B instead of -b. This option is the opposite of
--arch-all.
- -b, --batch
- Operate in batchmode, i.e. write a build-progress file
during execution and files on shutdown to facilitate a clean restart.
- -c, --chroot=chroot
- Use the specified chroot. If not specified, the default is
the first of $distribution-$arch-sbuild,
$distribution-sbuild, $distribution-$arch or
$distribution that exists.
- -d, --dist=distribution
- Fetch source packages from specified distribution.
- --archive=archive
- Communicate with specified archive.
- -D, --debug
- Enable debug output.
- --apt-clean
- --no-apt-clean Run (or do not run) apt-get clean in
the chroot before executing the build, overriding the default
setting.
- --apt-update
- --no-apt-update Run (or do not run) apt-get update
in the chroot before executing the build, overriding the default
setting.
- --apt-upgrade
- --no-apt-upgrade Run (or do not run) apt-get upgrade
in the chroot before executing the build, overriding the default
setting.
- --apt-distupgrade
- --no-apt-distupgrade Run (or do not run) apt-get
distupgrade in the chroot before executing the build, overriding the
default setting.
- -m, --maintainer=maintainer
- Specify the identity to use for GPG signing packages, and
also used as the maintainer for binary NMUs. This does not normally
require setting (it defaults to the uploader).
- -e, --uploader=uploader
- Passed to dpkg-genchanges and is used to set the
Changed-by: field in the .changes file(s).
- -k, --keyid=key-id
- Passed to dpkg-genchanges and is used to set the key to
sign the .changes file(s). Default is not using any key.
- -j, --jobs=n
- Number of jobs to run simultaneously. Passed through to
dpkg-buildpackage.
- --debbuildopt=option
- Pass the specified option directly to
dpkg-buildpackage.
- --debbuildopts=options
- Pass the specified options directly to dpkg-buildpackage.
The options should be separated by spaces. If any options contain spaces,
use --debbuildopt instead.
- --dpkg-source-opt=options
- Pass the specified options directly to dpkg-source. This is
only used when creating a source package from a Debianized source
directory.
NOTE: The '-b' option will always be passed to
dpkg-source.
- --dpkg-source-opts=options
- Extra options to be appended to existing options passed to
dpkg-source.
- --mail-log-to=email-address
- Send the build log to the specified email address. This
overrides the $mailto configuration option.
- -n, --nolog
- Do not create a package log file in the $log_dir
directory and no build log file, but print everything to stdout. Also do
not send any log mails.
- -p, --purge=purge-mode
- Convenience option to set purge-mode for build
directory, build dependencies and session.
- --purge-build=purge-mode
- purge-mode determines if the build directory will be
deleted after a build. Possible values are always (default),
never, and successful.
- --purge-deps=purge-mode
- purge-mode determines if the build dependencies will
be removed after a build. Possible values are always (default),
never, and successful.
- --purge-session=purge-mode
- Purge the schroot session following a build. This is useful
in conjunction with the --purge-build and --purge-deps
options when using snapshot chroots, since by default the snapshot will be
deleted. Possible values are always (default), never, and
successful.
- -s, --source
- Also build source package, i.e. use dpkg-buildpackage
without -B.
- --no-source
- Don't build source package, i.e. use dpkg-buildpackage with
-B. This option is the opposite of --source.
- --force-orig-source
- When used with in conjunction with -s, this option forces
the inclusion of the orig.tar.gz file in the generated .changes file, even
in cases where it would not normally be included, i.e. use
dpkg-buildpackage -sa.
- --use-snapshot
- Installs the latest snapshot gcc compiler from the
gcc-snapshot package, and alters the build environment to use the
snapshot compiler for the build.
- -v, --verbose
- Be verbose, i.e. all information goes to stdout as well as
to the log files.
- -q, --quiet
- Be quiet. This is the opposite of --verbose.
- --make-binNMU=changelog-entry
- With this option, sbuild will create a new changelog
entry in debian/changelog of every package built. The version number will
be in the format for binary-only NMUs (see --binNMU); the maintainer is
set to the maintainer name configured for sbuild.
changelog-entry will be used as the changelog entry following
“Binary-only non-maintainer upload for ARCH -- no source
changes”. Please note that the versions in the
PACKAGE_VERSION[.dsc] arguments still have to be the unmodified
(non-NMU ones) so that the sources can be found. The version number in log
files and mails will be modified by sbuild automatically.
- --binNMU=NMU-version
- The version number of the binary NMU. This should be used
in conjunction with --make-binNMU. version is a single number for
the (+b n) format used for binary NMUs.
- --append-to-version=string
- This option is similar to --make-binNMU except that it
allows the user to specify an arbitrary string to be appended to the
version number (immediately before the '+' in the Debian revision if
--make-binNMU is also provided).
- --run-lintian
- Run lintian after a successful build.
- --no-run-lintian
- Don't run lintian after a successful build. If sbuild is
configured to run lintian by default, this option will prevent lintian
being run.
- --lintian-opt=options
- Run lintian with the specified options.
- --lintian-opts=options
- Append extra options to existing options passed to
lintian.
- --run-piuparts
- Run piuparts after a successful build.
- --run-piuparts
- Don't run piuparts after a successful build. If sbuild is
configured to run piuparts by default, this option will prevent piuparts
being run.
- --piuparts-opt=options
- Run piuparts with the specified options.
- --piuparts-opts=options
- Append extra options to existing options passed to
piuparts.
- --piuparts-root-arg=options
- Add an argument that is used to launch piuparts as root. If
no arguments are specified, piuparts will be launched via sudo.
- --piuparts-root-args=options
- Add arguments that are used to launch piuparts as root. If
no arguments are specified, piuparts will be launched via sudo.
- --pre-build-commands=string
- Run this command before a build starts. This option can be
used multiple times to add multiple commands.
- --chroot-setup-commands=string
- Run these commands when a chroot is setup, before deps are
installed. This option can be used multiple times to add multiple
commands.
- --chroot-cleanup-commands=string
- Run these commands when a chroot is cleaned up, before
build directory is purged. This option can be used multiple times to add
multiple commands.
- --post-build-commands=string
- Run this command after a successful build. This option can
be used multiple times to add multiple commands.
- --log-external-command-output
- Write output from external commands to the build log.
- --log-external-command-error
- Write error output from external commands to the build
log.
- --setup-hook=hook-script
DEPRECATED
- This option is deprecated. Use of this option will add
hook-script to the external commands to run via
chroot-setup-commands.
- --build-dep-resolver=resolver
- Use the specified resolver to handle selecting the build
dependencies. Supported resolvers are apt (the default),
aptitude and xapt. The apt resolver is the most appropriate
resolver for most users, for building for unstable, stable and other
distributions. If alternative build dependencies are used (excluding
architecture restrictions), only the first alternative will be used; the
others will be ignored. The aptitude resolver is very similar, but smarter
and slower, and it will consider all alternatives by default; it is suited
to more complex situations, such as building packages for the experimental
distribution, where packages need installing from multiple suites (
unstable and experimental). Due to performance and other
issues (bug #139615), aptitude is not recommended for use by default. The
xapt resolver is intended only for cross-building, and is a temporary
transitional feature which will be removed following the complete
introduction of multi-arch support.
- --resolve-alternatives
- Allow the use of alternatives in Build-Depends,
Build-Depends-Arch and Build-Depends-Indep. This is the default for the
aptitude dependency resolver.
- --no-resolve-alternatives
- Do not allow the use of alternatives in Build-Depends,
Build-Depends-Arch and Build-Depends-Indep. Note that alternatives for the
same package (e.g. different versions) are still allowed. This is the
default for the apt and xapt dependency resolvers.
EXTERNAL COMMANDS¶
Support to run external commands during an sbuild run is provided. A set of
external commands can be run at various stages of a build. Providing commands
to run is done through the appropriate options given on the command line and
through the use of the configuration files. In the configuration file, the
list of commands to run are placed in a hash of arrays of arrays of strings
corresponding to the commands to run.
Here's an example of how to edit the configuration files to run "foo"
and "bar" with arguments before a build starts.
$external_commands = {
"pre-build-commands" => [
['foo', 'arg1', 'arg2'],
['bar', 'arg1', 'arg2', 'arg3'],
],
};
Hash keys for commands to run at other stages have the same name as their
corresponding command-line option name without the preceding '--'.
Here's an example of how to do the same with the previous example, except using
the
--pre-build-commands option.
$ sbuild \
--pre-build-commands='foo arg1 arg2' \
--pre-build-commands='bar arg1 arg2 arg3'
Besides running external commands, sbuild can also detect the use of certain
percent escapes given as arguments. These are used to allow for a command to
be supplied with a certain argument depending on the escape given. For
example, it could be possible to have an external command be given the path to
a .changes file.
Here is a listing of keywords and a description of what it's converted to.
- %%
- Used to escape a '%'.
- %d, %SBUILD_DSC
- These escapes are converted to the absolute path to a
package's .dsc file.
- %c, %SBUILD_CHANGES
- These escapes are converted to the absolute path to a
package's source .changes file.
Percent escapes are only substituted when an appropriate value is defined for
them. At other times, it is left unchanged. For example, a .changes file is
only defined at the end of a build, so using
%c will only be
substituted for post-build-commands.
Here's an example of using an escape to run a program foo on a .changes file
after a build is done.
$ sbuild --post-build-commands \
'foo %SBUILD_CHANGES'
One final note, external commands are processed in the order they are given.
Also, the commands given in a configuration file are processed first, then the
commands given through the command line options.
LOCAL ARCHIVE¶
The apt and aptitude resolvers create a local archive for installing build
dependencies. This is an internal implementation detail of the build
dependency resolver, which is not user configurable, and is indended to be
entirely transparent to the user. The local archive exists only transiently
during the package build. It does not persist across builds, and it is only
used to store the dummy dependency packages created for a single build.
The dependency resolvers do the following:
- •
- Create a dummy dependency package. This contains the
Build-Depends (and optionally Build-Depends-Arch and Build-Depends-Indep)
as Depends, and Build-Conflicts (and optionally Build-Conflicts-Arch and
Build-Conflicts-Indep) as Conflicts.
- •
- Install the dummy dependency package into the local
archive,
- •
- Generate the Packages, Sources and
Release files.
- •
- Write a sources.list file for the local archive into
/etc/apt/sources.list.d.
- •
- Inject the lists directly into /var/lib/apt/lists.
This step is to save running updating all apt sources which is undesirable
during a build; apt and aptitude do not support updating a single source
at present.
- •
- Regenerate the apt caches to ensure everything is in
sync.
- •
- Install the dummy dependency package with apt or aptitude;
the dummy package is pulled from the local apt archive, while all its
dependencies are pulled from the regular configured apt sources.
At the end of the build, the local archive is removed, along with the rest of
the build tree.
ENVIRONMENT VARIABLES¶
The following environment variables are used by
sbuild:
- HOME
- The home directory of the user.
- LOGNAME
- Used in lockfiles.
FILES¶
- /etc/sbuild/sbuild.conf
- Configuration, maintained by the system administrator. This
may be used to override the defaults.
- /etc/sbuild/chroot
- Directory containing symbolic links to chroots. This is
only used for sudo chroot access; schroot access uses the schroot chroot
configuration.
- ~/.sbuildrc
- User-specific configuration.
- /var/lib/sbuild
- Build trees, archive signing keys, build statistics and
lock files.
AUTHORS¶
Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>.
sbuild is based on debbuild, written by James Troup
<james@nocrew.org> and has been modified by
Ben Collins <bcollins@debian.org>,
Ryan Murray <rmurray@debian.org>,
Francesco Paolo Lovergine <frankie@debian.org>,
Michael Banck <mbanck@debian.org>, and
Roger Leigh <rleigh@debian.org>
COPYRIGHT¶
Copyright © 1998-2000 Roman Hodek <roman@hodek.net>
Copyright © 1998-1999 James Troup <troup@debian.org>
Copyright © 2003-2006 Ryan Murray <rmurray@debian.org>
Copyright © 2001-2003 Rick Younie <younie@debian.org>
Copyright © 2003-2004 Francesco Paolo Lovergine <frankie@debian.org>
Copyright © 2005 Michael Banck <mbanck@debian.org>
Copyright © 2005-2009 Roger Leigh <rleigh@debian.org>
SEE ALSO¶
sbuild.conf(5),
sbuild-abort(1),
sbuild-adduser(8),
sbuild-apt(1),
sbuild-checkpackages(1),
sbuild-createchroot(8),
sbuild-distupgrade(1),
sbuild-hold(1),
sbuild-setup(7).
sbuild-shell(1),
sbuild-unhold(1),
sbuild-update(1),
sbuild-upgrade(1),
schroot(1),