Hlavní navigace

Balíčkovací systém distribuce Debian GNU/Linux: seznam zdrojů

Marcel Kolaja

V minulém dílu jsme si vysvětlili, jakým způsobem nám může být užitečný apt, a ukázali jsme si základní použití programu apt-get. Dnes si ukážeme, jak se konfiguruje seznam zdrojů, a podíváme se blíže, jakým způsobem funguje aktualizace seznamu balíčků.

Konfigurace zdrojů s balíčky

Do našeho systému můžeme instalovat balíčky z různých zdrojů. Nejčastěji používanými zdroji jsou archivy balíčků na FTP nebo HTTP serverech, můžeme však použít i jiné zdroje (např. instalační CD). Seznam zdrojů nakonfigurujeme v souboru /etc/apt/sources­.list. Soubor může obsahovat libovolný počet zdrojů, přičemž typy zdrojů lze libovolně kombinovat. Není tedy problémem např. používat primárně k instalaci balíčků instalační CD, a přesto aplikovat bezpečnostní aktualizace z HTTP serveru v Internetu. Každý zdroj je nadefinován na jednom řádku v následujícím formátu:

typ URI argumenty

Nejčastěji používaným typem je deb (definuje zdroj binárních balíčků), dalším typem je deb-src (definuje zdroj zdrojových balíčků). URI určuje místo, kde se balíčky nacházejí. Existuje několik typů URI, nejpoužívanějšími typy jsou cdrom, file, ftp a http. Argumenty, následující URI, pro zdroje typu deb i deb-src

určují distribuci a komponenty. Distribucí bývá typicky stable, testing nebo unstable a komponentami mohou být např. main, contrib nebo non-free. URI, distribuce a komponenty spolu dohromady tvoří umístění, ze kterých může apt-get

čerpat informace o balíčcích. Komponent může být pro jeden zdroj uvedeno více a ve speciálním případě, kdy distribuce definuje přesnou cestu (v takovém případě musí končit znakem „/“), může být určení komponenty vynecháno. Formát řádku pro zdroj typu deb (analogicky platí pro typ deb-src) je tedy:
deb URI distribuce [komponenta_1] [komponenta_2] [...]

Obvyklý obsah souboru sources.list pro vývojovou větev stableje:

deb ftp://ftp.cz.debian.org/debian
 stable main contrib non-free
deb ftp://ftp.cz.debian.org/debian-non-US
 stable/non-US main contrib non-free
deb http://security.debian.org stable/updates
 main contrib non-free
deb http://security.debian.org/debian-non-US
 stable/non-US main contrib non-free

Aktualizace informací o balíčcích

Při většině operací nad balíčkovacím systémem nepracují nástroje apt přímo se zdroji balíčků, ale s informacemi, které mají dostupné lokálně. Tyto informace se synchronizují s aktuálním stavem zdrojů příkazem apt-get update. Nyní si zhruba popíšeme, co tento příkaz vykonává. Pro vysvětlení budeme předpokládat, že v souboru sources.list máme řádek:

deb ftp://ftp.cz.debian.org/debian stable main contrib non-free

V takovém případě bude příkaz apt-get update vypisovat řádky:

Get:1 ftp://ftp.cz.debian.org stable/main Packages [1777kB]
Get:2 ftp://ftp.cz.debian.org stable/main Release [96B]
Get:3 ftp://ftp.cz.debian.org stable/contrib Packages [49.2kB]
Get:4 ftp://ftp.cz.debian.org stable/contrib Release [99B]
Get:5 ftp://ftp.cz.debian.org stable/non-free Packages [65.4kB]
Get:6 ftp://ftp.cz.debian.org stable/non-free Release [100B]

Zmíněný zdroj (řádek v souboru sources.list) totiž určuje celkem tři adresáře (pro každou komponentu jeden), ze kterých má apt-get čerpat informace. Konkrétně se jedná o tyto adresáře (pracujeme s architekturou­ i386):

ftp://ftp.cz.debian.org/debian/dists/stable/main/binary-i386/
ftp://ftp.cz.debian.org/debian/dists/stable/contrib/binary-i386/
ftp://ftp.cz.debian.org/debian/dists/stable/non-free/binary-i386/

Podíváme-li se do těchto adresářů, zjistíme, že každý z nich obsahuje celkem tři soubory: Packages, Packages.gz a Release. Z našeho pohledu je zajímavý soubor Packages.gz, což je (jak z jeho názvu vyplývá) zkomprimovaná varianta souboru Packages. Nahlédneme-li např. do souboru ftp.cz.debian­.org/debian/dis­ts/stable/main/bi­nary-i386/Packages.gz, uvidíme specifikace balíčků, které jsou obsaženy v komponentě maindistribuce stable (je jich skutečně mnoho :-)). Jednotlivé specifikace jsou od sebe odděleny prázdným řádkem. Jako příklad si uvedeme specifikaci balíčku 3dchess:

Package: 3dchess
Priority: optional
Section: games
Installed-Size: 144
Maintainer: Stephen Stafford <bagpuss@debian.org>
Architecture: i386
Version: 0.8.1-9
Depends: libc6 (>= 2.2.4-4), xaw3dg (>= 1.5-6),
 xlibs (>> 4.1.0)
Filename: pool/main/3/3dchess/3dchess_0.8.1-9_i386.deb
Size: 31466
MD5sum: 03cdc2c944551aa3ecdd0d3979071e77
Description: 3D chess for X11
 3 dimensional Chess for X11R6.  Three boards, 96 pieces
 and 26 directions.

Z této specifikace je zřejmé, že soubor Packages.gz je jádrem informací o balíčcích, neboť z těchto údajů lze získat vše od informativního popisu balíčku až po definici závislostí. Proto je jeho kopie uložena v dekomprimované podobě lokálně na disku (v našem případě pod názvem /var/lib/apt/lis­ts/ftp.cz.debi­an.org_debian_dis­ts _stable_main_binary-i386_Packages). Důležitou informací, kterou lze ze souboru Packages.gz získat, je umístění jednotlivých balíčků. Tuto informaci nese hodnota pole Filename. Zřetězíme-li URI definované v souboru sources.list s hodnotou pole Filename, získáme URI, na kterém je dostupný požadovaný balíček. V našem případě to tedy jeftp.cz.debi­an.org/debian/po­ol/main/3/3dches­s/3dchess0.8.1–9_i386.deb. Nyní je nám tedy jasné, jak je možné, že nás apt-get při spuštění příkazu apt-get install console-log např. informuje o skutečnosti, že je potřeba nainstalovat ještě balíček run, a jaktože ví, odkud má balíčky instalovat.

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

Našli jste v článku chybu?