CentOS で破損した RPM データベースを再構築する方法
RPM データベースは、CentOS やその他のエンタープライズ Linux ディストリビューションの /var/lib/rpm/ ディレクトリにあるファイルで構成されています。 >RHEL、openSUSE、Oracle Linuxなど。
RPM データベースが破損している場合、RPM は正しく動作せず、システムに更新を適用できません。YUM パッケージ マネージャーを介してシステム上のパッケージを更新中にエラーが発生します。最悪のシナリオは、rpm およびyum コマンドを正常に実行できないことです。
こちらもお読みください: Linux での RPM コマンドの 20 の実用的な例
RPM データベースの破損には、不完全な以前のトランザクション、特定のサードパーティ ソフトウェアのインストール、特定のパッケージの削除など、さまざまな要因が考えられます。
この記事では、破損した RPM データベースを再構築する方法を説明します。この方法により、CentOS での RPM データベースの破損から回復できます。これには root ユーザー権限が必要です。そうでない場合は、sudo コマンドを使用してこれらの権限を取得します。
CentOS で破損した RPM データベースを再構築する
まず、次のコマンドを使用して、続行する前に現在の RPM データベースをバックアップすることから始めます (将来必要になる可能性があります)。
mkdir /backups/
tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz /var/lib/rpm
次に、マスター パッケージ メタデータ ファイル /var/lib/rpm/Packages の整合性を確認します。これは再構築が必要なファイルですが、最初に次のコマンドを使用して、ロックが古くならないように /var/lib/rpm/__db* ファイルを削除します。
rm -f /var/lib/rpm/__db*
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages
上記の操作が失敗した場合、つまり引き続きエラーが発生した場合は、新しいデータベースをダンプしてロードする必要があります。また、次のように、新しくロードされたパッケージ ファイルの整合性を確認します。
cd /var/lib/rpm/
mv Packages Packages.back
/usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
/usr/lib/rpm/rpmdb_verify Packages
ここでデータベース ヘッダーを確認するには、-q
フラグと -a
フラグを使用して、インストールされているすべてのパッケージをクエリし、標準エラーです。
rpm -qa >/dev/null #output is discarded to enable printing of errors only
最後になりましたが、次のコマンドを使用して RPM データベースを再構築します。-vv
オプションを使用すると、多くのデバッグ情報を表示できます。
rpm -vv --rebuilddb
dcrpm ツールを使用して RPM データベースを検出および修正する
また、RPM データベースの破損に関連する既知の問題を特定して修正するために使用されるdcrpm (rpm の検出と修正) コマンド ライン ツールも発見しました。これは、オプションなしで実行できるシンプルで使いやすいツールです。効果的かつ信頼性の高い使用を実現するには、cron 経由で定期的に実行する必要があります。
ソースからインストールできます。ソース ツリーをダウンロードし、setup.py を使用してインストールします (pypi から psutil 依存関係も取得する必要があります)。
git clone https://github.com/facebookincubator/dcrpm.git
cd dcrpm
python setup.py install
dcrpm をインストールしたら、次のように実行します。
dcrpm
最後に、失敗した rpm または yum コマンドを再度実行して、すべてが正常に動作しているかどうかを確認します。
dcrpm Github リポジトリ: https://github.com/facebookincubator/dcrpm
詳細については、RPM データベース回復ページを参照してください。
それだけです!この記事では、CentOS で破損した RPM データベースを再構築する方法を説明しました。このガイドに関するご質問やご意見がございましたら、以下のフィードバック フォームをご利用ください。