apxsによるhttpdモジュールのビルド方法
Apache HTTP Server (httpd) に付属するapxsコマンドが必要になったため,情報を整理する。
概要
httpdのモジュールはソースコードからビルドする際にビルド条件を満たしていれば,一緒にビルドしてくれる。ただし,ビルド条件を満たしていなければ,ビルドされない。
httpdのモジュールは.soファイルとなっており,httpd本体のビルド時以外にも,実は後からビルドしてインストールすることができる。
このhttpdのモジュールの追加インストールを実現するのがapxコマンドとなる。apxs (APache eXtensSion tool) はApache HTTP Serverの拡張モジュールのビルド・インストールツールとなっている。
「apxs – APache eXtenSion tool – Apache HTTP Server Version 2.4」に説明が書かれているのでこちらを参考に挙動を整理する。
前提条件
モジュールの追加インストールは動的共有オブジェクト (DSO: Dynamic Shared Object)
のビルドにより実現される。実現に当たって,mod_so
のLoadModule
を使用する。
そのためapxsの前提条件として,mod_so
が有効になっている必要がある。以下のいずれかのコマンドでmod_soが表示されていることを確認しておく。
httpd -l | grep mod_so
apachectl -M | grep so_module
基本的には特別なことがない限り,デフォルトで有効になっている。
mod_soが有効であれば,apxsを使って組み込むことができる。
使用方法
httpdの標準モジュールを追加でインストールする場合が主な用途なため,これを念頭に使用方法を整理する。
以下のようにhttpdのmodules/<module_name>
ディレクトリーに移動して,引数にいくつかのオプションそソースファイル (.c) を指定してコマンドを実行する。<module_name>
には例えばssl
やmd
などが入る。
LOCAL=~/.local
cd $LOCAL/src/httpd/modules/<module_name>
apxs -aci -I incdir -L libdir -l lib1 -l lib2 *.c
上記で指定しているオプションの意味は以下の通りだ。
オプション | 説明 |
---|---|
DSOコンパイルオプション | |
-c | コンパイル操作を指示する。最初に.cファイルを.oにビルドしてから.soファイルをビルドする。 |
-I incdir | コンパイルコマンドにそのまま渡すヘッダーディレクトリーを指定する。 |
-L libdir | コンパイルコマンドにそのまま渡すライブラリーディレクトリーを指定する。 |
-l libname | コンパイルコマンドにそのまま渡すライブラリー名を指定する。 |
DOSインストール・設定オプション | |
-i | インストール操作を指示する。1以上のDSOをサーバーのモジュールディレクトリーにインストールする。 |
-a | httpd.conf設定ファイルにLoadModuleを追加する。 |
この他にもオプションがいろいろあるけれど,基本的にはこの形式でほぼ実行する。
インストールせずに,コンパイルだけする場合,-a
と-i
を外して-c
だけ指定すればいい。
オプション
apxsを使ってhttpdのモジュールをビルドする場合,-I
や-l
のオプション指定が重要となる。
これらのオプションは同じディレクトリーの以下のファイルの内容や,ビルドのエラー内容から判断する。
modules.mk
<module_name>.mak
<module_name>.dsp
どのモジュールにどのライブラリーが必要化は,htpdのビルドマニュアル「configure – Configure the source tree – Apache HTTP Server Version 2.4」も参考になるかもしれない。
例えば,以下のライブラリーが対応するモジュールに必要であることが示唆されている。
- OpenSSL: mod_ssl
- zlib: mod_deflate
- GNU DBM, New DBM, Berkeley DB: mod_authn_dbm, mod_rewrite
結論
apxsの使用方法について整理した。
基本的にはhttpdのビルド時にライブラリーを揃えておいて,本体と一緒にモジュールもインストールするのがいい。
やむを得ず,後からインストールする場合にapxsを覚えておくとよいだろう。
“apxsによるhttpdモジュールのビルド方法” に対して1件のコメントがあります。