Balíčky pro Debian - 2. Popisy balíčků
Veškeré informace o balíčku se nacházejí v souboru
debian/control
. Co všechno tento soubor musí obsahovat a co vše do něj můžeme napsat?
Soubor debian/control
je jednoduchý textový soubor ve formáty odpovídajícím
RFC-2822 ve kterém jsou základní informace o balíčku. Informace jsou vždy
zadány ve formě jméno: hodnota
a bez tohoto souboru se prostě neobejdeme.
Ale pojďme už od teorie a podívejme se na debian/control
z našeho ukázkového
balíčku photo-uploader
rozebraném v minulém díle:
Source: photo-uploader
Section: graphics
Priority: extra
Maintainer: Michal Čihař <nijel@debian.org>
Build-Depends: debhelper (>= 5.0.37.2)
Build-Depends-Indep: python-dev, python-central (>= 0.5), python-pycurl
Standards-Version: 3.7.3
XS-Python-Version: current
Vcs-Svn: svn://svn.cihar.com/debian-photo-uploader
Vcs-Browser: http://viewsvn.cihar.com/debian-photo-uploader
Homepage: http://cihar.com/software/photo-uploader/
Package: photo-uploader
Architecture: all
Depends: ${python:Depends}, python-pycurl
XB-Python-Version: ${python:Versions}
description: Command line photo uploader
Photo uploader is a command line utility (and Python module) for
uploading photos to minilabs for printing or to any service for image
hosting. It currently supports only a few minilab services in Czechia
and some hosting services like ImageShack, but can be easily extended
to support others.
Jak vidíte, soubor je rozdělen prázdným řádkem do dvou částí. První se týká
zdrojového balíčku a informace zde uvedené budou ve výsledném zdrojovém
balíčku v souboru photo-uploader_0.5-1.dsc
. Druhá binárního balíčku a při
vytváření balíčku se uloží do něj. Pokud by zdrojový balíček vytvářel více
binárních, bude takovýchto sekcí obsahovat více, jednu pro každý binární
balíček. Některé hodnoty jsou společné pro obě sekce a je možné je uvést jak u
zdrojového tak u binárního balíčku. V tom případě mají informace u binárního
balíčku přednost.
Zdrojový balíček
První část tedy popisuje zdrojový balíček, začneme pěkně od začátku.
Source
určuje jméno zdrojového balíčku. Pravděpodobně zde zůstaneme u názvu, který
používá autor. Jedná se o povinnou položku.
Hodnotou Section
určíme jaké oblasti se balíček týká. Nástroje pro správu
balíčků umožňují balíčky procházet podle sekcí a tím usnadní uživateli výběr.
Pokud balíček z nějakých důvodů nemůže být začleněn do hlavního repositáře
(main
) a musí být v contrib
nebo non-free
, bude zde tento repositář
uvedený před lomítkem, tedy například non-free/x11
. Jedná se o doporučovanou
položku.
Priorita (Priority
) určuje jak moc je balíček důležitý. Většinou si
vystačíme s extra
nebo optional
(moc velký rozdíl mezi nimi není). Jedná
se o doporučovanou položku.
Další položka (Maintainer
) uvádí kdo má balíček na svědomí. Jedná
se o povinnou položku.
Následující dva řádky se závislostmi (Build-Depends
a
Build-Depends-Indep
) určují, jaké balíčky musí být přítomny pro kompilaci
našeho balíčku. Build-Depends-Indep
se týká jen zdrojových balíčků
vytvářejících binární balíčky nezávislé na architektuře a určuje co je potřeba
pro vytvoření těchto balíčků. Položka není povinná, ale těžko se bez ní
obejdeme. Na podobné téma ještě můžeme použít Build-Conflicts
a
Build-Conflicts-Indep
, například pokud kompilace selže při nainstalování
nějakého dalšího balíčku.
Standards-Version
identifikuje verzi
Debian Policy, které balíček
odpovídá. Jedná se o doporučovanou položku a měla by být udržována na aktuální
verzi Debian Policy.
XS-Python-Version
se týká jen balíčků pro Python a prozatím jej budeme
ignorovat. Veškeré parametry začínající na XS-
nejsou přímo podporovány
dpkg, ale jejich jméno a hodnota jsou zkopírovány do dsc
souboru.
A teď se dostáváme k poměrně čerstvým novinkám ve zdrojovém balíčku. Z polí
Vcs-*
se můžeme dozvědět kde správce balíčku udržuje svojí pracovní verzi.
Vždy se jedná o odkaz na systém správy verzí a Vcs-Browser
obsahuje odkaz na
webové prohlížítko daného repozitáře. Tato položka je nepovinná.
Poslední hodnota Homepage
určuje překvapivě domovskou stránku zabaleného
projektu. Tato položka se použije i pro všechny binární balíčky (pokud nemají
uvedenu vlastní) a je nepovinná.
Binární balíček
Pro každý binární balíček bude v souboru debian/control
právě jedna sekce se
jménem balíčku uvedené za klíčovým slovem Package
. Jména balíčků ne vždy
přímo odpovídají tomu jak se balený program jmenuje, protože je potřeba mít v
distribuci konzistentní pojmenování podobných věcí. Proto se třeba moduly pro
Python vždy jmenují python-jménomodulu
a pro Perl zase libcosi-perl
. Pokud
nevíte jaké jméno zvolit a nechce se vám hledat policy pro příslušnou skupinu
balíčků, najděte si něco podobného a inspirujte se.
Trochu speciálním případem jsou sdílené knihovny. Zde musí jméno balíčku
odpovídat soname dané knihovny. Tím je zajištěna možnost mít současně
nainstalované různé verze jedné knihovny, což je v systému používajícím
rolling updates naprostá nutnost. Knihovna libc.so.6
tedy bude v balíčku
libc6
a libgtkspell.so.0
zase v libgtkspell0
. U vývojových balíčku už
obvykle není potřeba mít současně nainstalované různé verze (ale najdou se i
výjimky, třeba knihovna libdb
nechvalně proslulá nekompatibilitou
jednotlivých verzí) , tak stačí jediný, například libgtkspell-dev
.
Další položka Architecture
určuje architekturu binárního balíčku. Pokud
nebalíme něco co funguje jen na některé architektuře, vystačíme si s hodnotami
all
a any
. Hodnota any
určuje balíček, který lze kompilovat pro každou
architekturu, all
oproti tomu balíček nezávislý na architektuře, například
data nebo dokumentaci. Jedná se o povinnou položku.
Závislosti
Závislosti balíčku získáme z položky Depends
. Protože však jsou vývojáři
tvorové líní, nemusíme zde uvádět vše, protože debhelper
je schopný některé
závislosti najít automaticky a pak je nahradit do tohoto pole. Pro tento účel
se používají v poli Depends
proměnné, tak jako je v tomto případě použito
${python:Depends}
. U kompilovaných balíčků budeme chtít použít
${shlibs:Depends}
, což se nahradí jmény balíčků s knihovnami, se kterými je
náš program (nebo knihovna) slinkován. Takovýchto substitucí existuje více,
obvykle bývá zvykem uvádět ještě ${misc:Depends}
a pak ještě můžeme použít
informace o verzi právě kompilovaného balíčku ve formě ${source:Version}
a
${binary:Version}
. Závislosti v balíčku samozřejmě povinné nejsou, ale
asi se bez nich neobejdeme.
Kromě striktní závislosti umožňuje Debian ještě mnoho dalších vztahů mezi
balíčky: Recommends
, Suggests
, Enhances
, Pre-Depends
a Conflicts
.
Conflicts
značí konflikt balíčků, Pre-Depends
závislost, která je potřeba
již při instalaci (pokud používáme ve skriptících při instalaci nějaký
nástroj, měli bychom ho zde uvést).
Recommends
a Suggests
jsou jen volitelné závislosti, s tím že Recommends
je silnější závislost a výchozí chování apt je používat Recommends
jako
závislost a tyto balíčky tedy budou nainstalovány, pokud si uživatel nezvolí
jinak. Závislost Suggests
je nejslabší a je na uživateli, zda si tyto
balíčky nainstaluje.
Poslední vztah je Enhances
, což je vlastně opačná varianta Suggests
. Jedná
se tedy o slabou závislost, ale v opačném směru.
Další položky
V námi zkoumaném balíčku ještě vidíme XB-Python-Version
, zde platí to samé
jako pro variantu s XS-
ve zdrojovém balíčku, tedy týká se jen balíčků pro
Python a prozatím si jí nemusíme všímat.
Poslední položkou se kterou se můžeme setkat je Essential
. Pokud má hodnotu
yes
, je balíček považován za nezbytný k funkci systému a při jeho
odstraňování musí uživatel vynaložit větší úsilí na jeho odinstalování.
Popis balíčku
Poslední položkou je popis balíčku - Description
. První řádek určuje krátký
popisek, další odsazené řádky jsou dlouhý popisek. Pokud chceme delší popisek
rozdělit do odstavců, je potřeba odstavec nahradit tečkou a zachovávat
odsazení, například:
Description: Some package
Very long description of some package, which needs
more paragraphs.
.
Second paragraph is completely useless here.
Závěr
Tím jsme probrali základní možnosti co uvést v tomto souboru a příště se podíváme do dalších.