例えば、Solaris10 ( 3 / 5 ) バージョンに、httpd-2.2.17 をインストールするとします。 なお、ここでは、apache は sunfreeware ( http://sunfreeware.com/ )で 提供されているパッケージをインストールするものとします。
※apache では libexpat, libiconv などに依存するため同様にダウンロード・インストールする必要があります。
スポンサーリンク
apache パッケージをインストール
以下のように httpd パッケージをインストールし起動しようとしても libexpat をインストールしていない場合はエラーとなります。
gunzip expat-2.0.1-sol10-x86-local.gz gunzip apache-2.2.17-sol10-x86-local.gz pkgadd -d expat-2.0.1-sol10-x86-local # その他、必要なパッケージをインストールする pkgadd -d apache-2.2.17-sol10-x86-local # ※ expat をインストールしていない場合、apache の起動時に以下のようなエラーとなる /usr/local/apache2/bin/apachectl start ld.so.1: /usr/local/apache2/bin/httpd: 重大なエラー: libexpat.so.1: open に失敗しました: ファイルもディレクトリもありません。 強制終了
libc のバージョンが古い
上記のように最新版のパッケージをインストールしても、パッケージのビルド環境と OS にインストールされているライブラリのバージョンの差異により apache の起動に失敗する場合があります。
/usr/local/apache2/bin/apachectl start ld.so.1: /usr/local/apache2/bin/httpd: 重大なエラー: libc.so.1: バージョン `SUNW_1.22.1' が見つかりません (ファイル /usr/local/apache2/lib/libapr-1.so.0 からの要求) ld.so.1: /usr/local/apache2/bin/httpd: 重大なエラー: libc.so.1: open に失敗しました: ファ イルもディレクトリもありません。 強制終了
これらのエラーは、httpd が利用しようとした libc が古いために発生しています。httpd が利用するライブラリは ldd コマンドで確認できます。以下はコマンドの実行結果例です。
ldd /usr/local/apache2/bin/httpd libm.so.2 => /usr/lib/libm.so.2 libaprutil-1.so.0 => /usr/local/apache2/lib/libaprutil-1.so.0 libexpat.so.1 => /usr/local/lib/libexpat.so.1 libiconv.so.2 => /usr/local/lib/libiconv.so.2 libapr-1.so.0 => /usr/local/apache2/lib/libapr-1.so.0 libuuid.so.1 => /usr/lib/libuuid.so.1 libsendfile.so.1 => /usr/lib/libsendfile.so.1 librt.so.1 => /usr/lib/librt.so.1 libsocket.so.1 => /usr/lib/libsocket.so.1 libnsl.so.1 => /usr/lib/libnsl.so.1 libpthread.so.1 => /usr/lib/libpthread.so.1 libc.so.1 => /usr/lib/libc.so.1 libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 libc.so.1 (SUNW_1.22.1) => (バージョンが見つかりません) libaio.so.1 => /lib/libaio.so.1 libmd5.so.1 => /lib/libmd5.so.1 libmp.so.2 => /lib/libmp.so.2 libscf.so.1 => /lib/libscf.so.1 libdoor.so.1 => /lib/libdoor.so.1 libuutil.so.1 => /lib/libuutil.so.1
上記の実行結果例より、libc.so.1 の内部バージョン SUNW_1.22.1 が見つからないと出ていることがわかります。実際に libc.so.1 の内部バージョンを pvs コマンドで確認すると以下の通りバージョン(SUNW_1.22.1)が見当たらないことが確認できます。
pvs /usr/lib/libc.so.1 libc.so.1; SUNW_1.22; SUNW_1.21.3; SUNW_1.21.2; SUNW_1.21.1; SUNW_1.21; SUNW_1.20.4; ・ ・ ・ (省略)
libc のみをアップデートさせれば解消すると思われますが、このような場合は最新版の Solaris10 をインストール(アップデート)することが簡単かつ確実な方法だと思います。他のパッケージを同時に使用したりすることも多く、1つずつ問題を解消するのはつらいです。
この辛さがたまらないと言う人もいます。