pkg audit で subversionのバージョンを上げたら、mod_dav_svnがapacheに読み込まれなくなって、apacheが起動しなくなったので、原因と対策について。
環境
- FreeBSD 9(10でも同じはず)
- apache22 2.2.29_2
- subversion 1.8.13
現象
apacheを起動しようとすると、以下のエラーが出る。
Performing sanity check on apache22 configuration:
Syntax error on line 309 of /usr/local/etc/apache22/ssl.conf:
Unknown DAV provider: svn
mod_dav_svnがloadされないせいだと思われるので、httpd.confにLoadModuleを追加したところ、以下のエラーに変化。
Performing sanity check on apache22 configuration:
Syntax error on line 312 of /usr/local/etc/apache22/ssl.conf:
Invalid command 'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included in the server configuration
原因
/usr/local/etc/apache22/modules.d と言うディレクトリに、220_subversion.conf と 220_subversion.conf.sample と言うファイルができていた。
中身を見てみると、mod_dav_svn関連のLoadModuleと設定のサンプルが書いてある(が、全てコメントアウト)
しかし、httpd.confからはこのファイルを読み込んでいない。
別のホストでapache22ではなくapache24をインストールしているものがあったので、そこのhttpd.confを確認してみたところ、LoadModuleの並んだ後に以下の行を発見。
# Third party modules
IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf
どうも、今までは/usr/local/etc/apacheXX/Includes にあるファイルを読むようにしていたのを、/usr/local/etc/apacheXX/modules.d も読むようにしたようだ。
この辺の話は、/usr/ports/UPDATINGに書かれるべきだと思うんだけど、関連しそうなのは以下くらいしか見つけられなかった。
20140713:
AFFECTS: users of www/apache22
AUTHOR: ohauer@FreeBSD.org
The default version was changed from www/apache22 to www/apache24,
pre-build apache modules and web applications will also reflect this!
In case ports are build by yourself and apache22 is required
use the following command to keep apache22 as default.
# echo "DEFAULT_VERSIONS+=apache=2.2" >> /etc/make.conf
make.conf修正してないけど、それが原因?
対策
先ほどのapache24の設定をapache22のhttpd.confに追加すると、以下のエラーが出る。
Performing sanity check on apache22 configuration:
Syntax error on line 302 of /usr/local/etc/apache22/httpd.conf:
Invalid command 'IncludeOptional', perhaps misspelled or defined by a module not included in the server configuration
調べてみると、IncludeOptionalは apache 2.3.6 以降らしいので、Includeに修正する。
# Third party modules
Include etc/apache22/modules.d/[0-9][0-9][0-9]_*.conf
ちなみに、IncludeとIncludeOptionalの違いは、ワイルドカードにマッチするファイルが一つも存在しなかった場合に、IncludeOptionalの方はエラーにしないそうだ。今回はファイルが存在していることがわかっているので、Includeで問題ない。
後は、modules.dのファイルのコメントを外して、LoadModuleを有効にする。
LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so
LoadModule dontdothat_module libexec/apache22/mod_dontdothat.so
いい加減apache24に上げないとなあ・・・。