Naprej Nazaj Vsebina

6. Izgradnja RPM-jev

RPM-je je razmeroma enostavno zgraditi, še posebej če lahko dobite programsko opremo, ki jo želite zapakirati tako, da se bo lahko potem sama zgradila.

Osnovni potek izgradnje RPM-jev je naslednji:

Pri normalnem delovanju, RPM zgradi tako binarne, kot tudi izvorne pakete.

6.1 Datoteka rpmrc

Trenutno se nastavitve za RPM izvajajo samo preko datoteke /etc/rpmrc. Primer te datoteke:

require_vendor: 1
distribution: I roll my own!
require_distribution: 1
topdir: /usr/src/me
vendor: Mickiesoft
packager:  Mickeysoft Packaging Account <packages@mickiesoft.com>

signature: pgp
pgp_name: Mickeysoft Packaging Account
pgp_path: /home/packages/.pgp

tmppath: /usr/tmp

Vrstica require_vendor povzroči, da RPM poišče vrstico s podatki o prodajalcu. Ta podatek lahko izhaja iz /etc/rpmrc ali iz glave datoteke spec same. To izbiro izklopite tako, da postavite številko na 0. Enako velja za vrstici require_distribution in require_group.

Naslednja vrstica je vrstica s podatki o distribuciji. Definirate jo lahko na tem mestu, ali pa kasneje v glavi datoteke spec. Kadar gradite za določeno distribucijo, je dobro, da ta vrstica vsebuje pravilne podatke, čeprav ni obvezna. Vrstica s podatki o prodajalcu deluje na podoben način, definirana pa je lahko poljubno (npr. Andrejeva štacuna z rock glasbo in programsko opremo).

RPM podpira tudi izgradnjo paketov na različnih arhitekturah. Datoteka rpmrc lahko vsebuje spremenljivko ,,optflags`` potrebno za izgradnjo arhivov, ki med izgradnjo zahtevajo oznake za določene arhitekture. Za uporabo te spremenljivke si oglejte kasnejše razdelke.

Poleg tega makra, obstajajo še drugi. Uporabite lahko:

rpm --showrc
ter tako ugotovite vaše nastavitve in najdete vse oznake, ki so na voljo.

6.2 Datoteka Spec

Pričeli bomo z obravnavo datoteke spec. Ta datoteka je potrebna za izgradnjo paketov. Vsebuje opise programske opreme, skupaj z navodili kako jo zgraditi in seznam vseh binarnih zapisov, ki bodo nameščeni.

Svojo datoteko spec poimenujte v skladu s standardnim dogovorom. Imenovala naj bi se: ime paketa -vezaj- številka različice -vezaj- številka izdaje -pika- spec.

Oglejte si naslednjo majhno datoteko spec (vim-3.0-1.spec):

Summary: ejects ejectable media and controls auto ejection
Name: eject
Version: 1.4
Release: 3
Copyright: GPL
Group: Utilities/System
Source:
sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
Patch: eject-1.4-make.patch
Patch1: eject-1.4-jaz.patch
%description
This program allows the user to eject media that is autoejecting like
CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.

%prep
%setup
%patch -p1
%patch1 -p1

%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

%install
install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
install -m 644 -o 0 -g 0 eject.1 /usr/man/man1

%files
%doc README COPYING ChangeLog

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

6.3 Glava

Glava vsebuje nekaj standardnih polj, ki jim morate izpolniti. Vsebuje tudi nekaj opozoril. Polja je potrebno izpolniti na naslednji način:

6.4 Prep

Prep je drugi razdelek v datoteki spec. Uporablja se za pripravo virov na izgradnjo. Tu boste morali narediti vse, kar je potrebno za popravo in pripravo virov.

Pazite: Ta dva razdelka sta dejansko le prostora v katerem se izvrši zapis lupine. Za razpakiranje in popravo vaši virov, enostavno tvorite zapis sh in ga vstavite za označbo %prep. Za pomoč pri tem smo kreirali makre.

Prvi izmed teh makrov je makro %setup. V najpreprostejši obliki (brez stikal ukazne vrstice), preprosto razpakira vire in se pomakne (cd) v izvorno datoteko. V ukazu lahko uporabite tudi naslednja stikala:

Naslednji makro, ki je na voljo se imenuje makro %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 potrebno opraviti s pomočjo zapisa tipa sh. Vse kar boste vnesli pred makrom %build (obravnavan v naslednjem razdelku) se izvede preko sh. V zgornjem primeru poiščite stvari, ki bi jih lahko opravili na tem mestu.

6.5 Izgradnja

V tem razdelku dejansko sploh ni makrov. Ko ste vir razpakirali, popravili in se premaknili v imenik, lahko v ta razdelek vnesete poljubne ukaze, ki jih pri izgradnji programske opreme potrebujete. To je še eno zaporedje ukazov, ki jih izvede sh, torej lahko vstavite vse dovoljene ukaze sh (vključno s komentarji). Trenutni delovni imenik se v vsakem razdelku ponastavi na najvišjo stopnjo izvornega imenika. Ne pozabite na to. Če bo potrebno, se lahko premaknete v podimenike z ukazom cd.

6.6 Namestitev

V tem razdelku sploh ni makrov. Vanj lahko vstavite poljubne ukaze, ki jih za namestitev potrebujete. Če ste si zagotovili namestitev v paketih, ki jih gradite, vnesite to sedaj. Drugače lahko za tvornjenje namestitve popravite makefile in izvršite namestitev, ali pa jo opravite ročno z ukazom sh. Vaš trenutni imenik lahko smatrate kot najvišjo stopnjo izvornega imenika.

6.7 Izbirne pred in po namestitvene/odstranjevalne skripte

Vstavite lahko zapise, ki se izvedejo pred in po namestitvi in odstranitvi binarnih paketov. Glavni razlog za to je, da lahko ldconfig zaženete po namestitvi ali odstranitvi paketov, ki vsebujejo deljene knjižnice. Makri za vsako skripto so v obliki:

Vsebina teh razdelkov mora biti v obliki zapisa sh, čeprav ne potrebujete #!/bin/sh.

6.8 Datoteke

To je razdelek, kjer morate navesti datoteke za binarni paket. RPM ne ve, katere binarne datoteke se namestijo kot rezultat ukaza make install. Za to NE obstaja noben način. Nekateri so predlagali, da je potrebno pred in po namestitvi paketa izvajati iskanje. Na večuporabniškem sistemu, to ni sprejemljivo, ker se lahko med procesom izgradnje paketov tvorijo druge datoteke, ki s paketom nimajo nič skupnega.

Na voljo je nekaj makrov, ki opravljajo tudi posebna opravila. Navedeni in opisani so spodaj:

Največjo nevarnost v seznamu datotek predstavlja listanje imenikov. Če prelistate /usr/bin po nesreči, bo vaš binarni paket vseboval vse datoteke v /usr/bin na vašem sistemu.

6.9 Izgradnja

Struktura imenika vira

Najprej potrebujete pravilno oblikovano gradbeno strukturo. To lahko opravite z uporabo datoteke /etc/rpmrc. Večina ljudi uporablja kar /usr/src.

Mogoče boste morali za tvorjenje gradbene strukture ustvarili naslednje imenike:

Testna izgradnja

Verjetno boste najprej poskusili dobiti izvorno kodo, da bi izgradili čisto brez uporabe RPM. Da bi to storili, najprej razpakirajte vir in spremenite ime imenika v $NAME.orig. Potem ponovno razpakirajte vir. Pri izgradnji uporabite ta vir. Premaknite se v izvorni imenik in za izgradnjo sledite navodilom. Če boste morali stvari urejati, boste potrebovali popravek. Ko se bo izgradil, počistite izvorni imenik. Prepričajte se, da ste odstranili vse datoteke, ki jih je tvorila nastavitvena skripta configure. Potem se iz izvornega imenika pomaknite v njegov predhodni imenik in izvedite nekaj takšnega:

diff uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch
S tem boste ustvarili popravek, ki ga lahko uporabite v datoteki spec. Ne pozabite, da "linux", ki ga vidite v imenu popravka, služi samo identifikaciji. Mogoče boste za opis namena popravka uporabili tudi kaj bolj opisnega, kot npr. "config" ali "bugs". Dobro je, da pred uporabo datoteke za popravek, ki jo ustvarite, le to pred tem pregledate in se prepričate, da ste vključili samo tiste binarne datoteke, ki jih želite.

Tvorjenje seznama datotek

Sedaj, ko imate vir, ki bo izgradil paket, in ko veste, kako to narediti, ga izgradite in namestite. Oglejte si izhod namestitvenega niza in z njegovo pomočjo izgradite seznam datotek, ki ga boste uporabili v datoteki spec. Ponavadi gradimo datoteko spec vzporedno z vsemi temi koraki. Tvorite lahko začetno datoteko in vstavite enostavnejše dele, potem po korakih vstavite še ostale.

Izgradnja paketov z RPM

Ko imate datoteko spec, ste pripravljeni na izgradnjo svojega paketa. Najuporabnejši način za to opravilo je uporaba ukaz v naslednji obliki:

rpm ba foobar-1.0.spec
Skupaj s stikalom -b lahko koristno uporabite tudi druga stikala: Za stikalo b obstaja tudi nekaj določil:

6.10 Testiranje

Ko imate izvorni in binarni rpm za svoj paket, ju je potrebno testirati. Najenostavnejše in najbolj učinkovito je, da ga preizkusite na popolnoma drugem računalniku. Nenazadnje ste izvršili veliko ukazov make install na vašem računalniku, torej mora biti dokaj dobro nameščen.

Na paketu lahko uporabite rpm -u imepaketa in ga tako testirate. To pa lahko daje zavajajoče rezultate, ker ste pri izgradnji paketa uporabili make install. Če ste nekaj s seznama datotek izpustili, se to ne bo odstranilo. Potem boste binaren paket ponovno namestili in vaš sistem bo spet popoln, vaš rpm pa še vedno ne bo. Ne pozabite, da bo zaradi tega ker ste za kreiranje paketa uporabili rpm -ba, večina ljudi pri namestitvi uporabila samo rpm -i. V razdelkih izgradnje in namestitve ne storite ničesar, kar bi bilo potrebno storiti kadar se binarne datoteke nameščajo samodejno.

6.11 Kaj narediti z novimi RPM-ji

Ko ste naredili svoj RPM nečesa (predpostavljamo, da to nekaj ni bil že RPM-jan), lahko svoje delo razdelite ostalim (predpostavljamo tudi, da ste RPM-jali nekaj, kar se lahko prosto razširja). To lahko storite tako, da paket naložite na ftp://ftp.redhat.com/.

6.12 Kaj sedaj?

Oglejte si zgornja razdelka o testiranju in kaj narediti z novimi RPM-ji. Želimo, da so na voljo vsi RPM-ji, ki jih dobimo in, da so dobro narejeni. Vzemite si čas in jih dobro preskusite, potem pa jih naložite v dobro vsem. Prosim, prav tako se prepričajte, da nalagate samo programsko opremo, ki je prosto dostopna. Komercialne programske oprema ne nalagajte, če avtorske pravice tega ne dopuščajo. Sem spadajo programska oprema Netscape, ssh, pgp, itd.


Naprej Nazaj Vsebina