Kategória: Debian Linux

Zmenené: 18. február 2011

Plátanie balíkov s quilt

Vo verziách Debianu po Squeeze sa má stať povinným nový formát zdrojových balíkov, ktorý má používať záplatovací systém quilt. Ak si pripravujete balíky sami, či už pre seba alebo ich aj distribujete, môžete tento systém použiť už teraz. Ja som sa rozhodol konečne pozrieť, že čo je to za čudo. A moje prvé skúsenosti sú pozitívne…

To, ktorý formát záznamu zmien originálneho zdrojového kódu sa použije, udáva súbor debian/source/format, v koreni kódu balíka. V tomto súbore musí byť len jeden riadok, ktorý popisuje dpkg formát zdrojového súboru. Tento riadok môže mať podobu:

  • 3.0 (native) – pre „starý“ systém balíkov Debian alebo
  • 3.0 (quilt) – pre všetko ostatné.

Novší zdrojový formát dpkg 3.0 (quilt) integruje do balíkovacieho systému záplatovací (patch) systém quilt. Všetky modifikácie a servisné súbory balíka sú teraz jednoducho zabalené do súboru debian.tar.gz, v ktorom sú všetky súbory adresára debian. Takto je možné bez problémov zahrnúť napríklad aj binárne súbory, a to bez potreby zložitých úprav, či trikov.

Nastavenie quilt

Nástroj quilt potrebuje pre svoju činnosť poznať niektoré hodnoty, ich nastavenie možno uložiť do súboru ~/.quiltrc a pre tvorbu balíkov by mal obsahovať niečo takéto:

QUILT_PATCHES="debian/patches"
QUILT_PATCH_OPTS=""
QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"

Najdôležitejším riadkom nastavenia je QUILT_PATCHES=“debian/patches“, pomocou tejto premennej je nastavená cesta, kde má quilt ukladať/čítať súbory so záplatami. Ďalšie podrobnosti sú v quilt(1) a /usr/share/doc/quilt/quilt.html.

Prehľad príkazov

  • quilt series – vypíše všetky záplaty v poradí ich aplikovania;
  • quilt push – aplikuje nasledujúcu záplatu;
  • quilt push -a – aplikuje všetky záplaty;
  • quilt pop -a – odstráni (nevymaže) všetky záplaty;
  • quilt top – zobrazí meno aktuálnej záplaty;

Toto je dôležitá vec, pretože väčšina akcií quilt predvolene pracuje s aktuálnou záplatou. Je to ten, ktorý bol práve aplikovaný a všetky zmeny, ktoré urobíte budú pridané do nej.

  • quilt files – zobrazí, ktoré súbory sú aktuálnou záplatou dotknuté/zmenené;
  • quilt next – zobrazí, ktorá záplata je nasledujúci v poradí;
  • quilt applied – zobrazí, ktoré záplaty sú aplikované;
  • quilt unapplied – zobrazí, ktoré záplaty ešte majú byť aplikované;

Import existujúcej záplaty

Keď je k dispozícii záplata zdrojového kódu zmenim.patch, je úprava balíka nového formátu dpkg 3.0 (quilt) veľmi jednoduchá:

cd balík-cislo.verzie
quilt import ../zmenim.patch
quilt push
quilt refresh

Ako prvý krok je vstúpenie do koreňa adresárového stromu balíka. nasleduje importovanie súboru so záplatou, nasledované jej aplikovaním a obnovením systému quilt, čím sa vytvorí súbor so záplatou rovnakého mena ako importovaná záplata.

Aktualizácia fuzzy záplat

Pri zmenách zdrojového kódu sa skôr alebo neskôr stretnete s tým, že záplatu je síce možné aplikovať, ale upozorňuje na zmeny, napríklad v číslach riadkov… V takom prípade môže pomôcť:

quilt pop -a
while quilt push; do quilt refresh; done

Celý postup je i v tomto prípade priamočiary. Najprv sú reverzne aplikované (odstránené) všetky aplikované záplaty a potom sú v cykle aplikované postupne všetky záplaty, pričom po každej aplikácii záplaty je urobený refresh, čím je obsah záplaty aktualizovaný tak, aby zodpovedal aktuálnemu stavu.

Vytvorenie novej záplaty

Úpravu možno urobiť priamo v zdrojovom kóde, ale najprv je treba nastaviť nahrávanie zmien, ktoré budú uložené ako debian/patches/nový.patch a zadať meno upravovaného súboru/súborov:

quilt new nový.patch
quilt add meno_súboru

Pre úpravu viacerých súborov možno použiť viacero príkazov add alebo vymenovať viaceré v jednom add. Ak je potrebné súbor zo záplaty odstrániť, poslúži príkaz revert:

quilt revert meno_súboru

Až po pridaní súborov možno urobiť v súbore/súboroch zmeny a po skontrolovaní úprav, treba obnoviť systém quilt, čím je vygenerovaný súbor debian/nový.patch:

quilt refresh

Odstránenie existujúcej záplaty

Niekedy záplata stratí svoj účel, napríklad preto, že ju autor zahrnul do svojich zdrojových kódov, alebo prestane byť aktuálnou. V takom prípade ju možno z quilt odstrániť pomocou príkazu delete:

quilt delete meno.patch

Pri použití príkazu delete treba pamätať na to, že zo systému quilt odstráni len odkazy na túto záplatu (a prípadne ho reverzne aplikuje odstráni z kódu), ale samotný súbor so záplatou ostáva v adresári debian/patches. Ak je žiadúce odstrániť aj tento súbor, poslúži prepínač -r. Meno súboru záplaty možno nahradiť prepínačom -n, čím sa odstráni nasledujúci (za aktuálne aplikovaným):

quilt delete -r -n

Premenovanie záplaty

Ak vznikne potreba zmeniť meno súboru so záplatou, aj s touto úlohou quilt pomôže, poslúži príkaz rename:

quilt rename -P staré_meno nové_meno

Pri vynechaní voľby -P s menom starého súboru bude premenovaný súbor s aktuálnou (top) záplatou.

Pridanie popisu

Lintian odporučí (zatiaľ voliteľne, ale časom…) doplniť súbory záplat o niektoré popisné hlavičky. Pridanie hlavičiek obslúži príkaz header, ktorému treba zadať, či bude hlavička pripojená k existujúcej (-a), nahradená (-r) alebo ju idete upraviť (-e):

quilt header -e

Ako je zvykom, takto zadaný príkaz sa bude týkať hlavičky aktuálnej (top) záplaty. Ak chcete pracovať s hlavičkou iného súboru, stačí pripojiť jeho meno na koniec príkazu.

Povinné hlavičky

Slovo povinné nie je celkom presné, pretože zatiaľ povinné nie sú, ale ak už budete hlavičky dávať (ich kompletný popis je v dokumente Patch Tagging Guidelines), mali by ste zadať aspoň dve:

  • Description – aspoň krátky popis účelu záplaty;
  • Author – meno a email autora (Jožko Mrkva <jozko@mrkva.sk>).

Záver

Tento nástroj (quilt) som prijímal s nevôľou, ale jeho používanie neľutujem a jeho používanie vrelo odporúčam aj pre iné veci ako je tvorba balíkov. Autori quilt odviedli naozaj dobrú prácu.