Introduction
RPM (RPM Package Manager) is a
popular utility for installing software on Unix-like systems,
particularly Red Hat Linux. The name RPM variously refers to
the
.rpm file format.
I
t is an open packaging system
available for anyone to use. It allows users to take source code for
new software and package it into source and binary form such that
binaries can be easily installed and tracked and source can be
rebuilt easily. It also maintains a database of all packages and
their files that can be used for verifying packages and querying for
information about files and/or packages.
Design Goals
RPM provides the capability to
install an entire application with a single command, to track the
files it put on the system, and to remove those files by using
another single command.
Make it easy to get packages on and
off the system.
Make
it easy to verify a package was installed correctly.
Make
it easy for the package builder.
Make
it start with original source code.
Make
it work on different computer architecture
Terminology
RPM packages are provided as
compressed archive files that contain one or more files, as well as
instructions specifying installation information about those files,
including the ownerships and permissions that should be applied to
each file during installation.
The instructions can also contain
scripts to be run after installation or before uninstallation. These
package files are extremely convenient, they provide a single file
that can be easily transferred between machines for installation
rather than having to transfer each file to be installed. To help in
installation and management, all package files are labeled with
highly identifiable names.
Package files have four-part
names, which typically look something like:
•
mxlcloudsso.2.4.18-3.noarch.rpm
The four parts of each name are
separated from each other by dashes or periods. The structure of the
package file name is
name-version-release.architecture.rpm
where
name
- > name of an application or package that the archive installs on
the system version → version
number of the software that is contained in the package file
release → release of that version of the
software the package file contains
architecture → architecture identifies the system types for which
the package file is appropriate
Building RPMs
When
building RPMs, go through the following steps:
Set
up the directory structure.
Place
the sources in the right directory.
Create
a spec file that tells the rpmbuild command what to do.
Build
the source and binary RPMs.
The
following sections provide details for these steps.
Setting up the
directory structure
RPM
requires a set of directories (as listed in below Table)in which to
perform the build. While the directories locations and names can be
changed, unless there's a reason to do so, it's best to use the
default layout. Note that if you've installed RPM, the build
directories are most likely in place already.
RPM
directories
Directory
|
Usage
|
BUILD
|
The
directory in which the sources are unpacked, and the software is
built.
|
RPMS
|
Contains
the binary package files created by the build process.
|
SOURCES
|
Contains
the original sources, patches, and icon files.
|
SPECS
|
Contains
the spec files used to control the build process.
|
SRPMS
|
Contains
the source package files created by the build process.
|
The
RPMS directory usually has a number of architecture-specific
subdirectories, such as the following (on an Intel architecture
system):
athlon,
i386, i486, i586, i686, noarch.
By
default, Red Hat Linux systems expect RPMs to be built in the
/usr/src/redhat directory.
Warning:
Do
not build RPMs while logged in as root as root
can alter any file on the system.
Mistakes in building packages can have serious consequences if you
are logged in as root.
To
build RPMs, At a minimum you need only two things:
Placing
your sources into the directory structure
The first thing we need to do in
order to build a package is to place all the source file directly in
the /usr/src/redhat/SOURCES directory. It will be easier if you
create a tarball of the source you want to build and then place in
the SOURCES directory.
The convention for these tarball
files is package-version.tar.gz. For example:
myfile-1.17.tar.gz
Creating the
spec file
The spec file is nothing more
than a text file with a special syntax and having extension .spec. It
defines all the actions the rpmbuild command should take to build
your application, as well as all the actions necessary for the rpm
command to install and remove the application.
The normal naming convention is
to name the file with the package name and a .spec filename
extension.
The following sections describe
these spec file sections and the necessary syntax in each section.
Introduction
section
The introduction section contains
information about the package, the type of information.
Example :
- Summary : This is a one line
description of the package.
- Name: This must be the name
string from the rpm filename you plan to use.
- Version : This must be the
version string from the rpm filename you plan to use.
- Release : This is the
release number for a package of the same version.
- Copyright : This line tells
how a package is copyrighted.
- Group : This is a group that
the package belongs to in a higher level package tool or the Red Hat
installer.
- Buildroot : This line allows
you to specify a directory as the "root" for building and
installing the new package.
- %description: This is a
multi−line field that should be used to give a comprehensive
description of the package.
prep
section
This is the second section in the
spec file. It is short for prepare, defines the commands necessary
to prepare for the build. If you are starting with a compressed tar
archive (a tarball) of the sources, the prep section needs to extract
the sources. The prep section starts with a
%prep statement.
For example:
%prep
%setup -q
build
section
The build section contains the
commands to build the software. Any sh commands can go here. It
starts with a %build statement.
Example:
%build
./configure CXXFLAGS=-O3
--prefix=$RPM_BUILD_ROOT/usr
make
Install
section
The install section holds the
commands necessary to install the newly built application or library.
In most cases, your install section should clean out the Buildroot
directory and run the make install command. The install section
starts with an %install statement.
Example:
%install
rm -fr $RPM_BUILD_ROOT
make install
Clean
section
The clean section cleans up the
files that the commands in the other sections create, It starts with
a %clean statement.
%clean
rm -rf $RPM_BUILD_ROOT
Files
section
The files section lists the files
to go into the binary RPM, along with the defined file attributes. It
starts with a %files statement
Example:
%files
%defattr(-,root,root)
Sample
While working on one of my project,
Once there was a requirement where I have to deploy the tomcat, place
the war into the tomcat at the appropriate directory and also start
the tomcat on the client machine using rpm.
To achieve above task, I went
through the following steps;
- Created RPM build directory
structure.
- Placed our tar file into
SOURCE directory.
- Spec file into SPEC
directory
I have uploaded the rpm structure
on the https://github.com/abdulwaheed18/redhat with spec file and tar
file. You can refer it for better understanding.
Note : For security purpose,
while creating tar I have removed the war file. So to make it
working,
Download the tar file from
SOURCES, untar it and then add your war file with name
“mxlcloudsso.war” and tar it again and place into SOURCES
directory.
To build the rpm :
rpmbuild -ba
$redhat/SPECS/mxl_installer.spec
The rpm file will get created
under $redhat/RPMS/noarch directory structure.
To install the package:
rpm -i
mfe-cloudsso-sl-installer-1.0.0-1.noarch.rpm
It will install the tomcat on
your machine, deploy your war file in tomcat ,start the tomcat.
To remove the package:
rpm -e
mfe-cloudsso-sl-installer
Note
: To remove the rpm, We just need the package name.
Useful
command :
To build RPMs with
the rpmbuild command, use the following basic syntax:
rpmbuild
-bBuildStage spec_file
The -b option tells
rpmbuild to build an RPM. The extra BuildStage option is a special
code that tells the rpmbuild command
Option
|
Usage
|
-ba
|
Build all, both a binary and source RPM
|
-bb
|
Build a binary RPM
|
-bc
|
Build (compile) the program but do not make the
full RPM, stopping just after the %build section
|
-bp
|
Prepare for building a binary RPM, and stop just
after the %prep section.
|
-bi
|
Create a binary RPM and stop just after the
%install section
|
-bl
|
Check the listing of files for the RPM and
generate errors if
the buildroot is missing any of the files to be
installed
|
-bs
|
Build a source RPM only
|
References:
http://fedoraproject.org/wiki/How_to_create_an_RPM_package
http://www.ibm.com/developerworks/library/l-rpm1/