Naprej Nazaj Kazalo

6. Izdelava paketov RPM

Pakete RPM je razmeroma enostavno zgraditi, še posebej, če se programje v vašem sistemu že gladko prevede. Predpostavili bomo, da že znate prevesti program iz izvirne oblike. Če ne, morate verjetno pred tem spisom prebrati še kaj.

Osnovni potek izdelave paketov RPM je naslednji:

Pri normalnem delovanju RPM zgradi tako binarne kot izvirne pakete.

6.1 Datoteka Spec

Začeli bomo z obravnavo datoteke spec. Ta datoteka je potrebna za izdelavo paketov. Obsega opis paketa, skupaj z navodili za izdelavo in seznamom vseh programov, ki bodo nameščeni.

V navadi je, da datoteke spec poimenujemo v skladu s standardnim dogovorom. Imenovala naj bi se: ime paketa -vezaj- številka različice -vezaj- številka izdaje -pika- spec. Tako zagotovimo, da ob hkratni namestitvi več različic programa v sistemu ne nastane zmeda.

Oglejmo si kratko datoteko spec (eject-2.0.2-1.spec):

Summary: A program that ejects removable media using software control.
Name: eject
Version: 2.0.2
Release: 3
Copyright: GPL
Group: System Environment/Base
Source: http://metalab.unc.edu/pub/Linux/utils/disk-management/eject-2.0.2.tar.gz
Patch: eject-2.0.2-buildroot.patch
BuildRoot: /var/tmp/%{name}-buildroot

%description
The eject program allows the user to eject removable media
(typically CD-ROMs, floppy disks or Iomega Jaz or Zip disks)
using software control. Eject can also control some multi-
disk CD changers and even some devices' auto-eject features.

Install eject if you'd like to eject removable media using
software control.

%prep
%setup -q
%patch -p1 -b .buildroot

%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/bin
mkdir -p $RPM_BUILD_ROOT/usr/man/man1

install -s -m 755 eject $RPM_BUILD_ROOT/usr/bin/eject
install -m 644 eject.1 $RPM_BUILD_ROOT/usr/man/man1/eject.1

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%doc README TODO COPYING ChangeLog

/usr/bin/eject
/usr/man/man1/eject.1

%changelog
* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com> 
- auto rebuild in the new build environment (release 3)

* Wed Feb 24 1999 Preston Brown <pbrown@redhat.com> 
- Injected new description and group.

[ Drugi vnosi sprememb so izpuščeni, da izpis ni predolg. ] 

6.2 Glava

Glava obsega nekaj standardnih polj, ki jim morate izpolniti. Pri nekaterih posebej opozorimo na podrobnosti. Izpolniti je treba naslednja polja:

6.3 Prep

Prep je drugi razdelek v datoteki spec. V njem navedemo vse, kar je treba storiti z izvirno kodo, da jo pripravimo za prevajanje.

Pazite: v teh razdelkih dejansko navedemo kar skript ukazne lupine. Če bi že imeli napisan skript, ki dearhivira datoteko z izvirno kodo in izvede popravke, bi ga lahko enostavno prilepili pod oznako %prep. Delo pa si lahko malce poenostavimo z uporabo makroukazov, vgrajenih v RPM.

Prvi izmed teh makroukazov je %setup. V najpreprostejši obliki (brez stikal ukazne vrstice) preprosto dearhivira datoteko z izvirno kodo in se premakne v imenik z izvirno kodo. V ukazu lahko uporabite tudi naslednja stikala:

Naslednji makroukaz na voljo je %patch. Pomaga pri avtomatizaciji procesa uvajanja popravkov v vire. V njem lahko uporabite več stikal, ki so navedena spodaj:

To naj bi bili vsi makri, ki jih potrebujete. Ko jih boste pravilno sestavili, lahko opravite tudi druge nastavitve, ki jih je treba opraviti s skripti ukazne lupine. Vse vrstice pred makrom %build (obravnavan v naslednjem razdelku) se izvedejo v ukazni lupini. V zgornjem zgledu si oglejte, kaj vse lahko opravimo na tem mestu.

6.4 Prevajanje

V tem razdelku dejansko sploh ni makrov. Sem preprosto napišemo vse ukaze, potrebne za to, da izvirno kodo prevedemo in zgradimo program, ko je arhiv z izvirno kodo že dearhiviran, popravki vneseni, mi pa smo se že premaknili v delovni imenik. Tudi ti ukazi se posredujejo ukazni lupini, tako da lahko sem vpišemo katerekoli veljavne ukaze ukazne lupine, skupaj s komentarji.

Pomembno: Trenutni delovni imenik se v vsakem razdelku ponastavi na vrh izvirnega imenika. Ne pozabite tega. Če je treba, se lahko premaknete v podimenike z ukazom cd.

Spremenljivka RPM_OPT_FLAGS se določi glede na vrednosti v nastavitveni datoteki /usr/lib/rpm/rpmrc. V njej lahko preverite, ali so uporabljene vrednosti primerne za vaš sistem (navadno so). Če niste prepričani, te spremenljivke v datoteki Spec ne uporabljajte, saj je njena raba neobvezna.

6.5 Nameščanje

Tudi v tem razdelku ni makrov. Vanj vstavite ukaze, s katerimi namestite program. Če imate na voljo ukaz make install, sodi sem. Če ga nimate, lahko bodisi popravite datoteko Makefile tako, da bo podpirala make install, bodisi program ,,ročno`` namestite z ukazi ukazne lupine. Svoj trenutni imenik lahko obravnavate kot vrh izvirnega imenika.

Z branjem spremenljivke RPM_BUILD_ROOT izveste, kateri imenik je v glavi nastavljen kot korenski imenik gradnje (BuildRoot). Nastavljanje vrhnjega imenika sicer ni obvezno, je pa nadvse priporočljivo, da med izdelavo paketov RPM ne ponečedimo svojega sistema s programi, ki niso v datoteki RPM. Pomnite: podatki o nameščenih programih se ne osvežujejo ob izdelavi paketa RPM, temveč

šele ob namestitvi binarnega paketa.

6.6 Higiena sistema

Pametno je, da pred začetkom gradnje paketa vedno zagotovimo, da začenjamo v čistem imeniku, v katerem ni ostankov prejšnjih gradenj. Pri tem si lahko pomagamo z makroukazom %clean. Za njim preprosto navedemo ukaze, ki odstrelijo stari korenski imenik gradnje. Previdneži bodo, pred ga bodo uporabili, preverili, ali ni spremenljivka RPM_BUILD_ROOT nastavljena na /...

6.7 Izbirni pred- in ponamestitveni/odstranitveni skripti

Vstavite lahko skripte, ki se izvedejo pred namestitvijo ali odstranitvijo binarnih paketov ali po njiju. Ob namestitvi paketov, ki vsebujejo deljene knjižnice, bomo, denimo, tu pognali ukaz ldconfig. Makroukazi za vsak skript so v obliki:

Vsebina teh razdelkov mora biti v skladnji ukazne lupine (brez glave#!/bin/sh).

6.8 Datoteke

V tem razdelku moramo navesti vse datoteke, ki se namestijo z binarnim paketom. RPM ne more vedeti, katere binarne datoteke se namestijo kot rezultat ukaza make install. Bile so sicer zamisli, da bi pred namestitvijo paketa in po njej z ukazom find prešteli vse datoteke v sistemu. V večuporabniškem sistemu to ne gre, ker lahko med nameščanje paketa tečejo tudi drugi procesi, ki tudi sami ustvarjajo datoteke.

Na voljo je nekaj makroukazov za posebna opravila. Navedeni in opisani so spodaj:

Največja nevarnost pri navajanju datotek je navajanje imenikov. Če, denimo, po nesreči navedete /usr/bin, bodo v vašem binarnem paketu vse datoteke, ki so v imeniku /usr/bin v vašem sistemu.

6.9 Dnevnik sprememb

Tu si zapisujemo, kakšne spremembe smo opravili, ko smo paket osvežili. Posebej pri popravljanju starega paketa RPM je koristno, da navedemo vse spremembe, ki smo jih opravili.

Skladnja je enostavna. Vsak nov vnos začnemo z zvezdico (*), tej sledi datum, naše ime in naš e-poštni naslov. Datum naj bo v enaki obliki, kot ga vrne ukaz

date +"%a %b %d %Y"
Preostanek vnosa je prosto besedilo, ki pa naj bo vseeno urejeno v neki koherentni obliki.


Naprej Nazaj Kazalo