リンクするaprのバージョンを0.9xから1.2xに
WebDAV(=Apache)でリポジトリにアクセスすると、500が返ってきてログにも何も残らないと言う現象に遭遇する。で、色々調べていくうちのSubversionとApacheのaprのバージョンの不整合が原因と言う事が分かった。
なお、Apache HTTP Server 2.0系で利用されているAPR 0.9系と、Apache HTTP Server 2.2系で利用されているAPR 1.2系では、互換性がないことに注意されたい。
http://builder.japan.zdnet.com/news/story/0,3800079086,20361867,00.htm
トラブルシューティングの手順を残しておく。
まず、Apacheのログに何も残っていないので、telnetから直接WebDAVのリクエストを投げる。参考:Subversionによるバージョン管理 (2/3):Apache 2.0でWebDAV(後編) - @IT
$ telnet localhost 80 OPTIONS /svn/ HTTP/1.1 Host: hostname Authorization: Basic ===============
すると、xmlでエラーの詳細が返ってくる。
HTTP/1.1 500 Internal Server Error Date: Fri, 08 Feb 2008 02:43:28 GMT Server: Apache Content-Length: 290 Connection: close Content-Type: text/xml; charset="utf-8" <?xml version="1.0" encoding="utf-8"?> <D:error xmlns:D="DAV:" xmlns:m="http://apache.org/dav/xmlns" xmlns:C="svn:"> <C:error/> <m:human-readable errcode="22"> Can't set position pointer in file '/path/to/repos/db/revs/2406': Invalid argument </m:human-readable> </D:error> Connection closed by foreign host.
ポイントは以下。
Can't set position pointer in file '/path/to/repos/db/revs/2406': Invalid argument
これでググる。http://saikyoline.jp/wiki/index.php?%A5%E1%A5%E2%2FWebDAV%A4%C7Subversionでaprのバージョンが原因と書いてある。
Subversionはそのままだと同梱のAPR(0.9.7)を使ってしまうので、Apache 2.2.0に同梱のAPR(1.0)を使わせるため「--with-apr」と「--with-apr-util」を指定する。
指定しなくてもコンパイルもできてApacheもしっかり起動するが、アクセスするときにCan't set position pointer in file '/var/lib/svn-repos/db/revs/0': Invalid argument
http://saikyoline.jp/wiki/index.php?%A5%E1%A5%E2%2FWebDAV%A4%C7Subversion
みたいなこと言われてハマる
aprのバージョンを確認するにはlddを使う。まずはSubversion(mod_dav_svn)。
$ ldd /usr/local/apache2/modules/mod_dav_svn.so libaprutil-0.so.0 => /usr/lib/libaprutil-0.so.0 (0x008f9000) libapr-0.so.0 => /usr/lib/libapr-0.so.0 (0x00270000) (snip) $ ll /usr/lib/libapr*.0 lrwxrwxrwx 1 root root 18 1月 25 14:57 /usr/lib/libapr-0.so.0 -> libapr-0.so.0.9.17 lrwxrwxrwx 1 root root 22 1月 25 14:57 /usr/lib/libaprutil-0.so.0 -> libaprutil-0.so.0.9.17
恐らく0.9.17。次にApache。
$ ldd /usr/local/apache2/bin/httpd libaprutil-1.so.0 => /usr/local/apache228/lib/libaprutil-1.so.0 (0x0078a000) libapr-1.so.0 => /usr/local/apache228/lib/libapr-1.so.0 (0x00b5d000) $ ll /usr/local/apache228/lib/libapr*.0 lrwxrwxrwx 1 root root 18 2月 6 16:03 /usr/local/apache228/lib/libapr-1.so.0 -> libapr-1.so.0.2.12 lrwxrwxrwx 1 root root 22 2月 6 16:03 /usr/local/apache228/lib/libaprutil-1.so.0 -> libaprutil-1.so.0.2.12
恐らく1.2.12。確かにバージョンが違う。
と言うわけで、再々度Subversionをコンパイル。この際なので色々オプションを調べて自分なりのconfigureを作る事に。
./configure \ --with-apr=/usr/local/apache2 \ --with-apr-util=/usr/local/apache2 \ --with-apxs=/usr/local/apache2/bin/apxs \ --with-swig=/usr/local/bin/swig \ --with-neon=/usr/local/ \ PERL=/usr/local/bin/perl \ PYTHON=/usr/local/bin/python \ RUBY=/usr/local/bin/ruby \ --with-ssl \ --without-berkeley-db
これでインストールしたらWebDAVで無事アクセスできた。いい加減これで全部かなー。