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.