Sunday, May 28, 2006

Balíčkovanie pomocou debhelper-u

Už asi dva týžne som sa chystal naštudovať si prácu s debhelper skriptami aby balíčky, ktoré vytvorím boli správne a rýchlo vytvorené a ľahko spravovateľné. Dosť dlho som hľadal na internete nejaké how to ako používať debhelper skripty ale okrem manuálov k skriptom, Debian Developer's Reference a Debian Policy Manual som na nič podstatné čo by mi pomohlo nenarazil. Pravda, jeden by povedal, že to bude stačiť ale nestačilo. Bolo potreba urobiť veľa pokus-omylov aby to všetko pekne fungovalo.
Začal som výberom aplikácie k zabalíčkovaniu. Jasne, že keď už som to raz skúsil s pekwm manuálnou cestou, skúsil som to tentoraz s pomocou debhelper skriptov.


  • Najprv si bolo treba nainštalovať potrebné balíčky so skriptami - debhelper, dh-make a devscripts.

  • Stiahnute zdrojákov z pekwm.org - chystal som sa preložiť aktuálny svn kód:
    svn checkout http://pekwm.org/svn/pekwm/trunk pekwm

  • nasledovalo premenovanie adresára pekwm na pekwm-0.1.5-svn pretože si to vyžadoval dh_make ( <package>-<version> )

  • cd pekwm-0.1.5-svn
    ./autogen.sh

    Tým sa vytvoril Makefile a configure, ktoré tiež vyžaduje dh_make skript.

  • Spustenie dh_make:
    dh_make -s -e your.email@idontknow.where -c gpl
    dh_make si berie informácie o maintainer-ovi z účtu užívateľa, ale nepišiel som na to ako okrem emailu prepasírovť skrz parameter i meno maintainer-a takže som musel urobiť drobnú upravu v /etc/passwd. Ďalšie parametre v manuálových stránkách ( -s ako single binary package, -c akú licenciu použiť ).

  • spustením dh_make v adresári pekwm-0.1.5-svn sa vytvoril podadresár debian/ s hromadou ukážkových súborov. Večšinu ale bežne nevyužijeme. Záleží od aplikácie ktoru balíčkujeme. Dôležité pre nás sú súbory control, changelog, conffiles, dirs, docs, menu a rules.

  • control - tento súbor obsahuje informácie o balíčku. Jednotlivé časti sú bližšie popísané v debian policy.
    Takže som vyplnil Section: x11 keďže sa jedná o window manager, Version: 0.1.5-svn-1 aby bolo jasné o akú verziu ide - táto časť tam po vytvorení dh_make-om nebola, dh_make totiž vytvorí control ako source control file a nie ako binary control file - toto bude ešte vyžadovať trochu skúmania ale doplnením Version sa nič nepokazí - ďalej Architecture: amd64, Depends: ${shlibs:Depends}, ${misc:Depends} - sa generuje automaticky pri buildovaní balíčku a preto je dobre tieto premenné nemeniť pokiaľ to naozaj nepotrebujeme ( ďalšie info na debian-policy ) - a nakoniec doplniť popis balíčku do Description:

  • conffiles - obsahuje cesty ku konfiguračným súborom, ktoré ma balíček obsahovať - tento súbor som nechal prázdny a ./configure v rules skripte volal z parametrom --sysconfdir=/etc

  • copyright - upraviť časť odkiaľ boli zdrojáky stiahnuté - It was downloaded from http://pekwm.org - a meno držiteľa copyrightu - Copyright Holder: Claes Nästen <xxxxxx@xxxx.xxx>.

  • docs - v tomto súbore sa nachádzajú dalšie dokumenty, ktoré ma balíček obsahovať mimo changelogu či manuálových stránok - dh_make ich v mojom prípade správne identifikoval takže nebolo treba žiadnych úprav.

  • dirs - obsahuje štrukturu adresárov, ktorá sa ma pre balíček vytvoriť - v mojom prípade prázny - všetko sa nastavilo u ./configure cez parametre.

  • menu - nastavenie aké informácie sa majú objaviť v menu - asi debian menu pre KDE a GNOME ( špekulácia :-P )
    ?package(pekwm):needs="wm" section="WindowManagers" title="Pekwm" command="/usr/bin/pekwm"

  • changelog - je súbor zmien týkajucích sa balíčku - zmeny týkajúce sa zdrojákov sú v inom changelogu. U tohto súboru i keď ma naozaj jednoduchú štruktúru som sa chvíľu pozastavil. Skúšal som ho editovať emacs-om, ktorý mi hneď zapol changelog-mode, v ktorom sa jednotlivé záznamy odsadzujú pomocou <TAB>. Bohužiaľ debian changelog vyžaduje odsadzovanie pomocou 2 medzier, takže chvíľu trvalo než som pochopil v čom je vlastne chyba.

  • rules - no a nakoniec ten najdôležitejší súbor/skript. Je to vlastne taký Makefile, pretože začína #!/usr/bin/make -f a ktorý používa hlavne debhelper skripty. dh_make ho pekne pripravil preto stačilo len pár úprav:
    config.status: configure
    dh_testdir
    # Add here commands to configure the package.
    CFLAGS="$(CFLAGS) -Wl,-z,defs" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --sysconfdir=/etc --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info

    už spomínaný --sysconfdir=/etc a ďalej v časti binary-arch: build install ukázať skriptu dh_installman kde má hľadať manuálové stránky
    dh_installman doc/pekwm.1
    Tým bolo všetko nastavovanie balíčku hotové a mohlol som sa pustiť do bildovania.

  • V adresári pekwm-0.1.5-svn som teda spustil
    fakeroot dpkg-buildpackage -b
    a balíček sa úspešne vytvoril. Pravda nešlo to hneď na prvý pokus pretože bolo treba vychytať všetky chyby v predošlých nastaveniach a preto bolo treba spustiť dpkg-buildpackage viac krát a to by s prekladaním zdrojákov trvalo dlho. Takže keď už som to mal raz preložené, spúšťal som dpkg-buildpackage s parametrom -nc ( Do not clean the source tree(implies -b) )
    fakeroot dpkg-buildpackage -b -nc


Popis ďalších dh_ skriptov je pekne popísaný v manuále k debhelper-u až na dh_buildinfo ku ktorému manuál chýba a u ktorého som sa zdržal pretože som si myslel že ho budem potrebovať k zisteniu závislostí pre balík ale nakoniec som zistil, že už to za mňa obstaral dh_make v súbore pekwm.substvars

Takto som teda vytovril balíčky:

Balíčky už pomaly konvergujú k dokonalosti a ak ešte pochopím pár vecí ohľadom správy changelogu a control-u tak rozdiel od dokonalosti nepoznáte :-D.

Najbližsie sa chystám na balíčkovanie iPager-u. Všetky balíčky sa budú postupne objavovať na http://aboutq.wz.cz/download/

3 comments:

Anonymous said...

veľmi užitočné, ďakujem :-)

Martin said...

diky, dost pomohlo precitat si to nejak rozumne spracovane, radsej by som ale balil holky xD

Q said...

Pozeram, ze po 2 rokoch od uverejnenia sa tento post asi dostal dost vysoko vo vyhladavani a zacina byt uzitocny aj pre inych ;-). Snad sa postup balickovania odvtedy velmi nezmenil - ja uz som dost dlho nic nebalickoval tymto sposobom - vecsinou mi staci checkinstall ked potrebujem balicek len pre vlastnu potrebu.
to Martin: Treba po zbaleni balicku vybehnut von a zbalit nejaku kocku ;-)