Apacheのモジュールを作成するときのポイントなどをまとめる。
Apacheモジュールを作成するのに必要なコマンドはひとつだけ。それは、apxs2 だ。
これだけで、テンプレートの作成、インストールなどができる。
0から始めるより、テンプレートがあった方がやりやすい。以下のようにして、テンプレートを作成する。
$ apxs2 -g -n test
これで、カレントディレクトリに test ディレクトリが作成される。
$ ls -l test -rw-r--r-- 1 user group 938 2008-12-12 14:14 Makefile -rw-r--r-- 1 user group 2046 2008-12-12 14:14 mod_test.c -rw-r--r-- 1 user group 148 2008-12-12 14:14 modules.mk
このままでも特に問題はないが、コンパイルオプションだけ変更する。
DEFS=-O3 -Wall -Wcast-qual -Wwrite-strings
コンパイルは簡単。make コマンドを実行するだけ。エラーがなければ、次はインストールする。
インストールの前に、関連ファイルを作成する。モジュールをロードするためのファイルと、モジュールの設定をするためのファイルだ。設定ファイルは、ここで作らなくてもよい。
LoadModule test_module /usr/lib/apache2/modules/mod_test.so
<Location /hoge> SetHandler test </Location>
ここまで出来たら、Apacheにモジュールを組み込む。
# a2enmod test
ここまでの手順は、一度やれば不要となる。ソースを変更した場合は、ここ以降を行えばよい。
モジュールをインストールし、動作確認。
# make install # make test
"http://localhost/hoge"へアクセスした結果が表示される。
"The sample page from mod_test.c"と表示されれば成功。
Apacheモジュールには、特殊な仕掛けがある。
作成したモジュールはコールバック関数として呼ばれるので、そのための登録が必要となる。
設定ファイルを読まないのであれば、テンプレートで作られたソースを元に作成していけばよい。
Apacheモジュールを作るときに、いくつか注意する点がある。
GIFイメージでアクセスカウンタを出力するモジュールを作成する。
アクセスカウンタの場合、Apacheモジュール特有の仕掛けはほとんどない。起動時にのみ呼ばれる関数と、リクエストごとに呼ばれる関数があるので、固定のヘッダは起動時に作成しておくことにする。
GIF画像で一番ややこしいのは、LZW圧縮*1の部分だ。日本語の説明がほとんどない。
ここでは、カウンタに特化した処理(と、手抜き)のため、使用色数は16色以内で、バインディングタイプはリトルエンディアン専用とした。
また、初期化に失敗した場合は、固定のエラー画像を表示するようにした。
http://dsas.blog.klab.org/archives/50574774.html
http://dsas.blog.klab.org/archives/50578649.html
http://dsas.blog.klab.org/archives/50596409.html
http://www.tohoho-web.com/wwwgif.htm
http://www.winapi-database.com/special/2001_12_2002_1/index.html
http://www.math.kobe-u.ac.jp/~yamaguti/lzw1.html