[ Solaris10 ] OS バージョンとパッケージの依存関係 ( 重大なエラー: libexpat.so.1: open に失敗しました )

Pocket

例えば、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つずつ問題を解消するのはつらいです。

この辛さがたまらないと言う人もいます。

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *