Na počátku byl zdrojový kód.
A Programátor pravil: Budiž kompilace!
A kód byl přeložen a Programátor viděl, že je to dobré.
Jednou z mnoha základních vlastností Linuxu je možnost kompilovat programy na míru svému počítači přímo ze zdrojových kódů. Přináší to mnoho výhod – maximální využití konfigurace hardwaru, možnost ovlivnit, které části programu a jak budou zkompilovány a podobně. Jelikož však nic na světě nemá jen jednu stranu, i tento způsob instalace přináší své nevýhody. Když pominu nutnost potřebných znalostí uživatele, je problém v délce kompilace, kdy na pomalejších strojích u rozsáhlejšího softwaru může překlad trvat i několik hodin (a s počítačem se přitom nedá rozumně pracovat). Dalším, ještě nepříjemnějším záporem, je řešení závislostí. Většina softwaru totiž potřebuje ke svému chodu další knihovny a programy. Stejně tak i pro kompilaci vyžaduje mít nainstalovány vývojové balíčky těchto závislých součástí, takže než se podaří uspokojit před začátkem kompilace všechny závislosti, uplyne mnoho času, stráveného googlováním a překládáním dalších zdrojových kódů. Posledním problémem tohoto postupu je praktická nemožnost udržet v systému pořádek (pokud si nepovedete přesné záznamy o tom, co, kde, kdy a kam jste nainstalovali).
Tato negativa vedla ke vzniku tzv. balíčkovacích systémů, které mají za úkol všechny výše uvedené problémy eliminovat a v ideálním případě vyřešit za uživatele. Rovněž vytvářejí databázi nainstalovaného softwaru, díky které má uživatel přehled o tom, co a v jaké verzi je v jeho systému obsaženo. Mezi nejrozšířenější typy balíčků patří rozhodně RPM a DEB. Na základě RPM, který pochází z dílny RedHat (RedHat Package Manager) jsou (kromě samotného RedHatu) postaveny distribuce jako například Fedora Core, Mandriva nebo SUSE. DEB má – jak zkratka napovídá – původ v Debianu a mimo něj je využívají distribuce jako Knoppix, Ubuntu, XandrOS a všechny ostatní od Debianu odvozené. Existuje i několik dalších typů balíčků, například TGZ u Slackware, ebuild v Gentoo.
Typy balíčků
Většina distribucí (troufám si říci, že všechny, kromě source distribucí) nabízí uživateli k použití dvě varianty balíčků pro každý software: předkompilovaný a zdrojový balíček. Jaký je mezi nimi rozdíl? Zcela zásadní. Zatímco zdrojový balíček obsahuje nezkompilovaný zdrojový kód, zabalený do formátu, kterému rozumí příslušný balíčkovací systém, předkompilovaný balíček již obsahuje přeložený software. Ten stačí nainstalovat a můžete jej začít okamžitě používat.
Zdrojové balíčky
Pokud upřednostňujete překlad softwaru ze zdrojového kódu, ale zároveň chcete využívat všechna pozitiva a sociální jistoty balíčkovacího systému, je toto ta pravá volba pro vás. Balíčkovací systém za vás vyřeší závislosti a provede kompilaci zdrojového kódu. Výsledek zabalí do příslušné formy balíčku, který poté stačí pouze nainstalovat. Nevýhoda – takto vytvořený balíček je přímo závislý na stavu vašeho systému ve chvíli kompilace a pokud jej budete chtít nainstalovat na jiný systém, můžete narazit na potíže.
Předkompilované balíčky
Pokud se nechcete zdržovat kompilací, použijte předkompilovaný balíček. Ten za vás přeložil tvůrce vaší distribuce nebo softwaru tak, aby vyhovoval co nejširší skupině uživatelů. Nevýhoda – pokud je váš systém odlišný od běžného stavu distribuce, může se stát, že software nebude fungovat tak, jak by měl. Pro běžné uživatele je však použití předkompilovaných balíčků dobrou volbou.
Jak zacházet s balíčky
Co vše se s balíčky dá provádět? Když pominu jejich vytváření, které pro většinu uživatelů není typickou činností, jde většinou o nainstalování/odinstalování nějakého programu. Základními nástroji pro tyto činnosti jsou programy rpm (pro RPM balíčky) a dpkg (pro DEB balíčky). Ty umí to, co se od nich očekává – tedy nainstalovat nebo odinstalovat balíček a udělat si o tom záznam do databáze. Zde je několik základních příkladů, jak pracovat s příkazy rpm a dpkg:
rpm -i /home/tomas/krusader-1.60.rpm nainstaluje balíček z daného umístění
rpm -e krusader odinstaluje balíček
rpm -qa | grep krusader vyhledá, zda je balíček nainstalován
Pomocí volby --nodeps můžete rpm přikázat, aby nebral ohled na nevyřešené závislosti. Používejte tuto volbu jen tehdy, pokud opravdu víte, co děláte. Volba --force říká rpm, že má v případě konfliktu přepsat všechny původní soubory těmi z instalovaného balíčku.
U dpkg je to hodně podobné:
dpkg -i /home/tomas/krusader-1.60.deb nainstaluje balíček z daného umístění
dpkg -r krusader odinstaluje balíček
dpkg -l | grep krusader vyhledá, zda je balíček nainstalován
Pomocí volby --purge sdělíte dpkg, že má při odinstalaci odebrat i všechny konfigurační soubory a adresáře. Volba --force-co_udelat definuje chování při konfliktech.
Co se ale stane v případě, že v systému chybí balíček, na kterém je ten, který chceme právě instalovat, závislý? Instalace se ukončí a vypíše se chybové hlášení o tom, který závislý balíček chybí. Samozřejmě, můžete jej vyhledat, stáhnout a nainstalovat. Jenže patrně narazíte na další a další závislosti, stažené balíčky budou mít také své vlastní závislosti. Proto se při takovémto postupu většinou dostanete do situace, které se od naštvaných uživatelů dostalo označení „rpmhell“ (ale přesnější by bylo označení „dependency hell“, protože při použití dpkg se lze dostat do obdobných situací). Proto vznikly nástavby nad tyto základní nástroje, které podobné problémy řeší.
Jak se vyhnout peklu závislostí
Principem nástaveb nad rpm a dpkg je jednoduchá myšlenka: mít k dispozici systém, který má nadefinována vlastní úložiště balíčků, se kterými může v případě problémů pracovat. Pokud při instalaci narazí na nevyřešenou závislost, automaticky si doinstaluje potřebné balíčky. V Debianu existuje luxusní nástroj apt, ani ostatní distribuce nezůstaly pozadu. Mandriva má své urpmi, Fedora Core yum, SUSE YaST. Teprve při použití těchto nástrojů se dá hovořit o skutečném „balíčkovacím systému“. Všechny pracují obdobně – používají konfigurační soubor s nadefinovanými zdroji softwaru, při instalaci se snaží automaticky řešit vzniklé závislosti, a pokud zdroje softwaru požadované balíčky obsahují, většinou se jim to i podaří.