web-dev-qa-db-ja.com

Subversionの「SVNParentPath」とリポジトリごとの構成を混在させていますか?

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/svnLocationブロックで提供される構成?上記の構成でこれを実行しようとすると、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ファイルを分割することです。以前にこれを行ったことがある場合は、ヒントをいただければ幸いです。

9
larsks

自分の質問が未回答の質問リストで苦しんでいるのを見るのは嫌なので、次のようにしました。

  • メインサーバーの構成には、次のものがあります。

      <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ファイルの代わりに)リポジトリごとの認証および承認構成を比較的簡単に採用できるようになります。

4
larsks