この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
OpenSSLをソースから入れ直した時に
Apacheのmod_ssl.soを更新しても
ライブラリ参照先が変わらない事象があったので
オプションなどをメモ。
環境
- CentOS 5系
- Apache 2系
- OpenSSL 1.0.1系
前提
- yumで入っていたOpenSSL0.9.8系を、
ソースから入れたOpenSSL1.0.1系にバージョンアップする - Apache自体は再コンパイルせず、
apxsでモジュールのみ再コンパイルする
OpenSSLをソースからインストールしましたが、
Apacheはyumで入れたOpenSSLを参照したままなので
手動で入れた方を参照するよう更新する必要があります。
今回はApache自体はそのままで、モジュールだけapxsでコンパイルし直します。
apxsとは
「APache eXtenSion tool」
Apacheの拡張モジュールをビルドしてインストールするためのツールです。
後から拡張モジュールを組み込んだり、
モジュールだけ再コンパイルして入れ直したりすることができます。
DSOサポートが有効になっている必要があります。
有効になっているかの確認方法↓
# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
→core.c、mod_so.cがあればOK
有効になっていない場合はApacheをオプションつけて再コンパイル。
yumの場合はhttpd-develパッケージに入ってます。
mod_ssl更新
今回はmod_sslを再コンパイルしたいので、
mod_ssl.cファイルを探して、apxsコマンドを実行します。
# locate mod_ssl.c
mod_ssl.cのあるディレクトリに移動後、
# apxs -c -i *.c -lssl -lcrypto -ldl -lz
-c オプション: コンパイルする
-i オプション: インストールする
-l オプション: 共有ライブラリを指定
共有ライブラリの参照先を確認。
# ldd mod_ssl.so
libssl.so、libcrypto.soが手動で入れたOpenSSLの場所を参照していればOKなのですが、
結果はyumで入れたOpenSSLが参照されたままです。
その場合は-Lオプションでライブラリパスを指定できます。
※OpenSSLが/opt/opensslにインストールされている場合
# apxs -c -i *.c -lssl -lcrypto -ldl -lz -L/opt/openssl/lib
-L オプション: ライブラリパスを指定
これで手動で入れたOpenSSLの方にリンクしてくれるようになりました。
apxsコマンドのオプション
共通オプション | |
-n modname | モジュール名を明示的に指定。-i, -gオプションと共にに使用。 -gオプションを指定する場合は必須。 -iオプション指定時にこのオプションの指定がない場合はファイル名から推測される。 |
クエリオプション | |
-q | 設定(構成)情報を取得する。パラメータで取得情報を指定できる。 |
設定オプション | |
-S name=value | 設定を変更する |
テンプレート生成オプション | |
-g | モジュールのテンプレート(雛形)を生成する。 -nオプションの指定によってmod_○○.cというソースファイル、Mikefile等が生成される。 |
DSOコンパイルオプション | |
-c | コンパイルする。 -oオプションがない場合は、通常ファイル名から推測されたmod_○○.soというモジュールが出力される。 |
-o dsofile | 作成されるモジュールのファイル名を明示的に指定 |
-D name=value | 設定オプションをコンパイル時に直接指定 |
-I incdir | コンパイル時に直接指定したいインクルードディレクトリがあれば指定 |
-L libdir | コンパイル時に直接指定したいライブラリパスがあれば指定 |
-l libname | コンパイル時に直接指定したいライブラリがあれば指定 |
-Wc, compiler-flags | コンパイラフラグを指定 |
-Wl, linker-flags | リンカフラグを指定 |
DSOのインストールと設定オプション | |
-i | インストールする |
-a | httpd.confにLoadModule行を追加して有効化する |
-A | -aオプション同様、httpd.confにLoadModule行を追加するが 有効化はしない(コメントアウトした状態で追加される) |
-e | モジュールはインストールせず、httpd.confのみ編集する |
-aオプションは、
対象モジュールのLoadModule行が既にある場合に指定すると、
重複してしまい、apachectl configtestは通っても
エラーでApacheが起動しないので注意が必要です。
かなりざっくり略したので、詳細はman apsxで確認を。