SVNParentPathを使用した典型的なSubversion/Apache構成が与えられ、リポジトリは次のように/svn/
でホストされます。
<Location /svn>
DAV svn
SVNParentPath /srv/source/svn/repos
SVNReposName "Subversion Repository"
AuthzSVNAccessFile /srv/source/svn/authz
Satisfy Any
AuthType Basic
AuthBasicProvider file
AuthName "Subversion Repository"
AuthUserFile /srv/source/svn/htpasswd
Require valid-user
</Location>
特定のリポジトリのこの構成をオーバーライドする方法はありますかなし別のパスでそれらをホストする必要はありませんか?つまり、このようなLocation
ブロックを追加する方法はありますか...
<Location /svn/my_special_repo>
SVNPath /srv/source/svn/repos/my_special_repo
AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz
</Location>
...そしてそれを持っているoverride/svn
のLocation
ブロックで提供される構成?上記の構成でこれを実行しようとすると、Apacheエラーログに次のような奇妙で役に立たないエラーが表示されます。
[Wed Feb 02 11:28:35 2011] [error] [client 10.10.209.120]
(20014)Internal error: Can't open file '/srv/source/svn/repos/svn/format':
No such file or directory
これはすべて、私がやろうとしていることを私ができないことを私に伝えるmod_dav_svnの方法のようです。私は解決策や代替案を受け入れています!
[〜#〜] edit [〜#〜]:ええと、この質問が読者の間で多くの興奮を生み出していることがわかります。ちなみに、私がやることになるかもしれないのは、既存のすべてのリポジトリーのリポジトリーごとの構成を生成してから、SVNParentPath
ベースの構成を破棄することです。特に mod_macro ;のようなものを使用すると、レポごとのApache構成は最小限になります。難しい部分は、グローバルauthzファイルを分割することです。以前にこれを行ったことがある場合は、ヒントをいただければ幸いです。
自分の質問が未回答の質問リストで苦しんでいるのを見るのは嫌なので、次のようにしました。
メインサーバーの構成には、次のものがあります。
<Location /svn/>
SVNParentPath /srv/source/svn/repos
</Location>
この動作を新しいリポジトリに複製するために、次のmod_macro
を採用しました。
<Macro LegacySubversionRepo $name>
# Override SVNParentPath block in main vhost config.
RewriteRule ^/svn/$name /repo/$name [PT]
<Location /repo/$name>
Order deny,allow
Allow from all
Use LdapAuth \
"$name svn repository" \
/srv/source/svn/htpasswd
DAV svn
SVNPath /srv/source/svn/repos/$name
AuthzSVNAccessFile /srv/source/svn/authz
SVNAutoversioning On
Satisfy Any
</Location>
</Macro>
RewriteRule
を使用すると、リポジトリ構成で、メイン構成の<Location /svn/>
をオーバーライドできます。
これを適切に行うと、(ここで使用されているグローバルhtpasswd
ファイルの代わりに)リポジトリごとの認証および承認構成を比較的簡単に採用できるようになります。