Змішування субверсії "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, який говорить мені, що я не можу робити те, що намагаюся зробити. Я відкритий для рішень чи альтернатив!

EDIT : Ну, я можу бачити, що це питання викликало чимало хвилювання серед читачів. Для запису те, що я можу в кінцевому підсумку зробити, це генерувати конфігурації для кожного репозиторію для всіх наших існуючих сховищ, а потім відмовитися від SVNParentPathбазованої конфігурації. Конфігурація Apache per-repo мінімальна, особливо використовуючи щось на зразок mod_macro ; важка частина буде розщеплювати глобальний файл authz. Якщо ви робили це раніше, вдячні поради.


У мене така ж проблема, і я вирішив її за допомогою 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файлу, який використовується тут).


mod_macro скелі
vinnyjames
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.