GHOST対応してたら色々ちゃけた(壊れた)


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だとそういうことが出来ないので修復不可能

以上