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:
/etc/rpmrc
namestitveni imenik.
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.
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
Glava vsebuje nekaj standardnih polj, ki jim morate izpolniti. Vsebuje tudi nekaj opozoril. Polja je potrebno izpolniti na naslednji način:
Summary
: Enovrstičen opis paketa.Name
: ime se mora ujemati z imenom datoteke rpm-ja, ki ga
nameravate uporabiti.Version
: ime različice se mora ujemati z imenom rpm-ja, ki ga
nameravate uporabiti.Release
: Številka izdaje paketa za isto verzijo (npr. če tvorimo
paket in ugotovimo, da je rahlo okvarjen in ga je potrebno ponovno
kreirati, bo naslednji paket imel številko izdaje 2).Icon
: Ime datoteke z ikono, ki jo uporablja namestitveno orodje
višje stopnje (kot npr. ,,glint``). To mora biti datoteka s končnico
gif in mora biti v imeniku SOURCES.Source
: Vrstica kaže na lokacijo prvotne izvorne datoteke HOME.
Potrebovali jo boste, ko boste ponovno želeli zajeti izvorno kodo
ali iskali novejše verzije. Opozorilo: pot do datoteke v tej
vrstici SE MORA ujemati s potjo do datoteke, ki je na vašem
sistemu (npr. ko boste zajeli izvorno datoteko, ji ne spremenite
imena). S pomočjo naslednjih vrstic lahko definirate tudi več kot
eno izvorno datoteko:
Source0: blah-0.tar.gz
Source1: blah-1.tar.gz
Source2: fooblah.tar.gz
Te vrstice bi šle v imenik SOURCES. (Struktura imenika je obravnavana
v kasnejšem razdelku, ,,imeniška struktura izvora``.)Patch
: To je mesto, kjer boste lahko našli popravek, če ga boste
morali ponovno zajeti. Opozorilo: Ime datoteke se mora ujemati z
imenom, ki ste ga uporabili, ko ste kreirali VAŠ popravek. Prav
tako, kot lahko imate več virov, lahko imate tudi več popravkov. ]
Rezultat bo izgledal nekako tako:
Patch0: blah-0.patch
Patch1: blah-1.patch
Patch2: fooblah.patch
Te datoteke gredo v imenik SOURCES.Copyright
: Ta vrstica pove komu pripadajo avtorske pravice.
Uporabili bi naj nekaj takšnega kot GPL, BSD, MIT, public domain,
distribute ali commercial.BuildRoot
: Ta vrstica vam pri izgradnji in namestitvi omogoča, da
imenik označite kot ,,korenski imenik``. To možnost lahko uporabite
pri testiranju paketa, preden ga namestite na vaš računalnik.Group
: Ta vrstica pove namestitvenim programom višje stopnje (kot
je npr, ,,glint``) kam v hierarhični strukturi naj ga namesti.
Trenutna drevesna struktura skupine izgleda nekako tako:
Applications
Communications
Editors
Emacs
Engineering
Spreadsheets
Databases
Graphics
Networking
Mail
Math
News
Publishing
TeX
Base
Kernel
Utilities
Archiving
Console
File
System
Terminal
Text
Daemons
Documentation
X11
XFree86
Servers
Applications
Graphics
Networking
Games
Strategy
Video
Amusements
Utilities
Libraries
Window Managers
Libraries
Networking
Admin
Daemons
News
Utilities
Development
Debuggers
Libraries
Libc
Languages
Fortran
Tcl
Building
Version Control
Tools
Shells
Games
%description
: Ni ravno del glave, vendar mora biti definiran
skupaj z glavo. Za en paket in/ali podpaket rabite en opisno
označbo. To je več vrstično polje, ki bo moralo vsebovati
razumljiv opis paketa.
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:
-n ime
(name) nastavi ime zgrajenega imenika na izpisano ime.
Privzeta vrednost je $NAME-$VERSION
. Ostale možnosti vključujejo
$NAME
, ${NAME}${VERSION}
oz. karkoli glavna datoteka tar
uporablja. (Ne pozabite, da spremenljivke ,,$
`` niso prave
spremenljivke, ki so na voljo v datoteki spec. Tu se uporabljajo
samo kot primer. V vašem paketu morate uporabiti pravo ime in
verzijo, ne pa spremenljivke.)-c
tvori omenjeni imenik, se pomakne vanj in izvrši ukaz untar.-b #
pred premaknitvijo (cd
) v imenik razpakira Source# (to
stikalo v kombinaciji s c
nima nobenega smisla, torej je ne
uporabljajte). Stikalo je uporabno samo v primeru različnih
izvornih datotek.-a #
najprej se pomakne v imenik in nato razpakira Source#.-T
to stikalo prepiše privzeto opravilo za razpakiranje vira s
programom tar in za razpakiranje glavne izvorne datoteke zahteva
-b 0
ali -a 0
. Uporabite ga, kadar obstajajo sekundarni viri.-D
imenika pred razpakiranjem ne zbriši. Stikalo je primerno samo
v primeru, kadar imate več kot en nastavitveni makro. Uporabljalo
naj bi se samo v naslednjih nastavitvenih makrih (nikoli pa ne v
prvem makru).#
bo uvedel Patch#
kot popravljeno datoteko.-p #
določi število imenikov, ki jih je potrebno izločiti iz ukaza
patch(1)
.-P
privzeto opravilo je uporaba Patch
(ali Patch0
). Oznaka
preprečuje privzeto opravilo in za razpakiranje glavne izvorne
datoteke s programom tar zahteva vrednost 0. To stikalo je
uporabno v drugem ali naslednjih makrih %patch
, ki zahtevajo
drugačno vrednost kot prvi makro.%patch # -P
lahko uporabite tudi %patch#
.%build
(obravnavan v naslednjem razdelku) se izvede preko sh
. V
zgornjem primeru poiščite stvari, ki bi jih lahko opravili na tem
mestu.
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
.
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.
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:
sh
, čeprav
ne potrebujete #!/bin/sh
.
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:
%doc
se uporablja za označevanje dokumentacije v izvornem paketu,
ki ga želite namestiti v binarni obliki. Spis se bodo namestili v
/usr/doc//$NAME-$VERSION-$RELEASE
. S tem makrom lahko v opravilni
vrstici prelistate tudi več spisov hkrati, ali pa ločeno z uporabo
makra za vsakega posebej.%config
se uporablja za označevanje nastavitvenih datotek v
paketu. Sem spadajo datoteke kot so sendmail.cf
, passwd
, itd. Če
paket, ki vsebuje nastavitvene datoteke kasneje odstranite, se
bodo odstranile vse nespremenjene datoteke, vse spremenjene
datoteke pa bodo dobile prvotno ime s pripono .rpmsave
. Z makrom
lahko prelistate tudi več datotek.%dir
označuje samostojen imenik v seznamu datotek, da je vključen,
kot bi spadal k paketu. Če prelistate ime imenika BREZ UPORABE
makra %dir
, bo glede na privzeto vrednost v seznam datotek
vključeno VSE kar ta imenik vsebuje in kasneje nameščeno kot del
paketa.%files f <ime datoteke>
vam omogoča listanje datotek v poljubni
datoteki znotraj gradbenega imenika vira. To je koristno v
primerih, ko imate paket, ki lahko zgradi svoj lasten seznam
datotek. Ta seznam tukaj preprosto vključite in vam ne bo treba
podajati seznama datotek./usr/bin
po nesreči, bo vaš binarni paket vseboval vse
datoteke v /usr/bin
na vašem sistemu.
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:
BUILD
je imenik, kjer RPM izvrši celotno izgradnjo. Čeprav ni
potrebno, da testne izgradnje vršite v točno določenem imeniku, bo
RPM vršil izgradnjo vedno v tem imeniku.SOURCES
je imenik, kamor bi morali vstaviti originalne izvorne
datoteke tar in popravke. RPM bo, glede na privzeto nastavitev,
iskal v tem imeniku.SPECS
je imenik, kjer naj bi bile vse datoteke spec.RPMS
je imenik, kamor bo po izgradnji RPM shranil binarne RPM-je.SRPMS
je imenik, kjer bodo shranjeni vsi izvorni RPM-ji.
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.
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.
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:
p
pomeni: zaženi samo razdelek prep datoteke spec.l
je namenjen preverjanju seznama in opravi nekaj testov na
%files
.c
tvori prep in prevod. To je primeren način, kadar niste
prepričani, ali se bo vaš izvor sploh zgradil. Zdi se neuporaben,
ker se verjetno želite igrati z virom tako dolgo, dokler se ne
zgradi in potem uporabiti RPM. Ko pa se boste privadili uporabe
RPM, boste spoznali, da vam bo v nekaterih primerih v pomoč.i
napravi prep, prevede in namesti.b
napravi prep, prevede, namesti in izgradi samo binarni paket.a
zgradi vse (tako izvorne, kot tudi binarne pakete).--short-circuit
bo skočil neposredno na določeno stopnjo
(uporablja se lahko samo v kombinaciji s c
in i
).--clean
odstrani gradbeno strukturo, ko je gotova.--keep-temps
ohranijo se vse začasne datoteke in skripte, ki so
bili ustvarjene v /tmp
. Z uporabo stikala -v
lahko vidite, katere
datoteke so se ustvarile v /tmp
.
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.
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/.
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.