Ubalme si debianní balíček

25. 9. 2007 (19:49) | gnu/linux, how-to

.deb balíčekZpůsobů instalace software na systému GNU/Linux je hned několik - kompilace ze zdrojových kódů, archivy s již zkompilovanou podobou programu, či balíky s pevně danou strukturou zapadající do nějakého balíčkového systému. Jak takový balíček (konkrétně .deb) vytvořit?

Alien

Řekněme, že potřebujete .deb balíček nějakého programu, třeba pro vašeho kamaráda (linuxového začátečníka), který při slově kompilace zbledne a zaleze pod stůl. Nejlepší varianta nastává, když je daný balíček ve veřejně dostupných zdrojích, popřípadě lze volně stáhnout, někdy tomu tak ale bohužel není. V takové situaci se můžeme poohlédnout po .rpm balíčku, který lze předělat na ten debianní pomocí nástroje alien. Ten najdete v oficiálních zdrojích vaší distribuce (měli byste). Jeho použití je velice primitivní:
sudo alien ./nejaky-bezva-program-0.9-1.i386.rpm
nejaky-bezva-program_0.9-2_i386.deb generated

Nevím proč je potřeba rootovského práva, ale postačí i nástroj fakeroot. Nějakou dobu to trvá a zatím se mi nestalo, že by nástroj zklamal, ačkoli zlí jazykové tvrdí, že se stává i to.

Checkinstall

Když je ale program dodáván ve zdrojovém kódu, můžete z něj zkusit udělat debianní balík pomocí nástroje checkinstall, o jehož použití se dá říct snad vše kromě slova primitivní. Jeho používání se zabývat nebudu, zde je moje úspěšnost přesně opačná než u nástroje alien (možná proto, že při slově kompilace zblednu a zalezu pod stůl). Nástroj checkinstall program v jedné fázi kompilace zabalí do .deb (popřípadě .rpm) balíčku, odstraní nepotřebné soubory a balíček zkusí nainstalovat. Zní to jednoduše, že? Není to jednoduché (pro mě). Takže naše poslední naděje je…

Binární archiv

Binární archiv představuje archiv (s příponami .tar.gz, .tar.bz2, .zip a dalšími), který obsahuje předvytvořenou spustitelnou verzi programu v binární podobě pro konkrétní architekturu. Archiv někam rozbalíme a vyzkoušíme jeho funkčnost, poté zapřemýšlíme, kam by bylo vhodné aplikaci umístit natrvalo. Já jí většinou udělám složku v /usr/share/. Takže se můžeme pustit do samotné tvorby stromové struktury balíku.

A šup do práce

Prvním krokem je vytvoření složky ve které budeme pracovat, většinou ji nazvu třeba nejaky-bezva-program~deb a mám jí někde ve svém domovském adresáři (nutno podotknout že děláme všechnu práci jako běžný uživatel, nikoli jako root). V naší nové složce si představte kořen souborového systému, čili chcete-li mít program ve složce /usr/share/nejaky-bezva-program/ musíte si vytvořit v pracovní složce složku /usr/ a v ní složku /share/. Do ní pak nakopírujete složku s programem.

V naší pracovní složce /usr/ vytvořte ještě složku /bin/ kam umístíme spouštěč, který bude mít název příkazu ke spuštění našeho programu, nejspíše tedy nejaky-bezva-program. Vytvoříme tedy textový soubor s takovým názvem a do textového souboru napíšeme následující jednoduchý bashovský scriptík:
#!/bin/bash
cd /usr/share/nejaky-bezva-program/
./nejaky-bezva-program

Kde poslední řádek představuje spouštěcí soubor dané aplikace a nemusí se jmenovat takto příznačně, klidně se může jmenovat třeba run.sh nebo tak nějak. Nezapomeňte našemu scríptíku nastavit právo ke spouštění. Je samozřejmě možné vytvořit balík jen z nebinárních scriptů nebo jen přídavných dat pro nějakou aplikaci (ikony navíc, nějaké pěkné téma pro GTK2 nebo QT3/4, etc…).

Omáčka

Je čas zajistit aby se program vyjímal v menu i s pěknou ikonkou. Jako ikonku můžete použít libovolný obrázek, zredukovat jeho velikost na přijatelnou míru (64×64, nebo 32×32) a uložit ho například v Gimpu ve formátu XPM, pojmenujeme ji tedy nejaky-bezva-program.xpm a uložíme do naší nově vytvořené složky /usr/share/pixmaps/ v našem pracovním prostoru.

Poté vytvoříme textový soubor /usr/share/applications/nejaky-bezva-program.desktop a do něj napíšeme:
[Desktop Entry]
Name=Nějaký bezva program
GenericName=Nějaký bezva program
Comment=Super prohlížeč něčeho zeleně flekatého
Exec=nejaky-bezva-program
Icon=/usr/share/pixmaps/nejaky-bezva-program.xpm
Terminal=false
Type=Application
Categories=Application;Graphics;

S jedním volným řádkem na konci. Položka Exec má obsahovat příkaz spouštějící naši aplikaci, položka Terminal se stará o to, zda má být aplikace puštěná z terminálu. A nakonec zařadíme aplikaci do správné kategorie, pro příklad právě Application;Graphics; nebo Application;Office;.

A teď to konečně doděláme

V naší pracovní složce (vedle složky /usr/) uděláme složku /DEBIAN/ a v ní vytvoříme 4 textové soubory:

  • control
  • debian-binary
  • postinst
  • postrm

Nejdůležitějším souborem je první z nich, control. Jeho vzor je násdledující:
Package: nejaky-bezva-program
Version: 0.9
Section: graphics
Priority: optional
Architecture: i386
Depends: závislosti
Pre-Depends: před-závislosti
Recommends: doporučené
Suggests: navrhované
Installed-Size: velikost souborů, které se zapíšou na disk (vše kromě složky DEBIAN) v kB, bez jednotky
Maintainer: Vaše Ctěné Jméno [váš@ctěný.mail]
Conflicts: konfliktní balíky
Description: Popis programu, nejlépe v angličtině.

Všechny kolonky Depends, Pre-Depends, Recommends, Suggests i Conflicts se vyplňují takto:
Depends: libwww-perl, acme-base (>= 1.2), nejaky-dalsi-program
Pokud takovou kolonku nechceme vyplnit, daný řádek smažeme, nenecháme ji prázdnou (dělá to neplechu).

Teď k jednotlivým kolonkám:

  • Depends/Závislosti: to jsou takové balíky, bez kterých program prostě nebude fungovat
  • Pre-Depends/Před-Závislosti: bez těchto balíčku nejen že by program nešel spustit, ale nešel by ani nainstalovat (tyto balíky musí být nainstalované dříve než náš balík), nejspíš nebudete potřebovat.
  • Recommends/Doporučené: balíky bez kterých program sice bude fungovat, ale některé jeho součásti nepůjde použít
  • Suggest/Navrhované: balíky které mohou funkčnost programu vylepšit, popřípadě programy, které dovedou s daným programem spolupracovat
  • Conflicts/Konflikty: takové balíky které by společně s naším dělali neplechu (pokud balíte modifikovanou verzi nějakého programu, asi by nebylo dobré mít nainstalovanou i tu originální, pokud používáte stejný adresář)

Druhý soubor, debian-binary je soubor určující verzi balíčkovacího systému, jeho jediným obsahem bude řádek:
2.0
Následovaný jedním prázdným.

Další dva soubory jsou postinstalační a postodinstalační scripty (fuj, to jsou slova), které v našem případě nebudeme potřebovat, ale jsou nutné, proto si je stáhněte tady a tady, ale nezapomeňte zkontrolovat jejich spustitelnost (práva).

Poslední krok

Nyní otevřete terminál v pracovní složce a napište:
dpkg -b ./ ../nejaky-bezva-program_0.9_i386.deb
Takto váš nový balík vyskočí z pracovní složky a nebude hrozit, že do balíku zkopíruje sám sebe. Pokud máte pocit, že balík nikde nevidíte, podívejte se o adresář výš.

Doufám, že vás množství chybových hlášek neporazí ve vašem úsilí.

Zanechte komentář

XHTML: Můžete použít tyto tagy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>