Hlavní navigace

Balíčkovací systém distribuce Debian GNU/Linux: volby "source" a "build-dep"

28. 7. 2003
Doba čtení: 4 minuty

Sdílet

V páté části seriálu o balíčkovacím systému Debianu se podíváme na to, jak lze "apt-get" využít při práci se zdrojovými balíčky. Konkrétně probereme volby "source" a "build-dep".

Stažení zdrojových balíčků

Binární podoba softwaru vzniká kompilací zdrojových kódů. V balíčkovacím systému existuje stejná analogie: binární balíčky (.deb) se vytvářejí (záměrně nepoužívám termín „kompilují“, neboť ten je u některých balíčků, např. programů v interpretovaném jazyce, značně zavádějící) ze zdrojových balíčků. Zdrojový balíček je v Debianu tvořen třemi soubory (.orig.tar.gz,

.diff.gz a .dsc). Soubor .orig.tar.gz je .tar.gz archiv původního zdrojového kódu programu, jak je distribuován vyvojářem softwaru (v terminologii Debianu nazývaným upstream maintainer). Soubor .diff.gz je zkomprimovaný patch obsahující úpravy, které na softwaru provedl vývojář balíčku (package maintainer nebo též zkráceně maintainer). Aplikováním tohoto patche na původní archiv získáme zdrojové kódy, z kterých vývojář balíčku vytváří binární balíčky. Soubor .dsc (tzv. soubor

Debian source control) obsahuje důležité informace o zdrojovém balíčku (např. jeho jméno, verzi, jména binárních balíčků, závislosti pro vytvoření balíčku či kontrolní součty souborů .orig.tar.gz a .diff.gz). Tyto informace jsou digitálně podepsané vývojářem balíčku. Jedná-li se o tzv. nativní balíček Debianu (to znamená, že software je vyvíjen přímo pro Debian), můžeme si všimnout absence souboru .diff.gz. To je logický důsledek faktu, že vývojář softwaru a balíčku je jedna osoba a vývoj softwaru je totožný s vývojem balíčku a není tedy potřeba vyvíjet modifikaci softwaru pro Debian. Archiv se zdrojovými kódy pak nese označení .tar.gz (nikoli .orig.tar.gz).

Chceme-li si obstarat zdrojový balíček, můžeme jej stáhnout z HTTP či FTP serveru ručně nebo použít apt-get. Jak jistě pozorného čtenáře minulého dílu seriálu právě napadlo, pro použití programu apt-get je nutné nakonfigurovat zdroje v souboru /etc/apt/sources­.list. Pro distribucitesting je obvyklé následující nastavení:

deb-src ftp://ftp.cz.debian.org/debian testing main contrib non-free
deb-src ftp://ftp.cz.debian.org/debian-non-US testing/non-US main contrib non-free

Po spuštění apt-get update můžeme číst mj. řádky:

Get:2 ftp://ftp.cz.debian.org testing/main Sources [966kB]
Get:8 ftp://ftp.cz.debian.org testing/contrib Sources [27.5kB]
Get:10 ftp://ftp.cz.debian.org testing/non-free Sources [27.9kB]
Get:12 ftp://ftp.cz.debian.org testing/non-US/main Sources [5322B]
Get:14 ftp://ftp.cz.debian.org testing/non-US/contrib Sources [20B]
Get:16 ftp://ftp.cz.debian.org testing/non-US/non-free Sources [795B]

Ze záznamů v souboru sources.list lze obdobným způsobem, který jsme si popisovali v minulém dílu u binárních balíčků, zjistit umístění souborů s informacemi o zdrojových balíčcích. Dopracujeme se tak např. k souboruftp.cz­.debian.org/de­bian/dists/tes­ting/main/sou­rce/Sources.gz. Podíváme-li se na obsah souboru, zjistíme, že nám nápadně připomíná soubor Packages.gz. Není divu. Plní totiž úplně stejnou funkci. Ovšem s tím rozdílem, že se v tomto případě nejedná o balíčky binární, ale zdrojové.

Nyní můžeme stahovat zdrojové balíčky:

$ apt-get source gallery
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 210kB of source archives.
Get:1 ftp://ftp.cz.debian.org testing/main gallery 1.3.4-1 (dsc) [579B]
Get:2 ftp://ftp.cz.debian.org testing/main gallery 1.3.4-1 (tar) [202kB]
Get:3 ftp://ftp.cz.debian.org testing/main gallery 1.3.4-1 (diff) [8151B]
Fetched 210kB in 6s (30.7kB/s)
dpkg-source: extracting gallery in gallery-1.3.4
$

Tímto příkazem se stáhnou všechny tři soubory zdrojového balíčku (.dsc, .orig.tar.gz a případně .diff.gz), pak je originální archiv rozbalen a je také aplikován patch .diff.gz. Vytvoří se tedy také adresář, v kterém máme kompletní zdrojové kódy softwaru (upravené pro Debian):

$ ls
gallery-1.3.4/            gallery_1.3.4-1.diff.gz
gallery_1.3.4.orig.tar.gz gallery_1.3.4-1.dsc
$

Chceme-li zdrojové kódy pouze stáhnout (a nerozbalovat), použijeme přepínač -d. Pokud naopak požadujeme také vytvoření binárních balíčků, použijeme přepínač -b.

Jelikož je běžné vytvářet z jednoho zdrojového balíčku několik balíčků binárních, může se stát, že jméno binárního balíčku není shodné se jménem balíčku zdrojového. Např. binární balíček ganglia-monitor se vytváří ze zdrojového balíčku ganglia-monitor-core. apt-get však problém nalezení správného zdrojového balíčku řeší za nás:

$ apt-get -d source ganglia-monitor
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 428kB of source archives.
Get:1 ftp://ftp.cz.debian.org testing/main ganglia-monitor-core 2.5.0-3 (dsc) [617B]
Get:2 ftp://ftp.cz.debian.org testing/main ganglia-monitor-core 2.5.0-3 (tar) [428kB]
Fetched 428kB in 21s (20.4kB/s)
Download complete and in download only mode
$

Závislosti zdrojových balíčků

Chceme-li vytvořit binární balíček, je většinou potřeba nainstalovat další software (např. kompilátor nebo knihovny). Absenci potřebného softwaru bychom samozřejmě zjistili při pokusu o vytvoření balíčku. Tomu však můžeme předejít, použijeme-li příkaz apt-get build-dep. Zdrojové balíčky totiž obsahují informaci, které balíčky je potřeba nainstalovat, chceme-li z daného zdrojového balíčku vytvořit balíčky binární (vysvětlení podává pole Build-Depends) ve výše uvedeném souboru Sources.gz). Pro apt-get pak není problémem zajistit instalaci potřebných balíčků:

CS24_early

# apt-get build-dep garchiver
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
libgtkxmhtml-dev libzvt-dev python-dev python-gdk-imlib python-glade
python-gnome python2.1-dev
0 packages upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 1054kB of archives. After unpacking 3908kB will be used.
Do you want to continue? [Y/n]

Tento článek sponzoruje soLNet, s.r.o.

Byl pro vás článek přínosný?