Hlavní navigace

Triky pro už ne začátečníky

27. 2. 2001
Doba čtení: 4 minuty

Sdílet

V dnešním čísle se na přání čtenářů podíváme na instalaci balíčků typu RPM. Jelikož nejsem debianista, balíčky DEB přenechám nějakému dobrovolníkovi :-).

Úvodem jen malé vysvětlení titulku. Pokud jste se úspěšně prokousali všemi dosavadními čísly Triků, nemůžete už být začátečníky. Takže gratuluji :-). Jak jsem již předestřel, dnes se budu zabývat správou balíčků v RedHatu, Mandraku, SuSE, TurboLinuxu, Caldeře a dalších několika stovkách distribucí, které používají RPM. RPM je akronym pro RedHat Package Manager.

V dávných dobách, kdy Slackware 3.0 vládl linuxovým distribucím, byl standardem pro instalaci balíčků formát tgz (tar.gz). Používal se nejen pro přenos zdrojových textů, nýbrž i pro binární soubory. Výhodou byla jednoduchost (pokud jste ovládali příkazovou řádku) a nezávislost na distribuci, protože tomuto formátu rozuměli všichni. Jenže byly tu i problémy. Nainstalovali jste zcela novou verzi programu XY ve verzi 0.1. Celí žhaví jste spustili tento program, ale jaké bylo vaše zklamání, když se místo XAw (X Athena Widget – původní knihovna přípravků projektu XFree) aplikace objevila na terminálu (v konzoli) jen lakonická hláška, že vám chybí nějaká knihovna. Takže jste se připojili k Internetu (nebo další týden odjeli do školy) a stáhli si ji a nainstalovali. A pak zjistíte, že tato knihovna vyžaduje třeba knihovnu libjpeg.

Výše zmíněný problém začalo řešit několik projektů. Pokud jde o kompilaci ze zdrojových balíčků, řešením se ukázal autoconf (popis najdete ve starším článku na Rootovi). Uživatele, kteří preferují již zkompilované binární soubory, zase potěšily distribuce RedHat a zhruba ve stejné době vznikající Debian. Přes poněkud odlišnou filozofii obě zavedly pojem závislosti. Díky němu už během instalace balíku zjistíte, co vám chybí a obvykle vám ani systém nedovolí nainstalovat balíček, který ke svému běhu vyžaduje program či balíček, jenž není na vašem počítači nainstalován.

Speciálním případem výše zmíněného problému je situace, kdy sice již na svém stroji máte nějakou knihovnu, ale ve starší verzi. Program pak také havaroval, ale většinou s nějakou kryptickou zprávou, která uživatele jen zmátla. Proto v RPM najdete nejen závislosti na určité balíčky (soubory, knihovny), ale autor balíčku může vyžadovat i určitou verzi daného balíčku (glibc 2.2 nebo KDE 2.0 a větší).

Takže co vlastně to RPM všechno obsahuje? Obecně bychom to mohli rozdělit na hlavičku a vlastní komprimovaná data. V hlavičce najdete název programu, skupinu (stromová struktura, obdoba souborového systému, každý balíček patří do nějaké skupiny, například Knihovny, Aplikace/Internet či Dokumentace), verze programu (1.0.3) a případně release (kolikáté je to vydání daného balíčku stejné verze), velikost instalovaných dat (3 MB), domovská stránka programu, kdo, kdy a kde vytvořil tento balíček a licence (GPL, Commercial). Velmi důležité jsou již zmíněné závislosti. Autor balíčku (balič :-) může určit názvy a verze balíčků či knihoven, které daný balíček vyžaduje. Pokud je nemáte, nemůžete běžným způsobem balíček nainstalovat. Z logiky věci vyplývá, že balíčky mohou nejen vyžadovat závislosti, ale i je poskytovat. Například glibc poskytuje desítky závislostí.

Dost bylo teorie, přejděme raději k praxi. Asi základem je příkaz rpm. Pokud se jej naučíte používat, získáte přístup ke všem možnostem tohoto docela mocného programu. Předpokládejme, že jste si stáhli balíček nedit-5.1.1–1.i386.rpm. Již z názvu souboru zjistíte název balíčku (nedit), jeho verzi (5.1.1), release (1) a platformu (386 – balíček je tedy již zkompilován pro procesory 386 a vyšší). Platforma se může lišit, obvyklé jsou 586 (které nemusí běžet na 486kách), 686, alpha, noarch (nezávislé na platformě, například zvuky, obrázky či interpretované programy – perl, tk) a src. Posledně jmenovaný znamená, že balíček není zkompilovaný a obsahuje zdrojové kódy.

Pokud program ještě nemáte nainstalován, můžete tak učinit příkazem rpm -i nedit-5.1.1–1.i386.rpm. Asi vám nemusím připomínat, že toto je docela významný zásah do systému, takže jej může provádět pouze uživatel root. Pokud už balíček na svém stroji náhodou máte, uvidíte takovou hlášku: package nedit-5.0.1–1 is already installed. Je to starší verze. OK, zbavíme se ji a nahrajeme tam novou. Příkaz rpm -e nedit-5.0.1–1 odstraní starou verzi a rpm -i nedit-5.1.1–1.i386.rpm nahraje novou. rpm -e tedy smaže zvolený balíček i všechny jeho soubory (konfigurační soubory, případně i dočasné soubory, třeba fonty od texu). Pozor, rpm -e vás nebude žádat o potvrzení, takže buďte při jeho používání opatrní. Ale to je obecná vlastnost unixových příkazů.

UX DAy - tip 2

Asi vás napadá, jestli nahrazení staré verze programu novou nejde dělat nějak jednodušeji. Jde. Pohodlnějším a bezpečnějším způsobem je upgrade. Ten nahraje novou verzi programu a přitom zachová i veškeré konfigurační soubory. Navíc jej můžete použít, i když program ještě není nainstalován. Takže já osobně instaluji veškeré programy takto: rpm -U nedit-5.1.1–1.i386.rpm. Jednou z výhod tohoto schématu je, že dokáže slušně zvládat situaci, kdy se mezi původní a novou verzí nějak změnily konfigurační soubory. V takovém případě nainstaluje jejich novou verzi a pokud jste je nějak upravili, uloží jejich zálohu s příponou .rpmsave. Takže po každém upgradu byste si měli ověřit, zda se vám to taky nestalo. Ušetříte si tak mnohá nepříjemná překvapení. Pokud chcete opravdu čistý upgrade, ve smyslu nahrání nových verzí, použijte volbu -F. Příkaz rpm -F nedit-5.1.1–1.i386.rpm vám tedy nahraje novou verzi neditu, ale pouze tehdy, pokud jste jej již měli dříve nainstalován.

Někdy příště se podíváme na pokročilejší vlastnosti rpm a na programy KPackage, GnoRPM a Purp. O Midnight Commanderu a jeho podpoře RPM jsem již psal v některém starším čísle. Na shledanou na LinuxExpu!

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

Autor článku