Ce pense-bête a été fait à partir des deux articles suivants:
http://blog.fabroce.info/post/2006/11/19/Installer-un-depot-subversion-sur-une-Debian
http://blog.utopiaz.org/2008/04/mise-en-place-svn-et-virtual-hosts-apache/
Son but est de mettre en place un serveur subversion sur une Debian permettant la gestion de plusieurs dépôts avec une gestion des droits différente selon les dépôts.
Installation des packages:
> apt-get install subversion subversion-tools libapache2-svn
Création du répertoire subversion:
> mkdir /home/svn > chmod 770 /home/svn
Création des différents dépôts (gestion multi-projets)
> svnadmin create /home/svn/projet_1 > svnadmin create /home/svn/projet_2
On crée un fichier qui contient les utilisateurs / mots de passe qui auront accès au dépôt.
> touch /home/svn/.passwd
Ce fichier fonctionne pour la sécurisation d’un répertoire par htaccess. Par exemple:
toto:$1$uH5.fe0.$4aTxZL9kZTHrjyemyJCBL1 hubert:$1$6I5.VG5.$rOl1m.o6bcZLhkKUZStWf/
On crée un fichier qui va contenir tous les droits d’accès des utilisateurs aux différents projets
> vi /home/svn/.authz
La syntaxe de ce fichier n’est pas extrêment compliquée. Elle va ressembler à cela:
[nom_du_depot:/répertoire/dans/depot] nom_utilisateur = droits_accès
Soyons bien clairs sur la syntaxe entre crochet: le nom du dépôt correspond au nom du répertoire créé grâce à svnadmin create. Donc pour nous ce sera soit projet_1, soit projet_2. Le répertoire qui suit les deux points est le répertoire relatif au dépôt. Voici quelques exemples expliquant ce point:
# correspond au répertoire /home/svn/projet_1/ [projet_1:/]
#correspond au répertoire /home/svn/projet_1/images/ [projet_1:/images]
Prenons un exemple avec ce que nous avons fait plus haut:
[projet_1:/] toto = rw hubert = r
Dans cet exemple, l’utilisateur toto peut lire et écrire dans le dépôt projet_1. Par contre hubert ne peut que lire ce dépôt. Voici d’autres exemples:
[projet_1:/] toto = rw hubert = r [projet_1:/readonly] toto = r [projet_2:/] toto = r hubert =
Dans cet exemple, on a rajouté des paramètres importants:
- toto peut lire et écrire dans le dépôt projet_1 mais ne peut que lire le répertoire readonly du projet_1
- hubert ne peut que lire le projet_1
- toto peut seulement lire le projet_2
- hubert n’a pas accès au projet_2
Il est possible d’aller plus loin et de traiter les droits d’accès pour plusieurs utilisateurs en même temps:
[/] * = r
Donne droit de lecture à tous les utilisateurs sur tous les dépôts. On peut également créer des groupes d’utilisateurs:
[groups] mon-groupe-1 = toto, hubert mon-groupe-2 = pierre, paul, jacques [projet_1:/home/svn/projet_1] @mon-groupe-1 = r @mon-groupe-2 =
On voir que l’on fait appel à un groupe et non à un utilisateur à l’aide du @ devant le nom du groupe. Il est également possible de faire appel aux groupes à l’intérieur de la définition des groupes:
[groups] mon-groupe-1 = toto, hubert mon-groupe-2 = pierre, paul, jacques tous-les-groupes = @mon-groupe-1, @mon-groupe-2
Enfin, à titre informatif, on peut également utiliser des références à des utilisateurs LDAP ou des certificats SSL et utiliser des alias. Personnellement je n’en ai pas eu besoin, donc je vais me contenter de copier bêtement les exemples que j’ai vu ici: http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html. Si vous avez des infos complémentaires à ajouter, n’hésitez pas.
[aliases] harry = CN=Harold Hacker,OU=Engineers,DC=red-bean,DC=com sally = CN=Sally Swatterbug,OU=Engineers,DC=red-bean,DC=com joe = CN=Gerald I. Joseph,OU=Engineers,DC=red-bean,DC=com [groups] calc-developers = &harry, &sally, &joe paint-developers = &frank, &sally, &jane everyone = @calc-developers, @paint-developers
On crée un répertoire pour les logs
> mkdir /home/svn/logs
On donne ensuite les droits à Apache
> chown -R www-data:www-data /home/svn
Configuration d’Apache
La solution classique consiste à configurer le fichier /etc/apache2/mods-available/dav_svn.conf. Par défaut tout est commenté dans ce fichier. Il va falloir décommenter, et configurer pour activer l’accès au dépôt SVN. Voici une configuration standard qui permet d’accéder au dépôt configuré plus haut:
<Location /svn> DAV svn SVNParentPath /home/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /home/svn/.passwd AuthzSVNAccessFile /home/svn/.authz Require valid-user </Location>
Sauvegarder et relancer Apache.
Pour vérifier que tout fonctionne bien, il suffit d’aller avec votre navigateur à l’adresse:
http://IP_serveur/svn/projet_1
Si tout se passe bien, une identification vous est demandée, puis vous devriez voir une page avec marqué « Revision 0 ».
Cette méthode fonctionne parfaitement, mais on peut faire mieux. Si vous gérez des noms de domaine sur votre serveur, vous pouvez tout à fait utiliser les VirtualHost pour gérer les adresses d’accès aux dépôts:
<VirtualHost *> ServerName svn.mondomaine.com <Location /> DAV svn SVNParentPath /home/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /home/svn/.passwd AuthzSVNAccessFile /home/svn/.authz Require valid-user </Location> CustomLog /home/svn/logs/access.log combined ErrorLog /home/svn/logs/error.log </VirtualHost>
Cette méthode présente plusieurs avantages:
- Utilisation d’un sous-domaine, ce qui simplifie l’url
- Possibilité d’utiliser plusieurs noms de domaine pour le même dépôt
- Customisation des logs
- Possibilité de créer un VirtualHost sécurisé par SSL
Mots-clefs : debian, installation, linux, subversion, svn
Il ne faut pas oublier dans le module dav_svn.conf de décommenter: « DAV svn »