前回記事 rpm パッケージの設定ファイルを初期の設定に戻したい2
rpm パッケージのインストールを繰り返しているととまれに rpm のデータベースが壊れる事がある。パッケージインストール時にマシンが落ちたり、rpm コマンドがクラッシュしたり、フリーズしたり理由はいろいろあるかもしれないが、以下のメッセージが出力され続けるとパッケージの削除もアップデートもままならなくなる。
# rpm -ivh httpd-2.4.6-67.el7.centos.6.x86_64.rpm pmdb: unable to join the environment エラー: db4 エラー (11) (dbenv->open において): リソースが一時的に利用できません エラー: Packages インデックスを db3 でオープンできません - リソースが一時的に利用できません (11) エラー: /var/lib/rpm にある Package データベースをオープンできません。
rpm のデータベースは、/var/lib/rpm/ に Berkeley DB というデータベースの形式で保存されている。これらのファイルが壊れると上記メッセージが表示されてしまいます。
$ file /var/lib/rpm/* /var/lib/rpm/Basenames: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Conflictname: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Dirnames: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Group: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Installtid: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Name: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Obsoletename: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Packages: Berkeley DB (Hash, version 9, native byte-order) /var/lib/rpm/Providename: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Requirename: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Sha1header: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Sigmd5: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/Triggername: Berkeley DB (Btree, version 9, native byte-order) /var/lib/rpm/__db.001: Applesoft BASIC program data /var/lib/rpm/__db.002: 386 pure executable not stripped /var/lib/rpm/__db.003: 386 pure executable not stripped
しかし rpm には、–rebuilddb というオプションが用意されており、rpm のデータベースを再構築してくれるのである。
# rpm --rebuilddb
この方法で概ね上記エラーメッセージは表示されなくなるのですが、ファイルシステムが壊れたり、誤って /var/lib/rpm/ ディレクトリを削除してしまったりした場合はデータベースの再構築は不可能となります。そうなってしまった場合はシステムを再インストールする事をお勧めしますが、現在の環境でどうしても運用し続けたいというのであれば、–initdb を使用し rpm のデータベースを新規に再作成しましょう。なおデータベスの情報は新規に作成され、依存関係などの情報はもちろん空となっているので、パッケージをインストールする場合は、全て強制インストール(–nodeps)する以外方法はありません。
# rpm --initdb # rpm -Uvh httpd-2.4.6-67.el7.centos.6.x86_64.rpm --force 警告: httpd-2.4.6-67.el7.centos.6.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY エラー: 依存性の欠如: /etc/mime.types は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています system-logos >= 7.92.1-1 は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています httpd-tools = 2.4.6-67.el7.centos.6 は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています /usr/sbin/useradd は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています /usr/sbin/groupadd は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています systemd-units は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています /bin/sh は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています libapr-1.so.0()(64bit) は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています libaprutil-1.so.0()(64bit) は httpd-2.4.6-67.el7.centos.6.x86_64 に必要とされています : # rpm -ivh httpd-2.4.6-67.el7.centos.6.x86_64.rpm --force --nodeps 警告: httpd-2.4.6-67.el7.centos.6.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY 準備しています... ################################# [100%] 更新中 / インストール中... 1:httpd-2.4.6-67.el7.centos.6 ################################# [100%]
–rebuilddb : インストールされているパッケージのへッダーから rpm のデータベースを再作成する。
–initdb : 新たに rpm のデータベースを作成する。