Subversion "SVNParentPath" und pro Repository Konfigurationen mischen?

9

Bei einer typischen Subversion / Apache-Konfiguration mit SVNParentPath mit folgenden Repositorys /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>

Gibt es eine Möglichkeit, diese Konfiguration für bestimmte Repositorys zu überschreiben, ohne sie auf einem anderen Pfad hosten zu müssen? Das heißt, gibt es eine Möglichkeit, einen LocationBlock wie diesen hinzuzufügen ...

<Location /svn/my_special_repo>
    SVNPath /srv/source/svn/repos/my_special_repo
    AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz
</Location>

... und hat es die im Block angegebene Konfiguration für überschrieben ? Meine Versuche, dies mit der obigen Konfiguration zu tun, sind auf seltsame und nicht hilfreiche Fehler im Apache-Fehlerprotokoll gestoßen, wie z.Location/svn

[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

All dies scheint mod_dav_svns Art zu sein, mir zu sagen, dass ich nicht tun kann, was ich versuche zu tun. Ich bin offen für Lösungen oder Alternativen!

EDIT : Nun, ich kann sehen, dass diese Frage bei der Leserschaft viel Aufregung ausgelöst hat. Für den Datensatz kann ich am Ende Konfigurationen pro Repository für alle vorhandenen Repositorys generieren und dann die SVNParentPathbasierte Konfiguration aufgeben . Die Apache-Konfiguration pro Repo ist minimal, insbesondere bei Verwendung von mod_macro . Der schwierige Teil wird darin bestehen, die globale Authz-Datei aufzuteilen. Wenn Sie dies bereits getan haben, sind Tipps willkommen.

Larsks
quelle
Ich habe das gleiche Problem und habe es mit mod_macro gelöst. Vielen Dank!!! (Es scheint ein alter Fehler in Apache oder Subversion zu sein.)
Achimnol

Antworten:

4

Ich hasse es, meine eigene Frage dort in der Liste der unbeantworteten Fragen zu sehen. Deshalb haben wir Folgendes getan:

  • In unserer Hauptserverkonfiguration haben wir:

      <Location /svn/>
            SVNParentPath /srv/source/svn/repos
      </Location>
    
  • Wir haben Folgendes übernommen, mod_macroum dieses Verhalten für neue Repositorys zu replizieren:

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

    Dadurch RewriteRulekann die Repository-Konfiguration die <Location /svn/>in der Hauptkonfiguration überschreiben , die sonst der Anforderung entsprechen würde.

Mit dieser Funktion ist es relativ einfach, die Authentifizierungs- und Autorisierungskonfiguration pro Repository (anstelle der htpasswdhier verwendeten globalen Datei) zu übernehmen.

Larsks
quelle
mod_macro rockt
vinnyjames