NAME¶
rpmbuild - Build RPM Package(s)
SYNOPSIS¶
rpmbuild -bSTAGE [options]
SPEC_FILE ...
rpmbuild -rSTAGE [options]
SOURCE_PACKAGE ...
rpmbuild -tSTAGE [options]
TAR_ARCHIVE ...
rpmbuild {--rebuild|--recompile} [options]
SOURCE_PACKAGE ...
DESCRIPTION¶
rpmbuild is used to build software packages in the RPM
format, in an automated and repeatable manner.
A package consists of an archive of files and meta-data
used to install and erase the archive files. The meta-data includes helper
scripts, file attributes, and descriptive information about the package.
Packages come in two varieties: binary packages, used to
encapsulate software to be installed, and source packages, containing the
source code and recipe necessary to produce binary packages.
OPERATIONS¶
-bSTAGE
Build STAGE from a spec file.
-rSTAGE
Build STAGE from a source RPM package.
-tSTAGE
Build
STAGE from a
tar(5) archive.
--rebuild, --recompile
Compatibility aliases for -ra.
Packages are built in four phases: parse, build, assembly and
cleanup. The middle two are further divided into stages, listed
below, which can be built separately. Building a STAGE means
executing all the preceding stages up to (and including) the one specified,
unless stated otherwise.
Assembly stages¶
The assembly stages produce packages and are the primary way of
interacting with rpmbuild. If in doubt, choose one of these.
a
Build both source and binary packages. This is not an
actual stage but a combination of b and s, with the difference
that packages built this way carry a "cookie" to indicate they came
from the same build. On success, the build directory is removed.
b
Build just the binary packages. On success, the build
directory is removed.
r
Build just the source package, checking for dynamic build
dependencies. Executes the %prep and %generate_buildrequires
stages before creating a package. See the DYNAMIC BUILD DEPENDENCIES
section for details.
s
Build just the source package. No build stages are
executed.
Build stages¶
The build stages produce the artifacts to be packaged, typically
by patching and compiling the sources, and installing the binaries into the
buildroot. These stages generally correspond to spec sections such as
%prep, %build or %install, but there are some which are
implicit.
Building these stages separately is generally only useful when
packaging new software in RPM format and/or troubleshooting. They are listed
below in the order of execution, with the corresponding spec section in
parenthesis where applicable.
p (%prep)
Unpack the sources and apply any patches.
d (%generate_buildrequires)
Check dynamic build dependencies and build the
buildreqs.nosrc.rpm package if any are missing. Don't build anything
else.
f (%conf)
Configure the sources. This generally involves the
equivalent of ./configure.
c (%build)
Compile the sources. This generally involves the
equivalent of make.
i (%install and %check)
Install the binaries into the build root. This generally
involves the equivalent of a make install and make check.
l
Do a "list check" - the %files section
from the spec file is macro expanded, and checks are made to verify that each
file exists. This requires a previous build up to the %install stage to
have taken place.
ARGUMENTS¶
SPEC_FILE
An RPM spec file.
SOURCE_PACKAGE
An RPM source package (with a .src.rpm
extension)
TAR_ARCHIVE
A
tar(5) archive, optionally compressed. To be
directly buildable with
rpmbuild, an archive must contain a spec file
either by the name
Specfile or one with a
.spec extension.
OPTIONS¶
--build-in-place
Build from locally checked out sources in the current
working directory. The build tree is set up as if %setup was used, but
%builddir/%buildsubdir points back to the current working
directory. %prep is skipped entirely.
--clean
Remove the build tree after the packages are made
(default).
--nobuild
Do not execute any build stages. Useful for testing out
spec files.
--nocheck
Do not execute %check build stage even if present
in spec.
--noclean
Do not execute %clean build stage even if present
in spec.
--nodebuginfo
Do not generate debuginfo packages.
--nodeps
Do not verify build dependencies.
--noprep
Do not execute %prep build stage even if present
in spec. This assumes there has been another rpmbuild run in which
%prep has been already executed.
--rmsource
Remove the sources after the build (may also be used
standalone, e.g. rpmbuild --rmsource foo.spec). Note that by
definition, NoSource and NoPatch files are not sources and so,
are not affected by this option.
--rmspec
Remove the spec file after the build (may also be used
standalone, e.g. rpmbuild --rmspec foo.spec).
--rpmfcdebug
Print debug information on file classification and
dependency generation.
--scm=SCM
Select the SCM to use with %autosetup, if
one is not set in the spec file. Note that not all values for SCM,
e.g., patch (the default) and gendiff, git, or
quilt work interchangeably with all other patches and options stated in
the %autosetup line, especially option -pN.
--short-circuit
Skip straight to specified stage (i.e., skip all stages
leading up to the specified stage). Only valid with -bc, -bi,
and -bb. Useful for local testing only. Packages built this way will be
marked with an unsatisfiable dependency to prevent their accidental use.
--with OPTION
Enable configure OPTION for build.
--without OPTION
Disable configure OPTION for build.
See rpm-common(8) for the options common to all
operations.
DYNAMIC BUILD DEPENDENCIES¶
When the %generate_buildrequires stage runs and some of the
newly generated BuildRequires are not satisfied, rpmbuild creates an
intermediate source package ending in buildreqs.nosrc.rpm, which has
the new BuildRequires, and exits with code 11. This package can then be used
in place of the original source package to resolve and install the missing
build dependencies in the usual way, such as with
dnf-builddep(8).
Multiple layers of dynamic build dependencies may exist in a spec
file; the presence of specific BuildRequires on the system may yield new
BuildRequires next time a build is performed with the same source package.
The easiest way to ensure that all dynamic build dependencies are satisfied
is to run the -br option, install the new dependencies of the
buildreqs.nosrc.rpm package and repeat the whole procedure until
rpmbuild no longer exits with code 11.
If the -br option is coupled with --nodeps, exit
code 11 is always returned and a buildreqs.nosrc.rpm package is
always created.
ENVIRONMENT¶
RPM_BUILD_NCPUS
Overrides autodetection for the number of CPUs to use for
parallelized sections of the build.
EXIT STATUS¶
On success, 0 is returned, a nonzero failure code otherwise.
Packages with a %generate_buildrequires section will return
with code 11 when there are unmet DYNAMIC BUILD DEPENDENCIES.
EXAMPLES¶
rpmbuild --rebuild hello-1.0-1.src.rpm
Build binary and source packages from the
hello-1.0-1.src.rpm source package.
rpmbuild -bb --nocheck --with openssl hello.spec
Build binary packages from the hello.spec spec
file, skipping the %check stage if present and enabling support for
openssl build conditional (assuming one is specified in the
spec).
rpmbuild -ta hello-2.0.tar.gz
Build binary and source packages from the compressed
hello-2.0.tar.gz tarball, assuming the archive contains a legitimate
spec file (see TAR_ARCHIVE for details).
rpmbuild -bc hello.spec
Build hello.spec up to and including the
%build stage, ie. without producing actual packages.
rpmbuild -bi --short-circuit hello.spec
Only execute the %install stage of
hello.spec, skipping all previous stages. This assumes a preceding run
of at least up to the %build stage, see previous example. Useful to
avoid full rebuilds when working on the %files section of a
package.