- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka - | - p°edchozφ Φßst - nßsledujφcφ Φßst - prvnφ Φßst - |
LinuxovΘ noviny | 07/98 | |||
| ||||
V minulΘm Φφsle na╣eho serißlu o systΘmu RPM jsem zaΦal detailn∞ popisovat formßt spec-souboru, kter² °φdφ vytvß°enφ RPM balφku. Vysv∞tlil jsem, jak² v²znam majφ jednotlivΘ tagy v hlaviΦce souboru, a nynφ budu pokraΦovat v²kladem o dal╣φch sekcφch spec-souboru. N∞kterΘ sekce jsou povinnΘ, jinΘ nepovinnΘ. Sekce zaΦφnß znakem % a sv²m nßzvem na zaΦßtku °ßdku. Po°adφ sekcφ ve spec-souboru nenφ definovßno - zde budou jednotlivΘ sekce uvedeny v jakΘmsi logickΘm uspo°ßdßnφ. Se sekcφ %description jsme se u╛ setkali. Tato sekce je povinnß a obsahuje textovou informaci o urΦenφ a pou╛itφ balφku. Tuto sekci vyu╛φvß nap°φklad instalaΦnφ program Red Hat Linuxu, kdy╛ se klßvesou F1 dotß╛eme na podrobn∞j╣φ informace o balφku. Dal╣φ sekce je nazvanß %changelog a jak ji╛ jejφ nßzev pravφ, zachycuje protokol o zm∞nßch ve spec-souboru (nikoli tedy v softwaru samotnΘm. JednotlivΘ zßznamy zaΦφnajφ hv∞zdiΦkou na prvnφ pozici °ßdku, nßsleduje datum a jmΘno Φlov∞ka, kter² zm∞nu provedl. Na dal╣φch °ßdcφch pak m∙╛e b²t popis zm∞ny. P°φklad Φßsti sekce %changelog z balφku ssh je na v²pisu P°φklad sekce changelog.
Sekce %prepTato sekce ji╛ nenφ jen pouh² text, ale je to shellov² skript. ┌kolem tohoto skriptu je rozbalit p°φslu╣nΘ zdrojovΘ archivy a nainstalovat pot°ebnΘ zßplaty. Tento skript (stejn∞ jako skripty z dal╣φch sekcφ) je spu╣t∞n shellem s parametrem -e, kter² °φkß, ╛e shell mß ukonΦit provßd∞nφ skriptu s chybou, skonΦφ-li libovoln² z p°φkaz∙ ve skriptu s chybou (s nenulovou nßvratovou hodnotou). Na tuto skuteΦnost je pot°eba pamatovat p°i psanφ skript∙. Nenφ nap°φklad mo╛nΘ pou╛φvat konstrukce typu
test -r /etc/ssh/ssh_host_key && ssh-keygen blabla Namφsto toho je nutnΘ pou╛φt nßsledujφcφ ekvivalent:
if test -r /etc/ssh/ssh_host_key; then ssh-keygen blabla; fi Skript z tΘto sekce, stejn∞ jako ostatnφ skripty, mß k dispozici n∞kterΘ specißlnφ prom∞nnΘ prost°edφ. Uvßdφm je zde spolu s p°φklady hodnot nebo s implicitnφmi hodnotami:
MakraSkript %prep vykonßvß ve v∞t╣in∞ balφk∙ podobnou Φinnost - vezme soubor SourceN a rozbalφ jej v p°φslu╣nΘm adresß°i, m∞l by nastavit sprßvn∞ vlastnφka a p°φstupovß prßva v∙bec, a dßle aplikuje zßplaty. Tato Φinnost se opakuje natolik Φasto, ╛e pro ni systΘm RPM poskytuje makra - tedy zkratky pro vφce p°φkaz∙. Takov² typick² %prep-skript s jednφm zdrojov²m archivem a jednou zßplatou pak vypadß asi takto:
%prep %setup %patch -p1 Makro %setup vezme zdrojov² archiv, uveden² v hlaviΦce jako Source, resp. Source0, rozbalφ jej do adresß°e BUILD, zm∞nφ vlastnφka v╣ech soubor∙ na superu╛ivatele (to pouze v p°φpad∞, ╛e balφk vytvß°φ superu╛ivatel) a nastavφ bity r a x pro v╣echny u╛ivatele. Makro %patch aplikuje zßplatu, uvedenou v hlaviΦce jako patch, resp. patch0. P°epφnaΦ -p1 z na╣eho p°φkladu je p°edßn programu patch(1). Skript %prep samoz°ejm∞ nemusφ sestßvat pouze z volßnφ maker %setup a %patch. M∙╛e obsahovat i dal╣φ p°φkazy, nap°φklad je-li program konfigurovßn pomocφ systΘmu GNU autoconf a modifikujeme-li konfiguraΦnφ soubor configure.in, m∙╛eme v tΘto sekci p°egenerovat skript configure p°φkazem autoreconf (tuto konstrukci naleznete mimo jinΘ i ve spec-souboru Secure Shellu - tam se p°idßvß podpora pro PAM do configure.in, a musφ se tedy p°egenerovat configure. Krom∞ toho makra mohou mφt i parametry, kter²mi se specifikujφ dal╣φ vlastnosti. K t∞mto vlastnostem se vrßtφme v dal╣φm dφle na╣eho serißlu.
Sekce %build - kompilace softwaruTato sekce, stejn∞ jako p°edchozφ, je interpretovßna jako shellovsk² skript. Tento skript by m∞l provΘst vlastnφ kompilaci softwaru. Ve v∞t╣in∞ p°φpad∙ si vystaΦφme s nßsledujφcφ formou:
%build ./configure make CFLAGS="$RPM_OPT_FLAGS" all P°φkazu configure, pokud jej program podporuje, m∙╛eme samoz°ejm∞ dßvat i dal╣φ parametry (t°eba --with-gcc --prefix=/usr). Tohle je v∙bec dost diskutabilnφ v∞c: podle Linux Filesystem Hierarchy Standard (FHS, d°φve FSSTND) by lokßln∞ instalovan² software m∞l b²t instalovßn do adresß°e /usr/local, zatφmco software, kter² pat°φ k systΘmu samotnΘmu by m∞l b²t v /usr. Ov╣em je software, kter² zabalφte do RPM a distribuujete, souΦßstφ systΘmu, nebo je spφ╣ blφ╛e lokßlnφ instalaci? M∙j nßzor na tuto problematiku je ten, ╛e /usr/local bylo zavedeno proto, aby bylo mo╛nΘ ty lokßln∞ instalovanΘ v∞ci odli╣it. Ale mßme-li RPM, mßme na odli╣enφ jinΘ a lep╣φ prost°edky (nap°φklad polo╛ku Distribution nebo Packager v hlaviΦce RPM balφku). Moje RPM balφky se tedy instalujφ p°φmo do systΘmov²ch adresß°∙, nikoliv do /usr/local.
Sekce %install - instalace softwaruInstalaΦnφ sekce je takΘ shellovsk² skript. ┌Φelem tohoto skriptu je p°emφstit konfiguraΦnφ soubory, zkompilovanΘ binßrnφ soubory, dokumentaci a r∙znΘ dal╣φ soubory na mφsto jejich pou╛itφ. ┌pln∞ nejjednodu╣╣φ formou tΘto sekce je p°φkaz make install. Ale chceme-li umo╛nit rekompilaci RPM balφku i u╛ivateli, kter² nenφ superu╛ivatelem, m∞li bychom spec-soubor navrhovat tak, aby pou╛φval tag BuildRoot. Pak instalace probφhß do adresß°e $RPM_BUILD_ROOT mφsto ko°enovΘho adresß°e. V∞t╣ina Makefile-soubor∙ p°edpoklßdß, ╛e bude k dispozici aspo≥ zßkladnφ struktura adresß°∙ a soubor∙ v systΘmu. Proto v∞t╣inou v tΘto sekci musφme pot°ebn² strom adresß°∙ p°edem vytvo°it. Sekce pak m∙╛e vypadat takto:
%install mkdir -p ${RPM_BUILD_ROOT}/usr/{bin,lib,man/man1} make prefix="${RPM_BUILD_ROOT}/usr" install Je dobrΘ v∞d∞t, ╛e ne v╣echny programy jsou schopny b²t kompilovßny s jin²m prefixem, ne╛ se kter²m jsou pak instalovßny. V takov²ch p°φpadech nezbude ne╛ ruΦn∞ zjistit, co p°esn∞ d∞lß p°φkaz make install, a jeho Φinnost pak nasimulovat v sekci %install s p°φslu╣n²m BuildRoot. U n∞kter²ch balφk∙ je i tento postup p°φli╣ nßroΦn², a proto se instalujφ p°φmo na mφsto urΦenφ. Takov²to balφk pak ov╣em m∙╛e rekompilovat jen superu╛ivatel. P°φkladem takovΘho balφku je nap°φklad tetex. Pokud balφk nepou╛φvß BuildRoot, je podstatn∞ nßroΦn∞j╣φ jej odladit. TakovΘto lad∞nφ a pokusnß instalace by m∞ly probφhat na jinΘm poΦφtaΦi, ne╛ vlastnφ kompilace. M∙╛e se toti╛ stßt (a je t∞╛kΘ to odhalit), ╛e do balφku zapomeneme p°ibalit n∞kter² d∙le╛it² soubor. Na p∙vodnφm poΦφtaΦi v╣e funguje, proto╛e tento soubor tam zbyl po make install. Jinde balφk ale sel╛e.
Sekce %clean - smazßnφ meziprodukt∙Pokud p°i kompilaci vznikajφ n∞jakΘ meziprodukty mimo adresß° BUILD, nap°φklad v /tmp, je na sekci %clean, aby tyto meziprodukty promazala.
V p°φ╣tφ Φßsti tohoto serißlu se dozvφme, jak specifikovat soubory
pat°φcφ k balφku a jakΘ dal╣φ skripty mohou ve spec-souboru b²t.
|
- p°edchozφ Φßst - nßsledujφcφ Φßst - prvnφ Φßst - | - p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka - |