失敗の経緯
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が無事にインストールできました!!
おしまい
よもや詰んだかと思いましたが、結果的にとても勉強になりました。あっぱれ。