Balíčky pro Debian - 5. Debhelper a ti druzí
V minulém díle jsme sice vytvořili první balíček. Zatím jsme moc nezkoumali co zapříčinilo, že se nám vlastně zkompiloval.
Jak již zaznělo v minulém díle, soubor debian/rules obsahuje Makefile,
který zapříčiní vytvoření balíčku. Napsat vše co je potřeba pro vytvoření
balíčku přímo do tohoto souboru asi není nejlepší, takže vzniklo několik
nástrojů, které nám práci usnadní. Nejstarší a dnes již nepodporovaný byl
debmake. Dnes již však téměř všechny balíčky používají debhelper. Ten se
skládá ze sady mnoha příkazů, kde každý má na starosti jednu konkrétní část
tvorby balíčku.
Nadstavby nad Debhelperem a jeho náhrady
Debhelper samozřejmě není jediný nástroj, který lze pro vytváření balíčků
použít. Existuje mnoho projektů které se snaží debian/rules ještě
zjednodušit, nebo případně automaticky generovat. Debhelper je však zdaleka
nejpoužívanější a některé nadstavby jej stejně používají.
Nejrozšířenější nadstavba je bezpochyby CDBS. Jedná se o sady include skriptů
pro make, které u balíčků které se chovají standardně (například GNOME
programy, Pythonovské moduly a podobně) umožní zcela vynechat vlastní psaní
pravidel. Stačí do debian/rules napsat vhodné include a vše bude automaticky
fungovat. Za vším tímto je však stále schován debhelper a pokud nám něco
přestane fungovat, nevyhneme se jeho naučení.
Dalším zajímavým projektem je YADA. Ten jde cestou podobnou RPM a veškeré
informace o balíčku jsou uloženy v souboru debian/packages. YADA pak z něj
vygeneruje debian/control, debian/rules a případně i další skriptíky.
Tímto nástrojem se však zabývat nebudu, protože s ním nemám žádné zkušenosti.
Debhelper
Naším hlavním pomocníkem při vytváření debian/rules je tedy
Debhelper. Ten se v současné době
skládá téměř z padesáti skriptů, z nichž má každý na starosti jinou část
vytváření balíčku. Když se podíváme do našeho balíčku, zjistíme, že se jich i
v takto jednoduchém balíčku používá poměrně dost. Hlavní příčina toho je, že
každý skript se stará právě o jednu věc a tím je umožněna dostatečná
granularita vytváření našeho skriptu.
Všechny příkazy Debhelperu najdete zdokumentované v man stránkách, takže kdykoliv potřebujete o některém z nich podrobnější informace, příkaz man vám pomůže. Ty nejdůležitější si však popíšeme, buďto dnes nebo v některém z následujících dílů.
Jak vlastně celkové vytváření balíčku funguje? Nejprve se standardně
zkompiluje, instalace se pak provádí do adresáře debian/jméno-binárního-balíčku, kde
se pak provedou závěrečné úpravy a tento adresář se zabalí do finálního
balíčku. Pokud náš zdrojový balíček vytváří více balíčků, obvykle se instaluje
do adresáře debian/tmp a jednotlivé části se pak za pomoci skriptů z
debhlepera nakopíruje do správného adresáře pro daný balíček.
dh_testdir
Tento příkaz by se měl objevit na začátku každého pravidla a jediné co má na starosti je zkontrolovat, jestli se nacházíte ve správném adresáři (tedy nejvyšším adresáři zdrojáků).
dh_testroot
Další příkaz, který se vyskytuje často. Tentokrát jen pro pravidla, která
mohou vytvářet soubory s právy superuživatele, tedy pro cíle jako install,
clean, binary-arch a binary-indep. Jak již jeho název napovídá jen
kontroluje, jestli máte dostatečná oprávnění. Jak již jsem upozorňoval v
minulém díle, tak balíčky se nekompilují pod skutečným superuživatelem, ale v
prostředí fakeroot.
dh_clean
Vyčistí adresář debian od dočasných souborů vzniklých při kompilaci a
instalaci.
dh_install*
Skripty začínající na dh_install mají na starosti instalaci různých druhů
souborů na správná místa do balíčků. Protože se jedná o poněkud obsáhlejší
téma, bude jejich podrobnějšímu popisu věnován další díl.
dh_link
Skript dh_link slouží pro vytváření symbolických odkazů a opravu těch
existujících podle Debian Policy. Pro vytváření se zadávají parametry ve
stejném pořadí jako u příkazu ln.
dh_strip
Tento skript odstraní ladicí symboly z programů a knihoven v balíčku. Tím se
sice balíček zmenší, ale v případě pádu je obtížnější získat přesný popis
problému. Proto je doporučeno u většiny knihoven ještě vytvářet -dbg
balíček, který bude obsahovat tyto ladicí symboly. Obsah tohoto balíčku
vygeneruje dh_strip automaticky po zadání parametru
--dbg-package=jméno-debug-balíčku.
dh_compress
Projde nainstalovanou dokumentaci a soubory větší než 4 KB zabalí gzipem.
dh_fixperms
Opraví práva u souborů v balíčku. Opraví například chybná práva pro standardní adresáře, odstraní setuid a setgid bity a podobně.
dh_installdeb
Zkopíruje skripty a informace o balíčku do adresáře
debian/jméno-binárního-balíčku/DEBIAN. Z tohoto adresáře se po vytvoření
balíčku stane archív control.tar.gz.
dh_shlibdeps
Zjistí závislosti na sdílených knihovnách a vytvoří proměnné pro nahrazení v
závislostech, které posléze použije dh_gencontrol.
dh_gencontrol
Nahradí proměnné v souboru debian/control a zapíše verzi do
debian/jméno-binárního-balíčku/DEBIAN/control.
dh_md5sums
Spočítá MD5 kontrolní součty souborů v balíčku a uloží je jako
debian/jméno-binárního-balíčku/DEBIAN/md5sums.
dh_builddeb
Vytvoří binární balíček. Tento skript v podstatě jen zavolá dpkg-deb s
vhodnými parametry a ten se již postará o vlastní vytvoření balíčku.
dh
Na závěr jsem si nechal nový přírůstek do rodiny debhelpera, jedná se o
odpověď na různé zjednodušování debian/rules pomocí CDBS a podobných. Skript
dh je pro standardní balíčky (v současné době používající autoconf,
distutils, nebo Build.PL) schopen provést veškeré potřebné kroky a v případě
ideálního balíčku může být soubor debian/rules zjednodušen až na tři řádky:
#!/usr/bin/make -f
%:
dh $@
Ve skutečném světě to tak jednoduché většinou není, ale i tak si pomocí tohoto nástroje můžeme ušetřit dost práce.
Závěr
No nyní již máme stručný přehled toho co se při vytváření děje a příště se podíváme na část, kterou jsme dnes poněkud vynechali - instalaci souborů do správných balíčků a na správné místo.