- předchozí článek - následující článek - obsah - úvodní stránka - - předchozí část - následující část - první část -

Linuxové noviny 10/98

Tvorba RPM balíků - pokračujeme

Jan Kasprzak, 1. října 1998

V minulém čísle jsme si přiblížili instalační skripty a spouště RPM balíků a v tomto čísle podrobně prozkoumáme další možnosti programu RPM.

Seznam souborů - sekce %files

Kromě popisu kompilace a instalace balíku, různých tagů a skriptů musíme ještě ve spec-souboru určit, které soubory k našemu balíku patří, případně jejich vlastnosti. Toto specifikujeme v sekci uvozené slovem %files. Syntaxe této sekce je jednoduchá. Na každém následujícím řádku je uvedena cesta k souboru, který se má do výsledného balíku uložit.

Pokud máme seznam souborů, které chceme do balíku zahrnout, již v nějakém souboru (například perl takový seznam pro své moduly umí vyrobit), můžeme za slovem %files uvést přepínač -f a specifikovat cestu k tomuto souboru:

%files -f /usr/lib/mypackage/file.list

Systém RPM pak do balíku uloží soubory uvedené v tomto seznamu a všechny soubory, jejichž jména následují na dalších řádcích za %files.

Kromě seznamu souborů mohou v této sekci být specifikovány i další parametry těchto souborů.

Dokumentační soubory

Již dříve bylo řečeno, že systém RPM považuje některé soubory v balíku za dokumentaci. Seznam všech souborů, patřících k dokumentaci balíku, lze vypsat příkazem rpm -qd. V sekci %files můžeme dokumentační soubor specifikovat tak, že jeho jménu předřadíme direktivu %doc:

%doc /usr/man/man1/gnomovision.1
%doc README COPYING

První řádek je jednoduchý: říká, že soubor /usr/man/man1/gnomovision.1 se má považovat za dokumentaci. RPM ovšem za dokumentaci automaticky považuje každý soubor, jehož jméno začíná /usr/man, /usr/X11R6/man, /usr/doc nebo /usr/info. Druhý řádek je zajímavější: pokud jméno %doc-souboru nezačíná lomítkem, RPM tento soubor hledá v adresáři, kde probíhala kompilace balíku, a tento soubor (nebo soubory) nainstaluje do adresáře se stejným jménem jako balík samotný do /usr/doc (například u balíku bash do /usr/doc/bash-1.14.7/).

Programu rpm můžeme kromě výše uvedených adresářů specifikovat i další adresáře jako dokumentační. Všechny soubory, které z těchto adresářů RPM zabalí do výsledného balíku, budou označeny jako dokumentace. Označení se provede direktivou %docdir adresář. Toto označení ovšem samo o sobě žádné soubory do balíku nevkládá. Příslušné soubory je nutno samostatně specifikovat dále v sekci %files.

Konfigurační soubory

Dalším speciálním typem souborů jsou konfigurační soubory. V předchozích částech tohoto seriálu jsme viděli, že RPM s takto označenými soubory zachází jinak než s běžnými soubory. Jako konfigurační lze soubor označit direktivou %config před jménem souboru:

%config /etc/sendmail.cf

Tato direktiva má ještě další variantu: do kulatých závorek lze uvést jedno nebo více slov z missingok a noreplace. První z těchto slov znamená, že daný konfigurační soubor nemusí existovat. Druhá direktiva říká, že RPM nemá příslušný soubor přepisovat (a ukládat pod jméno soubor.rpmsave). Pokud konfigurační soubor již existuje a má jiný kontrolní součet, než soubor obsažený v balíku, RPM nový soubor uloží pod jménem soubor.rpmnew. Tyto parametry jsou v RPM nově zavedené a nejsou popsány v knize Maximum RPM.

Atributy souborů

Korektně napsaný spec-soubor musí umožnit vytvořit balík nejen superuživateli, ale i běžnému uživateli. Prvním předpokladem pro to je (jak již bylo uvedeno), že sekce %install musí používat vlastnost BuildRoot. Druhým předpokladem je, aby atributy všech souborů byly přímo specifikovány ve spec-souboru. K tomu se používá direktiva %attr se třemi parametry: přístupová práva, vlastník a skupina. Například:

%attr(0644,root,root) %doc README
%attr(0644,root,root) %config(noreplace) \
	/etc/sendmail.cf
%attr(-,root,root) /usr/sbin/newaliases
%attr(4755,root,root) /usr/sbin/sendmail

Přístupová práva se specifikují numericky (oktalově), vlastník a skupina textově. U symbolických linků, kde přístupová práva nemají význam, se uvede znak minus.

Verifikace

Systém RPM umí verifikovat, jestli je balík nainstalovaný správně (pomocí kontroly přístupových práv, kontrolních součtů a verifikačního skriptu). Někdy ovšem nemusí tvůrce balíku chtít kontrolovat všechny atributy souboru. Například je-li soubor modifikován post-instalačním skriptem, neměla by probíhat kontrola času modifikace ani kontrolního součtu. K dosažení tohoto cíle se použije direktiva %verify, která říká, jaké atributy se mají kontrolovat. Maximální verze je následující:

%verify(owner group mode md5 size maj min symlink \
	mtime) /soubor

Tato kontrola je ovšem implicitní. Chceme-li některé kontroly vypnout, použijeme kratší seznam u %verify nebo použijeme slovo not:

%verify(not owner group mode) /dev/ttyS0
%verify(mode md5 size maj min symlink mtime) \
	/dev/ttyS0

Duchové

Jde o další horkou novinku nedokumentovanou v Maximum RPM. Soubor, který je označený jako %ghost, je vypisován jako patřící k danému balíku, ale při verifikaci se nekontroluje jeho existence.

%attr(-,root,root) %ghost /usr/man/man1/ssh.1

Adresáře

Uvedeme-li v seznamu v sekci %files jméno adresáře, RPM do výsledného balíku zabalí tento adresář i všechny soubory a adresáře v něm obsažené. Toto může, ale nemusí, být efekt, který požadujeme. Pokud chceme do balíku přidat jen adresář bez jeho podadresářů a souborů v něm obsažených, je nutno před jeho jméno předepsat direktivu %dir:

%dir /usr/X11R6/lib/X11/fonts/iso-8859-2/
/usr/X11R6/lib/X11/fonts/iso-8859-2/font1.pfa

/usr/X11R6/lib/X11/fonts/iso-8859-2/

První příklad zabalí do RPM balíku pouze adresář a jeden soubor v něm, druhý zabalí adresář i se všemi soubory. Pozor, pokud specifikujeme atributy (direktiva %attr), je nutno uvádět adresář a soubory v něm zvlášť. Adresář totiž má typicky práva 0755, zatímco běžné soubory mají obvykle 0644. Naštěstí RPM umožňuje do sekce %files napsat i řetězce obsahující hvězdičku. Druhý příklad by pak mohl mít tento ekvivalent (s lepší kontrolou přístupových práv):

%attr(0755,root,root) \
	%dir /usr/X11R6/lib/X11/fonts/iso-8859-2/
%attr(0644,root,root) \
	/usr/X11R6/lib/X11/fonts/iso-8859-2/*

Příště si povíme o makrech v RPM balících. *


- předchozí část - následující část - první část - - předchozí článek - následující článek - obsah - úvodní stránka -