Biorąc pod uwagę typową konfigurację Subversion / Apache przy użyciu SVNParentPath, z repozytoriami hostowanymi w /svn/
następujący sposób:
<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>
Czy istnieje sposób na zastąpienie tej konfiguracji dla określonych repozytoriów bez konieczności hostowania ich na innej ścieżce? To znaczy, czy jest jakiś sposób, aby dodać taki Location
blok ...
<Location /svn/my_special_repo>
SVNPath /srv/source/svn/repos/my_special_repo
AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz
</Location>
... i czy zastępuje konfigurację podaną w
Location
bloku dla /svn
? Moje próby zrobienia tego z powyższą konfiguracją spotkały się z dziwnymi i niepomocnymi błędami w dzienniku błędów Apache, takimi jak:
[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
Wszystko to wydaje się być sposobem, w jaki mod_dav_svn mówi mi, że nie mogę zrobić tego, co próbuję. Jestem otwarty na rozwiązania lub alternatywy!
EDYCJA : Widzę, że to pytanie wywołało wiele emocji wśród czytelników. Dla przypomnienia, generowanie konfiguracji na repozytorium dla wszystkich naszych istniejących repozytoriów, a następnie rezygnacja z SVNParentPath
konfiguracji bazowej. Konfiguracja Apache dla repo jest minimalna, szczególnie przy użyciu czegoś takiego jak mod_macro ; trudną częścią będzie podział globalnego pliku authz. Jeśli zrobiłeś to wcześniej, wskazówki są mile widziane.
Odpowiedzi:
Nienawidzę patrzeć, jak moje własne pytanie leniuchuje tam na liście pytań bez odpowiedzi, więc oto co zrobiliśmy:
W naszej głównej konfiguracji serwera mamy:
Przyjęliśmy następujące zasady w
mod_macro
celu zreplikowania tego zachowania dla nowych repozytoriów:RewriteRule
Pozwala repozytorium konfiguracji do przesłonić<Location /svn/>
w głównej konfiguracji, które inaczej byłoby dopasować żądanie.Po wprowadzeniu tej konfiguracji stosunkowo łatwo można zaimplementować konfigurację uwierzytelniania i autoryzacji dla poszczególnych repozytoriów (zamiast
htpasswd
wykorzystywanego tutaj pliku globalnego ).źródło