Bonjour à tous,
Je suis un peu coincé dans ma configuration d'Apache, donc c'était une bonne occasion pour s'inscrire sur developpez
Voici la config actuelle :
- un serveur sous Debian 8 avec Apache pré-installé (DocumentRoot = /var/www/html)
- un répertoire /var/svn servant de racine à des dépôts créés avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part svnadmin create- les modules authz_svn et dav_svn d'Apache activés
- Apache configuré pour accéder à mes dépôts SVN avec l'URL http://monserveur/svn/ (comme dans ce tuto)
- un WebSVN installé dans /var/www/websvn et accessible sur http://monserveur/websvn/
- un fichier de configuration Apache spécifique à WebSVN, activé avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part a2ensite websvn- un accès restreint par LDAP, à la fois sur le serveur SVN et sur WebSVN (modules ldap et authnz_ldap activés)
Le contenu du fichier /etc/apache2/mods-enable/dav_svn.conf :
Le contenu du fichier /etc/apache2/sites-enabled/websvn.conf :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <Location /svn> # Enable the SVN access through Apache (module dav_svn) DAV svn # Set the parent path of all the repositories. You need either SVNPath and SVNParentPath, but not both. SVNParentPath /var/svn # To allow Apache to list the available repositories, use the following line: SVNListParentPath On # LDAP authentication AuthType Basic AuthBasicProvider ldap # Warning: AuthLDAPAuthoritative is now deprecated AuthName "Subversion (SVN) server" # LDAP request URL # Format: scheme://host:port/basedn?attribute?scope?filter AuthLDAPURL ldap://myldapserver/cn=users,dc=MyBase?uid?sub?(objectClass=*) Require valid-user </Location>
Tout ceci fonctionne très bien puisque j'ai accès à mes dépôts comme je le souhaite, à travers un client SVN comme à travers WebSVN.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Alias /websvn "/var/www/websvn" <Directory "/var/www/websvn"> # LDAP authentication AuthType Basic AuthBasicProvider ldap # Warning: AuthLDAPAuthoritative is now deprecated AuthName "WebSVN" # LDAP request URL # Format: scheme://host:port/basedn?attribute?scope?filter AuthLDAPURL ldap://myldapserver/cn=users,dc=MyBase?uid?sub?(objectClass=*) Require valid-user </Directory>
Voici ce que je cherche à faire :
- pouvoir accéder à mes dépôts par une URL de type http://monserveur/monDepot, et non plus http://monserveur/svn/monDepot
- pouvoir continuer à accéder à WebSVN par http://monserveur/websvn/
- pouvoir continuer à accéder à http://monserveur/svn/ (optionnel)
Et voici tout ce que j'ai essayé, mais qui ne donne pas le résultat attendu :
- Remplacer <Location /svn> par <Location /> dans dav_svn.conf => Ok pour SVN (navigateur web + TortoiseSVN), mais renvoie une erreur "Could not open the requested SVN filesystem" lorsque je cherche à accéder à /websvn. Normal puisque http://monserveur/websvn/ n'est pas un dépôt SVN et qu'Apache pense que http://monserveur/ est la racine de dépôts SVN...
- Utiliser <Location /> dans dav_svn.conf et <Location /websvn>Dav Off</Location> dans websvn.conf => même erreur que précédemment
- Remplacer <Location /svn> par <LocationMatch "^/(?!websvn)"> dans dav_svn.conf => Renvoie une erreur 403 "You don't have permission to access / on this server." quand je cherche à naviguer vers http://monserveur/, et une erreur "La connexion a été réinitialisée" quand je cherche à naviguer vers http://monserveur/svn/. L'accès à WebSVN fonctionne cependant correctement.
- Insérer une directive 'Alias / /svn' dans dav_svn.conf => Les accès à / et /websvn renvoie 403, l'accès à /svn fonctionne.
- Introduire un fichier de site apache_svn.conf ayant pour contenu une directive mod_rewrite :
=> Cette solution fonctionne très bien depuis un navigateur web (/ , /svn et /websvn) mais ne satisfait pas au protocole SVN puisque j'obtiens une erreur "http://monserveur/monDepot isn't in the same repository as http://monserveur/svn/monDepot".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <Directory "/var/www/html"> RewriteEngine on # no need to have a particular condition, since we assume there is nothing important in /var/www/html RewriteCond $1 !^svn RewriteRule "^(.*)$" "svn/$1" </Directory>
Mon problème est clairement que l'instruction <Location /> ne fait pas qu'agir sur la racine du serveur web, mais impacte tous les sous-répertoires.
J'ai trouvé un fil de discussion qui traite de ce même problème, mais la solution trouvée ne me convient pas : il faut reconfigurer Apache pour chaque nouveau dépôt. D'ailleurs je n'arrive pas à la faire fonctionner...
A mon sens la solution la plus proche de ce que je cherche est le LocationMatch, mais impossible de comprendre pourquoi j'ai une 403 en accèdant à la racine http://monserveur/.
Les logs d'erreur en mode debug me donnent :
- accès à / =>
Bon à la limite c'est tolérable puisque la racine n'est pas un dépôt SVN. Mais si je descend dans http://monserveur/monDepot, j'obtiens =>
Code : Sélectionner tout - Visualiser dans une fenêtre à part [:error] [pid 8904] [client 192.168.2.93:55483] The URI does not contain the name of a repository. [403, #190001]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 apache2: /build/subversion-mUGMjz/subversion-1.8.10/subversion/libsvn_subr/dirent_uri.c:2546: svn_fspath__join: Assertion `svn_fspath__is_canonical(fspath)' failed. [core:notice] [pid 9052] AH00052: child pid 9057 exit signal Aborted (6)- accès à /svn =>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 apache2: /build/subversion-mUGMjz/subversion-1.8.10/subversion/libsvn_subr/dirent_uri.c:2546: svn_fspath__join: Assertion `svn_fspath__is_canonical(fspath)' failed. [core:notice] [pid 8899] AH00052: child pid 8903 exit signal Aborted (6)
Bref, avec tout ça je ne sais plus quoi faire. Peut-être qu'un œil extérieur peut apporter une idée brillante !
Merci de votre aide.
PS : Pour aller encore plus loin, idéalement un navigateur web accédant à http://monserveur/ tomberait sur WebSVN, mais un client SVN classique réussirait à interagir avec /var/svn .
Partager