# CENTOS: Mise en oeuvre d'un serveur subversion {{INLINETOC}} 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 dans un fichier {httpd}.conf (exemple /etc/httpd/vhosts/subversion.conf). LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 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 * **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 **** 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