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:
Nainstaluje, aktualizuje a beze zbytku odinstaluje balíky ve formátu RPM.
Umožňuje dotazy ohledně balíků, včetně závislostí a spravuje databázi instalovaných RPM balíků.
Přestaví v případě potřeby RPM databázi.
Překontroluje integritu balíky.
Podepisuje RPM balíky.
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 |
|---|---|
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í | |
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/.
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.
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:
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.
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.
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.
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.
„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.
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í
| Zobrazit informace o balíku |
| Zobrazit seznam souborů |
| Dotaz na balík obsahující soubor vypasný s úplnou cestou |
| Zobrazit stavové informace (implicitně |
| Seznam dokumentačních souborů (implicitně |
| Seznam konfiguračních souborů (implicitně |
| Zobrazit detailní informace o souboru (použít s |
| Seznam virtuálních balíků, které tento balík poskytuje |
| Seznam balíků, virtuálních balíků a souborů, které tento balík vyžaduje |
| 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
| kontrolní součet MD5 |
| velikost souboru |
| symbolický odkaz |
| čas změny |
| major a minor číslo zařízení |
| uživatel |
| skupina |
| 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.
Všechny zdrojové kódy distribuce SUSE Linuxu mají příponu .spm -- jde o tzv. zdrojová RPM.
![]() | 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):
SOURCESpro soubory .tar.gz atd., obsahující originální
zdrojové kódy, a pro soubory .dif, obsahující úpravy specifické pro
danou distribuci.
SPECSpro soubory .spec, které kontrolují proces
sestavení binárního balíku
BUILDkde se zdrojové kódy rozbalují, upravují a překládají
RPMSkde se ukládají hotové binární balíky
SRPMSkde 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.
![]() | Důležité |
|---|---|
Prosím nedělejte pomocí RPM žádné experimenty s důležitými systémovými
součástmi jako jsou | |
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
-bctotéž jako -bp, navíc s překladem
-bitotéž 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.
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.