Ľahký úvod do vytvárania Debian balíčkov

Ľahký úvod do vytvárania Debian balíčkov
15.01.2008 14:30 | Články | Adam Sloboda
Stručný úvod do vytvárania .deb balíčkov pre "dobrodružnejších používateľov a skúsenejších užívateľov".

Tento návod nie je univerzálny, programy a knižnice sú písané v rôznych jazykoch a využívajú rôzne nástroje a vyžadujú individuálny prístup, no dúfam že pomôže preklenúť počiatočnú neskúsenosť a obavy zo zložitosti. Ukážeme si ako sa dá rýchlo vytvoriť balíček s pomocou checkinstall a tiež si vytvoríme riadny balíček z ničoho, na ktorom si ukážeme najuniverzálnejší možný postup.

checkinstall

checkinstall je nástroj, ktorý sa snaží výrobu balíčku úplne automatizovať. V zásade by mal pracovať pre každý program, ktorý je možné skompilovať a nainštalovať. Toto sa zvyčajne robí príkazom make a následne make install (tento spúšťa checkinstall ak mu nezadáme iný).

Stačí program skompilovať podľa pokynov dodávaných v zdrojovom balíčku spolu so zdrojovými súbormi. Najčastejší postup kompilácie a inštalácie je:

configure
make
make install

Posledný príkaz inštaluje súbory do systémových adresárov a preto vyžaduje práva roota, preto aj vytváranie balíčku potrebuje práva roota:

checkinstall --install=0 make install

"make install" ako som spomínal sa použije aj ak by sme ho vynechali. A to je vlastne všetko, checkinstall položí pár interaktívnych otázok ak je to nutné, všetko sa snaží detekovať sám. Je vhodné tieto informácie skontrolovať a v prípade potreby pozmeniť, niekedy je napríklad nutné zmeniť nevhodný formát verzie pre balíčkovací systém, ináč proces zlyhá. Voľba install=0 udáva, že nechceme aby sa balíček po procese vytvárania hneď inštaloval.

Ďalší vylepšením tohto postupu je použitie nástroja fakeroot, ktorý dovoľuje aj iným užívateľom než root vytvoriť balíček tým, že predstiera práva roota a inštaluje do bezpečne oddeleného adresára.

Tento nástroj je možné použiť aj v RPM distribúciách a v Slackware. Podrobnejšie informácie je možné nájsť na domovskej stránke programu. Tento program zvyčajne nezlyháva na balíčkoch používajúcich automake/autoconf (ak zdrojový adresár obsahuje skript configure).

Prvý balíček

Teraz si skúsime vyrobiť balíček z ničoho a ukážeme si tak podstatu vytvárania balíčku. Na toto by malo postačiť nainštalovať balíček dh-make so svojimi závislosťami (apt-get install dh-make).

Najskôr si vytvoríme prázdny adresár balicek-0.1 a v ňom súbor balicek s týmto obsahom:

#!/bin/sh
echo Skript z balicku je na svojom mieste!

Ďalej vytvoríme súbor Makefile (medzera pred príkazom install je tabulátor, )

:
all:

install:
 install -m755 balicek $(DESTDIR)/usr/bin/
 # pripadne dalsie prikazy vzdy odsadene od zaciatku riadku

Toto je to najmenej čo potrebujeme na inštaláciu nášho skriptu. Dôležité je použitie premennej DESTDIR, ktorá je veľmi dôležitá pre balíčkovacie skripty, preto je nutné existujúcim programom upravovať Makefile aby používali túto premennú. (Ak program používa configure skript, nie je nutné nič meniť.)

Ak nestačí obyčajné kopírovanie "cp" alebo rekurzívne pre kópiu všetkého obsahu aj s podadresármi (parameter "-R") tak používame príkaz install – najčastejšie použitie:

  • "install -mUGO" nainštaluje súbor s príslušnými právami (644, 755, …)
  • "install -d cesta" vytvorí zadané adresáre.
  • "install -D zdroj cieľ" vytvorí všetky chýbajúce adresáre v cieľovej ceste, okrem posledného, ten sa použije ako cieľový názov pre zdroj.

Teraz si už len necháme vygenerovať všetko potrebné pre náš balíček:

$ dh_make -s -r -e mailbox@server.tld -c gpl
Maintainer name : Adam Sloboda
Email-Address : mailbox@server.tld
Date : Sun, 6 Jan 2008 14:07:31 +0100
Package Name : balicek
Version : 0.1
License : gpl
Type of Package : Single
Hit <enter> to confirm:
Done. Please edit the files in the debian/ subdirectory now. You should also
check that the balicek Makefiles install into $DESTDIR and not in / .

Pribudol nám adresár debian s množstvom súborov, no netreba sa ľakať – s kľudom môžeme zmazať všetky ukážkové súbory (rm *.ex *.EX), ktoré väčšinou nie sú potrebné.

Najskôr upravíme podľa situácie README.Debian, changelog a copyright. Na obsahu týchto súbrov funkčnosť balíčka nezáleží, no mali by obsahovať dôležité informácie o balíčku, správcovi balíčku, autoroch, licencii a verziách programu.

Súbor dirs obsahuje cestu k adresárom, ktoré Makefile nevytvorí, ale potrebujeme ich (v našom prípade tento súbor nepotrebujeme). Súbor docs obsahuje názvy súborov, ktoré chceme zahrnúť k dokumentácii (BUGS, TODO, …). Súbor compat udáva verziu, pre balíčkovacie skripty, tento súbor necháme tak ako bol vygenerovaný.

A napokon tu ostali ešte súbory control a rules. Ich obsah hovorí sám za seba, spomeniem len dôležité riadky.

control:

  • Section: názov sekcie v balíčkovacom systéme
  • Build-Depends: závislosti pre kompiláciu balíčku (u balíčku na jedno použitie na tom nezáleží a náš nemá žiadne mimoriadne požiadavky na knižnice a pod.)
  • Architecture: názov konkrétnej architektúry počítača (je možné použiť kľúčové slovo any, ktoré bude nahradené aktuálnou) alebo kľúčové slovo all, ktoré znamená, že výsledný balíček pôjde všade (skriptovacie jazyky, dáta, ...) – v našom prípade použijeme all
  • Depends: závislosti balíčku (na jedno použitie tiež zbytočné) na iných balíčkoch z repozitára (vygenerovaný súbor obsahuje premenné na automatické zisťovanie vyžadovaných zdieľaných knižníc, v našom prípade to je zbytočné)
  • a na konci popis balíčku (krátky a dlhý)

rules je Makefile samotného balíčku, to je celé tajomstvo – v našom prípade nemusíme nič meniť, je prednastavený a by spustil náš zdrojový Makefile a vytvoril balíček. Pomocné príkazy tu použité majú aj vlastné manuálové stránky. Teraz už len ostáva spustiť príkaz fakeroot dpkg-buildpackage (alebo priamo fakeroot debian/rules binary) a balíček je hotový. Príkaz fakeroot debian/rules clean uprace neporiadok, zmaže všetky automaticky vytvorené súbory (z procesu vytvárania balíčku).

Kontrola balíčku

Pretože človek nie je neomylný tak tu máme nástroje, ktoré sa pokúšajú identifikovať prehrešky voči pravidlám: lintian a linda. Stačí ich spustiť a ako parameter uviesť cestu k balíčku. Ak je balíček už vytvorený tak sa bude pravdepodobne aj dať nainštalovať, kontrola je de facto len pre "dobrý pocit".

Záver

Balíčky vytvorené na základe tohto návodu ešte stále nebudú spĺňať všetky normy konkrétnej distribúcie, takže pre záujemcov je vhodné konzultovať napríklad rozsiahlu príručku Debian New Maintainers&aps Guide. Na prvý pohľad sa to môže zdať zložité, no stačí sa toho nebáť a skúšať "čo to spraví", napokon je to vďaka pohodlnosti vývojárov pravdepodobne najjednoduchší balíčkovací systém.

    • preklep 15.01.2008 | 15:47
      Avatar michal00 debian, freebsd  Používateľ
      môžeš pls ukončiť tag na vypisovanie suborov (súbor balíček)
      • Re: preklep 15.01.2008 | 16:07
        autor   Návštevník
        Ten jeden code usiel mne aj redakcii (za apt-get install dh-make), tiez entita na konci &aps ma byt zrejme &apos; a navyse ciarka navyse v zatvorke pred Makefile a dvojbodka, ktora je az za tagom </p>
      • Re: preklep 27.02.2010 | 06:33
        ywikfsh   Návštevník
        Yu4aM1 helsusukafly, [url=http://enteasyjuncc.com/]enteasyjuncc[/url], [link=http://zzjrmjikqnmx.com/]zzjrmjikqnmx[/link], http://lgawxechyzbk.com/
      • Re: preklep 04.03.2010 | 07:51
        phentermine   Návštevník
        • Príspevok bol vymazaný.
    • IPwatchD a universe 15.01.2008 | 17:12
      Avatar Jaroslav Imrich Ubuntu  Používateľ
      Ak ma niekto skusenosti s vytvaranim deb balikov, ktore je mozne zaradit do universe repozitara Ubuntu a bol by ochotny pomoct s vytvaranim balikov pre projekt IPwatchD pls ozvite sa mi na kontakt v mojom profile. Ja som uz 3x zlyhal a nevydrzal sa tym prekusat dokonca :)
      We can't solve problems by using the same kind of thinking we used when we created them - A. Einstein