monter un serveur subversion sur archlinux avec apache

Salut à tous,

Aujourd'hui, un billet différent car il s'agira d'un tutorial sur l'installation de subversion avec apache sur une archlinux.
Ce billet est en outre le premier que je considère comme un tuto (qui fait donc apparaitre la section tuto sur ce blog qui devient un peu un gros bouzin depuis 2 jours :P

Pourquoi un tel billet ? Car je n'ai pas trouvé mon bonheur sur le web francophone et que j'ai trouvé l'installation bien différente de ce que j'ai connu sur debian.
En effet, mes serveurs étant sur debian, mon "niveau" d'admin sys est plus poussé pour cette distrib'. Mes pc perso (desktop et laptop) tournant eux sur archlinux.
Comme j'ai voulu autohéberger pour le moment les dépôts de mes projets (et des futurs sites associés), j'ai du apprendre à faire fonctionner tout ça sur archlinux ^^.
Pour preuve, mes fichiers de configuration sont maintenant gérés par svn et consultables ici

Donc comment tout ça fonctionne ?

Tout d'abord, installons le nécessaire

pacman -S subversion apache

Créer un répertoire ou vous sauvegarderez vos dépots.
Personnellement, je les ai mis dans /srv/svn

mkdir /srv/svn/

Créer le repository (le projet en gros) :

svnadmin /srv/svn/monZolieProjet

Configurer Apache :
Il suffit de charger les bons modules, à savoir

  • dav
  • dav_fs
  • dav_svn
  • authz_svn

Pour cela, il vous suffit d'avoir dans votre /etc/httpd/conf/httpd.conf

LoadModule dav_module           modules/mod_dav.so
LoadModule dav_fs_module        modules/mod_dav_fs.so
LoadModule dav_svn_module       modules/mod_dav_svn.so
LoadModule authz_svn_module     modules/mod_authz_svn.so

Configurer un vhost
décochez la ligne permettant d'utiliser le fichier de conf des vhost dans /etc/httpd/conf/httpd.conf :

Include conf/extra/httpd-vhosts.conf

Puis dans /etc/httpd/conf/extra/httpd-vhosts.conf :


<VirtualHost *:80>
    ServerName yourdomaine.net
    <Location /monZolieProjet>
        DAV svn
        SVNPath /srv/svn/monZolieProjet
        AuthzSVNAccessFile /srv/svn/auth
        AuthName "SVN Repositories"
        AuthType Basic
        AuthUserFile /srv/svn/pass
        Satisfy Any
        Require valid-user
    </Location>
</VirtualHost>

Vous pouvez rajouter des <Location /nomDeProjet> pour chaque répo :)
Vous pouvez aussi les mettre chacun dans des vhosts différents si jamais vous avez un domaine par projet.

Un conseil qui peut paraître idiot mais qui ma bien fait perdre 30 minutes :
Ne nommez un répo du même nom qu'un répertoire dans votre répertoire par défaut de apache.

Sous archlinux, ce répertoire est /srv/http mais est configurable dans le httpd.conf. Sous debian, il s'agit de /var/www par exemple.

Par exemple j'ai voulu mettre un répertoire pmfs dans /srv/http pour le site de pmfs (à venir) et pmfs comme nom de répo, et du coup le svn marchait pas car apache ne savait pas s'il fallait prendre le répertoire dans /srv/http ou le répo... bref, jvous le dis au cas car c'est un problème bête qui peut faire perdre du temps ^^

Pour l'utilisation du ssl, reportez vous au wiki

Les droits sur vos repo :
Vous pouvez gérer les droits de vos répo simplement par deux fichiers. Un fichier pour les mots de passe des utilisateurs et un pour les droits sur les répo.

Le fichier de mot de passe (vous pouvez l'appelez comme bon vous semble, ici il sera nommé auth) :

mkdir /srv/svn/auth

Le fichier :

[groups]

[monZolieProjet:/]
myUser = rw
* = r

On voit dans ce fichier que l'on peut créer des groupes. Les groupes permettent de regrouper vos utilisateurs dans un même groupe afin leur donner les mêmes droits sans se répéter. Ici, on peut voir que je n'ai pas créer de groupe mais que j'ai affecter à mon projet les droits en lecture et écriture à myUser et à tous les autres les droits de lecture.
Les droits peuvent être plus poussé, comme par exemple donner les droits d'écriture à des répertoires précis

[monZolieProjet:/doc]
* = rw

Ces lignes permettront à tous les utilisateurs d'écrire dans le répertoire doc du projet.

On peut faire beaucoup plus mais vous trouverez des docs poussées sur la toile ;).

Le fichier de mot de passe (ici appelé pass dans /srv/svn) :

htpasswd -cs /srv/svn/pass myUser

le -c n'est à mettre QUE la 1ere fois!. En effet, il permet de créer le fichier. Si vous voulez ajouter un utilisateur :

htpasswd -s /srv/svn/pass USER

Sinon, les précédents utilisateurs seront effacés.

Donner les droits à appache :

chown -R httpd:httpd /srv/svn/

Démarrer le projet :
Créer les répertoires branches trunk tags

cd temp/ && mkdir branches tags trunk

importer les sources :

cp -r /chemin/source/* temp/trunk/
svn import -m "Initial import" http://yourdomain.net/monZolieProjet

Vous pourrez récupérer les sources en faisant :

svn co http://yourdomaine.net/monZolieProjet/

Pour plus d'info, lisez la doc subversion ;)