- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka - | - p°edchozφ Φßst - nßsledujφcφ Φßst - prvnφ Φßst - |
LinuxovΘ noviny | 08-09/98 | ||
| |||
V minul²ch Φφslech Linuxov²ch novin jsme si ukßzali zßkladnφ sekce spec-souboru. Nynφ budeme pokraΦovat popisem skript∙, kterΘ ve spec-souborech mohou b²t.
InstalaΦnφ skriptyJak ji╛ bylo n∞kolikrßt °eΦeno, RPM balφk m∙╛e obsahovat skripty, kterΘ se spustφ p°ed instalacφ balφku, po instalaci, p°φpadn∞ p°ed nebo po odinstalovßnφ balφku. V╣echny tyto skripty dostanou od RPM prom∞nnou prost°edφ RPM_INSTALL_PREFIX udßvajφcφ, do kterΘho adresß°e se balφk instaluje. Tato prom∞nnß se pou╛ije pouze u balφk∙, kterΘ nemusφ b²t instalovßny v pevnΘ adresß°ovΘ struktu°e (mohou bez problΘm∙ b²t nap°φklad v /usr/local nebo v /opt. P°φslu╣nΘ skripty jsou ve spec-souboru uvozeny jednφm z nßsledujφcφch slov podle toho, o kter² typ jde:
%pre %preun %post %postun Samoz°ejm∞ ne v╣echny Φty°i skripty je nutno uvΘst. Tyto skripty jsou jen jako v²pomoc pro p°φpady, kdy nestaΦφ pouze nainstalovat soubory danΘho balφku, ale je je╣t∞ pot°eba ud∞lat n∞co dal╣φho (nap°φklad p°idat resp. odebrat zßznam z /etc/shells, jde-li o balφk shellu). Pokud upgradujeme dan² balφk, jsou spu╣t∞ny nejprve pre- a post-instalaΦnφ skripty z novΘ verze, a potom teprve pre- a post-uninstall skripty ze star╣φ verze, jak lze poznat nap°φklad napsßnφm malΘho RPM balφku s testovacφmi v²pisy v t∞chto skriptech:
# rpm -U a-2-2.noarch.rpm Here is a pre v2 script 2. Here is a post v2 script 2. Here is a preun v1 script 1. Here is a postun v1 script 1.
Jak rozpoznat instalaci od upgrade?╚asto ve zmi≥ovan²ch skriptech chceme vykonat n∞jakou akci pouze v p°φpad∞, kdy jde o prvnφ instalaci danΘho balφku (tedy nikoliv p°i upgradu). P°φkladem m∙╛e b²t p°idßnφ (pseudo)u╛ivatele, kterΘho nß╣ balφk pot°ebuje ke svΘ Φinnosti. V tomto konkrΘtnφm p°φpad∞ je sice mo╛nΘ podφvat se do /etc/passwd, jestli tam u╛ tento u╛ivatel nenφ, ale jsou i p°φpady, kdy tato detekce nenφ mo╛nß nebo je p°φli╣ nßroΦnß. Pro p°φklad nemusφme chodit daleko - staΦφ vzφt post-uninstall skript, ve kterΘm chceme zru╣it u╛ivatele z /etc/passwd. Jak zjistit, jestli jde o skuteΦnΘ ru╣enφ balφku, nebo jestli se jen post-uninstall skript volß proto, ╛e je systΘm prßv∞ upgradovßn na nov∞j╣φ verzi balφku?SystΘm RPM pro tento p°φpad nabφzφ skript∙m Φφseln² argument (dostupn² ze shellu jako $1), kter² °φkß, kolik instancφ danΘho balφku bude v systΘmu po dokonΦenφ akce nad aktußlnφm balφkem. V p°φpad∞ instalace tedy %post a %pre skripty dostanou parametr 1, zatφmco v p°φpad∞ upgrade je parametr 2. Obdobn∞ skripty %postun a %preun dostanou v p°φpad∞ upgrade parametr 1, zatφmco v p°φpad∞ ·plnΘho ru╣enφ balφku parametr 0. Nß╣ testovacφ balφk z p°edchozφho odstavce vypisuje parametr skriptu jako poslednφ slovo. Pokud tento balφk odinstalujeme, dostßvßme nßsledujφcφ:
# rpm -e a Here is a preun v2 script 0. Here is a postun v2 script 0.
VerifikaΦnφ skriptTento skript, uvozen² slovem %verifyscript je spou╣t∞n v okam╛iku kontroly danΘho balφku (rpm -V). Je zde mo╛nΘ nap°φklad kontrolovat, jestli je sprßvn∞ konfigurace balφku, jestli je (nap°φklad) nß╣ shell uveden v /etc/shells, jsou-li vytvo°eni p°φslu╣nφ u╛ivatelΘ a podobn∞.VerifikaΦnφ skript, stejn∞ jako Φty°i p°edchozφ skripty, je spou╣t∞n programem /bin/sh. Pokud chceme mφt skript v jinΘm programovacφm jazyce, je mo╛no pou╛φt p°epφnaΦ -p interpret, nap°φklad:
%pre -n /usr/bin/perl print "Just another perl hacker.\n";
Spou╣t∞Pod slovem v nadpisu se skr²vß p°eklad anglickΘho triggers. Z databßzφ znßme spou╣t∞ jako procedury, kterΘ se spustφ v okam╛iku modifikace n∞kterΘ urΦitΘ databßzovΘ polo╛ky. V RPM je tato vlastnost horkou novinkou (a nenφ ani popsßna v Maximum RPM). PodrobnΘ informace se lze doΦφst na adrese http://www.rpm.org/support/RPM-Changes-6.html.Co jsou spou╣t∞ a k Φemu je lze pou╛φt? Jde o skript, kter² je souΦßstφ n∞jakΘho balφku, a kter² se spou╣tφ v p°φpad∞, ╛e systΘm RPM n∞jak²m zp∙sobem manipuluje (instaluje, upgraduje, ru╣φ) s jin²m balφkem. Ve zmi≥ovanΘ dokumentaci je p°φklad, kdy n∞jak² hypotetick² po╣tovnφ klient mß sv∙j symbolick² link /etc/mymail/mymailer, kter² ukazuje na p°φslu╣n² MTA (mail transport agent), nainstalovan² v systΘmu. A jsou zde uvedeny dv∞ spou╣t∞ - jedna pro balφk sendmail http://www.sendmail.org a druhß pro vmailer http://www.porcupine.org/vmailer. A tyto skripty majφ prßv∞ na starost vytvß°enφ onoho linku. Tento p°φklad je dosti um∞l², proto╛e po╣tovnφ klienti um∞jφ bu∩to SMTP, nebo um∞jφ nov² mail dßt na vstup programu /usr/sbin/sendmail. A MTA zase obsahuje program, link nebo skript /usr/sbin/sendmail, kter² slou╛φ pro odeslßnφ po╣ty, a MTA umφ i SMTP. Jß jsem s ·sp∞chem pou╛il spou╣╗ v balφku groff-latin2, kdy je pot°eba modifikovat konfiguraΦnφ soubor groffu. Tak╛e mßm skript, kter² toto ud∞lß v╛dy, kdy╛ je groff instalovßn nebo upgradovßn. Mechanismus spou╣tφ se v∙bec dob°e hodφ pro balφky, kterΘ modifikujφ soubory, pat°φcφ jin²m balφk∙m. Jak se pou╛ije spou╣╗? Jde o shellovsk² (nebo i jin²) skript, uvozen² jednφm z nßsledujφcφch slov:
%trigger %triggerin %triggerun %triggerpostun Za tφmto slovem jsou uvedeny p°epφnaΦe (nap°φklad -p interpret), nßsledujφ dva mφnusy (--) a pak specifikace tzv. "cφlovΘho" balφku, tedy balφku, pro kter² se mß danß spou╣╗ spustit. Specifikace mß stejnou syntaxi jako tag Requires: v hlaviΦce spec-souboru. M∙j balφk groff-latin2 nap°φklad mß tuto spou╣╗:
%trigger -- groff Slo╛it∞j╣φ spou╣╗ by mohla b²t uvozena takto:
%trigger -p /usr/bin/perl -- balφk2 >= 2.1.117
Kdy se spou╣╗ spustφ?
V p°φ╣tφ Φßsti si povφme o tom, jak vytvß°et seznam soubor∙ obsa╛en²ch
v RPM balφku a takΘ o problematice maker.
|
- p°edchozφ Φßst - nßsledujφcφ Φßst - prvnφ Φßst - | - p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka - |