Le Blog du Geek Joyeux

Plus moins vite tu codes, moins plus vite ça plante

Mettre en place un serveur SVN disponible via HTTP

| Commentaires

Cet article explique comment installer SVN, creer un depot et le rendre accessible par internet via HTTP grace au serveur Apache.

Installation de Subversion (SVN)

L’installation de Subversion est assez simple :

$ sudo aptitude install subversion

Création d’un dépot SVN

Pour initialiser un dépôt SVN, il faut utiliser la commande suivante :

$ svnadmin create mon_depot

Suite à cette commande, un dossier mon_depot est créé et contient l’arborescence nécessaire au fonctionnement du dépôt.

Mise a disposition via HTTP

Cette étape nécessite qu’un serveur Apache soit installé et configuré sur le serveur SVN.
Afin de permettre une authentification des utilisateurs un module apache est nécessaire.
Il s’agit de libapache2-svn.

$ sudo aptitude install libapache2-svn

Configurons maintenant Apache pour lui indiquer le comportement à suivre concernant notre dépôt.
Dans la configuration des VirtualHosts d’Apache (/etc/apache2/sites-available), imaginons que vous avez un hôte dédié aux dépôts svn.

1
2
3
4
5
6
7
8
9
10
11
12
<VirtualHost *>
  ServerName svn.mon_serveur.com
  <Location /mon_depot>
      DAV svn
      SVNPath /chemin/vers/mon_depot
      AuthType Basic
      AuthName "Mon Super Depot SVN"
      AuthUserFile /chemin/vers/mon_depot.htpasswd
      Require valid-user
      AuthzSVNAccessFile /chemin/vers/mon_depot.perm
  </Location>
</VirtualHost>

Voyons une à une les lignes précédentes :

1
<Location /mon_depot>

Nous déclarons l’accès au dépôt par l’url http://svn.mon_serveur.com/mon_depot

1
DAV svn

On signal l’utilisation du module Dav pour l’accès aux fichiers via Apache

1
SVNPath /chemin/vers/mon_depot

Donne le chemin vers le dépôt

1
AuthType Basic

On demande une authentification basique

1
AuthName"Mon Super Depot SVN"

Permet de donner un nom au serveur SVN.

1
AuthUserFile /chemin/vers/mon_depot.htpasswd

Si vous souhaitez utiliser un système de login/password pour l’accès au sources, vous pouvez utiliser un fichier de type htpasswd.

Pour le créer, il suffit de taper ceci

htpasswd -mc mon_depot.htpasswd mon_user
New password:
Re-type new password:
Adding password for user mon_user

L’option -m permet de forcer l’encryptage md5 des mots de passes. Pour d’autres options, un petit man htpasswd ne fait jamais de mal…

1
Require valid-user

Force les utilisateurs à être authentifiés pour effectuer des actions sur le dépôt :

1
AuthzSVNAccessFile /chemin/vers/mon_depot.perm

Permet de spécifier un fichier chargé d’attribuer des permissions aux utilisateurs. Son contenu est du type :

1
2
3
4
5
6
7
8
9
[groups]
dev = mon_user, autre_user # crée le groupe dev

[/]                        # permissions pour de dossier racine du dépôt
@dev = rw                  # lecture/écriture pour le groupe dev
une_personne = rw          # lecture pour une_personne
anonymous =                # aucun droits pour les personnes anonymes
[/sous_dossier]            # permissions pour le dossier /sous_dossier
@dev = r                   # droit de lecture pour le groupe dev</pre>

Dernières notes

Pensez à donner les droits d’accès à l’utilisateur d’Apache sur votre dépôt

$ sudo chown -R www-data:www-data /chemin/vers/mon_depot

Pensez à bien mettre un liens vers votre VirtualHost dans /etc/apache2/sites-enabled

1
2
ln -s /etc/apache2/sites-available/mon_vhost.conf \
  /etc/apache2/sites-enabled/

Ou plus simplement

$ a2ensite mon_vhost.conf

Pensez à redémarrer le serveur Apache pour que les modifications soient prises en compte.

Importer les fichiers sur le serveur

Prenons un exemple simple, on dispose d’un dossier de travail

1
2
3
mon_dossier/
   -- main.c
   -- fichier.h

Pour importer les fichiers sur le serveur :

1
2
cd ~/mon_dossier
svn import . http://svn.mon_serveur.com/mon_depot

On trouve maintenant nos deux fichiers à la racine du dépôt.

Pour créer une copie de travail versionnée (mon_dossier n’est pas versionné) :

$ svn checkout http://svn.mon_serveur.com/mon_depot

Ceci a pour effet de créer un dossier mon_depot dans le dossier courant. Ce dossier est une copie de travail qui pourra être synchronisée avec le serveur lors des commits.

Et voilà, c’est terminé

Commentaires