Het RPM pakketformaat is reeds zeer goed gedocumenteerd, in het bijzonder in het boek Maximum RPM van Ed Bailey, wat je kunt downloaden vanaf de RPM WWW site - tevens beschikbaar via alle goede boekwinkels! Dit zijn slechts een paar aanwijzingen voor mensen die haast hebben.
RPM packages worden samengesteld vanuit een spec bestand. Dit bestaat (op een vergelijkbare wijze als het KickStart configbestand) uit voorgeschreven stappen die moeten worden genomen om het package samen te stellen. Er wordt vanuit gegaan dat je het vanaf de bron op moet bouwen, mogelijk voor meerdere platformen, en waarbij wellicht patches voor het compileren moeten worden toegepast. Eenmaal samengesteld en geïnstalleerd zal een binaire RPM worden aangemaakt uit de bestanden en directory's die je opgeeft als zijnde geassocieerd met het package. Het is belangrijk er notitie van te nemen dat RPM er geen idee van heeft welke bestanden en directory's aan een gegeven package zijn gerelateerd - je moet dit opgeven.
Hier is een voorbeeldspecificatie voor een aangepaste RPM van de Squid WWW cache server:
Summary: Squid Web Cache server
Name: squid
Version: 1.NOVM.22
Release: 1
Copyright: GPL/Harvest
Group: Networking/Daemons
Source: squid-1.NOVM.22-src.tar.gz
Patch: retry-1.NOVM.20.patch
%description
Dit is slechts een eerste probeersel om de Squid Web Cache in te pakken
voor een eenvoudige installatie op onze RedHat Linux servers
%prep
%setup
%build
configure --prefix=/usr/squid
perl -spi -e 's!#( -DALLOW_HOSTNAME_UNDERSCORES)!$1!' src/Makefile
make
%install
make install
%files
/usr/squid
Zo bouw je deze RPM:
% mkdir -p SOURCES BUILD SRPMS RPMS/i386
% cp ~/squid-1.NOVM.22-src.tar.gz SOURCES
% cp ~/retry-1.NOVM.20.patch SOURCES
% rpm -ba squid-1.NOVM.22+retry-1.spec
Hiermee zal automatisch een subdirectory onder de BUILD
directory worden aangemaakt, waarin de broncode zal worden uitgepakt
en dan de patch zal worden toegepast
(voor het patchen zijn een aantal opties beschikbaar - kijk in het
boek voor details). Nu zal RPM automatisch het package bouwen door
configure
en vervolgens make
uit te voeren, het met
make install
installeren, en een momentopname te nemen van de
bestanden onder /usr/squid. Het is dat laatste wat de binaire
RPM van de Squid software zal vormen.
We kunnen willekeurige shellopdrachten bij het uitpak-, bouw- en
installatieproces invoegen, zoals b.v. de aanroep naar perl
waarmee één van Squid's parameters tijdens het compileren
wordt verfijnd.
De uiteindelijke binaire RPM zal onder de RPMS directory in
de voor het platform specifieke subdirectory i386 worden achtergelaten.
In dit geval zal het squid-1.NOVM.22-1.i386.rpm worden genoemd.
De bestandsnaam wordt aangemaakt door de waarden van de volgende parameters
uit het spec bestand aaneen te schakelen:
Name
, Version
en
Release
- plus het hardwareplatform in kwestie, in dit geval
i386. Probeer dit in gedachten te houden bij het aanmaken van je
eigen RPM's, om te vermijden ze al te lange of moeilijke namen te geven!
Het is het ook waard in gedachten te houden dat je RPM's kunt bouwen zonder dat je het gehele softwarepackage opnieuw moet samenstellen, b.v.
Summary: Linux 2.0.36 kernel + filehandle patch + serial console patch
Name: linux
Version: 2.0.36+filehandle+serial_console
Release: 1
Copyright: GPL
Group: Base/Kernel
Source: linux-2.0.36+filehandle+serial_console.tar.gz
%description
Dit is slechts een eerste poging in de Linux kernel met patches samen
te stellen voor installatie op onze RedHat Linux servers.
%prep
echo
%setup
echo
%build
echo
%install
echo
%post
/sbin/lilo
%files
/lib/modules/2.0.36
/boot/vmlinuz
In dit geval maken we eenvoudigweg een RPM gebaseerd op het /boot/vmlinuz bestand en de inhoud van de directory /lib/modules/2.0.36, en voeren /sbin/lilo uit nadat het package op een doelcomputer is geïnstalleerd. Laat het me weten als je een veel nettere manier weet om het spec bestand te schrijven.