Table of Contents
CENTOS: Mise en oeuvre d'un serveur subversion
Table of Contents
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 :
- un serveur informatique centralisé et unique où se situent :
- les fichiers constituant la référence (le « dépôt » ou « référentiel », ou « repository » en anglais),
- un logiciel serveur Subversion tournant en « tâche de fond » ;
- des postes clients sur lesquels se trouvent :
- les fichiers recopiés depuis le serveur, éventuellement modifiés localement depuis,
- un logiciel client, sous forme d'exécutable standalone (ex. : SmartSVN) ou de plug-in (ex. : TortoiseSVN, Eclipse Subversive) permettant la synchronisation, manuelle et/ou automatisée, entre chaque client et le serveur de référence
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>
- LoadModule dav_svn_module modules/mod_dav_svn.so permet de charger le module mod_dav_svn
- LoadModule authz_svn_module modules/mod_authz_svn.so permet de charger le module mod_authz_svn.so
- * AuthzSVNAccessFile permet d'octroyer l'accès d'utilisateurs spécifiques à des zones spécifiques du référentiel, à l'aide d'autorisations affinées.
- AuthUserFile permet d'accorder un accès à chaque utilisateur définit dans ce fichier (utiliser htpasswd pour créer ou mettre à jour ce fichier)
- Order deny,allow bien que les directives fournies par le module mod_access_compat sont devenues obsolètes leur utilisation est requise pour forcer l'athentitification par user/mot de passe
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