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
> OS別に使用可能な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だとそういうことが出来ないので修復不可能
以上