Subversion ou autrement dit SVN est un outil bien agréable et utile pour les développeurs ou toutes personnes souhaitant versionnés des fichiers.

SVN, pour rappel, remplace avantageusement CVS - sûrement le logiciel le plus connu -. Je ne présenterais pas comment on utilise SVN car si vous êtes intéressé et que vous êtes là vous avez déjà trouvez sûrement beaucoup de tutoriaux concernant se sujet.

Passons à l'installation :

ALBAN@bebeserv:~$ sudo -i
Password:
bebevserv:~# apt-get update
[...]
bebevserv:~# apt-get upgrade
[...]
apt-get install subversion subversion-tools
[...]

C'est presque terminé ! Il nous faut créer un repository :

bebeserv:~# cd /var
bebeserv:/var# mkdir svn
bebeserv:/var# cd svn

Voilà ici sera donc entreposé nos projet. Créons-en un pour l'exemple :

bebeserv:/var/svn# svnadmin --fs-type fsfs create mon_projet

Rien de plus simple. Maintenant créons un modèle à importer de base dans notre projet avec les clasiques dossier « trunk », « branches »}} et « tags ».

bebeserv:/var/svn# mkdir bases
bebeserv:/var/svn# cd bases
bebeserv:/var/svn# mkdir trunk branches tags
bebeserv:/var/svn# cd ..
bebeserv:/var/svn# svn import -m "Import des dossiers commum" /var/svn/bases/ file:///var/svn/mon_projet

Voilà nous avons un dossier « bases » qui nous resservira sûrement plus tard et las commande « svnadmin » avait créer un répertoire avec tout ce dont SVN à besoin pour fonctionner et entreposé les fichiers. D'ailleurs nous allons faire un tour dans la configuration de ce projet pour voir rapidement comment sont géré les utilisateurs :

bebeserv:/var/svn# cd mon_projet/conf

Paramétrons d'abord le comportement du serveur SVN associé à ce projet :

bebeserv:/var/svn/mon_projet/conf# nano svnserve.conf
general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = Subversion bebeserv.bebenet.local repository

Voilà rien n'est autorisé pour les utilisateur anonyme (même pas la lecture) et les utilisateur authentifié auront le droit d'écrire dans le projet au mieux. Pourquoi au mieux car l'on peut préciser les droits d'accès utilisateurs par utilisateurs (ou par groupe d'utilisateur) grâce au fichier « passwd » et « authz ».

Passwd pour créer les utilisateurs :

bebeserv:/var/svn/mon_projet/conf# nano passwd
users]
user = password
user2 = password_2
user3 = password_3

Enregistrez ainsi simplement votre fichier d'utilisateur.

Authz pour préciser les droits des utilisateurs :

bebeserv:/var/svn/mon_projet/conf# nano authz
groups]
les_autres = user2, user3

[mon_projet:/]
user = rw
@les_autres = r

[mon_projet:/trunk/dir/section_modifiable]
@les_autres = rw

Voilà un petit exemple assez concis. Tout d'abord « user2 » et « user3 » sont mis dans un groupe « les_autres ». Pour la racine de notre projet le groupe à le droit unique de lecture. Pour le dossier « trunk/dir/section_modifiable » le groupe aura le droit d'écrire. L'utilisateur « user » quand à lui à le droit d'écriture partout.

Voilà c'est fini pour la configuration. Il vous reste à démarrer le serveur SVN. Pour ceci j'ai encore fait un petit script :

bebeserv:/var/svn/mon_projet/conf#cd /etc/init.d
bebeserv:/etc/init.d# nano svn

Entrez ceci :

#! /bin/sh
set -e

case "$1" in
  start)
        echo -n "Starting svnserve"
        svnserve -d -r /var/svn
        echo "."
        ;;
  stop)
        echo -n "Terminating svnserve"
        pid=`ps -C svnserve -o pid=`
        kill -HUP $pid
        echo "."
        ;; 
  restart)
        echo -n "Terminating svnserve"
        pid=`ps -C svnserve -o pid=`
        kill -HUP $pid
        echo "."
        echo -n "Starting svnserve"
        svnserve -d -r /var/svn
        echo "."
       ;; 
  *)
        echo "Usage: /etc/init.d/svn {start|stop|restart}"
        exit 1
esac

exit 0

UPDATE : Un grand merci pour la contribution de " le père Léon " qui m'a permi de mettre à jour le script de démarrage, en ajoutant le cas STOP. (le RESTART en découle forcément)

A l'heure actuel je n'est pas trouver comment arrêter proprement le serveur. Mettez les bons droits d'accès et faîtes un « update-rc.d » pour lancer ce script au démarrage du serveur.

bebeserv:/etc/init.d# chmod 755 svn
bebeserv:/etc/init.d# update-rc.d svn start 98 2 3 4 5 .

Démarrez finalement le serveur pour finir cette session :

bebeserv:/etc/init.d# /etc/init.d/svn start

N'oubliez pas votre firewall :

bebeserv:/etc/init.d# nano /etc/network/iptables
iptables -t filter -A INPUT -i eth0 -p tcp --dport 3690 -d $MYIP -j ACCEPT
iptables -t filter -A OUTPUT -i eth0 -p tcp --dport 3690 -s $MYIP -j ACCEPT
bebeserv:/etc/init.d# /etc/init.d/iptables-conf restart

C'est fini =) A très bientôt !

bebeserv:/etc/init.d# exit
logout
ALBAN@bebeserv:~$