4.3. RPM — the Package Manager

Distribuce SUSE LINUX používá RPM. Databáze RPM poskytuje detailní informace o nainstalovaných balících a tím usnadňuje práci uživatelům, systémovým administrátorům a v neposlední řadě i tvůrcům balíků. Hlavní příkazy systému RPM jsou rmp a rpmbuild.

rpm funguje v pěti módech:

Příkaz rpmbuild aplikace přeloží ze zdrojových kódů a zabalí je pro instalaci.

Archivy RPM jsou zabalené ve speciálním binárním formátu. Skládají se ze souborů k instalaci a různých meta informací, které rpm používá během instalace pro konfiguraci stávajících softwarových balíků nebo je uloží do databáze RPM za účelem dokumentace. Archivy RPM mají zpravidla příponu .rpm. Aplikace rpm může spravovat balíky kompatibilní s LSB.

[Tip]Tip

Pro vývoj softwaru je potřeba řada komponent (knihovny, hlavičkové soubory atd.), které jsou umístěny v samostatných balících. Tyto balíky jsou potřebné pouze pro vývoj a nijak neovlivňují běžný chod systému. Poznáte je podle toho, že ve jménu balíčku obsahují -devel např. alsa-devel, gimp-devel a kdelibs-devel.

4.3.1. Ověření balíku

RPM balíky SUSE podepisovány pomocí GnuPG:


1024D/9C800ACA 2000-10-19 SuSE Package Signing
Key <build@suse.de> Key fingerprint = 79C1 79B2 E1C8 
20C1 890F  9994 A84E DAE8 9C80 0ACA
rpm --verbose --checksig apache-1.3.12.rpm

je možné zkontrolovat signaturu rpm balíku a tak určit, zda balík pochází opravdu od SUSE nebo z jiného důvěryhodného zdroje. Toto je vhodné zvláště pro balíky, které si stahujete z Internetu. Náš veřejný klíč je standardně uložen v /root/.gnupg/.

4.3.2. Správa balíků -- instalace, aktualizace a smazání

V běžném případě je instalace balíků RPM velice jednoduchá:

rpm -i JmenoBaliku.rpm

Pomocí tohoto standardního příkazu bude balík nainstalován pouze v případě, že jsou v pořádku závislosti a že nedojde k žádným konfliktům. Při ohlášení chyby vyhledá rpm chybějící závislosti, resp. balíky. Databáze RPM zajišťuje, aby nedošlo ke konfliktům -- je pravidlem, že určitý soubor patří vždy jen do jednoho balíku. Zadáním voleb lze přinutit rpm, aby to ignoroval, ale pak je třeba přesně vědět, co děláme, aby nedošlo k ohrožení možnosti aktualizovat systém.

Volba -U resp. --upgrade je určena pro aktualizaci balíků. Pomocí ní je možné smazat starší verzi stejných balíků a nainstalovat novější verzi. Zároveň se rpm opatrně pokouší editovat konfigurační soubory následujícím způsobem:

  • Pokud nebyl konfigurační soubor změněn systémovým administrátorem, pak rpm nainstaluje odpovídajícím způsobem novou verzi instalovaného souboru. Není třeba žádných zásahů administrátora.

  • Pokud před aktualizací došlo ke změně konfiguračního souboru, RPM bude instalovaný soubor zálohovat s příponou .rpmorig nebo .rpmsave -- avšak pouze pokud se instalovaný soubor a nová verze liší. Tehdy je třeba upravit nové konfigurační soubory podle záložních kopií (.rpmorig nebo .rpmsave). Potom by měly být tyto záložní kopie okamžitě odstraněny, aby nebránily budoucí aktualizaci. Přípona .rpmorig se používá, když databáze RPM soubor nezná, v opačném případě se použije .rpmsave. Jinak řečeno, .rpmorig se používá pro aktualizaci z cizího formátu na RPM a .rpmsave při aktualizaci ze staršího RPM na novější RPM verzi.

Aktualizace s volbou -U není pouhou náhradou za odinstalování pomocí -e a následnou instalaci pomocí -i. Pokud je to možné, dávejte vždy přednost volbě -U.

Po každé aktualizaci je třeba zkontrolovat záložní kopie s příponou .rpmorig nebo .rpmsave -- jsou to staré konfigurační soubory. Pokud je to možné, převezměte vaše úpravy ze starých souborů do nových a potom záložní kopie (.rpmorig resp. .rpmsave) smažte.

Budete-li chtít odinstalovat balík, zadejte:

rpm -e JmenoBaliku

Příkaz rpm však odstraní balík pouze pokud nenajde žádné závislosti. Proto není například teoreticky možné smazat Tcl/Tk tak dlouho, dokud ho bude ke svému běhu využívat některý z dalších programů -- RPM to hlídá s pomocí své databáze.

Pokud ve výjimečném případě nelze balík odstranit, přestože žádné závislosti neexistují, může pomoci aktualizovat databázi RPM volbou --rebuilddb.

4.3.3. RPM a opravy

Aby byl systém vždy naprosto bezpečný, je nutné pravidelně aplikovat opravy. Dříve bylo možné chybu v programu odstranit pouze současným přepisem celého RPM balíku. I při celkem malé chybě, která se týkala jediného souboru, bylo nutné balík kompletně přepsat. Od verze SUSE 8.1 umožňuje SUSE instalovat do balíku jen nové funkce a opravy bez nutnosti kompletního přepisu.

Výhody si můžeme demonstrovat na programu pine:

Je RPM určena pro váš systém?

abyste dokázali na tuto otázku odpovědět, musíte zjistit verzi nainstalovaného balíku. Pro program pine to provedete příkazem rpm -q pine.

Zda je opravné RPM určené pro verzi vašeho programu pine zjistíte příkazem:

rpm -qp --basedon pine-4.44-224.i586.patch.rpm
pine = 4.44-188
pine = 4.44-195
pine = 

Tato oprava je určena pro tři různé verze programu pine. Jedna z verzí se shoduje s naší nainstalovanou verzí, takže oprava je určena i pro náš případ.

Jaké soubory oprava přepíše?

Soubory, které budou přepisovány zjistíte v RPM opravy. Použijte příkaz:

rpm -qpPl pine-4.44-224.i586.patch.rpm
/etc/pine.conf
/etc/pine.conf.fixed 

Pokud jste již opravu nainstalovali a chcete informaci získat z již nainstalovaného systému, zadejte:

rpm -qPl pine
/etc/pine.conf
/etc/pine.conf.fixed 

Odpovídající výstup je v příkladu hned pod příkazem.

Jak opravné RPM nainstalovat?

S opravným RPM se pracuje jako s každým obyčejným RPM balíkem. Jediný rozdíl spočívá v tom, že již na systému musíte mít nainstalovaný balík, pro který je oprava určena.

Jaké opravy jsou již nainstalovány a pro jaké verze balíků?

Seznam již nainstalovaných oprav zobrazíte příkazem rpm -qPa. Pokud je jako v našem příkladu nainstalovaný pouze jeden opravný RPM, bude seznam vypadat takto:

rpm -qPa 

Na déle běžícím systému s řadou oprav a aktualizací budete možná potřebovat zjistit, jaká verze byla původně nainstalována. I tato informace se dá z RPM databáze získat. Například pro program pine příkazem rpm -q --basedon pine.

Více informací o opravných RPM najdete v manuálových stránkách rpm a rpmbuild.

4.3.4. Delta RPM balíčky

Delta RPM“ obsahují rozdíl (to je „delta“) mezi starou anovou verzí RPM balíčku. Aplikací delta balíčku na starý RPM balíčky získáte zcela nový balíček. Pokud nemáte kopii balíčku můžete delta RPM aplikovat i na již nainstalovaný balíček. Velkou výhodou delta RPM balíčků je jejich menší velikost oproti standardním opravným balíčkům. Menší velikost totiž znamená mnohem rychlejší stažení z internetu. Nevýhodou je vyšší zatížení systému při jejich aplikaci. Pokud chcete delta balíčeky používat při online update, nastavte v souboru /etc/sysconfig/onlineupdate proměnnou YOU_USE_DELTAS na hodnotu „yes“.

Hlavními příkazy pro práci s delta balíčky jsou prepdeltarpm, writedeltarpm a applydeltarpm. Následujícím příkazem vytvoříte delta RPM balíček nazvaný new.delta.rpm (z balicku stary.rpm a novy.rpm):

prepdeltarpm -s seq -i info old.rpm > old.cpio
prepdeltarpm -f new.rpm > new.cpio

xdelta delta -0 old.cpio new.cpio delta

writedeltarpm new.rpm delta info new.delta.rpm
rm old.cpio new.cpio delta

Příkazem applydeltarpm můžete, pokud máte starou verzi balíčku nainstalovanou v systému, získat novou verzi RPM balíčku:

applydeltarpm new.delta.rpm new.rpm

Jestliže nechcete přistupovat k souborovému systému, použijte pro vytvoření volbu -r:

applydeltarpm -r old.rpm new.delta.rpm new.rpm

Technické podrobnosti najdete v souboru file:///usr/share/doc/packages/deltarpm/README.

4.3.5. Zadání dotazu

Pomocí volby -q je možné zadat dotaz a prohlédnout si tak archiv RPM (volba -p JmenoBaliku) nebo se dotázat databáze RPM na instalované balíky. Druh požadovaných informací se zadá přepínači v tabulce 4.8 – „Nejdůležitější volby při RPM dotazování “.

Tabulka 4.8. Nejdůležitější volby při RPM dotazování

-i

Zobrazit informace o balíku

-l

Zobrazit seznam souborů

-f CeleJmenoSouboru

Dotaz na balík obsahující soubor vypasný s úplnou cestou

-s

Zobrazit stavové informace (implicitně -l)

-d

Seznam dokumentačních souborů (implicitně -l)

-c

Seznam konfiguračních souborů (implicitně -l)

--dump

Zobrazit detailní informace o souboru (použít s -l, -c nebo -d!)

--provides

Seznam virtuálních balíků, které tento balík poskytuje

--requires, -R

Seznam balíků, virtuálních balíků a souborů, které tento balík vyžaduje

--scripts

Zobrazit skripty pro instalaci a deinstalaci

Příkaz:

rpm -q -i rpm


Name        : rpm                   Relocations: (not relocateable)
Version     : 3.0.3                 Vendor: SUSE GmbH, Germany
Release     : 47                    Build Date: Fri Dec 10 13:50:27
Install date: Tue Dec 14 12:57 1999 Build Host: Cauchy.suse.de
Group       : unsorted              Source RPM: rpm-3.0.3-47.src.rpm
Size        : 5740847               License: GPL
Packager    : feedback@suse.de
Summary     : RPM Package Manager
Description :
RPM Package Manager is the main tool for managing software packages
of the SUSE Linux distribution.
[...]

Volba -f je funkční pouze v případě, že znáte kompletní název souboru včetně cesty. Může být zadán libovolný počet hledaných souborů, např.:

rpm -q -f  /bin/rpm  /usr/bin/wget

vede k tomuto výsledku:

rpm-3.0.3-3
wget-1.5.3-55

Pokud znáte pouze část názvu souboru, musíte si pomoci skriptem příkazového interpretu. Hledaný soubor se zadává při volání tohoto skriptu jako parametr. Použít můžete např. následující skript:

#! /bin/sh
for i in `rpm -q -a -l | grep  $1 `; do
    echo "\bslash"$i\bslash" je v balíku:"
    rpm -q -f $i
    echo ""
done    
    

Příkazem rpm -q --changelog rpm můžete zobrazit žádaný seznam informací (aktualizace, konfigurace, změny, atd.) o jednotlivých balících, např. o balíku rpm.

Pomocí databáze RPM je možné provádět kontroly. Ty je možné provádět volbou -V (stejný význam jako -y nebo --verify). Pomocí této volby zobrazí program rpm všechny soubory v balíku, u kterých došlo ke změně, v porovnání s originálem balíku. Program rpm používá osm různých znaků na označení nalezených změn v jednotlivých souborech:

Tabulka 4.9. Příznaky druhů změn souboru

5

kontrolní součet MD5

S

velikost souboru

L

symbolický odkaz

T

čas změny

D

major a minor číslo zařízení

U

uživatel

G

skupina

M

mód (přístupová práva a typ)

Tyto znaky se navzájem kombinují v řetězec. U konfiguračních souborů se navíc zobrazí znak c. Pokud například změníte /etc/wgetrc, který obsahuje wget, dostanete:

rpm -V wget
S.5....T c 

Soubory databáze RPM jsou v adresáři /var/lib/rpm. Při velikosti stromu /usr kolem 1 GB může databáze zabírat kolem 30 MB -- zvláště po kompletní aktualizaci. Pokud vám bude připadat, že se databáze příliš rozrostla, lze ji obnovit pomocí volby --rebuilddb. Hodí se předtím zálohovat (samozřejmě někam jinam) stávající databázi.

Kromě toho vytváří skript cron.daily každý den zabalené kopie databáze v /var/adm/backup/rpmdb. Počet kopií určuje MAX\_RPMDB\_BACKUPS v /etc/sysconfig/cron (standardní počet je 5).

Je zde třeba počítat až s 3 MB pro každou zálohu (při 1 GB velkém /usr). To je třeba brát v úvahu při vytváření kořenového diskového oddílu. Pokud má /var zvláštní diskový oddíl, je třeba toto zohlednit při vytváření oddílu /var.

4.3.6. Instalace a překlad zdrojových balíků

Všechny zdrojové kódy distribuce SUSE Linuxu mají příponu .spm -- jde o tzv. zdrojová RPM.

[Tip]Tip

Zdrojové balíky dokáže nainstalovat i YaST, avšak nejsou pak označeny jako ostatní řádné balíky, neboť v databázi RPM je pouze spustitelný software, což zdrojové kódy nejsou.

V /usr/src/packages musí existovat následující pracovní adresáře pro rpm (pokud jste neprovedli žádná vlastní nastavení, např. v /etc/rpmrc):

SOURCES

pro soubory .tar.gz atd., obsahující originální zdrojové kódy, a pro soubory .dif, obsahující úpravy specifické pro danou distribuci.

SPECS

pro soubory .spec, které kontrolují proces sestavení binárního balíku

BUILD

kde se zdrojové kódy rozbalují, upravují a překládají

RPMS

kde se ukládají hotové binární balíky

SRPMS

kde jsou zdrojové balíky

Pokud použijete pro instalaci zdrojového balíku YaST, komponenty potřebné pro sestavovací proces se nainstalují do /usr/src/packages. Zdrojový kód a úpravy do se nainstalují do adresáře SOURCES a odpovídající soubor .spec do SPECS.

[Important]Důležité

Prosím nedělejte pomocí RPM žádné experimenty s důležitými systémovými součástmi jako jsou glibc, rpm, sysvinit atd. Riskujete tím ztrátu funkčnosti vašeho systému.

Pro náš následující příklad vybereme balík wget.spm. Poté, co se zdrojový balík wget.spm nainstaluje, by měly vzniknout například následující soubory:

  • /usr/src/packages/SPECS/wget.spec

  • /usr/src/packages/SOURCES/wget-1.4.5.dif

  • /usr/src/packages/SOURCES/wget-1.4.5.tar.gz

Příkazem rpmbuild -b X /usr/src/packages/SPECS/wget.spec se spustí překlad. Proměnná X označuje různé stupně pokročilosti instalace. Jednotlivé možnosti nám podá např. rpmbuild --help nebo dokumentace k RPM. Hlavní z nich jsou:

-bp

Příprava zdrojového kódu v adresáři /usr/src/packages/BUILD -- rozbalení a úpravy

-bc

totéž jako -bp, navíc s překladem

-bi

totéž jako -bc, navíc s instalací. (Pozor -- pokud instalovaný balík nepodporuje BuildRoot, může dojít během instalace k přepisu konfiguračních souborů!)

-bb

totéž jako -bi, navíc s vytvořením tzv. binárního RPM. Po úspěšném překladu bude v /usr/src/packages/RPMS.

-ba

totéž jako -bb, navíc s vytvořením tzv. zdrojového RPM. Po úspěšném překladu bude v /usr/src/packages/SRPMS.

Pokud společně s -bc (resp. -bi) zadáte volbu --short-circuit, rpm vykoná pouze překlad, resp. instalaci, bez předchozích fází. S pomocí tohoto příkazu je tedy možné přeskočit určité kroky.

Vytvořené binární RPM se instaluje pomocí rpm -i nebo lépe rpm -U, aby došlo k zápisu do databáze RPM.

4.3.7. Další nástroje pro práci s archivy a databází RPM

Program Midnight Commander dokáže procházet archiv RPM a pracovat s jeho součástmi. Zachází přitom s balíkem RPM, jakoby se jednalo o souborový systém. Při používání mc můžete zobrazit informace obsažené v záhlaví (přístupném zde jako soubor HEADER) klávesou F3 a kopírovat části archivu klávesou F5.

xrpm je název grafického správce balíků RPM, který je napsaný v Pythonu a podporuje příkazy pro přístup přes FTP.

KDE obsahuje nástroj kpackage, což je grafické rozhraní pro obsluhu různých formátů balíků, včetně RPM. GNOME obsahuje podobný nástroj gnorpm.


SUSE LINUX Příručka správce systému 9.3