Miscelare Subversion “SVNParentPath” e le configurazioni per repository?


9

Data una tipica configurazione Subversion / Apache usando SVNParentPath, con i repository ospitati in /svn/questo modo:

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

C'è un modo per sovrascrivere questa configurazione per repository specifici senza doverli ospitare in un percorso diverso? Cioè, c'è un modo in cui posso aggiungere un Locationblocco come questo ...

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

... e farlo ignorare la configurazione fornito nel Locationblocco per /svn? I miei tentativi di farlo con la configurazione di cui sopra sono stati riscontrati errori strani e inutili nel registro degli errori di Apache, come:

[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

Tutto questo sembra essere il modo di mod_dav_svn di dirmi che non posso fare quello che sto cercando di fare. Sono aperto a soluzioni o alternative!

EDIT : Beh, posso vedere che questa domanda ha generato molta eccitazione tra i lettori. Per la cronaca, ciò che potrei finire è generare configurazioni per repository per tutti i nostri repository esistenti e quindi abbandonare la SVNParentPathconfigurazione basata. La configurazione di Apache per repo è minima, specialmente usando qualcosa come mod_macro ; la parte difficile sarà dividere il file authz globale. Se l'hai già fatto, i suggerimenti sono apprezzati.


Ho lo stesso problema e l'ho risolto usando mod_macro. Grazie!!! (Sembra essere un vecchio bug in Apache o Subversion.)
Achimnol

Risposte:


4

Odio vedere la mia domanda languire lì nell'elenco delle domande senza risposta, quindi ecco cosa abbiamo fatto:

  • Nella nostra configurazione del server principale, abbiamo:

      <Location /svn/>
            SVNParentPath /srv/source/svn/repos
      </Location>
    
  • Abbiamo adottato quanto segue mod_macroper replicare questo comportamento per i nuovi repository:

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

    Ciò RewriteRuleconsente alla configurazione del repository di sovrascrivere <Location /svn/>nella configurazione principale che altrimenti corrisponderebbe alla richiesta.

Con questo in atto, diventa relativamente facile adottare l'autenticazione per repository e la configurazione dell'autorizzazione (invece del htpasswdfile globale usato qui).


mod_macro rocks
vinnyjames
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.