Mise en oeuvre d'un serveur SubVersion
2 novembre, 2009 - 00:08 | Ulhume | Tutoriel

L'objectif est ici de mettre en place un serveur SubVersion comprenant la mise en place du dépôt, la configuration d'apache et le paramétrage des messages de notifications.

Création du repository

Pour créer le dépôt, nous utilisons la commande svnadmin comme suit :

root#svnadmin create --fs-type fsfs /svnroot
root#ls /svnroot
conf/ dav/ db/ format hooks/ locks/ README.txt

Une fois la commande exécutée, le dépôt est préparé et n'attend plus que nos fichiers. Le paramètre --fs-type fsfs est indispensable si l'on ne veut pas se retrouver avec un dépôt utilisant le calamiteux BerkleyDB. Avec cette option, subversion va utiliser le système de fichier standard pour stocker ces données en toute sécurité.

Dans la mesure où c'est apache qui va devoir gérer ce dépôt, il est important de lui donner les droits sur le dossier /svnroot.

chown apache:apache /svnroot -Rc

Configuration d'apache

Dans ce qui suit Apache est considré comme installé et opérationnel. Mais pour permettre l'utilisation de Subversion, il nous faut cependant quelques modules supplémentaires : apache-mod_dav et apache-mod_dav_svn. En effet, WebDav est le protocole utilisé par subversion pour communiquer à travers le WEB. Le premier module va donc ajouter le protocole webdav à Apache, et le second d'étendre se protocole pour gérer spécifiquement les dépôts subversion.

Ensuite, il nous faut modifier le fichier de configuration d'apache /etc/httpd/conf/httpd2.conf en ajoutant le bloc suivant:

<Location /subversion>
  DAV svn
  SVNPath /svnroot
  AuthzSVNAccessFile /svnroot/droits
</Location>

Cela a pour résultat d'ajouter à Apache une URL http://mon_site/subversion permettant l'accès au dépôt situé en /svnroot. L'option AuthzSVNAccessFile indique quant à elle le chemin vers un fichier texte contenant les droits associés au dépôt.

[/]
* = r
robert  = rw

[/un_projet]
gaston = rw
ginette = r
exemple de fichier de droits subversion

Tels qu'on a défini les droits, Robert a un accès complet en lecture et écriture à tous les projets. Gaston a un accès en lecture/écriture au projet un_projet et Ginette (sexisme !!) n'a accès qu'en lecture à ce même projet.

Maintenant pour que cela fonctionne, il faudrait qu'Apache ait le login de l'utilisateur. Il est donc nécessaire d'ajouter un bloc d'authentification à notre section location. Dans ce domaine, c'est à chacun de choisir : fichier apache, shadow, apache. jetez un œil ici pour avoir des idées sur quel système utiliser.

Une fois que tout est en place, il suffit de relancer apache et d'aller à l'URL http://mon_site/subversion. En effet, Subversion fonctionne aussi bien en WebDav qu'en HTTP. Dans le second cas il est possible, si l'on a les bon droits, d'explorer le dépôt en lecture seule. Le premier cas, il faut utiliser un client subversion comme celui d'Eclipse.

Import d'un projet CVS existant

Si vous désirez garder l'historique des commit CVS, l'utilitaire à utiliser est cvs2svn. Il est suffisamment efficace pour avoir permis la migration d'un "petit projet" comme KDE... Sinon, vous pouvez utiliser le script suivant dont la syntaxe est :

convert module_cvs module_svn

Le code source du script convert est à modifier pour correspondre à vos emplacements :

#! /bin/sh

  export CVSROOT=":pserver:user@serveur:/my_cvsroot"
  export SVNROOT="http://serveur/my_svnroot/trunk/$2"
  # Checkout du projet venant de cvs
  cvs -d :pserver:yoran@nehia:/cvsroot co $1

  # Enlever les éléments de controle CVS
  find $1/ -name "CVS" -exec rm -rf {} \;
  find $1/ -name ".cvsignore" -exec rm -rf {} \;

  # Création du dossier projet
  svn mkdir $SVNROOT -m 'Création du projet'

  # Import initial du projet vers SVN
  svn import $1/ $SVNROOT -m 'import initial'

  # suppression du checkout cvs temporaire et checkout de la version svn
  rm -rf $1

Rajouter des scripts de notification

Un aspect très sympathique de subversion est la facilité avec laquelle il est possible d'ajouter des actions sur les divers événements générés dans un dépôt.

Subversion a normalement créé un dossier hooks dans votre dossier /svnroot. Ce dossier contient déjà les modèles des cinq événements qu'il est capable de prendre en charge. Par défaut ces fichiers ont l'extension .tmpl ce qui les rends innactifs. Il faut donc ôter cette extension sur chacun des fichiers que vous désirez utiliser :

  • post-commit, appelé après un commit.
  • post-lock, appelé après un lock.
  • pre-lock, appelé avant un lock.
  • pre-unlock, appelé avant un unlock.
  • post-revprop, appelé après un changement de révision.
  • pre-commit, appelé avant la fin du commit.
  • start-commit,appelé avant le commit.
  • pre-revprop-change, appelé avant un changement de révision.

Comme exemple, imaginons que nous voulons envoyer un courriel aux développeurs d'un projet à chaque commit dans le dépôt. Pour cela nous allons créer un fichier /svnroot/hoks/post-commit :

#! /bin/sh

REPOS="$1"
REV="$2"

/usr/bin/svnnotify -r $REV -C -d -H HTML::ColorDiff -p $REPOS -x gaston@mon_site.com=projet1 --from no-reply@mon_site.com --reply-to no-reply@mon_site.com

svnnotify fait partie du projet perl-svn-notify qu'il faut donc installer. Pas la peine d'aller le télécharger, il est sûrement inclus dans les dépôts de votre distribution.

Une fois installé, il faut changer les droits sur ce hook pour permettre à apache de l'exécuter. Le plus simple est de relancer la commande chmod que nous avions utilisé au début pour tout le dépôt :

chown apache:apache /svnroot -Rc

Maintenant à chaque commit, si ce dernier appartient au projet projet1, cela provoquera un envoi de courriel à gaston. On peut spécifier plusieurs arguments -x ainsi que plusieurs adresses séparées par des virgules. Par exemple -x toto@mondomaine,tutu@mondomain=mon_module.

Erreur \"502 Bad Gateway\"

Si vous avez droit un jour à un svn: COPY of package.sh: 502 Bad Gateway (https://mondomaine.subversion.com/dev), il est probable que vous ayez tenté une copie/déplacement à travers un accès HTTPS au dépôt subversion. Hors dans le cas du https, un cas qui pose problème, celui de l'utilisation de reverse proxy sur le serveur cible (la cible est une machine apache A qui est accédée via HTTPS et qui relaye les requêtes sur une machine apache B qui gère le dépôt), ou alors de mauvaise définition du nom de serveur au niveau de la cible (le servername du vhost est mal configuré). Bref, pas beaucoup de solutions là dessus, juste de ne pas le faire ;-) ; Cela ne pose problème que sur les commande COPY et MOVE, assez rare donc. Dans ces deux cas, préférez un accès plus proche du serveur de dépôt en HTTP ou en SVN.

Conclusion

Voilà, c'est tout. Votre dépôt subversion est maintenant pleinement opérationnel. Enfin j'espère :-)

Commentaires

Dab, le 30 mai, 2008 - 23:52

Intéressant tout ça, je n'avais jusqu'alors même pas repérer le répertoire hook :)
Et en plus svnnotify te colorise le différentiel, c'est propre, c'est pro.

Ulhume, le 31 mai, 2008 - 01:07

Allez, dis-le, et en plus, c'est du Perl :)

Dab, le 31 mai, 2008 - 02:13

Ah bon en + c'est en Perl ? ;)

macsim, le 9 février, 2009 - 11:04

@Ulhume, simple question presque hors sujet mais tu utilises quoi en complement de svn Trac ? Redmine ? rien ;) ? en passant j'adore ton site
max

Ulhume, le 9 février, 2009 - 13:04

Merci :)

Tu veux dire en logiciel de gestion de projet ? Si c'est bien cela, cela dépend pas mal des cas de figure (et des clients ;-), généralement c'est planner, sinon GantProject.

macsim, le 9 février, 2009 - 13:46

Je voulais juste savoir si tu gérais tes projets svn avec un gestionaire projet web particulier pour ce qui est des tickets de l'évolution etc... (par exemple redmine gère le gantt mais bien plus encore ticket, forum, document, annonces etc..)

Ulhume, le 9 février, 2009 - 15:44

Non, pour ma gestion d'anomalies, j'utilise simplement le module Drupal. Ca m'évite de gérer plusieurs infrastructures

ddub, le 23 juin, 2009 - 15:24

Bonjour, Info tres pratique! Ptite question : comment faire (snvserve) pour que le group admin puisse créer les projets mais donner acces RW au group userdev. Je veux qu'admin crée les projets mais que les dévelopeurs puissent y ecrire.
Faisable ?
Merci.

Ulhume, le 25 juin, 2009 - 22:40

Ah aucune idée, je n'ai pas vu de notion de droit de ce genre, en revanche tu dois pouvoir faire cela par des hooks en vérifiant l'utilisateur et en interdisant les mkdirs a niveau de tes projets je pense.

tom, le 16 octobre, 2009 - 11:03

Je rajouterai juste un truc (expérience dans la douleur oblige..)
Souvent, on a des problèmes d'accents liés à SVN, surtout en Update, le plus simple au lieu de trifouiller la conf' de SVN (ca doit etre possible mais je me suis jamais penché dessus)
il est PLUS rapide de changer la conf' de son projet a submit-ter en ISO-800(et des bananes) et non UTF-8 par défaut (très simple sous Eclipse et Netbeans, les autres IDE, je ne sais pas)
le plus sage aussi, est de bien mettre ses textes dans des properties
ca semble très didactique ce que je dis, mais promis, ça évite des cheveux blancs qui tombent très jeune, surtout lors d'un script maven de prod' qui nous ramène un projet en langue française bizarrement accentisé (snif, sic..)

Ulhume, le 16 octobre, 2009 - 12:39

Je n'ai jamais eu le problème mais je tapes systématiquement toute personne qui n'est pas full UTF8. Le serveur subversion est donc sous un GNU/Linux en locale UTF-8 et si je choppe quelqu'un dans un de mes projets qui s'amuse à avoir un workspace eclipse en ISO-8859-15, je mord :) A partir de là, aucun problème d'accent à n'importe quel niveau (y compris sous Window$)

tom, le 16 octobre, 2009 - 14:06

:)
y'a un mix UTF-8 ISO-8859-15 dans ma boite, d'où le problème que j'ai évoqué dessus
fondamentalement je suis d'accord avec toi (et pas d'accord avec les développeurs d'y'a 2ans qui ont mis une zone sur le svn)

Ulhume, le 16 octobre, 2009 - 14:48

Ben disons que la connerie de base c'est qu'éclipse sot configuré par défaut sur la locale de l'OS sous-jacente, et donc ISO-8859-15 pour Windows. Du coup, ceux qui n'y font pas attention (pour dire les choses gentiment) pourrissent tous les fichiers qu'ils ouvrent...

tom, le 16 octobre, 2009 - 15:17

mmh tu m'ouvres des perspectives là

zedtux, le 2 novembre, 2009 - 08:31

Très beau site, très bon article ... le pied.

Par contre, avec quoi as tu fais ton schéma du début de l'article ?

Merci ! :)

Ulhume, le 2 novembre, 2009 - 09:15

Avec OpenOffice, tout simplement :)

zedtux, le 2 novembre, 2009 - 09:30

Ca te dérangerai de faire un petit article rapide là dessus ?

J'ai eut testé Dia, mais la qualité des graphisme laisse vraiment à désirer, et je suis assez impressionné du résultat de ton graphique.
Quand j'ai tenté avec OpenOffice, je n'avais rien trouvé, donc pas assez cherché vue ce que tu as réussi à faire.

Donc, si tu as un petit peu de temps :)

Ulhume, le 2 novembre, 2009 - 10:51

Tu sais il n'y a pas réellement de quoi faire un article. J'utilise juste OpenOffice.draw 3.1+capture d'écran pour l'anti-aliasing propre, avec la 3.0 je trichais en passant par un export PDF+capture. Ensuite pour les dégradés, je m'étais fait une série d'images avec gimp que j'utilise en remplissage BITMAPS. Mais c'était pour contourner les problèmes des dégradés qui apparaissaient en très mauvais qualité avec OpenOffice 3.0. Aujourd'hui il faudrait que je teste avec les vrais dégradés pour voir ce que cela donne.

Pour le reste, c'est juste openoffice.draw sans ajout supplémentaire avec les formes de bases et les connecteurs standards.

zedtux, le 2 novembre, 2009 - 11:19

Ok, alors je vais regarder ca de plus prêt !

Merci bien !

Eleyone, le 2 novembre, 2009 - 17:53

Très bon travail. Je regrette juste que tu ne l'ai pas fais un peu plus tôt... ce qui m'aurait éviter bien des déboire. Cependant j'ai quand même une question : qu'en est il, une fois ton serveur installer et près a tourner, de la gestion des trunk/branch et autre joyeuseté du genre ?

Cordialement

Ulhume, le 2 novembre, 2009 - 20:51

Là il faudrait être précis ?

Eleyone, le 2 novembre, 2009 - 21:13

Disons, que je pinaille sévèrement avec la gestion des trunks et branchs de Subversion... J'arrive pas à créer ces derniers, et encore moins à les utiliser... Et, je doit avouer être relativement dépassé par toutes les notions adjacentes.

Ulhume, le 3 novembre, 2009 - 00:07

ça peut t'aider ?
http://arnumeral.fr/node/96

Guyou, le 2 novembre, 2009 - 17:59

Histoire de lancer le troll : pourquoi Subversion et pas Mercurial ou Git ? C'est quand même plus pratique.

Ulhume, le 2 novembre, 2009 - 20:53

Non, pas un troll pour un sous, disons simplement que pour mes clients le passage de CVS à Subversion a été comme qui dirait "lent", et que j'imagine assez peu leur expliquer GIT, Mercurial ou Bazar. Il est certaines situation où la moins pire des solutions est bien meilleur que la meilleure ;-)

Guyou, le 3 novembre, 2009 - 12:41

Effectivement, si le serveur est utilisé par des personnes qui ne souhaite pas investir trop de temps dans la gestion de version, effectivement SVN reste le meilleur. Quoique Mercurial, avec son jeu de commandes très très proche de Subversion, me paraît être un challenger digne d'intérêt (bien que le devel-geek que je suis affectionne Git).

kruggs, le 30 novembre, 2009 - 11:04

Bonjour,
Je me pose une petite question, je vais commencer un projet web et j'ai donc installé un serveur SVN.
Et je me demandais, est-il possible de voir en temps réel le rendu du projet web après un commit ?
Parceque en webdav on voit que les sources.
Faut-il script une extraction "propre" vers un homme-dir du apache après chaque commit ?

Au passage jolie tuto simple :)

Ulhume, le 22 décembre, 2009 - 08:37

Oui assez facilement. Pour cela tu ajoutes un hook post-commit qui fait un update de la branche correspondant dans ton dossier web. Je fais cela sur tous mes serveurs d'intégration.

klein, le 1 avril, 2010 - 14:08

Pourquoi ne fais tu pas un tag tout simplement.

Poster un nouveau commentaire

Si vous avez détecté une erreur, coquille ou bêtises du même ordre, merci de plutôt passer par le formulaire de contact
Pour vous abonner au flux des commentaires sur cet article, clickez ici.
Pour répondre à quelqu'un, utilisez plutôt le lien répondre qui se trouve en haut (ou en bas) à gauche de son commentaire.
Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. Si vous avez un compte gravatar, l'utilisez pour afficher votre avatar.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Every instance of custom tags in the input text will be replaced with a specific tool shortcut.

Plus d'informations sur les options de formatage

Êtes-vous humain ?
Cette question est là pour déterminer si vous êtes humain ou pas...