Michal Čihař - Balíčky pro Debian - 12. Závěr, aneb co se jinam nevešlo

Balíčky pro Debian - 12. Závěr, aneb co se jinam nevešlo

Předchozích jedenáct dílů vás provedlo základy vytváření balíčků pro Debian. Tento poslední díl je jakási všehochuť doplňující některé chybějící informace a drobné změny ke kterým došlo než byl seriál dopsán, nebo které se chystají.

Verze balíčků

Verze balíčku je ve většině případů jen kombinací verze zabaleného software a revize balíčku pro Debian, tedy něco jako 1.2.3-1. Bohužel ne vždy je to tak jednoduché a verze může klidně narůst do obludností jako například 3:3.10.dfsg.4~r3724-1.1+b1. Obecně můžeme popsat verzi jako [epocha:]verze_programu[-revize_balíčku], kde jediná povinná část je verze programu, ostatní nemusí být použity.

Porovnávání verzí postupuje zleva doprava a vždy je nejdříve lexikálně porovnána nenumerická část a poté numerická část jako čísla a tyto kroky se opakují, dokud je co porovnávat. Nevyplněná epocha se považuje za 0, stejně tak jako nepoužitá revize. Lexikografické porovnání je trochu zvláštní -- nejnižší hodnotu má tilda (~), která má dokonce menší hodnotu než prázdný text, poté všechna písmena a nakonec ostatní povolené znaky (+, ., případně - a :). Porovnání si můžete vyzkoušet pomocí dpkg --compare-versions.

Epocha

Epocha se používá obvykle za situace, kdy se z nějakého důvodu změnilo číslování verzí programů a novější verze mají nižší číslo než starší. Epocha obsahuje jediné (obvykle malé) celé kladné číslo. Například při modularizaci X.org spousta balíčků přešla z verze 7.0 na 1.0 a správce balíčků by si tedy myslel, že se nejedná o novější verzi. Přidáním epochy se porovnávají verze 7.0 a 1:1.0, kde první sice nemá explicitní epochu uvedenu, ale použije se implicitní hodnota 0. Tímto trikem tedy zajistíme, že verze 1.0 bude považována za novější než 7.0.

Verze

Verze programu je obvykle to co používá jeho autor. Nicméně občas dojde na situaci, kdy verze nemůže být přímo použita přímo, ale musíme jí trochu přiohnout. A jak můžete vidět z příkladu v úvodu, je zde prostoru pro ohýbání dost.

Přebalení tarballu

Pokud je potřeba tarball z nějakého důvodu (obvykle licenčních) přebalit oproti tomu, které šíří původní autor, musíme to vyznačit ve verzi. Toto se provede přidáním textu dfsg (zkratka Debian Free Software Guidelines) do verze. Pokud očekáváme, že na první pokus nebude vše ještě úplně v pořádku, můžeme použít i verzi přebalení. Verze balíčku pak může vypadat například 3.10.dfsg.4. Jako oddělovací znak mezi verzí a textem dfsg se kromě tečky může použít i plus, záleží na preferenci autora (verze tedy může být 1.2+dfsg).

Pokud je tarball přebalen z jiných důvodů než kvůli licencím, místo textu dfsg se použije text debian, ale tato situace není moc častá.

SVN snapshoty, alfa verze a podobné

Pokud se jedná třeba o snapshot ze SVN nebo alfa verzi, musíme toto nějak zohlednit ve verzi. Pro tyto případy se používá už dříve zmíněná tilda, která zajistí, že verze 3.10~alpha1 bude menší než 3.10. Podobně snapshot verze 1.2 pojmenujeme 1.2~r1234 a při vydání finální verze můžeme použít verzi 1.2.

Revize, nativní balíčky

Revize balíčku je obvykle jen kladné celé číslo, ale při dále zmíněných situacích se může zkomplikovat. Revize se nepoužívá jen pro nativní programy, tedy věci vyvíjené přímo pro Debian (tedy tak by to mělo být, nicméně skutečnost je občas poněkud jiná).

NMU

Pokud správce balíčku není k dispozici, nebo nereaguje dostatečně rychle na kritické chyby, může jiný Debian developer zaskočit a nahrát do archívu opravenou verzi. Tomuto se říká Non-Maintainer Upload a zkracuje se to NMU. Pro takovouto verzi se ovšem nepoužije standardní číslování (tedy zvýšení revize), ale za revizi se rozšíří o tečku a další číslo. Případné další NMU už jen zvyšují číslo za tečkou, takže balíček můžeme třeba dostat ve verzi 1.0-1.3, což znamená, že na balíčku byly provedeny tři změny prostřednictvím NMU.

Binární NMU

Pokud je potřeba balíček překompilovat (například se změnilo soname knihovny, kterou program používá) a není potřeba nijak měnit zdrojový balíček, může dojít k binárnímu NMU -- balíček je jen překompilován, ale zdrojový balíček zůstal beze změny. Binární balíček má poté k revizi připojenu indikaci tohoto stavu a to ve formě +b1, opět je možné tento proces opakovat a získat tak verzi 2.3-1+b4.

Backporty

V případě, že používáme backportované balíčky, ty by měly mít ještě revizi rozšířenou o indikaci backportu: ~bpo${debian_release}+${build_int}. První backport balíčku v původní verzi 1.0-1 pro Debian 4.0 (etch) tedy bude mít verzi 1.0-1~bpo40+1. Při změnách v backportovaném balíčku se zvyšuje poslední číslice, tilda v revizi zajistí přeinstalování balíčkem z distribuce při aktualizaci, protože původní verze je považována za novější.

Jaké změny hrozí?

Když je seriál na konci, je na čase čtenáře připravit na případné změny, které v dohledné době nastanou (nebo mohou nastat). Tento seznam rozhodně není autoritativní, je jen založen na pozorováních autora a jeho odhadu, takže všechno nakonec může dopadnout úplně jinak :-).

Nejbližší změna se asi bude týkat zdrojových balíčků, protože brzy po vydání Lennyho již pravděpodobně bude povoleno používání verze 3.0 a tedy možnosti použít více tarballů a sadu patchů. Tato změna se ovšem také promítne do Debian Policy spolu s dalšími menšími úpravami (takže do Standards-Version budeme opět psát vyšší číslo).

Strojově zpracovatelný debian/copyright si také získává stále větší oblibu a dnes již u nových balíčků převažuje. Proto si je na čase na jeho používání zvyknout a tento formát se pravděpodobně také do dalšího vydání stane součástí Debian Policy.

Další změna bude užitečná především pro velké balíčky -- bude možné volitelně balíček komprimovat pomocí lzma. Jedná se sice o podstatně lepší kompresní algoritmus, ale také mnohem náročnější na paměť a výkon, proto nebude použit jako výchozí pro celou distribuci, ale jen pro balíčky, kde se jeho použitím ušetří značné místo a u kterých se dá předpokládat, že uživatel disponuje dostatečně výkonným hardwarem (např. pokud někdo chce provozovat OpenOffice.org, tak se dá předpokládat, že to nebude na počítači s 16 MB paměti).