Table des matières

Installation d'un serveur SVN

Cette page explique comment installer un serveur Subversion sur Ubuntu 11.10.

Installation des logiciels nécessaires

  1. Synchroniser l'index des paquetages
    $ sudo apt-get update
  2. Installer Subversion
    $ sudo apt-get install subversion
  3. Installer Apache
    $ sudo apt-get install apache2 libapache2-svn

Configuration d'Apache

Dans le fichier suivant, les lignes indiquées sont présentes, mais elles sont commentées. Il suffit de les décommenter et de modifier la ligne au besoin.

Créer un dépôt

Un dépôt est un repository.

  1. Créer le répertoire du dépôt
    $ sudo mkdir /var/svn
    $ sudo chown www-data /var/svn
  2. Créer un fichier de mot de passe
    $ sudo htpasswd -c /var/svn/passwd user1
    $ sudo htpasswd /var/svn/passwd user2
    $ sudo htpasswd /var/svn/passwd usern

    Le paramètre -c est nécessaire qu'une fois, à la création du fichier de mot de passes. Changez et répétez la commande autant de fois qu'il y a des utilisateurs à ajouter en modifiant user1, user2, usern par des noms correspondants.

  3. Changer le propriétaire
    $ sudo chown www-data /var/svn/passwd
  4. Créer le répertoire du dépôt (la partie repository peut être différente)
    $ cd /var/svn
    $ sudo mkdir repository
  5. Initialiser un nouveau dépôt
    /var/svn$ sudo svnadmin create repository
    /var/svn$ sudo chown -R www-data:www-data /var/svn/*

    La partie repository doit être la même qu'à l'étape 4.

  6. À ce point-ci, on peut redémarrer le service Apache :
    $ sudo service apache2 restart

Appliquer les permissions utilisateurs

Définir des permissions d'utilisateurs, pour les utilisateurs SVN, permet de créer des groupes d'utilisateurs et de donner des accès à différents projets selon le groupe. Exemple, un groupe web_team aura plein accès sur le projet de site web et le groupe developers aura plein accès sur le projet d'un logiciel quelconque. On peut donner des accès en lecture, en écriture, ou les deux.

Un problème de permission peut survenir suite à l'application des permission des utilisateurs.
  1. Modifier le fichier de configuration d'Apache /etc/apache2/mods-enabled/dav_svn.conf pour inclure la sécurité en décommentant la ligne AuthzSVNAccessFile /etc/apache2/dav_svn.authz.
  2. Créer le fichier /etc/apache2/dav_svn.authz en incluant les groupes et les permissions des utilisateurs. Le contenu du fichier peut ressembler à ceci :
    [groups]
    admins = john, luke
    project_managers = jessie
    work_team = karl, eric, john, steve
    clients = elie
    
    [/]
    admins = rw
    * = r
    
    [/project1]
    admins = rw
    project_managers = rw
    work_team = rw
    * = r
    
    [/clients]
    admins = rw
    work_team = r
    clients = rw

Utiliser SSL (https://)

  1. Créer un certificat
    $ openssl genrsa -des3 -out server.key 1024
    $ openssl rsa -in server.key -out server.key.insecure
    $ mv server.key server.key.secure
    $ mv server.key.insecure server.key
    $ openssl req -new -key server.key -out server.csr
    $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
  2. Copier le certificat à l'endroit approprié :
    $ sudo cp server.crt /etc/ssl/certs
    $ sudo cp server.key /etc/ssl/private
  3. Supprimer les fichiers server concernant la création du certificat dans le répertoire courant.
  4. Configurer Apache pour HTTPS :
    $ sudo a2ensite default-ssl
  5. Ajouter cette section dans /etc/apache2/sites-available/default-ssl :
    <Location /svn>
     DAV svn
     SVNPath /var/svn
     AuthType Basic
     AuthName "Subversion Repository"
     AuthUserFile /var/svn/passwd
     Require valid-user
    </Location>
La section <Location /svn></Location> peut être commentée dans fichier /etc/apache2/mods-enabled/dav_svn.conf si ce dernier a été décommenté auparavant.

Redémarrer Apache ($ sudo /etc/init.d/apache2 restart) si nécessaire.

Problèmes

Commit failed (details follow):
access to '/svn/repository/!svn/act/c09cbbdc-e0c3-4bad-97bc-88a25c462c31' forbidden

Notes

Côté client

Effacer les répertoires .svn :

find ./ -name ".svn" | xargs rm -Rf

Aussi pour Mac :

find ./ -name ".DStore" | xargs rm -Rf

Sources