Linux/Apache事始め-ビルド編-
まずは開発環境を構築しなければなりません。
方法は2通りあります。
- パッケージ管理ソフトでインストール
- アパッチをビルド
1.では芸が無い環境によってアパッチのバージョンや構成が
まちまちになってしまうので私的には2.を推奨します。
また(開発ではなくて)本番サービスで使うアパッチも自前でビルドした方が良いでしょう。*1
アパッチビルド手順
$ cd /tmp $ wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.0.63.tar.gz $ tar xzvf ./httpd-2.0.63.tar.gz $ cd ./httpd-2.0.63 $ ./configure \ --prefix=/usr/local/apache2 \ --with-mpm=worker \ --enable-modules=most \ --with-ssl=/usr/local/openssl --enable-ssl=shared \ --enable-cache=shared --enable-disk-cache=shared --enable-mem-cache=shared \ --enable-proxy=shared \ --enable-proxy-connect=shared --enable-proxy-ftp=shared --enable-proxy-http=shared $ make $ sudo make install
オプション解説
configure共通
--prefix=/usr/local/apache2
インストール先のディレクトリを指定します。
MPM
--with-mpm=worker
アパッチのプロセスモデル*2を指定します。
以下の2つを簡単な特徴と一緒に覚えておけば良いでしょう。
- prefork
- リクエストをシングルスレッドで処理する。
- worker
- リクエストをマルチスレッドで処理する。
どちらもアパッチは複数の子プロセスを立てます。
一つの子プロセスの中で更にマルチスレッド処理を行う方がworkerです。
勿論workerの方が効率的なのですが同時にマルチスレッド問題を抱えます。*3
またサードパーティのモジュールでは対応していない物も多い。
拡張プログラムを指定
アパッチの拡張プログラムの事をアパッチモジュール、または単にモジュール、モド(mod)と呼びます。
ビルドの際に指定する以下のオプションがあります。
一括指定
- --enable-modules={ most | all }
- モジュールを本体(httpd)に組み込む(静的リンク)
- --enable-shared-modules={ most | all }
- モジュールをビルド(後から動的リンク)
個別指定
- --enable-???={ yes | static | shared }
- ???で指定したモジュールをビルド
yesの解釈
- --enable-modulesを指定した場合
- staticとして解釈
- --enable-shared-modules
- sharedとして解釈
- どちらも指定せず
- staticとして解釈
*1:アパッチもプログラムですから稀にいや、かなりの頻度でバグが見つかります。
バグがセキュリティーホールに直結する場合は早急に対応しなければなりませんが
1.で運用していると新たなパッケージがリリースされるまで対応できません。
本業でWebサービスを行っている場合、それは致命的な損害を受けるリスクを放置すると言う事です。
当然、容認できませんから結局は自前でビルドせざるをえません。
それならば始めから2.としてノウハウを貯めておいた方が良いでしょう。
*2:プロセス/スレッドの構成
*3:複数のスレッドからの同時アクセスを制御する必要がある為、プログラムが複雑になり開発の難易度が上がる