glibc脆弱性(CVE-2015-0235)の対応中にyumがおかしくなったので調査
どちらかと言えばrpmとかがメインの話
yumアップデートに失敗
ログが保存していなかったのでyumのところが無い
>のあとはコメントです
# yum update glibc > 失敗 # rpm -q glibc glibc-2.12-1.47.el6_2.12.x86_64 # yum clean all > yumのキャッシュとかクリアしてみる # yum update glibc > glibcが無いと言われる(無かったらそもそも動いてないんじゃね # rpm -q glibc パッケージ glibc はインストールされていません。 > だからなかったらry # yum install glibc インストール完了 > 何故通ったのかわからない
一度サーバを再起動してみる
再起動後にrpm等の確認を実施
# rpm -q glibc glibc-2.12-1.149.el6_6.5.x86_64 glibc-2.12-1.149.el6_6.5.x86_64 glibc-2.12-1.149.el6_6.5.x86_64 > 何故かglibcgが3つある # sudo yum check > yum.log Error: check all > yum checkで状況を確認 # cat yum.log Loaded plugins: fastestmirror glibc-2.12-1.149.el6_6.5.x86_64 is a duplicate with glibc-2.12-1.149.el6_6.5.x86_64 glibc-2.12-1.149.el6_6.5.x86_64 is a duplicate with glibc-2.12-1.149.el6_6.5.x86_64 glibc-common-2.12-1.149.el6_6.5.x86_64 is a duplicate with glibc-common-2.12-1.149.el6_6.5.x86_64 glibc-common-2.12-1.149.el6_6.5.x86_64 is a duplicate with glibc-common-2.12-1.149.el6_6.5.x86_64 glibc-devel-2.12-1.47.el6_2.12.x86_64 has missing requires of glibc = ('0', '2.12', '1.47.el6_2.12') glibc-headers-2.12-1.47.el6_2.12.x86_64 has missing requires of glibc = ('0', '2.12', '1.47.el6_2.12') > めっちゃ重複してるやん・・・
やったらダメなこと
# rpm -e --nodeps --allmatches glibc glibc-common > これやるとglibcが死ぬのでAWS環境とかだと死ぬ、というか詰む # yum-complete-transaction # yum check duplicates | awk '/is a duplicate/ {print $6}' > /tmp/DUPES # yum remove `cat /tmp/DUPES` > 他の方のブログにも有りましたが、glibcが死ぬからダメ(依存関係の無いようなパッケージならOK)
解決策
# wget http://yourrepository/glibc-2.12-1.149.el6_6.5.x86_64.rpm > glibcのrpmを持ってくる # rpm -e --nodeps --allmatches --justdb glibc > rpmのdbからglibcの情報を削除する # rpm -q glibc パッケージ glibc はインストールされていません。 > dbから削除されたことを確認 # rpm -ivh --justdb glibc-2.12-1.149.el6_6.5.x86_64.rpm 準備中... ########################################### [100%] > dbへglibcを追加 # rpm --rebuilddb > dbの再構築 # rpm -q glibc glibc-2.12-1.149.el6_6.5.x86_64 > glibcが1個になっているのを確認!!! で同じ手順をglibc-commonにも実施 同じ手順なので略 # rpm -qa | grep glibc glibc-common-2.12-1.149.el6_6.5.x86_64 glibc-headers-2.12-1.47.el6_2.12.x86_64 glibc-devel-2.12-1.47.el6_2.12.x86_64 glibc-2.12-1.149.el6_6.5.x86_64 > 直ったのでこれでOK
ちなみに最初にyumが失敗した時に rpm --rebuild
してたらこんなことにはならなかった
おまけ
glibcを削除してみるとどうなるのか
# rpm -e --nodeps --allmatches glibc glibc-common 警告: /etc/localtime は /etc/localtime.rpmsave として保存されました。 警告: /etc/ld.so.conf は /etc/ld.so.conf.rpmsave として保存されました。 /sbin/ldconfig: 設定ファイル /etc/ld.so.conf を開けません: そのようなファイルやディレクトリはありません /sbin/ldconfig: 設定ファイル /etc/ld.so.conf を開けません: そのようなファイルやディレクトリはありません 以下略 # rpm -q glibc -bash: /bin/rpm: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory # yum install glibc glibc-common -bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory > /bin配下とかが使えなくなったcatもrpmもyumもvimも使えないから詰み SSHのセッション切ったら接続も出来なくなります
オンプレならCDブートとかから必要なものをインストール出来るんだろうけどAWSだとそういうことが出来ないので修復不可能
以上
元記事はこちらです。
「AWS – GHOST対応してたら色々ちゃけた(壊れた)」