Deník geeka

Údržba softwaru pomocí RPM (Red Hat Package Manager)

RPM je výkonný správce softwaru, který lze použít k sestavení, instalaci, dotazování, ověření, 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 specifický nástroj společnosti Red Hat. RPM používá i mnoho dalších moderních distribucí, například Ubuntu a SuSE. Mezi výhody používání RPM patří:

  • Zjednodušená distribuce, instalace, aktualizace a odstraňování softwaru
  • Zaručuje, že:
    • předpokládaný software je v systému nainstalován.
    • verze předpokládaného softwaru zůstávají kompatibilní.
    • místně změněné konfigurační soubory nejsou při aktualizaci RPM překlepány.
    • místně změněné konfigurační soubory jsou uloženy s „.rpmsave“ s příponou, pokud je balíček později odstraněn.
  • Umožňuje osvědčit, že nainstalovaný software nebyl změněn, upraven, poškozen nebo jakkoli pozměněn.

RPM uchovává informace o nainstalovaných balíčcích v adresáři „/var/lib/rpm“.

Součásti nástroje RPM jsou:

  • Vlastní databáze obsahující informace o veškerém softwaru nainstalovaném v systému, získané z jednotlivých RPM.
  • Spustitelný soubor „/bin/rpm“.
  • Internetově přístupné repozitáře dostupných balíčků RPM.

Typy balíčků RPM

Balíčky RPM se dělí na dvě kategorie: zdrojové a binární.

Source RPM lze vždy rozpoznat, protože název souboru končí řetězcem „.src.rpm“. Ve zdrojovém RPM jsou nejen 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é soubory spustitelné koncovým uživatelem. Obvykle se o zdrojový RPM zajímají pouze vývojáři.

Binární RPM obsahuje komponenty RPM pro koncové uživatele. Názvy binárních souborů RPM identifikují architekturu hostitele pro jejich obsah. Například binární soubor RPM:

bash-3.1-16.1.x86_64.rpm

Obsahuje soubory použitelné pouze na 64bitovém procesoru architektury Intel X86. Mezi další běžné hodnoty architektury patří „i386“ pro 32bitové hostitele Intel. Některé binární balíčky RPM lze nainstalovat na libovolnou architekturu procesoru, protože jejich soubory budou fungovat na libovolném hostiteli; příkladem těchto balíčků „.noarch.rpm“ je RPM „tzdata“, který obsahuje informace o světových časových pásmech. Chcete-li aktualizovat systém nejnovější verzí balíčku, potřebujete pro něj nejnovější binární RPM.

Schéma pojmenování RPM

Každý balíček RPM je obsažen v jediném souboru. Název souboru obsahuje několik polí, která plně identifikují obsah balíčku. Přestože samotné nástroje RPM na samotném názvu souboru nespoléhají, měli byste porozumět konvenci názvů souborů, která vám pomůže identifikovat nebo stáhnout správný balíček. Zde je příklad názvu souboru RPM:

bash-3.1-16.1.x86_64.rpm

Tento soubor RPM je určen pro shell BASH („/bin/bash“). Název souboru se skládá z několika částí:

--..rpm

kde:

    je název programu nebo balíčku. Ten je obvykle přiřazen autorem 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 edici softwaru tento RPM obsahuje. Číslo je přiděleno autorem programu. Pomocí tohoto čísla lze určit, která verze zdrojových souborů autora byla použita k vytvoření RPM.
  • uvádí číslo edice samotného souboru RPM, nikoli verzi zdrojových souborů autora. Aktualizovaný RPM může být vydán za účelem dodání opravené verze původního softwaru autora. Záplata nemusí pocházet od původního autora, takže se RPM zvýší místo .
  • popisuje obsah RPM a říká, zda tento soubor obsahuje zdrojový kód produktu (a „.src.rpm“), soubory nezávislé na architektuře (a „.noarch.rpm“) nebo soubory, které lze nainstalovat pouze na určitý typ hostitele (a „.sh.rpm“ bude fungovat pouze na vestavěném procesoru STRONGHOLD).
Poznámka: The je řízeno původním autorem a the je řízeno tím, kdo RPM zkonstruoval.

Poznání verzí RPM

Pole RPM a nejsou vždy striktně číselná a mohou obsahovat i jiné znaky než běžné číslice. Běžně se setkáváme s verzí „10“ i s verzí „10a“ téhož balíčku. Někdy může být výběr nejnovější verze ošemetný. Zde je uvedeno, jak samotný RPM interně porovnává čísla verzí a vydání:

1. Odstraňte předponu a příponu „..rpm“. Například:
„bash-3.1-16.1.x86_64.rpm“ se stane „3.1-16.1“ a „bash-3.1-16.5a.1.x86_64.rpm“ se stane „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ší, ten znak, který je v porovnávací posloupnosti později, je novější RPM.

3. Když narazíte na číslici, převeďte celou posloupnost číslic na jediné binární číslo. V našem příkladu se dva znaky „16“ spojí do hodnoty šestnáct (16). Výsledné binární hodnoty se porovnají a větší hodnota je novější RPM. RPM s a o hodnotě „0010“ je tedy novější než RPM s a o hodnotě „9“.

Kroky 2 a 3 se opakují podle potřeby, dokud nevznikne rozdíl.

Instalace a odebírání souborů

Poznámka: Obvykle lze najednou instalovat pouze jednu nebo RPM.

Novější verze se obvykle instalují pomocí funkce RPM „-U“ (update) místo funkce RPM „-i“. Obvyklou výjimkou z pravidla pouze jednoho RPM jsou RPM jádra. V systému je běžně nainstalováno několik verzí jader; RPM obsahuje seznam, které RPM mohou mít nainstalováno více verzí. Chcete-li odstranit jednu verzi, je-li jich nainstalováno více, musíte plně specifikovat název a verzi balíčku.

Na architektuře x86_64 je běžné, že jsou nainstalovány jak 32bitové „.i386“, tak 64bitové „.x86_64“ balíčky RPM pro podporu 32bitových i 64bitových aplikací. Obvykle RPM při dotazu nezobrazuje architekturu balíčku, ale můžete ji zobrazit ručně.

Instalace a odebrá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)

Obvyklé možnosti
Výstup: -v (verbose – název souboru), -h (hash)
Předpoklady: -nodeps, -replacefiles, -force (TADY DÁVEJTE 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

Rady: Nikdy, nikdy nepoužívejte volbu „-U“ pro instalaci nového jádra RPM. Aktualizační funkce „-U“ nejprve odstraní ze systému aktuální RPM a poté se pokusí nainstalovat nové RPM. Jakýkoli problém, který zabrání instalaci nového RPM, způsobí, že systém nebude možné spustit. To není to, co chcete, proto pro instalaci RPM jádra vždy používejte přepínač „-i“.

Dotazování (balíčky a/nebo informace)

Pro získání informací o nainstalovaných balíčcích použijte dotaz. Dotazovat se můžete na všechny nainstalované balíčky nebo na jeden nainstalovaný balíček. Můžete také zjistit, který RPM dodává určitý soubor.

# rpm -q # rpm -qa (all installed packages)# rpm -q package_name# rpm -qf (filename)# rpm -qp (package filename)

Informace
default (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 jeho přesný název, se běžně používá příkazový řádek, jako je:

$ rpm -qa | grep foo

. Pozdější verze nástroje RPM to umožňují stručně provést takto:

$ rpm -qa '*foo*'

Dotazy – ověření (soubory)

Databáze RPM obsahuje mnoho atributů o každém souboru nainstalovaném pomocí RPM. Můžete ověřit aktuální stav souboru podle informací katalogizovaných RPM při instalaci balíčku.

# rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)

Poznámka: Mnoho linuxových distribucí obsahuje „předlinkový“ RPM, který se snaží zkrátit dobu potřebnou ke spuštění aplikace používající sdílenou knihovnu (většina aplikací používá alespoň jednu sdílenou knihovnu a případně desítky) přidáním speciálních informací přímo do programového souboru aplikace.

Přidání těchto informací sice urychlí spouštění aplikací, ale změny v souboru znehodnotí většinu atributů souboru v databázi RPM, jako je datum poslední změny 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)

Oprava databáze RPM

Nástroj RPM používá vlastní implementaci databáze, která obsahuje jeho informace. Někdy může dojít k poškození této databáze; mezi příznaky patří hlášení, že nainstalovaný balíček RPM chybí, nebo pokusy o aktualizaci balíčku RPM jednoduše skončí. Pokud je databáze RPM zavěšená nebo poškozená, můžete se ji pokusit opravit pomocí těchto příkazů. Není zaručeno, že tento postup bude fungovat.

Pro tyto kroky musíte být přihlášeni s oprávněním superuživatele (tzv. „root“). Příkazy lze zkopírovat a vložit přímo do terminálového okna s právy roota.

1. Příkazy můžete zkopírovat a vložit přímo do terminálového okna s právy roota. Ujistěte se, že v systému nejsou spuštěny žádné procesy RPM. K jejich identifikaci použijte příkaz ps. Use the kill command to terminate any „rpm“ processes you find; a „kill -9“ may be necessary.

2. Delete the lock files that RPM uses:

# rm -f /var/lib/rpm/__db*

3. If you were experiencing a hanging „rpm“ command, try it again. If it works, you are finished. If not, perform Step #1 and #2 again. Then proceed to the next step.

4. Make a backup of your RPM database:

# cd /var/lib# mkdir rpm-backup# rsync -av ./rpm/. ./rpm-backup/.

5. Rebuild your RPM database:

# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1

6. Retry your failed RPM command.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *