Vyhledávání na webu

Jak znovu vytvořit poškozenou databázi RPM v CentOS


Databáze RPM se skládá ze souborů v adresáři /var/lib/rpm/ v systému CentOS a dalších podnikových distribucích Linuxu, jako je RHEL, openSUSE, Oracle Linux a další.

Pokud je databáze RPM poškozena, RPM nebude fungovat správně, takže aktualizace nelze použít na váš systém, při aktualizaci balíčků ve vašem systému prostřednictvím správce balíčků YUM dochází k chybám. Nejhorším scénářem je nemožnost úspěšně spustit žádné příkazy rpm a yum.

Přečtěte si také: 20 praktických příkladů příkazu RPM v systému Linux

Existuje řada faktorů, které mohou vést k poškození databáze RPM, jako jsou nedokončené předchozí transakce, instalace určitého softwaru třetích stran, odebrání konkrétních balíčků a mnoho dalších.

V tomto článku si ukážeme, jak znovu sestavit poškozenou databázi RPM; tímto způsobem se můžete zotavit z poškození databáze RPM v CentOS. To vyžaduje oprávnění uživatele root, jinak k získání těchto oprávnění použijte příkaz sudo.

Obnovte poškozenou databázi RPM v CentOS

Nejprve začněte zálohováním vaší aktuální databáze RPM, než budete pokračovat (můžete ji v budoucnu potřebovat), pomocí následujících příkazů.

mkdir /backups/
tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz  /var/lib/rpm

Dále ověřte integritu souboru metadat hlavního balíčku /var/lib/rpm/Packages; toto je soubor, který potřebuje znovu sestavit, ale nejprve odstraňte soubory /var/lib/rpm/__db*, abyste zabránili zastaralým zámkům pomocí následujících příkazů.

rm -f /var/lib/rpm/__db*		
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

V případě, že výše uvedená operace selže, což znamená, že stále dochází k chybám, měli byste vypsat a načíst novou databázi. Dále ověřte integritu čerstvě načteného souboru Packages.


cd /var/lib/rpm/
mv Packages Packages.back
/usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
/usr/lib/rpm/rpmdb_verify Packages

Nyní pro kontrolu hlaviček databáze se zeptejte na všechny nainstalované balíčky pomocí příznaků -q a -a a pokuste se pečlivě sledovat všechny chyby odeslané do stderror.


rpm -qa >/dev/null	#output is discarded to enable printing of errors only

V neposlední řadě znovu sestavte databázi RPM pomocí následujícího příkazu, volba -vv umožňuje zobrazit spoustu informací o ladění.

rpm -vv --rebuilddb

Použijte nástroj dcrpm k detekci a opravě databáze RPM

Objevili jsme také nástroj příkazového řádku dcrpm (detekce a oprava otáček za minutu), který se používá k identifikaci a nápravě dobře známých problémů souvisejících s poškozením databáze RPM. Je to jednoduchý a snadno použitelný nástroj, který můžete spustit bez volby. Pro efektivní a spolehlivé použití byste jej měli pravidelně spouštět přes cron.

Můžete jej nainstalovat ze zdroje; stáhněte si zdrojový strom a nainstalujte jej pomocí setup.py (což by mělo také převzít závislost psutil z pypi), jak je znázorněno.

git clone https://github.com/facebookincubator/dcrpm.git
cd dcrpm
python setup.py install

Jakmile nainstalujete dcrpm, spusťte jej podle obrázku.

dcrpm

Nakonec zkuste znovu spustit neúspěšný příkaz rpm nebo yum, abyste zjistili, zda vše funguje správně.

dcrpm Github repozitář: https://github.com/facebookincubator/dcrpm
Další informace naleznete na stránce obnovy databáze RPM.

To je vše! V tomto článku jsme vysvětlili, jak znovu sestavit poškozenou databázi RPM v CentOS. Chcete-li se zeptat na jakékoli otázky nebo se podělit o své názory na tuto příručku, použijte níže uvedený formulář pro zpětnou vazbu.