このドキュメントの内容は、以下の通りです。
OSには、インストールされているソフトウェアを管理するためのシステムがあります。OSやパッケージ管理ソフトウェアは、ソフトウェアの管理のために、データベースを持ちます。データベースの形式は、実装によってさまざまでしょう。
CentOS では、rpm や yum と呼ばれるパッケージ管理システムが使われています。 Yum は、 Yellowdog Updater Modified の略です。
RPM は、RPM Package Manager です。以前は、Redhat Package Manager の略でした。
rpm とは、パッケージを管理します。yum は rpm を管理するマネージャです。 大雑把に言えば、yum は、rpm を利用して動いているということです。
rpm は、依存関係を管理しません。yum は、依存関係を管理します。
rpm のデータベースであるrpmdb が壊れて、yum が実行できない、というのは、 yum が rpm を利用しているからなのです。
CentOSでYumコマンドを実行したときに、下記のエラーで yum コマンドが失敗しました。
yum がバックグラウンドでロックしていて、 yum コマンドが実行できないときに、カッとなって、yum のプロセスを kill してしまうと、こういうことが起きてしまいます。
それ以外にも rpm のデータベースの更新作業中に、パソコン・サーバのOSがクラッシュしてしまったなどのケースでも、データベースが破損する可能性があるでしょう。
$ sudo yum install w3m
エラー: rpmdb: BDB0113 Thread/process 3553/139637759510336 failed:
BDB1507 Thread died in Berkeley DB library
エラー: db5 エラー (-30973) (dbenv->failchk において): BDB0087
DB_RUNRECOVERY: Fatal error, run database recovery
エラー: Packages インデックスを db5 で開けません - (-30973)
エラー: /var/lib/rpm にある Package データベースを開けません。
CRITICAL:yum.main:
Error: rpmdb open failed
rpmdb が壊れてしまったので、rpmdb を再構築すれば良いわけです。rpmコマンドには、 rebuilddb (Rebuild DB) というオプションが用意されています。rpmdb を修正するには、以下のコマンドを実行します。
$ sudo rpm --rebuilddb
ものの数十秒で再構築されます。
いろいろな方法があるようです。
rm -f /var/lib/rpm/__db*
rpm --rebuilddb
yum clean rpmdb
yum clean all
yum makecache
もし、いままでの方法でDBが修正できない場合は、 ファイルシステムが壊れてしまっていたり、 /var/lib/rpm を誤って削除してしまっているといったことが起こっていると考えられます。
そのようなケースにおいては、OSを再インストールするのが、一番良いと思いますが、そのままの状態で使い続ければならない状況であるなら、データベースを初期化する方法があります。
以下のコマンドは、単純に RPM のデータベースを作成するだけなので、すでにインストールされているアプリケーションが綺麗になるわけではありません。
sudo rpm --initdb
スポンサーリンク