Installer un serveur SVN sur Debian

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



Un commentaire sur “Installer un serveur SVN sur Debian”

  1. themis dit :

    Il ne faut pas oublier dans le module dav_svn.conf de décommenter: « DAV svn »

Laisser une réponse

Vous devez être connecté pour publier un commentaire.