- ベストアンサー
OpenSSLのバージョンアップでエラーが発生し対策が必要か
- OpenSSLのバージョンアップがうまくいかないため、対策が必要か
- makeの際にエラーが発生し、sh: cc: 見つかりません。というメッセージが表示されたため、パスを通して再度実施したが/usr/ucb/cc: language optional software package not installedというメッセージが表示された
- openssl-0.9.8kのMakefileにおいて、openssl-0.9.8bとは異なり、CCの値がccではなくgccとなっていることが判明した
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> 0.9.8bにならい今回のバージョンアップを行なったのですが、現在の環境(apacheの設定やssl認証)に影響がなければ、sharedをつけてconfigしなおすことも考えています OpenSSL のライブラリのリンク方法(静的 or 動的)だけの問題ですので、基本的に apache の設定や ssl 認証には影響しないはずです。 > 共有ライブラリを使用するようにコンパイルするには、--enable-modulesのオプションに生成されたファイルを設定するのでしょうか? 認識違いをされていると思いますが、--enable-modules オプションは apache 自体のモジュールに対するものですので、apache 以外のモジュールである OpenSSL のリンク方法の設定には関係ありません。 共有ライブラリと静的ライブラリの両方が存在する場合、基本的に共有ライブラリの方がリンクされます。 なお、OpenSSL の config において shared オプションを指定すると、共有および静的ライブラリの両方が生成されますが、上記のとおり共有ライブラリの方が使用されます。 また、apache のバイナリが静的か動的どちらでリンクされているのかの確認は ldd コマンドで可能です。 > そのあとmakeして(make installはせず)再起動すればよいのでしょうか? 一度だけですが OpenSSL のライブラリを動的にリンクするようにした apache のバイナリをインストールすることが必要です。 つまり make install あるいは手作業で、静的にリンクしたものから動的にリンクしたものへバイナリを入れ替える必要があります。 一度動的にリンクしたバイナリをインストールしておけば、その後再度 OpenSSL のライブラリを入れ替えても apache のリコンパイルが必要なくなるということです。 (正確に言うと apache のリコンパイルではなく、OpenSSL のライブラリのリンクのしなおしです。動的にリンクするようにしておけばライブラリを入れ替えると自動的に入れ替えたライブラリがリンクされる。) もちろん OpenSSL のライブラリを動的にリンクした場合も、それを反映させるために apache の再起動は必要です。
その他の回答 (5)
> opensslをやり直してみたのですが > # ./config shared > # make > この時点でエラーが出てしまいました、、 ./config shared する前に make clean してますか?
お礼
回答への補足に追加したい思いますのでこちらで失礼させていただきます 宜しくお願い致します httpd.confやhttpd-ssl.confなどの設定ファイル以外にも /usr/local/apache2/の下やhtdocsの下などに新規フォルダやファイルを作成しています apacheを再コンパイルするとそれらにも影響があるのでしょうか? アンインストールするわけではないので現状のまま影響がないように思うのですが… >リコンパイルですので make は必要ですが、 >入れ替えが必要なのは OpenSSL のライブラリ(libcrypto, libssl)を >リンクしているバイナリだけですので、 >必ずしも make install する必要はありません。 >手作業で必要なバイナリのみ入れ替えればよいのです。 インストール後に変更した設定ファイルや新規作成したものなどの影響を心配もあり、 xinuさんのおっしゃるように、make installはせずに必要なバイナリのみを入れ替える方法も調べてみたのですがちょっとわからない状況です すみませんが宜しくお願い致します
補足
ご返事いただいたのに、追記が遅くなってしまい大変申し訳ございません しばらく立て込んでおりまして、こちらの作業が中断している状態でした (まだ、make cleanをしていない状態であります) xinuさまもおっしゃるように 静的リンク、動的リンク(共有ライブラリ)、どちらにしてもapacheの再コンパイルが必要なようなので 今回は応急処置として静的リンクのまま反映するようにしたいと思います 動的をテストしてからとも思ったのですが >共有ライブラリと静的ライブラリの両方が存在する場合、基本的に共有ライブラリの方がリンクされます。 ということでしたので、現状makeで失敗している=静的リンクのまま >そのため、新たなスタティックなライブラリをリンクしなおすため、apache のリコンパイルが必要になります。 こちらを検討したいと思います >リコンパイルですので make は必要ですが、入れ替えが必要なのは OpenSSL のライブラリ(libcrypto, libssl)をリンクしているバイナリだけですので、 >必ずしも make install する必要はありません。手作業で必要なバイナリのみ入れ替えればよいのです。 >(make 時のログを script コマンドなどで残しておけば、入れ替えが必要なバイナリはわかりますよね。) 手作業で必要なバイナリのみ入れ替える方法に自信がないので、make installの方が逆にいいのではないかと悩んでいます >上記のように必要最低限のバイナリのみ手作業で入れ替えれば、設定情報には影響ありません。 apacheのサイトにもアップグレードの場合は設定ファイルなど上書きしないとあったのですが 今回バージョンアップは考えておらず、httpd-2.2.3をそのまま再コンパイルするならば、 前にインストールした後に変更したものなど、全て上書きになってしまうのでしょうか? >また、make install する前に必要な設定ファイルなどをバックアップしておき、make install 後にバックアップしておいたものに戻すという方法もあります。 やはりこちらの方法になりますでしょうか それとも最新のバージョン(2.2.14?)にした方が、設定ファイルに影響がなくいいのでしょうか? バージョンの違いによる影響も不安でしたので、apacheについては極力手をかけないと思ってはいるのですが、、、 勉強不足で大変申し訳ないのですが ご教授宜しくお願い致します
> リコンパイルは、makeやmake installまでも指しますよね? リコンパイルですので make は必要ですが、入れ替えが必要なのは OpenSSL のライブラリ(libcrypto, libssl)をリンクしているバイナリだけですので、必ずしも make install する必要はありません。 手作業で必要なバイナリのみ入れ替えればよいのです。 (make 時のログを script コマンドなどで残しておけば、入れ替えが必要なバイナリはわかりますよね。) > httpd.confやhttpd-ssl.confなど認証局の関係でインストール後に変更しているものがあるので、できれば再インストールは避けたいと思っています > そのあたりに影響が出ない方法があればと思っています 上記のように必要最低限のバイナリのみ手作業で入れ替えれば、設定情報には影響ありません。 また、make install する前に必要な設定ファイルなどをバックアップしておき、make install 後にバックアップしておいたものに戻すという方法もあります。 あと蛇足ですが、スタティックなライブラリを使用していると、再度 OpenSSL の入れ替えが発生した場合、今回のように apache も再度コンパイルしなければなりません。 OpenSSL の config で shared オプションをつけてビルドすれば、共有ライブラリが生成されますので、今回 apache も共有ライブラリを使用するようにリコンパイルすれば、その後は OpenSSL の共有ライブラリだけ入れ替えれば済む(apache をリコンパイルしなくてもよい)ようになります。
補足
回答ありがとうございます >上記のように必要最低限のバイナリのみ手作業で入れ替えれば、設定情報には影響ありません。 >また、make install する前に必要な設定ファイルなどをバックアップしておき、make install 後にバックアップしておいたものに戻すという方法もあります。 静的リンクの場合はどちらかで行なう必要があるのですね 影響がない方法をありがとうございます >あと蛇足ですが、スタティックなライブラリを使用していると、再度 OpenSSL の入れ替えが発生した場合、今回のように apache も再度コンパイルしなければなりません。 >OpenSSL の config で shared オプションをつけてビルドすれば、共有ライブラリが生成されますので、今回 apache も共有ライブラリを使用するようにリコンパイルすれば、その後は OpenSSL の共有ライブラリだけ入れ替えれば済む(apache をリコンパイルしなくてもよい)ようになります。 そうですよね 0.9.8bにならい今回のバージョンアップを行なったのですが、現在の環境(apacheの設定やssl認証)に影響がなければ、sharedをつけてconfigしなおすことも考えています 現状以下のコンパイル方法でapacheがインストールされています ./configure --enable-so --enable-shared --enable-ssl --with-ssl=/usr/local/ssl --enable-mime-magic 共有ライブラリを使用するようにコンパイルするには、--enable-modulesのオプションに生成されたファイルを設定するのでしょうか? そのあとmakeして(make installはせず)再起動すればよいのでしょうか? よろしくお願いします
> 0.9.8bのインストール時もconfigオプションはつけていなく apache はコンパイルしなおしましたか? config に何もオプションを指定しないと、共有ライブラリは生成されず、スタティックなライブラリしか生成されません。 そのため、新たなスタティックなライブラリをリンクしなおすため、apache のリコンパイルが必要になります。
補足
回答ありがとうございます apacheのリコンパイルはしていません リコンパイルは、makeやmake installまでも指しますよね? httpd.confやhttpd-ssl.confなど認証局の関係でインストール後に変更しているものがあるので、できれば再インストールは避けたいと思っています そのあたりに影響が出ない方法があればと思っています よろしくお願いします ※インストール済みのapacheのコンパイル方法 ./configure --enable-so --enable-shared --enable-ssl --with-ssl=/usr/local/ssl --enable-mime-magic
確認なのですが、openssl-0.9.8b と openssl-0.9.8k をインストールした場所は一致していますか? もし違うなら、一致するように config のオプション --prefix, --openssldir で指定する必要があります。
お礼
回答ありがとうございます はい、インストール場所は一致しています /usr/local/ssl 0.9.8bのインストール時もconfigオプションはつけていなく 今回も同様にデフォルトの場所にインストールしたいのでつけませんでした openssl versionで0.9.8kと結果がでるのでインストールされていると思うのですが... 何かパスとかの関係なのでしょうか?
/usr/ucb/cc はただのラッパスクリプトで Solaris9 ではコンパイラとして使用できませんので、/usr/ucb はパスから外さなければなりません。 また、config ファイルの中を確認すると分かりますが、gcc にパスを通しておかなければなりません。
お礼
回答ありがとうございます 補足)質問の記述が一部間違っていたので訂正します openssl-0.9.8k (誤)PLATFORM=solaris-sparcv9-gcc (正)PLATFORM=solaris-sparcv9-cc /usr/ucbをパスからはずし、代わりにgccにパスを通してconfigから実施したところ、うまくインストールができました ありがとうございます openssl version OpenSSL 0.9.8k しかし、telnetで確認したところ、OpenSSL/0.9.8bのままでした 実際にapacheから利用しているopensslについても同様に0.9.8kを反映したいのですが、apacheに何か手を加えることが必要なのでしょうか? よろしくお願いします
お礼
記述場所がわからなかったのでこちらで失礼します リンク方法は現状の設定と同じく静的とし、opensslのバージョンアップを行いapache2を再コンパイルしたところ、アドバイスいただいたように、設定ファイルなどに影響なく反映することが出来ました 丁寧に教えていただきまして大変助かりました ありがとうございました
補足
回答ありがとうございます >OpenSSL のライブラリのリンク方法(静的 or 動的)だけの問題ですので、基本的に apache の設定や ssl 認証には影響しないはずです。 ありがとうございます、安心しました アドバイスから、やはり動的にするのがよさそうですね >認識違いをされていると思いますが、--enable-modules オプションは apache 自体のモジュールに対するものですので、apache 以外のモジュールである OpenSSL のリンク方法の設定には関係ありません。 すみません、、 httpd.confのLoadModuleでしょうか >また、apache のバイナリが静的か動的どちらでリンクされているのかの確認は ldd コマンドで可能です。 opensslをやり直してみたのですが # ./config shared # make この時点でエラーが出てしまいました、、 以下エラー抜粋です making all in crypto... making all in crypto/objects... making all in crypto/md2... ・・・ ld: 重大なエラー: 割り当て可能ですが、書き込めないセクションに対して再配置が残っています。 collect2: ld returned 1 exit status *** Error code 1 make: Fatal error: Command failed for target `link_a.solaris' ・・・ 以下現状確認したlddになります # ldd /usr/local/apache2/bin/httpd libm.so.1 => /usr/lib/libm.so.1 libaprutil-1.so.0 => /usr/local/apache2/lib/libaprutil-1.so.0 libexpat.so.0 => /usr/local/apache2/lib/libexpat.so.0 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 libdl.so.1 => /usr/lib/libdl.so.1 libc.so.1 => /usr/lib/libc.so.1 libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 libaio.so.1 => /usr/lib/libaio.so.1 libmd5.so.1 => /usr/lib/libmd5.so.1 libmp.so.2 => /usr/lib/libmp.so.2 libthread.so.1 => /usr/lib/libthread.so.1 /usr/platform/SUNW,Sun-Fire-V240/lib/libc_psr.so.1 /usr/platform/SUNW,Sun-Fire-V240/lib/libmd5_psr.so.1 # ldd /usr/local/ssl/bin/openssl libsocket.so.1 => /usr/lib/libsocket.so.1 libnsl.so.1 => /usr/lib/libnsl.so.1 libdl.so.1 => /usr/lib/libdl.so.1 libc.so.1 => /usr/lib/libc.so.1 libmp.so.2 => /usr/lib/libmp.so.2 /usr/platform/SUNW,Sun-Fire-V240/lib/libc_psr.so.1 パスなどの問題でしょうか? アドバイスいただけたら幸いです よろしくお願いします >一度だけですが OpenSSL のライブラリを動的にリンクするようにした apache のバイナリをインストールすることが必要です。 >つまり make install あるいは手作業で、静的にリンクしたものから動的にリンクしたものへバイナリを入れ替える必要があります。 やはり必要なのですか… しかし一度うまく行けば…確かにそうですね たび重なる質問ですが、よろしくお願いします