Смешивать Subversion «SVNParentPath» и конфигурации для каждого репозитория?

9

Учитывая типичную конфигурацию Subversion / Apache, использующую SVNParentPath, с репозиториями, расположенными под /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. Если вы сделали это раньше, советы приветствуются.

larsks
источник
У меня та же проблема, и я решил ее с помощью mod_macro. Спасибо!!! (Кажется, это старая ошибка в Apache или Subversion.)
Achimnol

Ответы:

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файла, используемого здесь).

larsks
источник
mod_macro пород
vinnyjames