[CentOS] yumでhttp-develをインストール失敗と解決方法

失敗の経緯

tomcatとapacheの連携をしようと思って、mod_jkをインストールしようとしたら、その過程で、apacheのapxsというツールが必要になった。

ところが、このapxsが見つからない!!

というわけで、「apxs 見つからない」で解決策を探したところ、これはhttpdのディベロッパー用のパッケージ(httpd-devel)をインストールすればいいことがわかった。

その時の話は以下に書いてある。
[apache] モジュール追加でapxsが見つからない時の解決方法

エラーの症状

今回のメインの話は、このhttpd-develをyumでインストールしようとした時に起こったトラブルの話である。
ちょっと長いが、実際にyum installコマンドを打った結果を以下に記載。

[root@tsuyu01 native]# yum install httpd-devel
Loaded plugins: fastestmirror, priorities, product-id, refresh-packagekit,
              : security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd-devel.x86_64 0:2.2.15-26.el6.centos will be installed
--> Processing Dependency: httpd = 2.2.15-26.el6.centos for package: httpd-devel-2.2.15-26.el6.centos.x86_64
--> Processing Dependency: apr-util-devel for package: httpd-devel-2.2.15-26.el6.centos.x86_64
--> Processing Dependency: apr-devel for package: httpd-devel-2.2.15-26.el6.centos.x86_64
--> Running transaction check
---> Package apr-devel.x86_64 0:1.3.9-5.el6_2 will be installed
---> Package apr-util-devel.x86_64 0:1.3.9-3.el6_0.1 will be installed
--> Processing Dependency: openldap-devel for package: apr-util-devel-1.3.9-3.el6_0.1.x86_64
--> Processing Dependency: expat-devel for package: apr-util-devel-1.3.9-3.el6_0.1.x86_64
--> Processing Dependency: db4-devel for package: apr-util-devel-1.3.9-3.el6_0.1.x86_64
---> Package httpd-devel.x86_64 0:2.2.15-26.el6.centos will be installed
--> Processing Dependency: httpd = 2.2.15-26.el6.centos for package: httpd-devel-2.2.15-26.el6.centos.x86_64
--> Running transaction check
---> Package db4-devel.x86_64 0:4.7.25-17.el6 will be installed
--> Processing Dependency: db4-cxx = 4.7.25-17.el6 for package: db4-devel-4.7.25-17.el6.x86_64
--> Processing Dependency: db4 = 4.7.25-17.el6 for package: db4-devel-4.7.25-17.el6.x86_64
--> Processing Dependency: libdb_cxx-4.7.so()(64bit) for package: db4-devel-4.7.25-17.el6.x86_64
---> Package expat-devel.x86_64 0:2.0.1-11.el6_2 will be installed
---> Package httpd-devel.x86_64 0:2.2.15-26.el6.centos will be installed
--> Processing Dependency: httpd = 2.2.15-26.el6.centos for package: httpd-devel-2.2.15-26.el6.centos.x86_64
---> Package openldap-devel.x86_64 0:2.4.23-31.el6 will be installed
--> Processing Dependency: openldap = 2.4.23-31.el6 for package: openldap-devel-2.4.23-31.el6.x86_64
--> Processing Dependency: cyrus-sasl-devel >= 2.1 for package: openldap-devel-2.4.23-31.el6.x86_64
--> Running transaction check
---> Package cyrus-sasl-devel.x86_64 0:2.1.23-13.el6_3.1 will be installed
---> Package db4.i686 0:4.7.25-17.el6 will be installed
--> Processing Dependency: libpthread.so.0(GLIBC_2.3.2) for package: db4-4.7.25-17.el6.i686
--> Processing Dependency: libpthread.so.0(GLIBC_2.2) for package: db4-4.7.25-17.el6.i686
--> Processing Dependency: libpthread.so.0(GLIBC_2.1) for package: db4-4.7.25-17.el6.i686
--> Processing Dependency: libpthread.so.0(GLIBC_2.0) for package: db4-4.7.25-17.el6.i686
--> Processing Dependency: libpthread.so.0 for package: db4-4.7.25-17.el6.i686
--> Processing Dependency: libc.so.6(GLIBC_2.4) for package: db4-4.7.25-17.el6.i686
---> Package db4-cxx.x86_64 0:4.7.25-17.el6 will be installed
---> Package httpd-devel.x86_64 0:2.2.15-26.el6.centos will be installed
--> Processing Dependency: httpd = 2.2.15-26.el6.centos for package: httpd-devel-2.2.15-26.el6.centos.x86_64
---> Package openldap.i686 0:2.4.23-31.el6 will be installed
--> Processing Dependency: libssl3.so(NSS_3.7.4) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libssl3.so(NSS_3.4) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libssl3.so(NSS_3.2) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libssl3.so for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libsmime3.so for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libsasl2.so.2 for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libplds4.so for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libplc4.so for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnssutil3.so for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.9.3) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.9.2) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.8) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.6) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.4) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.3) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.2) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.12.9) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.12.5) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.12.1) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.12) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.11.1) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.11) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so(NSS_3.10) for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnss3.so for package: openldap-2.4.23-31.el6.i686
--> Processing Dependency: libnspr4.so for package: openldap-2.4.23-31.el6.i686
--> Running transaction check
---> Package cyrus-sasl-lib.i686 0:2.1.23-13.el6_3.1 will be installed
---> Package glibc.i686 0:2.12-1.107.el6 will be installed
--> Processing Dependency: glibc-common = 2.12-1.107.el6 for package: glibc-2.12-1.107.el6.i686
--> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.12-1.107.el6.i686
--> Processing Dependency: libfreebl3.so for package: glibc-2.12-1.107.el6.i686
---> Package httpd-devel.x86_64 0:2.2.15-26.el6.centos will be installed
--> Processing Dependency: httpd = 2.2.15-26.el6.centos for package: httpd-devel-2.2.15-26.el6.centos.x86_64
---> Package nspr.i686 0:4.9.2-1.el6 will be installed
---> Package nss.i686 0:3.14.0.0-12.el6 will be installed
--> Processing Dependency: nss-softokn(x86-32) >= 3.12.9 for package: nss-3.14.0.0-12.el6.i686
--> Processing Dependency: libz.so.1 for package: nss-3.14.0.0-12.el6.i686
--> Processing Dependency: libsoftokn3.so for package: nss-3.14.0.0-12.el6.i686
---> Package nss-util.i686 0:3.14.0.0-2.el6 will be installed
--> Running transaction check
---> Package glibc.i686 0:2.12-1.107.el6 will be installed
--> Processing Dependency: glibc-common = 2.12-1.107.el6 for package: glibc-2.12-1.107.el6.i686
---> Package httpd-devel.x86_64 0:2.2.15-26.el6.centos will be installed
--> Processing Dependency: httpd = 2.2.15-26.el6.centos for package: httpd-devel-2.2.15-26.el6.centos.x86_64
---> Package nss-softokn.i686 0:3.12.9-11.el6 will be installed
--> Processing Dependency: libsqlite3.so.0 for package: nss-softokn-3.12.9-11.el6.i686
---> Package nss-softokn-freebl.i686 0:3.12.9-11.el6 will be installed
---> Package zlib.i686 0:1.2.3-29.el6 will be installed
--> Running transaction check
---> Package glibc.i686 0:2.12-1.107.el6 will be installed
--> Processing Dependency: glibc-common = 2.12-1.107.el6 for package: glibc-2.12-1.107.el6.i686
---> Package httpd-devel.x86_64 0:2.2.15-26.el6.centos will be installed
--> Processing Dependency: httpd = 2.2.15-26.el6.centos for package: httpd-devel-2.2.15-26.el6.centos.x86_64
---> Package sqlite.i686 0:3.6.20-1.el6 will be installed
--> Processing Dependency: libreadline.so.6 for package: sqlite-3.6.20-1.el6.i686
--> Running transaction check
---> Package glibc.i686 0:2.12-1.107.el6 will be installed
--> Processing Dependency: glibc-common = 2.12-1.107.el6 for package: glibc-2.12-1.107.el6.i686
---> Package httpd-devel.x86_64 0:2.2.15-26.el6.centos will be installed
--> Processing Dependency: httpd = 2.2.15-26.el6.centos for package: httpd-devel-2.2.15-26.el6.centos.x86_64
---> Package readline.i686 0:6.0-4.el6 will be installed
--> Processing Dependency: libtinfo.so.5 for package: readline-6.0-4.el6.i686
--> Running transaction check
---> Package glibc.i686 0:2.12-1.107.el6 will be installed
--> Processing Dependency: glibc-common = 2.12-1.107.el6 for package: glibc-2.12-1.107.el6.i686
---> Package httpd-devel.x86_64 0:2.2.15-26.el6.centos will be installed
--> Processing Dependency: httpd = 2.2.15-26.el6.centos for package: httpd-devel-2.2.15-26.el6.centos.x86_64
---> Package ncurses-libs.i686 0:5.7-3.20090208.el6 will be installed
--> Finished Dependency Resolution
Error: Package: httpd-devel-2.2.15-26.el6.centos.x86_64 (base)
           Requires: httpd = 2.2.15-26.el6.centos
           Installed: httpd-2.2.15-29.el6.centos.x86_64 (@updates/6Server)
               httpd = 2.2.15-29.el6.centos
           Available: httpd-2.2.15-26.el6.centos.x86_64 (base)
               httpd = 2.2.15-26.el6.centos
Error: Package: glibc-2.12-1.107.el6.i686 (base)
           Requires: glibc-common = 2.12-1.107.el6
           Installed: glibc-common-2.12-1.107.el6_4.5.x86_64 (@updates)
               glibc-common = 2.12-1.107.el6_4.5
           Available: glibc-common-2.12-1.107.el6.x86_64 (base)
               glibc-common = 2.12-1.107.el6
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

で、最初は何がいけないのか全くわかりませんでした。ただ、調べるうちに、パッケージの依存関係で問題が起きているということはなんとなく理解。

原因解説

結論から言うと、yum updateを利用してアップデートしたパッケージの幾つかが問題だった。http-develをインストールするには最新過ぎた、という感じ。

さっき貼り付けたログの最後の方の一部にこのような記載がある。

Error: Package: httpd-devel-2.2.15-26.el6.centos.x86_64 (base)
           Requires: httpd = 2.2.15-26.el6.centos
           Installed: httpd-2.2.15-29.el6.centos.x86_64 (@updates/6Server)
               httpd = 2.2.15-29.el6.centos
           Available: httpd-2.2.15-26.el6.centos.x86_64 (base)
               httpd = 2.2.15-26.el6.centos

この記述の意味するところは、以下である。

「httpd-devel-2.2.15-26.el6.centos.x86_64」というパッケージをインストールする過程でエラーが発生した。
このパッケージのインストールには「httpd」というパッケージの「2.2.15-26.el6.centos」というバージョンが必要となるが、いまインストールされているパッケージは「httpd-2.2.15-29.el6.centos.x86_64」である。つまり、「httpd」の「2.2.15-29.el6.centos」というバージョンだ。
この問題を解決するには「httpd-2.2.15-26.el6.centos.x86_64」というパッケージが利用できる。このパッケージに含まれる「httpd」のバージョンは「2.2.15-26.el6.centos」だ。

こういうの文章で書いてくれないとわからないですよね(笑)

というわけで、パッケージを交換したらOK。
よく見てみると、しかも同じパッケージの古いバージョン。削除して古いのをインストールしたらいいかな、と。

ところが、ここでさらに問題発生。

エラーの2つ目の「glibc-common」というパッケージはどうもカーネルに近いコアなライブラリのようで、削除できない。。
「これはもう詰んだかなーサーバー潰して立てなおしかなー」と考えていたところ、素敵なコマンドに出会いました。

解決策はダウングレード

落ち着いて考えてみれば、こういう状態って他にもなる人いるはずだし、想定されててもいいもんですよね。
ということで、きちんと想定されており、yumにはダウングレードというバージョンを古いものに入れ替えるコマンドがありました。

# yum downgrade パッケージ名

これでダウングレード可能でした。
ただし、ダウングレードも依存関係があるとうまくできない場合があって、そういう時は全部まとめてダウングレードする必要がありました。

# yum downgrade glibc-2.12-1.107.el6.x86_64 glibc-common-2.12-1.107.el6.x86 _64

のような感じです。すべての問題が解決するまでひたすらダウングレードを続けたところ、最後にはhttpd-develが無事にインストールできました!!

おしまい

よもや詰んだかと思いましたが、結果的にとても勉強になりました。あっぱれ。

タイトルとURLをコピーしました