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
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/dists/stable/main/binary-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/lists/ftp.cz.debian.org_debian_dists _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.debian.org/debian/pool/main/3/3dchess/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.