rpm

Het nut van packages

Er zijn vele reden te bedenken waarom je niet steeds alles wilt compileren. Het kan zijn dat je daar zelf helemaal niet aan wilt beginnen of dat je systeem er niet geschikt voor is. Een andere goede reden is dat je meerdere systemen moet instaleren.

In deze gevallen is het makelijk als he programatuur snel kunt instaleren zonder hem op nieuw te moeten instaleren. Daarbij moeten uiteraard ook gelijk eventuele andere systeemfiles aangepast worden om de programatuur goed te laten lopen. Het kan daarbij bijvoorbeeld gaan over het aanmaken van een account waaronder de software loopt.

Voor de rest kun je een helehoop eisen stellen aan het instaleren van de software en het beheer ervan na het beheren. Te denken valt aan:

Dit alles zorgt er voor dat je niet meer uit kunt met het versprieden van de source in tgz files. Vandaar dat er tools gekomen zijn om gecompileerde software als packages te verspreiden.

rpm

De manier waarop redhat zijn packeges inpakt zijn rpm files. Hiervan bestaan 2 vormen. De binairie packages die je gelijk kunt instaleren en de source packages. De binairie packeges kun je gelijk instaleren mits je die van de goede archectatuur gebruikt.

De source packeges bevatten voor linux aangepaste patches en configuratie. Hierdoor kun je ze via rpm --rebuild in een keer hercompileren zonder dat je zelf verder iets hoeft te doen.

Alternatieve

Als er iets is waar de verschillende linux distributies het niet over eens zijn dan is het wel de manier waarop de packages ingepakt moeten worden. Debian en slackware gebruiken hier hun eigen systemen voor die volgens de aanhangers daarvan uiteraard suprieur zijn.

Ook de commerciele unix varianten maken gebruik van packages mechanisme. Mijn inziens heeft hp ook een heel aardig package managment systeem.

Het aanmaken van een rpm file

Het plaatsen van de source

We gaan hier uit van het eerdere behandelde hello programma. Daarbij is een makefile geschreven en die wil ik distruberen als een package "mn-hello-1.0". Daartoe plaats ik hello.c en het Makefile in de directorie "mn-hello-1.0". Deze directorie pak ik in een tar file dat ik met gzip compress. Die file plaats ik in de redhat source directorie.

Uiteraard wil ik mijn grandiouse loginname patch mee distribueren dus die plaats ik ook in de source directorie.

Het schrijven van het spec file

Ik schrijf nu het volgende spec file:
Summary: mn hello programma
Name: mn-hello
Version: 1.0
Release: 1
Copyright: None
Group: Demo
source: mn-hello-1.0.tar.gz
Patch: mn-hello-1.0_patch
%description
Een hello programma analoog aan het algoritme van Kerningham en Richie
als demo bij de lezing van tgz naar rpm.

%prep
%setup
%patch -p1

%build
make

%install
make install

%files
/usr/local/bin/hello
Hierin staat een hoop informatie over het package. Zodat mensen weten wat er in zit. Voor de rest staat er vermeld dat de source staat in mn-hello-1.0.tar.gz en de patch in mn-hello-1.0_patch. De %prep en %setup fase pakken de files uit. Er wordt vanuit gegaan dat dit uitgepakt is in mn-hello-1.0. Daarna voert hij in die directorie de patch uit. Vervolgens draait hij make en make install.

Als dat allemaal goed gegaan is word /usr/local/bin/hello ingepakt in het binarie image. Tevens wordt er uitgezocht wat er nodig is om dit programma te draaien. Dat is in dit geval dus alleen libc.

Het aanmaken van het rpm image

Naar het geven van rpm -ba mn-hello-1.0.spec begint rpm met het compileren van de source waarna hij het
binairie package en het source image in pakt.

En verder

Er zijn vele opties en zijwegen mogenlijk in de spec files. Ik laat de rest over aan jullie om het zelf te ontdekken. Tevens heb je dan nog de keus om meer te leren over de slackware of debian packeges.