【Linux】rpm コマンドで エラー: rpmdb: BDB0113 Thread/process 7206/140002585515840 failed: BDB1507 Thread died in Berkeley DB library

先日 rpm コマンドでパッケージを確認したところ、以下のようなエラーが出力されました。

[root@SAKURA_VPS ~]# rpm -qa | grep openssl
エラー: rpmdb: BDB0113 Thread/process 7206/140002585515840 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 データベースを開けません。
エラー: rpmdb: BDB0113 Thread/process 7206/140002585515840 failed: BDB1507 Thread died in Berkeley DB library
エラー: db5 エラー (-30973) (dbenv->failchk において): BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
エラー: /var/lib/rpm にある Package データベースを開けません。

 

 

rpmがパッケージを管理しているデータベースが壊れている

rpm が問題かと思ったのですが、yum コマンドでも同様の現象が発生します。

[root@SAKURA_VPS ~]# yum check-update
エラー: rpmdb: BDB0113 Thread/process 7206/140002585515840 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
[root@SAKURA_VPS ~]#

 

 

yum clean all で修復を試みるも状況変わらずです。

[root@SAKURA_VPS ~]# yum celan all
エラー: rpmdb: BDB0113 Thread/process 7206/140002585515840 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
[root@SAKURA_VPS ~]#

 

 

rpm --rebuilddb コマンドでデータベースを修復する

「rpm --rebuilddb」コマンド一発で修復ができます。

[root@SAKURA_VPS ~]# rpm --rebuilddb
[root@SAKURA_VPS ~]# ← 何のエラーも出ずにプロンプトが返ってくれば問題なくコマンドが完了しています。

 

参考サイト

http://readit.l8r.in/post-568/

 

 

動作確認

今度はエラーが出なくなるのか動作確認をします。

今度はエラーが出なくなりました。

[root@SAKURA_VPS ~]# rpm -qa | grep openssl
xmlsec1-openssl-1.2.20-7.el7_4.x86_64
openssl-libs-1.0.2k-8.el7.x86_64
openssl-1.0.2k-8.el7.x86_64
[root@SAKURA_VPS ~]#

 

 

そもそも rpm のヘルプに「--rebuildbd」オプションがない?

しかし、改めて rpm コマンドのオプションを確認してみたのですが「--rebuilddb」オプションがないですね。。

[root@SAKURA_VPS ~]# rpm --help

使い方: rpm [オプション...]

 

パッケージセレクションを問い合わせ/検証するオプション:
 -a, --all            すべてのパッケージについて問い合わせ/検証します。
 -f, --file            <file> を所有しているパッケージを問い合わせ/検証します。
 -g, --group           グループに所属するパッケージを問い合わせ/検証します。
 -p, --package          パッケージファイルの問い合わせ/検証をします。
 --pkgid             パッケージ ID で問い合わせ/検証します。
 --hdrid             ヘッダー ID でパッケージを問い合わせ/検証します。
 --triggeredby          パッケージによってトリガーされるパッケージを問い合わせます。
 --whatrequires          依存性を要求するパッケージの問い合わせ/検証をします。
 --whatprovides          依存性を提供するパッケージの問い合わせ/検証をします。
 --nomanifest           リスト内の非パッケージファイルを処理しません。

 

問い合わせオプション (-q または --query):
 -c, --configfiles        全ての設定ファイルを列挙します。
 -d, --docfiles          全てのドキュメントファイルを列挙します。
 -L, --licensefiles        list all license files
 --dump              基本的なファイル情報をダンプします。
 -l, --list            パッケージ中のファイルを列挙します。
 --queryformat=QUERYFORMAT    以下の問い合わせ書式を使用します。
 -s, --state           列挙したファイルの状態を表示します。

 

検証オプション (-V または --verify):
 --nofiledigest          ファイルのダイジェストを検証しません。
 --nofiles            パッケージ中のファイルを検証しません。
 --nodeps             パッケージの依存関係を検証しません。
 --noscript            検証スクリプトを実行しません。

 

インストール/アップグレード/アンインストールオプション:
 --allfiles            設定がスキップを指示していても、全ファイルをインストールします。
 --allmatches           <package> と一致するパッケージ全てを削除します(通常は <package>
                  が複数のパッケージを指す場合はエラーになります)
 --badreloc            再配置不可能なパッケージのファイルを再配置します。
 -e, --erase=<package>+      パッケージを削除 (アンインストール) します。
 --excludedocs          ドキュメントをインストールしません。
 --excludepath=<path>       パス <path> 中のファイルをスキップします。
 --force             --replacepkgs と --replacefiles を短縮したもの
 -F, --freshen=<packagefile>+   既にインストール済みの場合のみアップグレード
 -h, --hash            パッケージをインストールにつれて '#' を表示します (-v と使用すると良い)
 --ignorearch           パッケージの対象アーキテクチャを検証しません。
 --ignoreos            パッケージ対象 OS の検証を行いません。
 --ignoresize           インストール前のディスク容量チェックを行いません。
 -i, --install          パッケージをインストールします。
 --justdb             データベースを更新しますが、ファイルシステムの変更は行いません。
 --nodeps             パッケージの依存関係の検証を行いません。
 --nofiledigest          ファイルのダイジェストを検証しません。
 --nocontexts           ファイルのセキュリティ コンテキストをインストールしません。
 --noorder            依存性を満たす為のパッケージのインストール順序を変更しません。
 --noscripts           パッケージ指定のスクリプトを実行しません。
 --notriggers           このパッケージによってトリガーされるスクリプトを実行しません。
 --nocollections         いかなる収集活動も行わないでください。
 --oldpackage           古いバージョンのパッケージにアップグレードします(アップグレード時の --force
                  はこれを自動的に行います)
 --percent            インストールする際にパーセント表示を行います。
 --prefix=<dir>          パッケージが再配置可能ならば、 <dir> に再配置します。
 --relocate=<old>=<new>      パス <old> からパス <new> にファイルを再配置させます。
 --replacefiles          パッケージ間のファイルの競合を無視します。
 --replacepkgs          既に存在するパッケージでも再インストールします。
 --test              インストールせずに、テストのみを行います。
 -U, --upgrade=<packagefile>+   パッケージをアップグレードします。

 

すべてのモード・コマンドで共通のオプション:
 -D, --define='MACRO EXPR'    値 EXPR を持つ MACRO を定義します。
 --undefine=MACRO         undefine MACRO
 -E, --eval='EXPR'        EXPR のマクロを展開した結果を表示します。
 --macros=<FILE:...>       デフォルトファイルの代わりに <FILE:...> を読み込みます。
 --noplugins           don't enable any plugins
 --nodigest            パッケージダイジェストの検証をしません。
 --nosignature          パッケージ署名の検証をしません。
 --rcfile=<FILE:...>       デフォルトファイルの代わりに <FILE:...> を読み込みます。
 -r, --root=ROOT         ROOT をトップ ディレクトリーとして使用します。 (default: "/")
 --dbpath=DIRECTORY        DIRECTORY 内のデータベースを使用します。
 --querytags           全問い合わせタグを表示します。
 --showrc             最終的な rpmrc とマクロの設定を表示します。
 --quiet             詳細でない出力を提供します。
 -v, --verbose          より詳細な出力を提供します。
 --version            使用している rpm のバージョンを表示します。

 

Options implemented via popt alias/exec:
 --scripts            list install/erase scriptlets from package(s)
 --setperms            set permissions of files in a package
 --setugids            set user/group ownership of files in a package
 --conflicts           list capabilities this package conflicts with
 --obsoletes           list other packages removed by installing this package
 --provides            list capabilities that this package provides
 --requires            list capabilities required by package(s)
 --info              list descriptive information from package(s)
 --changelog           list change logs for this package
 --xml              list metadata in xml
 --triggers            list trigger scriptlets from package(s)
 --last              list package(s) by install time, most recent first
 --dupes             list duplicated packages
 --filesbypkg           list all files from each package
 --fileclass           list file names with classes
 --filecolor           list file names with colors
 --fscontext           list file names with security context from file system
 --fileprovide          list file names with provides
 --filerequire          list file names with requires
 --filecaps            list file names with POSIX1.e capabilities

 

Help options:
 -?, --help            Show this help message
 --usage             Display brief usage message
[root@SAKURA_VPS ~]#

 

 

しかし man コマンドには --rebuilddb オプションがあった

man コマンドにはありました。

   データベース再作成オプション
       データベースを再作成するコマンドの一般的な形式は:

       rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]
           [--root DIRECTORY]

       新たなデータベースを作成する場合には  --initdb   を使い、インストールされているパッケージのへッダーから   

   データベースのインデックスを再作成するには
       --rebuilddb を使用する。

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。