Binární DEB balíčky lze vytvořit několika způsoby: od poloautomatických – konverzí z RPM (alien), ze zkompilovaných zdrojových kódů (checkinstall) – až po klasickou ruční přípravu. Ta je mírně zdlouhavější, zato obvykle bezproblémová. S oblibou používám instalaci Ubuntu ve virtuálním počítači (KVM), abych udržel svůj pracovní počítač čistý, bez zbytečných balíčků nutných pouze pro kompilaci.
Postup vychází z Debian New Maintainer’s Guide a Debian Binary Package Building HOWTO s mnoha zjednodušeními: mnou vytvářené balíčky jsou vytvářeny pro jednu konkrétní verzi jedné distribuce a nejsou určeny k dalšímu šíření.
Teď již samotný postup. Základním předpokladem je bezchybná konfigurace, kompilace a instalace programu dle jeho instalačních instrukcí. Obvykle to bude:
./configure
make
sudo make install
Pokud činí problémy závislosti nutné pro kompilaci, následující příkazy mohou pomoci nalézt potřebné balíčky:
strace -f -o /tmp/log ./configure
# or make instead of ./configure, if the package doesn't use autoconf
for x in `dpkg -S $(grep open /tmp/log|\
perl -pe 's!.* open\(\"([^\"]*).*!$1!' |\
grep "^/"| sort | uniq|\
grep -v "^\(/tmp\|/dev\|/proc\)" ) 2>/dev/null|\
cut -f1 -d":"| sort | uniq`; \
do \
echo -n "$x (>=" `dpkg -s $x|grep ^Version|cut -f2 -d":"` "), "; \
done
Funguje-li vše dle očekávání, můžeme pokračovat.
Struktura DEB souboru
DEB soubor má následující strukturu:
$ ar tv elektra-0.7.0rc3_amd64.deb
rw-r--r-- 0/0 4 Sep 14 14:46 2008 debian-binary
rw-r--r-- 0/0 476 Sep 14 14:46 2008 control.tar.gz
rw-r--r-- 0/0 847352 Sep 14 14:46 2008 data.tar.gz
Kde debian-binary
obsahuje informaci o verzi formátu DEB souboru, control.tar.gz
je archiv s kontrolními soubory potřebnými pro „ovládání“ DEB balíčku a data.targ.gz
je archiv se samotným programem – jeho binární verzí v adresářové struktuře, do které by se měl nainstalovat.
Vytvoření DEB souboru
Příprava DEB balíčku spočívá v instalaci programu klasickou metodou make install
do samostatného adresáře (tj. nikoliv mezi ostatní programy v /usr), vytvoření kontrolních souborů a spuštění příkazu na vytvoření DEB balíčku.
Nainstalujte zkompilované soubory budoucího balíčku do zvláštního adresáře $HOME/tmp/debian (prázdného):
$ make DESTDIR=$HOME/tmp/debian install
Vytvořte adresář pro kontrolní soubory:
$ mkdir $HOME/tmp/debian/DEBIAN
A umístěte do něj soubor s následujícím obsahem:
$ cat $HOME/tmp/debian/DEBIAN/control
Package: elektra
Version: 0.8.1rc3
Section: Development/Libraries
Priority: optional
Architecture: amd64
Depends: base-files
Maintainer: root
Description: Standard for configurations of software.
The Elektra Project tries to set a standard for configurations,
based on key-value pair tree of items. It is designed to be lightweight,
free of dependencies.
The Elektra Project was formerly named Linux Registry Project.
Význam jednotlivých klíčů je celkem zřejmý, možné hodnoty naleznete rozepsané v manuálu uvedeném na počátku tohoto článku. Zajímavý je především klíč „Depends“, který obsahuje seznam (oddělený čárkou) balíčků, bez kterých náš program nepoběží. Syntaxe je Depends: foo (>= 1.2), libbar1 (= 1.3.4)
.
Kromě něj lze použít klíč „Replaces“ , pokud balíček přepisuje soubor, který již je nainstalován jiným programem (a je-li to tak v pořádku).
Kromě povinného souboru DEBIAN/control můžeme do tohoto adresáře umístit další soubory: DEBIAN/postinst, DEBIAN/preinst. Tyto soubory jsou spuštěny po/před instalací balíčku a obsahují instrukce, které je nutné provést. Jejich základní template je:
$ ls DEBIAN/postinst
set -e
ldconfig
exit 0
Kde ldconfig
je příkaz, který se vykoná po instalaci – v tomto případě slouží k aktualizaci dočasné paměti dynamického linkeru knihoven.
Máme-li všechno pohromadě, DEB balíček vytvoříme:
$ fakeroot dpkg-deb --build $HOME/tmp/debian $HOME/elektra-0.8.1rc3_amd64.deb