Apache HTTP Server 2.4 系で現在最新の安定リリースは, バージョン 2.4.3 のようです. これをソースからビルドしてインストールするということをしてみました. 2.4 系をさわるのは今回がはじめてです. そこで, その際に試したことをいくつかここに書こうかなと最初は思ったのですが, ひとつ気になる点があったので, それについてだけ書こうと思います. DSO (Dynamic Shared Object) として扱うことのできるモジュールについてです.
ソースからビルドするに際しては, まず configure
スクリプトを実行すると思います. たとえば次のように実行します.
$ ./configure --prefix=/opt/httpd-2.4.3 \ --enable-mods-shared=all \ --enable-mpms-shared=all
2.4 系ではほとんどのモジュールが DSO として扱うことができるようです. どのモジュールを DSO として扱いたいかは --enable-mods-shared
オプションで指定します. このオプションでは, 個別にモジュールを列挙してもいいのですが, それは面倒くさいので, ある程度まとめて指定したいところです. 実際にそれはできます.
オンラインドキュメントの configure - Configure the source tree には, 次のように説明されています.
Additionally you can use the special keywords
reallyall
,all
,most
,few
andnone
. For example,--enable-mods-shared=mostwill compile most modules and build them as DSO modules,
--enable-mods-shared=fewwill only compile a very basic set of modules.
The default set is
most
.
そうなると, ここで気になるのは, reallyall
, all
, most
, few
, none
のそれぞれが, どこまでの範囲をカバーするのかということです. で, 少し調べてみました.
most の場合
--enable-mods-shared
オプションを使用しない場合, 暗黙的に most
が選択されたとみなされるので, おそらくこれが最も一般的なケースなのかなと思います.
クリーンインストールしたばかりの手元の Debian GNU/Linux 6.0 (Squeeze) で試してみましたところ, インストール先の modules
ディレクトリ内には, 81 個の共有ライブラリが作成されていました. ただし, 別途 --enable-mpms-shared=all
というオプションを指定し, そのためわたしの環境では mod_mpm_event
, mod_mpm_prefork
, mod_mpm_worker
という MPM 用の 3 個の共有ライブラリが作成されていましたので, これを除いて考えると, 78 個です.
ちなみに, モジュールの一覧表は Module Index というオンラインドキュメントにありますが, その Other Modules セクションには 112 個のモジュールが掲載されています. うち, mod_so
は, DSO としてではなく, 必ず静的に含まれるモジュールのようです. Dynamic Shared Object (DSO) Support というオンラインドキュメントに,
The DSO support for loading individual Apache httpd modules is based on a module named
mod_so
which must be statically compiled into the Apache httpd core. It is the only module besidescore
which cannot be put into a DSO itself. Practically all other distributed Apache httpd modules will then be placed into a DSO.
と記載されています. ですので, 以後は 111 個のモジュールのうち, どれが含まれて, どれが含まれないか, という観点で見て行きたいと思います.
で, most
の場合は, 含まれないモジュールが 33 個ありました.
mod_asis
,mod_authnz_ldap
,mod_cern_meta
,mod_cgi
,mod_charset_lite
,mod_data
,mod_dav_lock
,mod_deflate
,mod_dialup
,mod_echo
,mod_example
,mod_heartbeat
,mod_heartmonitor
,mod_ident
,mod_imagemap
,mod_isapi
,mod_ldap
,mod_log_forensic
,mod_lua
,mod_mime_magic
,mod_nw_ssl
,mod_privileges
,mod_proxy_fdpass
,mod_proxy_html
,mod_reflector
,mod_session_crypto
,mod_slotmem_plain
,mod_socache_dc
,mod_ssl
,mod_suexec
,mod_usertrack
,mod_watchdog
,mod_xml2enc
all の場合
--enable-mods-shared=all
の場合はどうでしょうか. all
とは言え, reallyall
よりは少ないんだろうなという察しはつきます. 実際には, 含まれないモジュールが 18 個ありました.
mod_authnz_ldap
,mod_cern_meta
,mod_cgi
,mod_deflate
,mod_example
,mod_ident
,mod_imagemap
,mod_isapi
,mod_ldap
,mod_lua
,mod_nw_ssl
,mod_privileges
,mod_proxy_html
,mod_session_crypto
,mod_socache_dc
,mod_ssl
,mod_suexec
,mod_xml2enc
reallyall の場合
--enable-mods-shared=reallyall
の場合はどうでしょうか. さすがに, ほぼすべてが含まれるのだろうなと思っておりましたが, 実際には, 含まれないモジュールが 12 個もありました.
mod_authnz_ldap
,mod_deflate
,mod_example
,mod_ldap
,mod_lua
,mod_nw_ssl
,mod_privileges
,mod_proxy_html
,mod_session_crypto
,mod_socache_dc
,mod_ssl
,mod_xml2enc
やや意外な気がしなくもありません. あとでまた考えてみたいと思います.
few の場合
--enable-mods-shared=few
の場合はどうでしょうか. 実際には, 含まれないモジュールが 90 個もありました. 逆に言えば, 以下の 21 個のモジュールが含まれていたということです.
mod_access_compat
,mod_alias
,mod_auth_basic
,mod_authn_core
,mod_authn_file
,mod_authz_core
,mod_authz_groupfile
,mod_authz_host
,mod_authz_user
,mod_autoindex
,mod_dir
,mod_env
,mod_filter
,mod_headers
,mod_log_config
,mod_mime
,mod_reqtimeout
,mod_setenvif
,mod_status
,mod_unixd
,mod_version
要は, これらが最も基本的なモジュールたちである, ということになるのでしょうか.
none の場合
--enable-mods-shared=none
の場合はどうでしょうか. まったく含まれないかと思いきや, 実際には most
の場合とまったく同じでした. やや不可解です. ひょっとしたら, none
というキーワードは, 有効に機能していなくて, その結果デフォルトの most
が暗黙的に指定されたとみなされたのでしょうか. 何かを勘違いしているのかもしれませんが, ちょっとよくわかりません.
reallyall の場合 (再)
先ほど, reallyall
の場合は, 含まれないモジュールが 12 個もありました, と書きました. ところが, それとは逆に, Module Index に記載のないモジュールが, 9 個ほど含まれていました.
mod_bucketeer
,mod_case_filter
,mod_case_filter_in
,mod_example_hooks
,mod_example_ipc
,mod_optional_fn_export
,mod_optional_fn_import
,mod_optional_hook_export
,mod_optional_hook_import
うち, mod_example_hooks
と mod_example_ipc
の 2 個については, mod_example
の例として含まれているのだと考えることができるかもしれません. また, 残りの 7 個については, 2.4 系のオンラインドキュメントには見当たらないのですが, 2.2 系の configure - Configure the source tree のほうに, いずれも Modules for developers
として紹介されていました. ひょっとしたら, これらは DSO として扱うのではなく, 本来は個別に静的に, たとえば --enable-bucketeer
などと指定して利用するべきものなのかもしれません. まあ, 試してはいないのですが.
その他のモジュール
reallyall
にすら含まれないモジュールを含めたい場合は, どうするのがよいでしょうか. おそらくは, たとえば mod_XXX
というモジュールであれば, 次のようなオプションを指定するのが基本になるのかなと思います.
--enable-mods-shared='reallyall XXX' --with-XXX
--with-XXX
を付加することにより, Apache HTTP Server のビルドの過程でおこなわれる Apache Portable Runtime (apr
と apr-util
) が, 必要に応じていろいろよきに計らってくれるものらしいです. そこで, いくつか試しかけてみましたが,
-
mod_authnz_ldap
とmod_ldap
の場合LDAP クライアントの共有ライブラリやヘッダファイルがあらかじめインストールされていないといけないらしく,
configure
スクリプトが途中でエラーとなる. -
mod_deflate
の場合zlib
があらかじめインストールされていないといけないらしく,configure
スクリプトが途中でエラーとなる. -
mod_proxy_html
の場合zlib
やlibxml2
があらかじめインストールされていないといけないらしく,configure
スクリプトが途中でエラーとなる. -
mod_ssl
の場合OpenSSL 0.9.8 以降が (ヘッダファイル等も含めて?) あらかじめインストールされていないといけないらしく,
configure
スクリプトが途中でエラーとなる.
という具合で, いずれも, 外部環境に依存しているように見受けられます. なるほど, だからこそ, all
や reallyall
には含まずに, 個別に取捨選択するようになっているのかもしれません.
まとめ
以上です. おしまい.
No comments:
Post a Comment