Here is some advice I found useful when setting up my RPM build environment, and building a basic RPM. The main source I used, to save reading my book again or the man pages, was Linc Fessenden’s blog and some of Linc’s blog is repeated here for completeness. Thanks Linc!
These instructions should work fine on any CentOS / RHEL / Fedora system.
First off, we need the rpm-build package to be installed. Check and install if needed.
yum install rpm-build
Login to the system as your user account, then make the following directories:
mkdir -p ~/rpm mkdir -p ~/rpm/BUILD mkdir -p ~/rpm/RPMS mkdir -p ~/rpm/SOURCES mkdir -p ~/rpm/SPECS mkdir -p ~/rpm/SRPMS mkdir -p ~/rpm/tmp
And create an ~/.rpmmacros file with the following in it:
%packager Your Name %_topdir /home/YOUR USERNAME/rpm %_tmppath /home/YOUR USERNAME/rpm/tmp
Now you need to create a package source code ditectory in the ~/rpm/SOURCES directory. You should name it package name – major revision number. Eg: ~/rpm/SOURCES/robspackage-1. In that directory place all the files that you wish to package in the RPM. I have put “script.sh” in mine.
Once that is done, make a tarball of that directory in the ~/rpm/SOURCES directory named programname-revision.tar.gz. Eg:
cd ~/rpm/SOURCES tar -czvf rob-1.tar.gz rob-1/
In the ~/rpm/SPECS directory, create a packagename.spec file for your package.
Eg: rob.spec:
Summary: My first rpm package Name: rob Version: 1 Release: 1 Source0: rob-1.tar.gz License: GPL Group: CustomGroup BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-buildroot %description Relevant package description %prep %setup -q %build %install install -m 0755 -d $RPM_BUILD_ROOT/opt/rob install -m 0755 script.sh $RPM_BUILD_ROOT/opt/rob/script.sh %clean rm -rf $RPM_BUILD_ROOT %post echo " " echo "This will display after rpm installs the package!" %files %dir /opt/rob /opt/rob/script.sh %changelog * Wed Feb 24 2010 Rob Jervis - added something or fixed a bug * Tue Feb 23 2010 Rob Jervis - First RPM package of the rob application for EL5
Direct Quote from Linc:
“The install lines tell rpm what to install where and with what permissions. You also have to do any directory creation there as well (the one with the -d in the line).”
“The things after %file are similar in that this tells rpm’s database which files are attached to this package. The %dir signifies a new directory, otherwise the files are listed with their complete paths.”
Now you need to create the package:
cd ~/rpm rpmbuild -ba SPECS/rob.spec
If your package builds ok, it will end up in the RPMS directory, in this case: ~/rpm/RPMS/noarch/rob-1-1.noarch.rpm.
If it fails to build, first check your spec file carefully. Enjoy!