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