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


9

给定使用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文件。如果您之前已完成此操作,将不胜感激。


我有同样的问题,并通过使用mod_macro解决了。谢谢!!!(这似乎是Apache或Subversion中的老错误。)
Achimnol 2011年

Answers:


4

我不希望自己的问题在未回答的问题列表中出现,因此,我们做了以下操作:

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

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


mod_macro岩石
vinnyjames,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.