以下の内容はhttps://kaworu.jpn.org/kaworu/2015-11-14-1.phpより取得しました。


このドキュメントの内容は、以下の通りです。

はじめに

OSには、インストールされているソフトウェアを管理するためのシステムがあります。OSやパッケージ管理ソフトウェアは、ソフトウェアの管理のために、データベースを持ちます。データベースの形式は、実装によってさまざまでしょう。

CentOS では、rpm や yum と呼ばれるパッケージ管理システムが使われています。 Yum は、 Yellowdog Updater Modified の略です。
RPM は、RPM Package Manager です。以前は、Redhat Package Manager の略でした。

rpmとyumの違いは?

rpm とは、パッケージを管理します。yum は rpm を管理するマネージャです。 大雑把に言えば、yum は、rpm を利用して動いているということです。

rpm は、依存関係を管理しません。yum は、依存関係を管理します。

rpm のデータベースであるrpmdb が壊れて、yum が実行できない、というのは、 yum が rpm を利用しているからなのです。

rpmdbが壊れる原因

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

/var/lib/rpm を誤って削除してしまった場合

もし、いままでの方法でDBが修正できない場合は、 ファイルシステムが壊れてしまっていたり、 /var/lib/rpm を誤って削除してしまっているといったことが起こっていると考えられます。

そのようなケースにおいては、OSを再インストールするのが、一番良いと思いますが、そのままの状態で使い続ければならない状況であるなら、データベースを初期化する方法があります。

以下のコマンドは、単純に RPM のデータベースを作成するだけなので、すでにインストールされているアプリケーションが綺麗になるわけではありません。
sudo rpm --initdb

スポンサーリンク



以上の内容はhttps://kaworu.jpn.org/kaworu/2015-11-14-1.phpより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14