Setting up to build RPMs

March 24, 2006

There's three ways to build RPMs: the silly way, the easy way, and the better way.

The silly way starts with /bin/su root, which should be enough of a warning sign. You really don't want to be building and installing packages as root unless you don't have a choice, and you do.

The easy way is:

$ cat >$HOME/.rpmmacros
%_topdir /some/where
$ cd /some/where

Then you can build as a normal user out of your /some/where hierarchy. I tend to use something like /u/cks/sys/RPM, but where you put it is up to you. (I always use absolute paths and I suspect that RPM requires them, so you can't use $HOME or ~/.. or the like.)

The problem with the easy way is that you wind up with an awful jumble in the SOURCES and SPECS subdirectories, because all of your sources and patches wind up in SOURCES, and all of your RPM spec files wind up in SPECS. This also makes it all but impossible to work with two versions of an RPM at the same time, since their specfiles usually stage a duel to the death.

The better way isn't original to me; I got it from Red Hat's Mike A. Harris. Put the following in your $HOME/.rpmmacros instead of the easy version:

%_topdir /some/where
%_sourcedir %{_topdir}/SOURCES/%{name}-%{version}

%_specdir %{_sourcedir}

This puts all of the bits of a given version of an RPM, say liferea-1.0.7, in SOURCES/liferea-1.0.7, instead of spread out across two flat directories. Which is much easy to work with and keep track of. (Trust me; I did it the 'easy' way for a while until I got totally fed up and found Mike Harris's version.)

(Ob-attr-darnit: here on Note that some of the information linked there is a bit out of date; for example, you no longer need a .rpmrc to have your .rpmmacros acted on.)

Written on 24 March 2006.
« Side effects are bad: a personal illustration
A little gotcha with os.path.join »

Page tools: View Source, Add Comment.
Login: Password:
Atom Syndication: Recent Comments.

Last modified: Fri Mar 24 02:20:03 2006
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.