Tracをインストールしようとしていたのだけれど、Subversionの設定絡みで頭がこんがらがってきた。 特にSubversionの認証がよく分からない。svnserve.confに書いたり、httpd.confのAuthzSVNAccessFileに書いたりとよく分からなくなってしまった。 基本に戻ってSubversionのアーキテクチャを再確認してみる。 http://subversion.bluegate.org/doc/ch01s04.html 上のURLの末尾のファイル名は今後変わるかも。tigrisのSubversionページ(http://subversion.tigris.org/)のHelpで"Subversion Book"リンクをクリックすれば大元のページに行けます。 で、上記URL掲載の図を見るとSVNクライアントがリポジトリシステムにアクセスするルートが3種類あることが分かる。 + ローカルファイルシステム経由 + "svn://"によるsvnserver経由 + WebDAV経由 ここで「認証」が必要になってくるのはどこかというと + svnserver経由 + WebDAV経由 まずsvnserver経由だけれど、ソースを見るとやっぱりというか何というか、svnserve/server.c の中でauthz(パスペース認証)の読み込みとチェックをしている箇所があった。ユーザ認証とパスベースの許可についてはsvnserver側で勝手に設定ファイルを読み込んでくれているみたい。 次にWebDAV経由。こちらは mod_authz_svn/mod_authz_svn.c の中で AuthzSVNAccessFile ディレクティブ値を取得し、何段か関数を経由してsvn_repos_authz_check_access() を呼んでいる。パラメータをざっと見ると、ユーザ名がrequest_rec構造体のuserメンバを使っている。これはApacheのユーザ認証をパスしたユーザ、つまりBasicなりDigest認証なりをかけてパスしたユーザ名が入る。 まとめるとこんな感じ? | | svnserve経由 | WebDAV経由 |H | インターフェイス | svnserve/{main,serve.c} | mod_dav_svn/mod_dav_svn.c | | ユーザ情報 | svnserver.conf経由 | ApacheによるBasic/Digestなど認証経由 | | (同)取得モジュール | svnserve/{main,serve.c} | (Apacheモジュール) | | パスベース認証情報 | svnserver.conf経由 | mod_authz_svnのAuthzSVNAccessFileディレクティブ経由 | | (同)取得モジュール | svnserve/{main,serve.c} | mod_authz_svn/mod_authz_svn.c | ユーザ情報とかパスベース認証情報が、アーキテクチャ上の最終段、リポジトリシステムではなくて、クライアントとの接続インターフェイス部分で操作している為に WebDAV経由/svnserve経由でそれぞれ設定方法が分かれてしまったのが混乱の原因だったのかも。 WebDAV経由だとsvnserver.confが使われないのが最初分かりづらかったんだけど、まぁ確かにsvnserver.confはsvnserver用の設定ファイルなんだから、WebDAV経由は関係ないよな、と納得。 最後に当然の前提だったのだけれど、SubversionのコンパイルにApacheのソースが必要というのは、APRを使うのもあるけど、mod_dav_svnとかmod_authz_svnというApacheモジュールのソースがSubversionのソースツリーに最初から含まれているのもあるのかも。Win用のバイナリとかはApache2.0用/2.2用と二つに分かれてて、なんでかなぁと思ったのだけれどApacheライブラリやモジュールの仕様に引きずられるので、そういった事情なのだろう。