Balíčky pro Debian - 9. Užitečné nástroje
Jaké nástroje nám mohou usnadnit práci s údržbou balíčků? Za léta existence Debianu jich vzniklo mnoho, dnes se podíváme na ty nejdůležitější.
Kontrola balíčku - lintian
Bez tohoto nástroje se určitě neobejde, pokud budete chtít svůj balíček dostat do distribuce, protože to je první věc, kterou budou ostatní kontrolovat. Jedná se o nástroj pro automatické zjišťování chyb, které tvůrce balíčku spáchal. V poslední době prožívá poměrně bouřlivý vývoj, takže je vhodné používat vždy poslední verzi z unstable, protože jen tak získáte nejaktuálnější sadu kontrol.
Jak jeho výstup může vypadat se podívejte na následujícím výpisu (jako příklad zde posloužil balíček, který jsem právě kontroloval):
$ lintian deejayd_0.6.3-1_i386.changes
W: deejayd: spelling-error-in-description gstreamer GStreamer
První písmeno určuje závažnost problému (E - chyba, W - varování, I -
informace, N - poznámka), následuje jméno balíčku (ať už binárního nebo
zdrojového), tag chyby a případné podrobnější informace. Ve výchozím nastavení
se informační hlášky nezobrazují, nicméně je dobré si je zapnout pomocí
přepínače -I
, protože většinou se stejně jedná o naší chybu. Dalším
důležitým přepínačem je -i
, kterým se zobrazí podrobnější popis nalezeného
problému (pokud nám z tagu není jasné v čem je vlastně problém). Kompletní
výpis pak může vypadat takto:
$ lintian -Ii deejayd_0.6.3-1_i386.changes
I: deejayd source: build-depends-without-arch-dep docbook-xsl
N:
N: The control file lists the given package in Build-Depends, but no
N: architecture-dependent packages are built. If all the packages built
N: are architecture-independent, the only packages that should be listed
N: in Build-Depends are those required to run the clean target (such as
N: debhelper if you use dh_clean). Other build dependencies should be
N: listed in Build-Depends-Indep instead.
N:
N: Refer to Policy Manual, section 7.6 for details.
N:
I: deejayd source: build-depends-without-arch-dep python-central
I: deejayd source: build-depends-without-arch-dep xsltproc
W: deejayd: spelling-error-in-description gstreamer GStreamer
N:
N: Lintian found a spelling or capitalization error in the package
N: description. Lintian has a list of common misspellings that it looks
N: for. It does not have a dictionary like a spelling checker does. It is
N: particularly picky about spelling and capitalization in package
N: descriptions since they're very visible to end users.
N:
Nyní již našel lintian
více problémů a také nám napsal více informací, jak
je opravit. Pokud jste vzorně vypracovávali domácí úkoly, zkuste si nyní váš
balíček zkontrolovat a opravte nalezené chyby.
Dalším nástrojem pro kontrolu balíčků je linda
, která kdysi vznikla z důvodu
nespokojenosti s lintianem, ale v dnešní době již nic zásadního navíc nenabízí
a klidně ji můžeme ignorovat, protože testy, které přinášela navíc jsou již v
současné době začleněny do lintianu.
Kontrola aktuálnosti balíčku - uscan
a uupdate
V prvním díle jsme zmínili soubor debian/watch
a tentokrát se na něj
podíváme podrobněji. Program uscan
načte tento soubor a pokusí se na
webových stránkách v něm definovaných najít nejnovější dostupnou verzi
programu. Jak vypadá soubor debian/watch
pro dříve rozebíraný balíček
photo-uploader
vidíte na následujícím výpisu:
version=3
http://dl.cihar.com/photo-uploader/latest/photo-uploader-(.*)\.tar.gz
Na prvním řádku určíme verzi, kterou používáme, a na dalším je definováno, kde
má uscan
hledat aktuální verze programu. Vyhledávání se provádí pomocí
regulárního výrazu a část v závorkách určuje verzi programu (pokud je závorek
víc, jsou tyto části pospojovány tečkami a dohromady určují verzi). Můžeme zadat
jediné URL (jako je na našem příkladu) nebo URL, které má program stáhnout a
regulární výraz, který má být ve stránce vyhledáván, například:
version=3
http://news.tiker.net/dl/software/tagpy /news.tiker.net/download/software/tagpy/tagpy-(.*)\.tar\.gz
Jestli je balíček aktuální pak zjistíme programem uscan
:
$ uscan --report-status
Processing watchfile line for package photo-uploader...
Newest version on remote site is 0.5, local version is 0.5
=> Package is up to date
Program umí i přímo stáhnout nový tarball a přebalit ho do .tar.gz
. Pokud má
zabalený program z nějakého důvodu jinou verzi než náš balíček (například jsme
museli zdrojové kódy přebalit z licenčních důvodů), je možné pomocí dalších
parametrů v souboru debian/watch
zadat téměř libovolné přejmenovávání verzí.
Ve spojení s aktualizací balíčku na novou verzi se ještě může hodit uupdate
,
který aktualizuje balíček na novější verzi pomocí nového tarballu (který jsme
stáhli uscanem). Bohužel pro většinu situací, kdy je balíček spravován ve VCS
se tento nástroj moc nehodí, takže od jeho používání se ustupuje.
Stahování a nahrávání balíčků - dget
a dput
Poslední nástroje, na které se dnes podíváme, jsou dget
a dput
. Ty slouží
pro stahování a nahrávání balíčků. Protože zdrojový balíček se obvykle skládá
z více souborů, tak nám ušetří několik kroků, které by bylo nutné provést.
Použití dget
je jednoduché - stačí mu předhodit URL s .dsc
souborem a on
se postará o ostatní. Případně nám i balíček rovnou rozbalí (pokud zadáme
parametr -x
):
$ dget -x http://ftp.cz.debian.org/debian/pool/main/e/enca/enca_1.9-1.dsc
dget: retrieving http://ftp.cz.debian.org/debian/pool/main/e/enca/enca_1.9-1.dsc
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 582 100 582 0 0 3985 0 --:--:-- --:--:-- --:--:-- 0
dget: retrieving http://ftp.cz.debian.org/debian/pool/main/e/enca/enca_1.9.orig.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 657k 100 657k 0 0 432k 0 0:00:01 0:00:01 --:--:-- 480k
dget: retrieving http://ftp.cz.debian.org/debian/pool/main/e/enca/enca_1.9-1.diff.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 17257 100 17257 0 0 60397 0 --:--:-- --:--:-- --:--:-- 106k
dpkg-source: extracting enca in enca-1.9
dpkg-source: unpacking enca_1.9.orig.tar.gz
dpkg-source: applying ./enca_1.9-1.diff.gz
Pro nahrávání zase slouží dput
. Tomu jako parametry dáváme kam nahrát a
soubor .changes
, který jsme získali kompilací balíčku. Umístění kam
nahráváme musíme mít nadefinované v konfiguračním souboru ~/.dput.cf
(tedy
kromě nahrávání přímo do Debianu resp. Ubuntu, které je výchozí). Jak bude
vypadat pro nahrávání přes scp vidíte níže, pro případné podrobnější informace
o formátu konfigurace se podívejte do dokumentace.
[example]
fqdn = ssh.example.com
login = nijel
method = scp
incoming = /tmp
Pro nahrávání můžete použít i další nástroj - dupload
. Asi není důvod ho
používat, ale pro úplnost ho zde zmiňuji. Samozřejmě používá jinou konfiguraci
než dput
a jako největší rozdíl vidím fakt, že v současné době není aktivně
udržován.
Kompilace balíčků - pbuilder
, buildd
Pokud už máme nějaký zdrojový balíček a chceme z něj vytvořit binární, nemusí
se nám vždy hodit dpkg-buildpackage
a instalování všech závislostí pro
kompilaci do systému, který používáme. Pro tyto účely vznikl pbuilder
, který
se chová podobně jako buildd
, jenž se stará o kompilaci balíčků na build
serverech.
Protože pbuilder
při běhu provádí chroot, musí být spouštěn pod uživatelem
root. Před prvním použitím si musíme nejdříve připravit základní build
systém, který se bude při kompilaci balíčků používat. O to se postará příkaz
pbuilder create
a tím vzniklý tarball můžeme kdykoliv aktualizovat (a měli
bychom to dělat pravidelně) pomocí pbuilder update
.
Jakmile máme tento systém připravený, můžeme již začít kompilovat balíčky.
pbuilder
vždy nejdříve nainstaluje potřebné balíčky a pak spustí kompilaci
našeho balíčku. Pro zjednodušení používání existuje ještě wrapper pdebuild
,
který můžeme použít stejně jako dpkg-buildpackage
. Výsledné balíčky se
standardně ukládají do /var/cache/pbuilder/result/
, ale pomocí přepínače
--buildresult
je můžete uložit do libovolného adresáře.
Pokud chcete balíček dostat do distribuce, je vhodné si jeho kompilaci
vyzkoušet v pbuilderu. Získáte tím totiž stejné prostředí jako používá
buildd
a tudíž máte možnost odhalit případné problémy, které při kompilaci
na build serverech nastanou (například chybějící závislosti).