混合 Subversion“SVNParentPath”和每个存储库配置?

混合 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>

...并拥有它覆盖Location块中提供的配置 /svn?我尝试使用上述配置执行此操作,但在 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 告诉我我无法完成我想做的事情。我愿意接受解决方案或替代方案!

编辑:好吧,我可以看到这个问题在读者中引起了很大的兴奋。为了记录,我最终可能会为我们现有的所有存储库生成每个存储库的配置,然后放弃SVNParentPath基于配置。每个存储库的 Apache 配置是最小的,尤其是使用类似mod_macro;最难的部分是拆分全局 authz 文件。如果您之前做过这件事,欢迎提供提示。

答案1

我不想看到我自己的问题被搁置在未解答问题列表中,因此我们采取了以下措施:

  • 在我们的主服务器配置中,我们有:

      <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这里使用的全局文件)就变得相对容易。

相关内容