home | contact us
» linux » Creating RPMs

BLOG CATEGORY: linux


One thing that I often get asked as a package maintainer is how hard is it to make rpms?

Well, here’s a little secret, if you have the right tools, it’s actually quite easy.

The main tool I use is mezzanine – one of the people I worked with on the cAos Linux distributions wrote this toolset in perl, and it is installable even on debian-based distros. His website is experiencing issues at the moment but it is http://beta.kainx.org/. If it’s still down and you want the rpm, rpm.pbone.net can find you an rpm.

The basics are that you need a folder that contains an “F” “P” and “S” directory, and yes, that is all uppercase. The F folder contains a spec file similar to what’s below, the S folder contains the source files and the P directory is a clever little patch making system.

The spec file is almost exactly the same as a normal rpmbuild spec file and looks like this :-

#
# spec file for safe-rm
#
Summary: Don't rm various directorie
Name: safe-rm
Version: 0.8
Release: 1
License: GPL
Group: Applications/Utilities
Source: https://launchpad.net/safe-rm/trunk/0.8/+download/safe-rm-0.8.tar.gz
URL: https://launchpad.net/safe-rm
Distribution: CentOS
Packager: Martyn Ranyard
Patch1000: safe-rm-0.8-example-conf.patch
Requires: perl

%description
Stop people accidentally removing directories with rm -rf

%changelog
* Thu Aug 09 2012 Martyn Ranyard
- Used the debian example config for the default config

%prep
rm -rf $RPM_BUILD_ROOT/safe-rm-0.8
zcat $RPM_SOURCE_DIR/safe-rm-0.8.tar.gz | tar -xvf -
cd safe-rm-0.8
%patch1000 -p1

%build

%install
mkdir -p $RPM_BUILD_ROOT/usr/bin/
mkdir -p $RPM_BUILD_ROOT/etc/
mkdir -p $RPM_BUILD_ROOT/sbin/
install -m 0755 safe-rm-0.8/safe-rm $RPM_BUILD_ROOT/usr/bin/safe-rm
install -m 0644 safe-rm-0.8/safe-rm.conf $RPM_BUILD_ROOT/etc/safe-rm.conf
cd $RPM_BUILD_ROOT/usr/bin/
ln -s safe-rm rm
cd -
cd $RPM_BUILD_ROOT/sbin/
ln -s /usr/bin/safe-rm rm
cd -

%files
/etc
/etc/safe-rm.conf
/usr
/usr/bin
/usr/bin/safe-rm
/sbin
/sbin/rm

You’ll notice the patch1000 lines reference a patch file, which mezzanine handily creates for you, first you run mzprep, which creates a work dir, then you add/edit files in there to make whatever you’re packaging build and install (to $RPM_BUILD_DIR) and then you run “mzpatch mypatchname.patch” and it creates the patch ready to be deployed.

To create the rpms, change back to the top level directory (the one containing F P & S) and type mzbuild.

It takes a bit of getting used to and a fair bit of fiddling but the end result is good solid rpms.

Note: it can also make deb files and slackware package files but KainX is the guy to talk to on that front.


Click Here to Contact Us about Creating RPMs
 

Comments

No Comments

Leave a Reply

rss icon