Installation d'un serveur SVN sous Ubuntu

Publié le 29 avril 2009 par Nicolargo

Le but de ce billet est de mettre en place un serveur de gestion de versions basée sur SVN+SSH.

On commence par installer le package subversion qui comprend à la fois le client et le serveur SVN.

# sudo svn update
# sudo apt-get install subversion

on créé un utilisateur et un groupe générique svn.

# sudo adduser svn
Adding user `svn' ...
Adding new group `svn' (1000) ...
Adding new user `svn' (1001) with group `svn' ...
Creating home directory `/home/svn' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for svn
Enter the new value, or press ENTER for the default
Full Name []: SVN
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [y/N] y

Pour des questions de sécurité, je vous conseille de désactiver le SHELL pour cet utilisateur:

# sudo vipw
svn:x:1001:1000:SVN,,,:/home/svn:/usr/sbin/nologin

Si vous souhaitez accéder à votre serveur SVN avec un compte unix bien précis, il faut ajouter le login de ce compte au groupe svn:

# sudo vigr
svn:x:1000:nicolargo

Puis on créé un répertoire ou seront stockées les sources de vos programmes.

# sudo mkdir /var/svn

Il faut ensuite demander à SVN de créer un répertoire SVN pour notre projet:

# sudo svnadmin create /var/svn/projet

Puis de changer les droits:

# sudo chown -R svn:svn /var/svn
# sudo chmod -R 775 /var/svn

Il ne reste plus qu'a tester votre serveur à partir d'une machine distante en "important" votre projet (dont les sources sont localisées dans le répertoire ~/projet pour illustrer ce billet).

Avant l'importation, on va créer la structure classique de SVN:

projet
- trunk
- branches
- tags

client# svn mkdir --parents  svn+ssh://nicolargo@monserveur/var/svn/projet/trunk -m ""
client# svn mkdir --parents  svn+ssh://nicolargo@monserveur/var/svn/projet/tags -m ""
client# svn mkdir --parents  svn+ssh://nicolargo@monserveur/var/svn/projet/branches -m ""

Puis on importe les sources:

client# cd ~/projet
client# svn import . svn+ssh://nicolargo@monserveur/var/svn/projet/trunk -m "Premiere importation"
nicolargo@monserveur's password:
...
Révision 0 propagée.

Il ne reste plus qu'a tester l'exportation des sources:

client# cd ~
client# mv projet projet.init
client# svn co svn+ssh://nicolargo@monserveur/var/svn/projet/trunk projet
...
Révision 0 extraite.

Pour aller plus loin dans l'utilisation de votre nouveau serveur SVN, je vous conseille le très bon article de Ulhume sur son non-blog...(remplacer juste http:// par svn+ssh://)