Vytvß°enφ RPM balφk∙ |
Jan Kasprzak, 12. Φervna 1998 |
V dne╣nφm dφle na╣eho serißlu budu pokraΦovat ve v²kladu problematiky
tvorby RPM balφk∙. Nejprve doplnφm o n∞kterΘ podrobnosti syntaxi
p°φkazu rpm -b, a pak zaΦnu detailn∞ji rozebφrat strukturu spec-souboru.
V p°edchozφm Φφsle jsem uvedl zßkladnφ zp∙soby pou╛itφ p°φkazu rpm -b pro stavbu RPM balφk∙. Nynφ uvßdφm dal╣φ, mΘn∞ u╛φvanΘ volby:
- --buildarch architektura - vytvo°φ RPM balφk pro
danou architekturu mφsto architektury, na kterΘ prßv∞ systΘm b∞╛φ. Lze
pou╛φt zejmΘna p°i cross-kompilaci.
- --buildos operaΦnφ systΘm - totΘ╛, ale zm∞nφ
operaΦnφ systΘm, pro kter² bude balφk urΦen.
- --test - vytvo°φ skripty pro jednotlivΘ fßze kompilace (ulo╛φ je do
adresß°e /var/tmp) a skonΦφ. Tv∙rce balφku pak mß mo╛nost
si tyto skripty prohlΘdnout a p°φpadn∞ i editovat.
- --buildroot adresß° - pro instalaci balφku se
pou╛ije tento adresß°, mφsto adresß°e uvedenΘho v hlaviΦce BuildRoot: ve spec-souboru.
Zam∞°me se nynφ na syntaxi spec-souboru, kter² °φdφ celou
v²stavbu RPM balφku. Jedna z v∞cφ, kterou spec-soubor m∙╛e
obsahovat, je komentß°. Komentß°e zde zaΦφnajφ znakem k°φ╛ek (#)
na zaΦßtku °ßdku a pokraΦujφ do konce °ßdku. Komentß°e jsou programem
rpm ignorovßny.
Dal╣φ Φßstφ je hlaviΦka. Syntaxe se trochu podobß hlaviΦce internetovΘ
zprßvy podle RFC 822: HlaviΦka je umφst∞na na zaΦßtku spec-souboru a obsahuje polo╛ky ve form∞ °ßdk∙. Ka╛d² °ßdek definuje
hodnotu jednoho tagu (Φesky atributu? Asi ne.) a mß tuto
syntaxi:
tag:hodnota
U jmΘna tagu se nerozli╣ujφ malß a velkß pφsmena a kolem dvojteΦky
mohou b²t bφlΘ znaky (mezery, tabulßtory, ...). Na druhΘ stran∞
syntaxe hodnoty tagu zßvisφ na konkrΘtnφm tagu a obvykle se rozli╣uje
velikost pφsmen. N∞kterΘ tagy mohou mφt jen ΦφselnΘ hodnoty, n∞kterΘ
nesm∞jφ obsahovat urΦitΘ znaky (t°eba pomlΦku), atd. Nynφ uvedu, kterΘ
tagy systΘm RPM rozpoznßvß, a jak je pou╛φt.
- name - nßzev softwaru, kter² se balφ do balφku. DoporuΦuje se,
aby tento tag byl stejn² (vΦetn∞ velikosti pφsmen), jako u zdrojovΘho
archφvu p°φslu╣nΘho softwaru. P°φklady: gcc, ImageMagick.
- version - verze softwaru (to jest verze specifikovanß autorem
softwaru). P°φklady: 2.7.2.1, 19980302beta.
- release - verze RPM balφku danΘho softwaru. ╚asto lze pomocφ release
rozli╣it verze RPM balφku pro r∙znΘ distribuce nebo r∙znß prost°edφ.
Tak╛e pro secure shell s RSAREF knihovnou m∙╛e b²t release
2us, Φili pro pou╛itφ ve Spojen²ch stßtech. Mezinßrodnφ verze
balφku pak m∙╛e mφt tento tag nastaven² na hodnotu 2i.
- summary - jedno°ßdkovß informace o balφku a jeho pou╛itφ. Ji╛ d°φve
jsem uvedl, ╛e podrobn∞j╣φ informaci lze nalΘzt v sekci
%description p°φslu╣nΘho spec-souboru.
P°φklad: Secure Shell - encrypts network communications.
- copyright - krßtkß informace o podmφnkßch ╣φ°enφ balφku.
Nejde o kompletnφ licenci, ale o jejφ shrnutφ nebo nßzev.
P°φklady: GPL, BSD, distributable, postcardware.
- distribution - nßzev distribuce, do kterΘ balφk pat°φ.
P°φklady: Red Hat Linux Rembrandt, Red Hat Power Tools 5.0.
- icon - jmΘno souboru, ve kterΘm je ulo╛ena ikona balφku. RPM systΘm
tento tag nepou╛φvß, ale m∙╛e b²t pou╛it nap°φklad grafick²m sprßvcem
balφk∙, jako je nap°φklad glint. Jde o grafick² soubor
nap°φklad ve formßtu xpm nebo gif.
- vendor - nßzev organizace, kterß je zodpov∞dnß za vznik tohoto
balφku. P°φklad: Red Hat Software, Inc..
- url - domovskß strßnka balφku. RPM tento tag nepou╛φvß, slou╛φ
pouze u╛ivatel∙m balφku jako odkaz na dal╣φ dokumentaci p°φpadn∞
nov∞j╣φ verze softwaru.
- group - tematickß skupina, do kterΘ tento balφk pat°φ. Seznam v╣ech
platn²ch skupin i jejich podskupin lze nalΘzt v souboru groups
v dokumentaΦnφm adresß°i RPM (obvykle /usr/doc/rpm-verze).
P°φklady: Libraries, X11/Games/Strategy.
- packager - jmΘno a kontaktnφ informace (e-mailovß adresa, telefonnφ
Φφslo) Φlov∞ka, kter² konkrΘtnφ balφk vyrobil (p°φpadn∞ adresa
technickΘ podpory, jde-li o v∞t╣φ firmu).
- serial - sΘriovΘ Φφslo softwaru. Pro pot°eby instalace nov²ch verzφ
balφku (upgradovßnφ), ale i pro zßvislosti mezi balφky (kdy balφk
m∙╛e vy╛adovat nap°φklad "balφk pam verze nov∞j╣φ
ne╛ x.y.z"), je pot°eba urΦit, kterß verze softwaru
je nov∞j╣φ ne╛ jinß. V n∞kter²ch p°φpadech je v╣ak "oficißlnφ"
Φφslovßnφ danΘho softwaru natolik kryptickΘ, ╛e nenφ mo╛nΘ
algoritmicky urΦit, kterΘ oznaΦenφ znamenß nov∞j╣φ verzi.
Proto je mo╛nΘ RPM balφku p°i°adit sΘriovΘ Φφslo a toto Φφslo
pou╛φvat p°i (ΦasovΘm) porovnßvßnφ verzφ namφsto skuteΦnΘho oznaΦenφ
verze. Poznamenßvßm je╣t∞, ╛e balφky, obsahujφcφ tag serial
se pova╛ujφ v╛dy za nov∞j╣φ ne╛ balφky bez tohoto tagu.
- provides - jmΘno jednoho nebo vφce "virtußlnφch balφk∙", kterΘ
p°φslu╣n² balφk poskytuje. N∞kterΘ balφky toti╛ nepot°ebujφ ke svΘ
Φinnosti jin² konkrΘtnφ balφk, ale urΦit² typ balφku. Nap°φklad
programy pro doruΦovßnφ po╣ty mohou vy╛adovat existenci programu
pro Φtenφ po╣ty. A je lhostejnΘ, jde-li o exmh, mutt
nebo t°eba gnus. Takov² program pro doruΦovßnφ po╣ty pak
vy╛aduje virtußlnφ balφk s nßzvem (nap°φklad) mail-reader.
A ka╛d² program pro Φtenφ po╣ty bude mφt ve svΘm spec-souboru
uveden tag Provides: mail-reader.
- requires - seznam balφk∙, kterΘ nß╣ balφk vy╛aduje ke korektnφ Φinnosti.
N∞kterΘ zßvislosti jsou generovßny automaticky (zejmΘna zßvislosti
na sdφlen²ch knihovnßch a na interpreterech skript∙), jinΘ lze
specifikovat tφmto tagem. P°φklad: requires: pam >= 0.51 °φkß,
╛e ke sprßvnΘmu provozu danΘho balφku musφ b²t v systΘmu balφk
pam verze aspo≥ 0.51. Je takΘ mo╛no vy╛adovat verzi
balφku podle sΘriovΘho Φφsla: requires: playmidi =S 4 vy╛aduje
jmenovan² balφk sΘriovΘho Φφsla prßv∞ 4.
M∙╛e zde krom∞ jmΘna balφku b²t uveden i jen soubor, kter² je v systΘmu
vy╛adovßn pro korektnφ Φinnost balφku. Tento zp∙sob zßvislostφ
se specifikuje °et∞zcem, kter² zaΦφnß lomφtkem. Nap°φklad
po╣tovnφ klient, odesφlajφcφ po╣tu na standardnφ vstup programu
sendmail v podstat∞ nepot°ebuje balφk sendmail, ale
staΦφ jak²koli balφk, kter² poskytne program /usr/sbin/sendmail.
Do spec-souboru se pak napφ╣e requires: /usr/sbin/sendmail.
- conflicts - seznam balφk∙, kterΘ jsou konfliktnφ (to jest nemohou
b²t v systΘmu instalovßny zßrove≥) s tφmto balφkem. Tento tag
nenφ p°φli╣ Φasto pou╛φvßn, proto╛e v∞t╣ina konflikt∙ je detekovßna
systΘmem RPM u╛ z toho d∙vodu, ╛e navzßjem konfliktnφ balφky
obsahujφ soubory stejnΘho jmΘna a tedy nenφ mo╛nΘ je p°φmo
a zßrove≥ nainstalovat. P°φklad conflicts: inn m∙╛e b²t uvedeno
ve spec-souboru news serveru LeafNode, nechce-li tento b²t
instalovßn zßrove≥ se serverem inn.
- autoreqprov - zapφnß/vypφnß automatickΘ generovßnφ polo╛ek
do seznamu requires (sdφlenΘ knihovny ze spustiteln²ch
program∙ a interpretery skript∙) a do seznamu provides
(.so-jmΘna v╣ech sdφlen²ch knihoven, zabalen²ch v tomto balφku).
PovolenΘ hodnoty jsou yes a no.
- excludearch - upozornφ RPM, aby se nepokou╣el kompilovat balφk
na vyjmenovan²ch architekturßch, proto╛e je znßmo, ╛e na t∞chto
platformßch dan² balφk nefunguje. P°φklad: nenφ-li balφk schopen
b∞╛et na 64-bitov²ch architekturßch, m∙╛eme napsat
excludearch: alpha sparc64.
- exclusivearch - °φkß, ╛e balφk m∙╛e b²t postaven
pouze na vyjmenovan²ch platformßch. Nap°φklad balφk dosemu m∙╛e b∞╛et jen na procesorech x86, tedy exclusivearch: i386 je na mφst∞.
- buildarchitecture - specifikuje architekturu, pro kterou se balφk mß
vytvß°et, bez ohledu na to, na kterΘ platform∞ momentßln∞ b∞╛φ program
rpm, kter² jej vytvß°φ. Tento tag se pou╛φvß zejmΘna pro
tvorbu balφk∙, nezßvisl²ch na architektu°e. Nap°φklad balφk s fonty,
kterΘ jsou pricipißln∞ p°enositelnΘ mezi platformami, m∙╛e obsahovat
tag buildarchitecture: noarch. P°i pou╛itφ rpm -ba na
takov²to spec-soubor na libovolnΘ platform∞ se vytvo°φ balφk
s koncovkou noarch.rpm.
- excludeos - totΘ╛ jako excludearch, ale t²kß se operaΦnφho
systΘmu mφsto architektury. P°φklad: balφk WINE by klidn∞ mohl mφt
excludeos: windows95 :-)
- exclusiveos - analogie k exclusivearch. P°φklad: balφk
util-linux jist∞ m∙╛e mφt exclusiveos: linux.
- buildos - analogie k buildarchitecture.
- prefix - pou╛φvß se p°i tvorb∞ relokovateln²ch balφk∙ (tj.
nezßvisl²ch na umφst∞nφ). Je-li tento tag uveden, musφ ka╛dß cesta
v sekci %files zaΦφnat dan²m adresß°em. Relokovateln² balφk
pak sprßvce m∙╛e instalovat do adresß°e podle svΘ pot°eby
(nap°φklad zvolit mezi /usr/local a /opt). Vytvo°it
relokovateln² balφk ov╣em nenφ tak ·pln∞ jednoduchΘ - samotn²
software musφ b²t nezßvisl² na umφst∞nφ. Nesmφ tedy nap°φklad
obsahovat zakompilovanou cestu ke konfiguraΦnφm soubor∙m, PID-soubor∙m
a podobn∞.
- buildroot - s tφmto tagem jsme se setkali. Navzdory svΘmu jmΘnu
neoznaΦuje adresß°, ve kterΘm probφhß kompilace, ale adresß°,
do kterΘho skript %install ulo╛φ zkompilovanΘ soubory.
Je dobrΘ mφt tento tag v balφku, aby i b∞╛n² u╛ivatel mohl
provßd∞t jeho rekompilaci. Typicky se zde uvßdφ jmΘno ve stylu
/var/tmp/balφk-root. Bez tohoto tagu by b∞╛nΘmu
u╛ivateli selhala sekce %install, jeliko╛ b∞╛n² u╛ivatel
pravd∞podobn∞ nem∙╛e zapisovat do adresß°∙ jako /usr/bin
nebo /usr/doc. Zßrove≥ s definicφ tohoto tagu je ov╣em
nutno upravit skript %install tak, aby instaloval do zde
specifikovanΘho adresß°e. Zde ji╛ tedy nestaΦφ prostΘ make install. ╚asto ale zm∞na nenφ a╛ tak slo╛itß. N∞kdy
postaΦuje p°φkaz typu make PREFIX=$RPM_BUILD_ROOT/usr
install.
- source - jmΘno nebo URL, odkazujφcφ na zdrojov² archφv, ze kterΘho
se dan² balφk vytvß°φ. Tag∙ source lze uvΘst i vφce (dal╣φ
se pak jmenujφ source1, source2 atd. Mφsto
source lze takΘ pou╛φt logick² ekvivalent source0.
Program rpm z hodnoty tohoto tagu bere v ·vahu pouze Φßst
za poslednφm lomφtkem. Soubor tohoto jmΘna se hledß v adresß°i
/usr/src/redhat/SOURCES. URL nebo cesta slou╛φ pouze
jako odkaz na mφsto, odkud byl zdrojov² archφv zφskßn.
P°φklad: balφk ssh mß tyto zdrojovΘ soubory:
Source0: ftp://ftp.cs.hut.fi/pub/ssh/\
ssh-1.2.25.tar.gz
Source1: ftp://ftp.funet.fi/pub/crypt/mirrors/...
Source2: sshd.init.rh50
Source3: ssh.pam
Source4: ftp://ftp.cs.hut.fi/pub/ssh/\
ssh-1.2.25.tar.gz.sig
Zde vyjmenovanΘ soubory mohou, ale nemusejφ b²t pou╛ity ke tvorb∞
binßrnφho RPM balφku, ka╛dopßdn∞ ale jsou za°azeny do zdrojovΘho
RPM balφku (to je t°eba p°φpad v²╣e uvedenΘho source4, kter²
obsahuje PGP podpis zdrojovΘho archφvu a je distribuovßn pouze
pro usnadn∞nφ ov∞°enφ pravosti tohoto archφvu.
- patch - odkazuje zßplatu, pou╛φvanou p°i sestavovßnφ danΘho
softwaru. Podobn∞ jako u tagu source i zßplat m∙╛e b²t vφce
a jsou oznaΦeny tagy patch0 (co╛ je ekvivalent tagu patch),
patch1, patch2 a tak dßle.
- nosource - seznam Φφsel zdrojov²ch soubor∙, kterΘ nemajφ b²t
za°azeny do src.rpm balφku. Pokud licence danΘho softwaru
nepovoluje ╣φ°enφ zdrojovΘ podoby balφku v jinΘ ne╛ p∙vodnφ
podob∞, nebo pokud z jinΘho d∙vodu nechceme n∞kter² ze zdrojov²ch
archφv∙ zahrnout do zdrojovΘho RPM souboru, napφ╣eme jeho Φφslo
do tagu nosource. Pokud si pak u╛ivatel chce postavit
binßrnφ RPM soubor, staΦφ p°φslu╣n² zdrojov² archφv ulo╛it
do /usr/src/redhat/SOURCES a spustit rpm --rebuild na
p°φslu╣n² src.rpm soubor. P°φklad: pokud by nap°φklad
RPM balφk pgp byl distribuovßn z USA, podle tam∞j╣φch zßkon∙
by se vlastn∞ mohl distribuovat jen p°edpis ke kompilaci - zdrojov²
RPM soubor. Pou╛ily by se tyto tagy:
Source0: ftp://.../pgp50.tar.gz
Source1: ftp://.../rsaref.tar.gz
NoSource: 0 1
- nopatch - analogie k nosource pro soubory se zßplatami.
Takto tedy vypadajφ jednotlivΘ polo╛ky hlaviΦky spec-souboru.
V p°φ╣tφ Φßsti se podrobn∞ji zam∞°φme na dal╣φ sekce tohoto souboru
a na jednotlivΘ fßze tvorby RPM balφku.
|