Home > 2009年08月15日

2009年08月15日

mod_hello: 初めてのApacheモジュール

さて、今回からモジュールプログラミングをしていきます。
まずは何もしないモジュールを作って、開発の流れを掴みたいと思います。

雛型作成

Apache付属のapxsコマンドを使います。

cd /home/t/module
/home/t/apache/bin/apxs -g -n hello

※ mod_soを有効にしていないとエラーになるので注意。

/home/t/apache/bin/apxs -g -n hello
apxs:Error: Sorry, no DSO support for Apache available
apxs:Error: under your platform. Make sure the Apache
apxs:Error: module mod_so is compiled into your server
apxs:Error: binary `/home/t/apache/bin/httpd'.

ちょっと弄る

雛型そのままでも動きますが、少しだけ変えてみます。

vi mod_hello.c        
        ap_rputs("Hello, Apache Module!<br />\n", r);
        ap_rputs("The sample page from mod_hello.c\n", r);

これだけです。

コンパイル・インストール

make;make installすれば、
モジュールのコピーや設定ファイルへの追記まで勝手にやってくれます。

vi /home/t/.bash_profile
PATH=$PATH:$HOME/bin:$HOME/apache/bin
source /home/t/.bash_profile

cd /home/t/module/hello
make
make install

grep mod_hello /home/t/apache/conf/httpd.conf
LoadModule hello_module       libexec/mod_hello.so

ls /home/t/apache/libexec/mod_hello.so 
/home/t/apache/libexec/mod_hello.so

※ apxsへのパスを通していないとエラーになります。

make
apxs -c    mod_hello.c
make: apxs: コマンドが見つかりませんでした
make: *** [mod_hello.so] エラー 127

動作確認

設定ファイルに以下を追記することで、
動作確認を行うことができます。

vi httpd.conf
Include conf/module.conf

vi module.conf
<Location /hello>
 SetHandler hello
</Location>

firefox localhost:8080/hello &

※ Includeしないで、直接httpd.confに書いてもいいんですが、
  今後いろいろと試してぐちゃぐちゃになりそうだったので、僕は分けておきました。

※ mod_soを無効のままインストールしちゃった場合は、
  apacheディレクトリごと消して入れ直しましょう。
  じゃないと(僕みたいに)以下のエラーに悩まされることになります。

tail -f error_log
Syntax error on line 205 of /home/t/apache/conf/httpd.conf:
Invalid command 'LoadModule', perhaps mis-spelled or defined by a module not included in the server configuration

さて、これでとりあえず、
「Hello, Apache Module!
The sample page from mod_hello.c」
という画面は表示できるようになりました。
(雛型をほぼそのまま動かしただけですが・・・)

次回からいよいよ中身(C言語)に入っていきたいと思います。

PR

Apache1.3をインストール(ソースから)

まずはインストール。
これがなきゃ始まらない。

作業は全て/home/t/でやります。
OSはCentOS 5.2です。

ダウンロード・展開

適当なサイトからwgetしてtarします。
終わりです。

wget http://www.meisei-u.ac.jp/mirror/apache/httpd/apache_1.3.41.tar.gz

tar zx(v)f apache_1.3.41.tar.gz

インストール

/home/t/apacheにインストールします。
また、後々のためにmod_soを有効にしておきます。
他はデフォルトのままです。

cd apache_1.3.41

./configure --prefix=/home/t/apache --enable-module=so

make

make install

※ はじめUbuntuでやっててここではまりました。
  /bin/shがdashだからのようです

※ 正直ちょっと前まで、configure?make?っていう状況だったので、
  ITmedia エンタープライズ : Linux Tips「./configure;make;make installにはどんな意味がある?」
  を読んでお勉強しときました。

動作確認

apache起動して、ブラウザでアクセスしてみます。

cd /home/t/apache

bin/apachectl start
firefox localhost:8080 &

おなじみの、
「あなたの予想に反して、このページが見えているでしょうか?」
画面が表示され、めでたしめでたし。

これで準備は完了です。
次回以降本格的にモジュールの話に入っていきたいと思います。

それでは。

おまけ:SSL対応

いずれ必要になるかもしれないので、
mod_sslバージョンもインストールしておく。

参考ページはこちら↓
mod_sslのインストール - BitArts
WEBシステム開発: WEBサーバ構築サービス|Apache+mod_ssl

準備&opensslインストール

mkdir ssl
cp apache_1.3.41.tar.gz ssl
cd ssl
tar zxf apache_1.3.41.tar.gz
※ tarの展開先とか名前指定とかよくわからん・・・

wget http://www.openssl.org/source/openssl-0.9.8k.tar.gz
tar zxf openssl-0.9.8k.tar.gz

cd openssl-0.9.8k
./config
make
su
make install
exit

mod_sslパッチ当て

cd ..
wget http://www.modssl.org/source/mod_ssl-2.8.31-1.3.41.tar.gz
tar zxf mod_ssl-2.8.31-1.3.41.tar.gz

cd mod_ssl-2.8.31-1.3.41

./configure \
--prefix=/home/t/ssl/apache \
--enable-module=so \
--with-apache=../apache_1.3.41 \
--with-ssl=/usr/local/ssl

apacheインストール&動作確認

cd ../apache_1.3.41
make 
make certificate
パスフレーズはn、それ以外は全部Enter
make install

/home/t/ssl/apache/bin/apachectl startssl
firefox https://localhost:8443/ &

無事、接続完了。
もちろん、オレオレ+CN違うので警告でますけどね。

おまけが長くなりましたが、以上です。

C言語初心者がApacheのソースを読めるようになるまで

あ、どうもお久しぶりです。
tnantokaです。

最近はメモをwiki(google sites)に書くようになっちゃって、
すっかりブログの更新をしない状況が続いてました。すいません。

ただどうもwikiは僕には合わないらしく(時系列の方がしっくりくる)
ブログにメモる運用に戻そうと思います。

というわけで今後ともよろしくお願いします。

さて、最近の私の興味は(インフラエンジニアらしく)Apacheにあります。
Apacheを使いこなせるのはもちろん、最終的にはソースを読めるようになりたいのです。
C言語もろくに知らない僕ですが頑張ってみようと思います。

まずは、Apacheの仕組み理解+C言語のお勉強のため、
モジュールプログラミングをしてみる予定です。

教材は、需要はあるはず(Amazonマーケットプレイスだと1万円オーバー)なのに、
なぜか再販されないこちら。
(ずっと読みたかったんですが、たまたま借りることができました)
MODULE.JP - Apacheモジュールプログラミングガイド

しばらくはapacheの話題が続くと思いますが、
更新頻度を戻していきますのでお付き合い宜しくお願いします。
※ コメントなどはお気軽にどうぞ

Home > 2009年08月15日

Search
Loading
Feeds
Links
スポンサードリンク

Page Top