2014年10月8日

【CentOS6.5】glibcの依存関係に振り回された話

CentOSをminimalでインストールするときは気をつけましょう。という話。
glibcのパッケージ依存に1日半ほど費やし、2度のクリーンインストールをするハメになるとは…

とりあえず無駄になった1日半でわかったことをまとめておいて、次回同じミスを繰り返さないようにしようと思う。

■構築環境

OS: CentOS6.5(64bit)
→minimalのインストールメディアからインストール

導入済み主要パッケージ:Apache, Zabbix, Tripwire, system-config-firewall-tuiなど


■経緯

もともとはIcecastのクライアントであるIcesを導入しようとした時のこと。
Icesはyumで配布されていないのでソースからビルドする必要があった。

で、こんふぃぐあー
# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

Cコンパイラがないよと怒られたので、gccをyumからインストール

# yum -y install gcc
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
1575 packages excluded due to repository priority protections
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.4.7-4.el6 will be installed
~省略~
--> Finished Dependency Resolution
Error: Package: glibc-2.12-1.132.el6.i686 (base)
           Requires: glibc-common = 2.12-1.132.el6
           Installed: glibc-common-2.12-1.132.el6_5.4.x86_64 (@updates)
               glibc-common = 2.12-1.132.el6_5.4
           Available: glibc-common-2.12-1.132.el6.x86_64 (base)
               glibc-common = 2.12-1.132.el6
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

インストールされてるglibc-commonのバージョンが違うからglibcインストール出来ないよ。と。
しかも32bit版のglibc入れようとしてる…

あとで調べてわかったことなのだが、glibcは64bitOSでも32bit版を使うのだそう。何じゃそりゃって感じだけども。

で、とにかくglibc-commonのバージョンをどうにかしないといかんな~と思い、どうにか出来ないかと試行錯誤。

# yum -y install glibc-common-2.12-1.132.el6
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
1575 packages excluded due to repository priority protections
Setting up Install Process
Package matching glibc-common-2.12-1.132.el6.x86_64 already installed. Checking for update.
Nothing to do


64bit版が入ってるので32bit版を入れてみる

# yum -y install glibc-common-2.12-1.132.el6.i686
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
1575 packages excluded due to repository priority protections
Setting up Install Process
No package glibc-common-2.12-1.132.el6.i686 available.
Error: Nothing to do

32bit版が…ない…

まぁ、ここらへんで積んだわけですが。
とりあえずglibcだけでも入らないかと試行錯誤

# yum -y install glibc.i686
Loaded plugins: fastestmirror, priorities
~省略~
--> Finished Dependency Resolution
Error: Package: glibc-2.12-1.132.el6.i686 (base)
           Requires: glibc-common = 2.12-1.132.el6
           Installed: glibc-common-2.12-1.132.el6_5.4.x86_64 (@updates)
               glibc-common = 2.12-1.132.el6_5.4
           Available: glibc-common-2.12-1.132.el6.x86_64 (base)
               glibc-common = 2.12-1.132.el6
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

まぁそりゃ入れられないわけで。
だったら一旦glibc-common消したらどうかと。

# yum erase glibc-common
~省略~
--> Finished Dependency Resolution
Error: Trying to remove "yum", which is protected
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

今度はyumがプロテクトかかってるから駄目だと。
依存関係無視してglibc-common削除してしまっても良いのかもしれないけど、そうすると他のパッケージにどう影響出るかもわからないので、クリーンインストールをする前にglibc-commonだけ消して試してみた。

# rpm --nodeps -e glibc-common
# yum -y  install glibc
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
1575 packages excluded due to repository priority protections
Setting up Install Process
Package matching glibc-2.12-1.132.el6.x86_64 already installed. Checking for update.
Nothing to do

ん?glibcの64bit版は入ってる? 32bit版は?

# yum -y  install glibc.i686
~省略~
       Protected multilib versions: glibc-2.12-1.132.el6.i686 != glibc-2.12-1.132.el6_5.4.x86_64
Error: Protected multilib versions: nss-softokn-freebl-3.14.3-9.el6.i686 != nss-softokn-freebl-3.14.3-12.el6_5.x86_64
 You could try using --skip-broken to work around the problem
** Found 3 pre-existing rpmdb problem(s), 'yum check' output follows:
MAKEDEV-3.24-6.el6.x86_64 has missing requires of /usr/bin/getent
glibc-2.12-1.132.el6_5.4.x86_64 has missing requires of glibc-common = ('0', '2.12', '1.132.el6_5.4')
udev-147-2.51.el6.x86_64 has missing requires of /usr/bin/getent

入ってるし…64bit版と重複してるし…
というかglibc-commonがないって怒られたし…
やっぱglibc-common消したら駄目ですね。

■結論→64bit版CentOSをインストールしたらgccをまずインストールすること

minimalでなければgcc入れられるし問題ないのだけれども。。。

というか、CentOS64bit版て大丈夫なのか? まだ32bit版使ってたほうが絶対安心だろ。
デスクトップ向けOSはもう64bit版のほうが主流になっている昨今で、未だにサーバは32bit使ってるのどうなんだろうかと思って今回こちらにしたのだけど、アダになったのかもしれない。