Difference between revisions of "RPM Packaging Process"

From CDOT Wiki
Jump to: navigation, search
(Created page with 'RPM packages are built from the source files plus a spec file, using the ''rpmbuild'' program. {{Admon/caution|Do Not Build as Root|Always build RPM packages as a regular, non-r…')
 
(Examining Existing SRPMs)
Line 35: Line 35:
  
 
# Download the source code for an existing RPM: <code>yumdownloader --source ''nameofpackage''</code>
 
# Download the source code for an existing RPM: <code>yumdownloader --source ''nameofpackage''</code>
# Install that package
+
# Install that downloaded SRPM: <code>rpm -i ''nameofpackage''*.src.rpm</code>
* Taking a look at existing source RPMS (useful as examples)
+
#* Source will be in <code>~/rpmbuild/SOURCES</code>
** Installing
+
#* Spec file will be in <code>~/rpmbuild/SPECS</code>
*** <code>yumdownloader --source <i>nameofpackage</i></code>
+
* Examine the specfile: <code>cd ~/rpmbuild/SPECS; less ''nameofpackage''.spec</code>
*** <code>rpm -i <i>nameofpackage</i>.src.rpm</code>
+
* To build from source using the specfile:
*** Source will be in ~/rpmbuild/SOURCES and specfile will be in ~/rpmbuild/SPECS
+
*# Build all (binary RPMS plus SRPMS): <code>rpmbuild -ba ''nameofpackage''.spec</code>
** Examine the specfile
+
*# Build just the spec file: <code>rpmbuild -bs ''nameofpackage''.spec</code>
** Rebuild on the local machine -- takes a source RPM (SRPM) as input, produces binary and source RPMs as output
+
 
*** <code>rpmbuild --rebuild <i>nameofpackage</i>.src.rpm</code>
+
== Rebuild from SRPMS ==
** Building from the spec file -- takes a specfile and source code as input, produces binary and source RPMs as output
+
 
*** <code>cd ~/rpmbuild/SPECS; rpmbuild -ba <i>nameofpackage</i>.spec</code>
+
Instead of installing an SRPM and building from the spec file, it is possible to build the binary RPMs and SRPM directly from an SRPM:
 +
 
 +
rpmbuild --rebuild ''nameofpackage''*.src.rpm

Revision as of 23:27, 10 January 2011

RPM packages are built from the source files plus a spec file, using the rpmbuild program.

Stop (medium size).png
Do Not Build as Root
Always build RPM packages as a regular, non-root user. Building as a root user is unnecessary and may cause unintended side effects, including damaging your system.

Setting up the Packaging Environment

Needed Packages

Install with yum:

  • rpm-build
  • rpmdevtools
  • rpmlint
  • yum-utils
Idea.png
"Fedora Packager" group
Many of these tools can be installed at once by installing the "Fedora Packager" group: yum groupinstall "Fedora Packager"

Setting up the RPM tree

The directories used by the rpm build tools can be defined as RPM macros. A script is provided in the rpmdevtools package to create a set of personal build directories and create the appropriate entries in the ~/.rpmmacros file:

rpmdev-setuptree

The directories created are:

  • ~/rpmbuild/SOURCES - for source code (tarballs/zip archives and patches)
  • ~/rpmbuild/SPECS - for the spec file
  • ~/rpmbuild/SRPMS - for the resulting source RPMs
  • ~/rpmbuild/RPMS - for the resulting binary RPMs
  • ~/rpmbuild/BUILD - directory used to perform the build
  • ~/rpmbuild/BUILDROOT - contains a fake root directory into which the built files are "installed" prior to being packaged

Examining Existing SRPMs

A great place to start when learning to build RPMs is to examine some existing SRPMs.

  1. Download the source code for an existing RPM: yumdownloader --source nameofpackage
  2. Install that downloaded SRPM: rpm -i nameofpackage*.src.rpm
    • Source will be in ~/rpmbuild/SOURCES
    • Spec file will be in ~/rpmbuild/SPECS
  • Examine the specfile: cd ~/rpmbuild/SPECS; less nameofpackage.spec
  • To build from source using the specfile:
    1. Build all (binary RPMS plus SRPMS): rpmbuild -ba nameofpackage.spec
    2. Build just the spec file: rpmbuild -bs nameofpackage.spec

Rebuild from SRPMS

Instead of installing an SRPM and building from the spec file, it is possible to build the binary RPMs and SRPM directly from an SRPM:

rpmbuild --rebuild nameofpackage*.src.rpm