- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka - - p°edchozφ Φßst - nßsledujφcφ Φßst - prvnφ Φßst -

LinuxovΘ noviny 06/98

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.

rpm -ba - detaily

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.

Uvnit° 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.

Tagy pro pojmenovßnφ balφk∙

  • 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.

PopisnΘ tagy

  • 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).

Zßvislosti mezi balφky

  • 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.

Tagy architektury a operaΦnφho systΘmu

  • 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.

Adresß°e

  • 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.

ZdrojovΘ soubory a zßplaty

  • 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. *


- p°edchozφ Φßst - nßsledujφcφ Φßst - prvnφ Φßst - - p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka -