Recover the RPM database on Fedora 18
RPM is a package management tool, a core component of many Linux distributions such as Red Hat, Fedora, CentOS and many others. It stores information about software packages in its own database which is available under /var/lib/rpm. Sometimes the database can become corrupted so any attempt to make use of the rpm system would fail. The failure affects both the rpm command and the yum tool so any standard package operation such as installing / querying / verifying would throw an error.
This recently happened on my Fedora 18, I was trying to do a manual update and I got this error:
sudo yum update error: rpmdb: BDB0113 Thread/process 2174/139838549436224 failed: BDB1507 Thread died in Berkeley DB library error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: cannot open Packages index using db5 - (-30973) error: cannot open Packages database in /var/lib/rpm CRITICAL:yum.main: Error: rpmdb open failed
Luckily I knew what I had to do (with some help of a couple of older guides I found on the Internet).
step1: verify there’s no lock on the rpm database that is causing the error
sudo db_stat -CA
Check under “Locks grouped by lockers” and “Locks grouped by object”. Those should display nothing. If there are any rpm processes, investigate them further:
sudo ps ax | egrep '[r]pm|[y]um' sudo lsof | grep /var/lib/rpm
If you get any rpm / yum output try to kill the processes manually. If that doesn’t help and the rpm database still returns errors then it’s time to recover it.
step2: make a backup of the current rpm database
cd /var/lib sudo tar czvf /var/preserve/rpmdb-`date +"%d.%m.%Y"`.tar.gz rpm ll /var/preserve/ total 48092 -rw-r--r-- 1 root root 49245072 Mar 2 19:40 rpmdb-02.03.2013.tar.gz
step3: verify the Packages file, recover if needed
cd /var/lib/rpm sudo rm -f __db* sudo db_verify Packages
In case the verify command returns any errors you need to recover the file:
sudo mv Packages Packages.bkp sudo db_dump Packages.bkp | sudo db_load Packages
This dumps the current packages info to the db_load utility which creates a new Packages file.
step4: rebuild the rpm database
sudo rpm -v --rebuilddb
step5: verify the database is working and you can successfully query all files
rpm -qa 1 > /dev/null
You can also perform a sanity check to ensure there are no more errors.
sudo db_log_verify
Hope this helps.
http://linuxsysconfig.com/2013/03/recover-the-rpm-database-on-fedora-18/ was very helpful. Thanks!
step 4 solved the issue for me. It was fixed after rebuilding db. Thanks for the article.
I’m on CentOS6 but this saved my bacon. Curious what ruined the db in the first place.
Thanks so much!
Need only rpm -v –rebuilddb
Great article, it helped me recover yum
Exactly what I needed! Thanks so much.
Thank you, you just saved my ass!
thank, this article is the best solution
Thank you
Thank you, works perfect