yumコマンドが使えなくなったとき、よく見るrpmdbを復旧する方法をしてみたんですがダメでした。
いろいろ検索かけても解決方法は見つからず自力でなんとかした記録です。
(やってることはシンプルなんだけど、全部自分で意味を考えながらやったのでどっと疲れた。)
CentOS | 7.8.2003 |
CentOSは、パッケージ(アプリ)の追加・更新・削除でyumコマンドを使います。
どうやらrpmdbが壊れたようで実行できません。そこでそれを修正しました。
(エラーログもあり。)
HDDがそろそろ寿命なのか、
またrpmdbが壊れる。
rpmdbを直す。
しばらくして、またrpmdbが壊れる。
の無限ループ。そしてしまいには、
こんなエラーが出てrpmdb復旧ではどうにもならなくなりました。
出ているメッセージの内容は、
『リポジトリがおかしいから、無効化して原因を探ってね?』
そしてもうひとつ、
『base/$releasever/x86_64のリポジトリが見つからない。』
ウソーーん。CentOSの根幹中の根幹のリポジトリが見つからないって。どういうこと?
リポジトリ・リストを見てみる
リポジトリを見てみろっていうので、リポジトリのリストを出してみます。
おかしいのは2点。
リポジトリの状態が0。リポジトリ・リスト数が0
変数$releaseverの値が出てない。変数もろ出し。
まったくリポジトリにアクセスできてません。ここで原因を予想しました。
『$releaserverの値が取れてないからエラーになってるんじゃないか?』
yumでOSバージョンを確認
変数$releaseverの値を確認します。
OSのバージョンが取れてない。また同じメッセージが。ここで、$releaseverが犯人だと特定しました。
(100%の確証ではないが。)
どうやって解決するか?
じゃあ、どうやって直すか? ここで矛盾があることに気づきます。
$releaseverが取れてないからリポジトリ・リストが作れない。
リポジトリがおかしいから 'yum info centos-release'が表示されない。($releaseverに値が入らない。)
『DBのデッドロックみたいになってるじゃん。直せねーよ。』
ここでボクは逃げました。3週間の放置。システムイメージのバックアップからOS丸ごと切り替えようかと考える始末。
(DBのリカバリも必要でけっこう大掛かりだったので放置という結果に...)
ボクの感想と態度はどうでもいいですね?
結果、OSのドキュメントに書いていない、ネットで探しても見つからなかった方法で解決しました。
リポジトリ設定ファイルの変更
『もし$releaseverが犯人なら、リポジトリ設定で$releaseverを使わなければいいじゃん』ってことで、リポジトリの設定を変更します。
変更ファイル | /etc/yum.repos.d/CentOS-Base.repo |
ファイルのバックアップを取っておきましょう。あとで元に戻します。
CentOSってbaseurlを使わないんですね? コメント化されてます。
baseurlのコメントを外して、$releaseverに直接OSのバージョンを入れます。
バージョンはgpgkeyに書いてあるところから判断してもいいですが、きちんとするならバージョンファイルを確認します。
バージョンファイル | /etc/centos-release |
updates, extras, centosplusも同じように変更して、リポジトリ・リストを表示します。
リポジトリ・リストが取れてる。ほかにも$releaseverを使ってるリポジトリがあるので、同じように変更します。
/etc/yum.repos.d/groonga-centos.repo | OSのリポジトリ |
/etc/yum.repos.d/MongoDB.repo | 自作。 |
バージョンが取れてるか確認します。
直ってますね?
変更したリポジトリファイルはすべて元に戻しましょう。$releaseverも取れてるので大丈夫です。
やってみると簡単だったのに、なんかどっと疲れた。