Table of Contents

CENTOS: Mise en oeuvre d'un serveur subversion

Subversion (en abrégé svn) est un logiciel de gestion de versions open source développé en tant que projet de Apache Software Foundation.

Conçu sur les mêmes concepts que CVS, il fonctionne sur le mode client-serveur, avec :

Installation de subversion

Installation depuis les dépôts officiels

$ yum install -y subversion mod_dav_svn

Installation depuis les sources

Pour construire une version de mod_dav_svn depuis les sources, récupérer la dernière version stable de la source Subversion, décompresser dans un emplacement temporaire et compiler Subversion à l'aide des options ./configure suivantes:

Si l'instance de serveur Apache n'est pas déjà configurée, procéder comme suit et passer l'option –enable-dav à ./configure. Reconstruire et réinstaller le serveur Apache comme expliqué dans le guide.

 $ mkdir ~/subversion
 $ tar -xzf subversion-*.tar.gz
 $ rm -f subversion-*.tar.gz
 $ cd subversion-*
 $ ./configure --prefix=$HOME/subversion --with-apxs=$HOME/apache/bin/apxs \
            --with-berkeley-db=/usr/ local
 $ make && make install

Ensuite, supprimer le répertoire source ainsi que le répertoire ~/subversion/ (ce qui n’est pas nécessaire car on utilise uniquement les modules Apache):

 $ rm -fR ~/subversion-*
 $ rm -fR ~/subversion

Création du dépôt de référentiel

Créer la racine du dépôt des référentiels

$ mkdir /var/www/svn

Créer un référentiel avec svnadmin :

$ svnadmin create /var/www/svn∕documents

Cette commande va créer une structure svn contenant les fichiers de configuration suivants:

conf
 ├── authz
 ├── passwd
 └── svnserve.conf

Configuration du serveur

Configuration du serveur intégré

Subversion est fournit avec svnserve un serveur léger, capable de dialoguer avec des clients sur un réseau TCP/IP en utilisant un protocole dédié avec gestion des états. Les clients contactent le serveur svnserve en utilisant une URL qui commence par svn: ou svn+ssh:

Pour configurer le serveur intégré, éditer le fichier svnserve.conf dans le répertoire /conf du référentiel créé :

$ vi /var/www/svn∕documents/conf/svnserve.conf

[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz

Configuration de Apache

Les référentiels Subversion peuvent être servis par le serveur Web Apache via le protocole HTTP (étendu par WebDAV / DeltaV). Les avantages de ce système sont notamment les suivants: hautes performances, contrôle des autorisations détaillé, prise en charge de SSL, modes d’authentification alternatifs, etc. C'est la solution de choix si vous êtes derrière un pare-feu d'entreprise, car il utilise uniquement des connexions HTTP ou HTTPS standard. Le contenu du référentiel est également accessible de manière transparente depuis le Web.

L'accès HTTP aux référentiels est défini à l'aide d'une section <Location> dans un fichier {httpd}.conf (exemple /etc/httpd/vhosts/subversion.conf).

 <VirtualHost *:89>
   LoadModule dav_svn_module     modules/mod_dav_svn.so
   LoadModule authz_svn_module   modules/mod_authz_svn.so
  
   <Location /reposvn>
     DAV svn
     SVNParentPath /var/www/svn
     Authtype Basic
     AuthName "Authorization Realm"
     AuthzSVNAccessFile /var/www/svn/documents/conf/authz
     AuthUserFile /var/www/svn/documents/conf/passwd
     Order deny,allow
     Require valid-user
   </Location>
 </Virtualhost>

L'alias déclaré dans <Location /reposvn> peut être différent du nom du root svn, et il n'est pas nécessaire que celui-ci existe phystquement sur le serveur. par exemple pour accéder au dépôt svn les utilsateurs devront saisir l'url http://mon_serveur/reposvn .

Configuration de l'accès aux référentiels

Configuration des utilisateurs

Ajouter les couples utilisateurs/mot de passe au fichier spécifié dans AuthUserFile ou password-db avec la commande htpasswd

 $ htpasswd -c /var/www/svn/repo1/conf/passwd jacques

   Adding password for jacques in realm trac.
   New password: 
   Re-type new password: 

L'option -c dans la commande indique “Create a new file”, il ne faut donc l'indiquer que pour le premier utilisateur créé.

Configuration des autorisations avancées

Utiliser le fichier spécifié dans AuthzSVNAccessFile ou authz-db pour autoriser ou refuser à des utilisateurs spécifiques des privilèges de lecture/écriture sur des éléments spécifiques d'un référentiel (le module mod_authz_svn doit être chargé.

Le fichier spécifié dans AuthzSVNAccessFile ou authz-db est un fichier texte qui définit des listes d’accès détaillées.

Tous les noms de chemin spécifiés sont relatifs au root SVN.

#
# Autorise l'accès en lecture anonyme à tout par défaut.
#
[/]
*=r

  #
  # Accorde à jacques un accès en écriture à tout ce qui se trouve à la racine du dépôt documents.
  #
  [documents:/]
  jacques = rw
  * =

  #
  # Accorde à carol et charlie un accès en écriture uniquement sur /documents/toto
  #
  [/documents/toto]
  carol = rw
  charlie = rw

Utilisation des référentiels

Démarrer les serveurs

 $ service svnserve restart

ou

 $ service httpd restart

Tester le référentiel

En utilisant un client Subversion distant ou la commande standard svn on peut générer une copie de travail du référentiel à l'aide de la commande checkout. Par exemple pour accéder à des données publiques via un compte en lecture seule, on peut utiliser en toute sécurité une URL http standard:

$ svn co http://[addresse-ip-du-serveur]:[numero-de-port]/reposvn/documents/

Le contenu des référentiels publics est également accessible à partir d'un navigateur Web. Les moteurs de recherche essaieront d'indexer toutes les données publiques. Afin de sécuriser le serveur utiliser un fichier robots.txt.

Commandes de base

Créer une copie de travail locale

Commande à exécuter dans le répertoire parent, qui contiendra la copie locale :

 $ svn checkout svn://mon_serveur/reposvn

Si l'authentification est requise pour votre dépôt, précisez votre nom d'utilisateur de cette manière :

 $ svn checkout --username nom svn://mon_serveur/reposvn

Ceci créera un dossier reposvn contenant les sources du dépôt.

Mettre à jour une copie

Pour récupérer les dernières modifications du dépôt et ainsi mettre une copie de travail à jour, dans le répertoire de la copie locale taper :

 $ svn update

Envoyer ses modifications

Pour valider et apporter ses modifications au dépôt, dans le répertoire de la copie locale taper :

 $ svn commit -m "Message"

Le message du commit (option -m) est obligatoire, elle permet d'inscrire dans les logs une explication