openssl-1.0.0 を httpd-2.2.12(apache)以前バージョン で利用する場合のmake時コンパイルエラー対処法
読み返してみるになんでこんなことしてんだろうな:)
参考URL
- openssl-1.0.0 + mod_ssl-2.8.31 - kaz_29@はてな
- Apache+OpenSSL-1.0.0でのコンパイル時の問題 - tkr備忘録Wiki
さてさて
古い環境で動作するサーバでOpenSSLをアップデートしたい場合、関連パッケージの再コンパイル作業が必要となってくるかと思います。
- OpenSSLをアップデートしたい
- そしてやや古めのapacheをApache killer対策をした上で利用し続けたい
- もちろんmod_sslは新しいOpenSSL由来のものを利用したい
という場合です。
結論から先に書きますと、上述した参考URLリンク先にあるとおり、 OpenSSL側の構造体名が1.0.0から変更されたことが原因でした。
- Apacheソースアーカイブにある中で確認したところ、
- http-2.2.12を含めてそれ以前のバージョンでOpenSSL1.0.0系を利用する場合には、modules/ssl 以下のソース修正が必要となる
- http-2.2.13を含めてそれ以降のバージョンでOpenSSL1.0.0系を利用する場合には、modules/ssl 以下のソース修正は不要でいわゆる巷にある手順で対応可能(なぜならapache側で対応が完了しているから:後述のCHANGESの件)
ということのようです。 @_so4 さん が「CHANGESに書いてあるよー」って教えてくれました。うれしい :)
|
|
httpd-2.2.13/CHANGES より抜粋 ですね。
さてopenssl-1.0.0非対応なhttpd-2.2.12それ以前のバージョンを素で make した際のエラーメッセージをみると、
|
|
とあります。
|
|
が問題のわかりやすい箇所です。最初からエラーメッセージ追っていれば、もっと簡単に発見できたのでしょうね。 このあたりが経験の無さか、と感じた次第です。
なのでOpenSSL1.0.0対応していないApache(2.2系で言えば2.2.12それ以前のバージョン)にOpenSSL1.0.0を対応させる場合には、作業ベースで行くと、
- modules/ssl/ssl_engine_init.c
- modules/ssl/ssl_util_ssl.c
のソースなどをちょろっといじる必要があるということになります。
手順通りに追っていくと
0. コンパイル環境の整備
各自調整
1. OpenSSLのインストール
いい感じですね
2-1. Apacheのインストール(2.2.10 コンパイル失敗)
(´・ω・`)ブゥ……
2-2. Apacheのインストール(2.2.10 ソース修正)
(`・ω・´)ハッピー!!
なんかうまくいかない場合
2.2.4と2.2.10などバージョンが違えば修正箇所も変わるかと思います。つまり上記手順は2.2.10以外では変わる可能性があります。 それでも「STACK を一個ずつ _STACK にして、./configure && make → エラーメッセージでたら該当ファイルの該当行を確認し潰す」というスタンスで対応可能かと思います。
教訓
- エラーメッセージちゃんと読もう
- READMEやCHANGELOGちゃんと読もう
いい勉強になりました :)