Údržba softwaru pomocí RPM (Red Hat Package Manager)
RPM je výkonný softwarový manažer, který lze použít k vytváření, instalaci, dotazování, ověřování, aktualizaci a odinstalaci jednotlivých softwarových balíků. Balíček RPM se skládá z archivu souborů a informací o balíčku, jako je název, verze, popis a informace o závislostech na jiných balíčcích RPM.
RPM je více než jen nástroj specifický pro Red Hat. Mnoho dalších moderních distribucí, jako je Ubuntu a SuSE, také používá RPM. Mezi výhody používání RPM patří:
- Zjednodušená distribuce, instalace, aktualizace a odstranění softwaru
- Zaručuje, že:
- V systému je nainstalován nezbytný software.
- verze nezbytného softwaru zůstávají kompatibilní.
- místně upravené konfigurační soubory nejsou při aktualizaci RPM blokovány.
- Místně upravené konfigurační soubory se ukládají s příponou „.rpmsave“, pokud je balíček později smazán.
- Umožňuje certifikovat, že nainstalovaný software nebyl žádným způsobem změněn, upraven, poškozen nebo změněn.
RPM uchovává informace o nainstalovaných balíčcích pod „/var/lib/rpm ” adresář.
Součásti nástroje RPM jsou:
- Vlastní databáze obsahující informace o veškerém softwaru nainstalovaném v systému, shromážděné z jednotlivých RPM.
- Spustitelný soubor „/bin/rpm“.
- Internetové úložiště dostupných RPM balíčků.
Typy RPM balíčků
Balíčky RPM jsou rozděleny do dvou kategorií:zdroj a binární .
Zdroj RPM lze vždy rozpoznat, protože název souboru končí řetězcem „.src.rpm “. Ve zdrojovém RPM nejsou pouze původní soubory zdrojového kódu programu, ale také skripty, které umožňují automatickou rekompilaci kódu, automatickou instalaci a automatické odstranění. Ve zdrojovém RPM nejsou žádné spustitelné soubory koncovým uživatelem. O zdrojové RPM se obvykle zajímají pouze vývojáři.
Binární RPM obsahuje komponenty RPM pro koncového uživatele. Binární názvy souborů RPM identifikují hostitelskou architekturu obsahu. Například binární soubor RPM:
bash-3.1-16.1.x86_64.rpm
Obsahuje soubory použitelné pouze na 64bitovém procesoru s architekturou Intel X86. Mezi další běžné hodnoty architektury patří „i386“ pro 32bitové hostitele Intel. Některé binární RPM mohou být nainstalovány na libovolné architektuře CPU, protože jejich soubory budou fungovat na jakémkoli hostiteli; příkladem těchto balíčků „.noarch.rpm“ je „tzdata“ RPM, který obsahuje informace o světových časových pásmech. Chcete-li aktualizovat svůj systém nejnovější verzí balíčku, budete pro něj potřebovat nejnovější binární RPM.
Schéma pojmenování RPM
Každý balíček RPM je obsažen v jednom souboru. Název souboru má několik polí pro plnou identifikaci obsahu balíčku. I když samotné nástroje RPM nespoléhají na samotný název souboru, měli byste rozumět konvenci názvů souborů, která vám pomůže identifikovat nebo stáhnout správný balíček. Zde je příklad souboru RPM:
bash-3.1-16.1.x86_64.rpm
Toto RPM je pro shell BASH („/bin/bash“). Název souboru se skládá z několika částí:
[name]-[version]-[release].[arch].rpm
kde:
- [jméno] je název programu nebo balíčku. [jméno] obvykle přiděluje autor programu. V našem příkladu se vývojáři rozhodli pojmenovat svůj produkt „bash“ z důvodů, které jim připadaly zábavné.
- verze] určuje, kterou verzi softwaru tato RPM obsahuje. Číslo [verze] přiděluje autor programu. Pomocí čísla
lze určit, která verze zdrojů autora byla použita ke generování RPM. - [vydání] poskytuje číslo vydání samotného souboru RPM a nikoli verzi zdrojových souborů autora. Může být vydán aktualizovaný RPM za účelem dodání opravené verze původního softwaru autora. Oprava nemusí pocházet od původního vývojáře, takže RPM [vydání] se zvýší místo [verze].
- [oblouk] popisuje obsah RPM a říká, zda tento soubor obsahuje zdroj produktu (".src.rpm"), soubory nezávislé na architektuře (".noarch.rpm") nebo soubory, které lze nainstalovat pouze na konkrétního hostitele typu (".sh.rpm" bude fungovat pouze na vestavěném procesoru STRONGHOLD).
Porozumění verzím RPM
Pole RPM [version] a [release] nejsou vždy čistě číselná a mohou obsahovat kromě běžných číslic i jiné znaky. Je běžné vidět verzi „10“ i verzi „10a“ stejného balíčku. Někdy může být výběr nejnovější verze komplikovaný. Zde je návod, jak RPM interně porovnává čísla verzí a vydání:
1. Odstraňte předponu [jméno] a příponu „[arch].rpm“. Například:
„bash-3.1-16.1.x86_64.rpm“ se změní na „3.1-16.1“ a „bash-3.1-16.5a.1.x86_64.rpm“ se změní na „3.1-16.5a.1“
2. Porovnejte zbývající řetězce znak po znaku, zleva doprava, dokud nenarazíte na číslici. Pokud se znaky liší, podle toho, který znak přijde později v porovnávací sekvenci, je novější RPM.
3. Když narazíte na číslici, převeďte celou sekvenci číslic na jediné binární číslo. V našem příkladu jsou dva znaky „16“ sloučeny do hodnoty šestnáct (16). Výsledné binární hodnoty jsou porovnány a vyšší hodnota je novější RPM. RPM s [verzí] „0010“ je tedy novější než RPM s [verzí] „9“.
Kroky 2 a 3 se podle potřeby opakují, dokud nenastane rozdíl.
Instalace a odebrání souborů
Poznámka :Obvykle může být najednou nainstalována pouze jednaPozdější verze se obvykle instalují pomocí „-U “ (aktualizace) funkce RPM namísto „-i ” Funkce RPM. Běžné výjimky z pravidla pouze jedné RPM jsou RPM jádra. Systém má běžně nainstalováno několik verzí jader; RPM obsahuje seznam, které RPM mohou mít nainstalované více verzí. Chcete-li odstranit jednu verzi, když je jich nainstalováno několik, musíte úplně specifikovat název balíčku a verzi.
Na architektuře x86_64 je běžné mít nainstalované 32bitové balíčky „.i386“ i 64bitové balíčky „.x86_64“ RPM pro podporu 32bitových i 64bitových aplikací. Normálně RPM nezobrazuje architekturu balíčku v dotazu, ale můžete ji zobrazit ručně.
Instalace a odstranění
# rpm -i --install (install new RPM; error if already installed) # rpm -U --upgrade (delete existing RPM, if any; install new) # rpm -F --freshen (update RPM only if package already installed) # rpm -e --erase (remove, delete, expunge)
Společné možnosti
Výstup:-v (podrobné – název souboru), -h (hash)
Předpoklady:–nodeps, –replacefiles, –force (ZDE POZOR !!!)
Přemístění:–excludepath, –prefix, –relocate, –badreloc, –root
Podpora URL:ftp, http
Příklady:
# rpm -ivh binutils-2.11.90.0.8-12.i386.rpm # rpm -Uvh finger-0.17-9-i386.rpm # rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm # rpm -e diffutils # rpm -e kernel-enterprise-2.4.9-e.12
Nápověda :Nikdy, nikdy nepoužívejte volbu „-U“ k instalaci nového jádra RPM. Funkce aktualizace „-U“ nejprve odstraní aktuální otáčky za minutu ze systému a poté se pokusí nainstalovat nové otáčky za minutu. Jakýkoli problém, který brání instalaci nového RPM, způsobí, že systém nebude možné spustit. To není to, co chcete, takže k instalaci RPM jádra vždy použijte přepínač „-i“.
Dotazy (balíčky a/nebo informace)
Použijte dotaz pro informace o nainstalovaných balíčcích. Můžete se dotazovat na všechny nainstalované balíčky nebo na jeden nainstalovaný balíček. Můžete také zjistit, které RPM poskytuje konkrétní soubor.
# rpm -q [packages] [information] # rpm -qa (all installed packages) # rpm -q package_name # rpm -qf (filename) # rpm -qp (package filename)
Informace
výchozí (název balíčku)
-i :obecné informace
-l :seznam souborů
Příklady:
# rpm -qa # rpm -q kernel -i (information) # rpm -q kernel -l (files contained in package) # rpm -q kernel --requires (prereqs) # rpm -q kernel --provides (capabilities provided by package) # rpm -q kernel --scripts (scripts run during installation and removal) # rpm -q kernel --changelog (revision history) # rpm -q kernel -queryformat format (rpm --querytags for list of options)
Nápověda :Při hledání konkrétního balíčku RPM, když není znám přesný název, se zobrazí kanál příkazů jako:
$ rpm -qa | grep foo
se běžně používá. Pozdější verze nástroje RPM umožňují, aby to bylo stručně provedeno takto:
$ rpm -qa '*foo*'
Dotazy – ověření (soubory)
Databáze RPM obsahuje mnoho atributů o každém souboru nainstalovaném pomocí RPM. Aktuální stav souboru můžete ověřit podle informací katalogizovaných pomocí RPM při instalaci balíčku.
# rpm -V package_name # rpm -Va (verify all) # rpm -Vf (filename) # rpm -Vp (package filename)Poznámka :Mnoho distribucí Linuxu obsahuje „prelink“ RPM, který se pokouší zkrátit čas potřebný ke spuštění aplikace pomocí sdílené knihovny (většina aplikací používá alespoň jednu sdílenou knihovnu a potenciálně desítky) přidáním speciálních informací přímo do programového souboru aplikace.
Přidání těchto informací urychlí spouštění aplikací, ale změny souborů znehodnotí většinu atributů souboru v databázi RPM, jako je datum poslední úpravy souboru, velikost souboru a kontrolní součet MD5 souboru.
Dotazy – ověření (balíčky)
# rpm -import /mnt/cdrom/RPM-GPG-KEY # rpm -q gpg-pubkey # rpm --checksig m4-1.4.1-11.i386.rpm
Příklady:
# rpm -qf /path/filename (what package owns filename) # rpm -qf /path/filename -i (what does it do) # rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4) # rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4) # rpm -q --whatprovides glibc.so (what package provides requisite library)
Opravit databázi RPM
Nástroj RPM používá vlastní implementaci vlastní databáze, která obsahuje informace. Někdy může dojít k poškození databáze; příznaky zahrnují tvrzení, že nainstalovaný RPM balíček chybí; nebo pokusy o aktualizaci RPM jednoduše přestanou fungovat. Pokud vaše databáze RPM nereaguje nebo je poškozená, můžete se ji pokusit opravit pomocí těchto příkazů. Není zaručeno, že tento proces bude fungovat.
Pro tyto kroky musíte být přihlášeni s oprávněním superuživatele (neboli „root“). Příkazy lze zkopírovat a vložit přímo do kořenového okna terminálu.
1. Ujistěte se, že ve vašem systému nezůstaly spuštěny žádné procesy RPM. K jejich identifikaci použijte příkaz ps. Použijte příkaz kill k ukončení všech nalezených „rpm“ procesů; může být nutné „kill -9“.
2. Odstraňte soubory zámku, které používá RPM:
# rm -f /var/lib/rpm/__db*
3. Pokud jste zaznamenali pozastavení příkazu „rpm“, zkuste to znovu. Pokud to funguje, jste hotovi. Pokud ne, proveďte kroky #1 a #2 znovu. Poté pokračujte dalším krokem.
4. Vytvořte zálohu databáze RPM:
# cd /var/lib # mkdir rpm-backup # rsync -av ./rpm/. ./rpm-backup/.
5. Znovu vytvořte databázi RPM:
# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1
6. Zopakujte neúspěšný příkaz RPM.