Configurer un serveur Subversion sur Mac OS X 10.5

Plus le temps passe et plus les distributions de Mac OS X s'enrichissent de logiciels intéressants. Leopard est livré de base avec tout ce qu'il faut pour gérer un serveur svn : Apache 2.2 et subversion. Voyons comment configurer rapidement un serveur svn+http avec accès authentifié. Il est possible bien sûr de se contenter d'un serveur svn natif, mais l'accès aux dépots par l'intermédiaire d'Apache apporte une grande souplesse en terme d'authentification et de permission d'accès.

Pour pouvoir faire les manipulations décrites ci-dessous, il faut être administrateur d'une machine sous Mac OS X 10.5. Mac OS X 10.4 et inférieurs ne sont pas livrés par défaut avec les logiciels nécessaires à la mise en place d'un serveur svn.
Ceci posé, il va nous falloir : un logiciel type "Terminal", un éditeur de texte (vi, bbedit, textmate, ...) et un accès internet.

L'installation présentée ici est faite dans le répertoire /Library/WebServer/, dans le quel tous les membres du groupe admin ont le droit d'écrire par défaut.
La première étape est la création de l'espace physique des dépots de sources (repository). On se déplace dans /Library/WebServer/, on crée un répertoire Subversion, on crée le premier repository, et on ajoute les fichiers d'authentification et de permission pour les utilisateurs.

cd /Library/WebServer/
mkdir Subversion
svnadmin create Subversion/mon_projet
vi Subversion/deny.htsvnaccesspolicy
# ici on colle/édite/adapte le contenu 
# suivant en fonction de ses besoins :
[groups]
admins = patpro
autregroupe = eric, robert
tous = sam, patpro, eric, robert, gonzague

[mon_projet:/]
@admins = rw
@autregroupe = rw
sam = r

# ensuite on génère les couples login/mot de passe
# pour les utilisateurs :
htpasswd -bc Subversion/deny.htpasswd patpro mot-de-passe

sudo chown -R www:www /Library/WebServer/Subversion/mon_projet

Ensuite, on peut ajouter des feuilles de styles XSL/CSS pour agrémenter le rendu des repositories dans Apache. Il est nettement plus simple en terme de configuration de stocker des feuilles de styles à la racine du serveur, c'est à dire dans le répertoire /Library/WebServer/Documents/ :

cd /Library/WebServer/Documents/ 
curl -O http://svn.apache.org/repos/asf/subversion/trunk/tools/xslt/svnindex.xsl 
curl -O http://svn.apache.org/repos/asf/subversion/trunk/tools/xslt/svnindex.css

Maintenant, il faut modifier la configuration d'Apache pour qu'il charge les modules Subversion et sache lire un repository. On modifie d'abord le fichier /private/etc/apache2/httpd.conf pour assurer le chargement des modules, puis on crée un fichier de configuration dédié à nos dépots.
À l'aide de son éditeur de texte préféré, on modifie /private/etc/apache2/httpd.conf en ajoutant les deux lignes ci-dessous à la suite des autres directives "LoadModule" :

LoadModule dav_svn_module	libexec/apache2/mod_dav_svn.so
LoadModule authz_svn_module	libexec/apache2/mod_authz_svn.so

Puis on crée un fichier /private/etc/apache2/other/subversion.conf contenant ces directives :

<IfModule dav_module>
 <IfModule dav_fs_module>
  <IfModule dav_svn_module>
   <IfModule authz_svn_module>

   <Location /Subversion>
      DAV svn
      SVNParentPath /Library/WebServer/Subversion
      # regle la politique d'acces des users authentifies
      AuthzSVNAccessFile /Library/WebServer/Subversion/deny.htsvnaccesspolicy
      # regle les login.pass pour les users
      AuthType Basic
      AuthName "Subversion : espace de travail"
      AuthUserFile /Library/WebServer/Subversion/deny.htpasswd
      Require valid-user
      SVNIndexXSLT "/svnindex.xsl"
   </Location>

   </IfModule>
  </IfModule>
 </IfModule>
</IfModule>

Et pour finir on relance Apache, soit par le tableau de bord "Partage", soit par la commande sudo apachectl restart. À partir de là, notre serveur subversion doit être accessible en http sur le port 80. Le repository créé plus haut est vide, il faut faire un import initial pour commencer à travailler avec. L'habitude veut qu'on crée toujours un répertoire "trunk", un autre "branches", et un troisième "tags". Voici comment les créer en local puis comment les importer dans le dépot :

cd /tmp
mkdir -p mon_projet/trunk mon_projet/branches mon_projet/tags 
svn import mon_projet http://localhost/Subversion/mon_projet -m "init"
# ici, svn me demande mon mot de passe, celui défini 
# via la commande htpasswd quelques étapes plus haut.
# ensuite je peux supprimer des répertoires vides.
rm -r /tmp/mon_projet

C'est fini ! Je peux créer ma copie de travail locale à l'emplacement de mon choix :

cd /Users/moi/mon-dossier/ 
svn checkout http://localhost/Subversion/mon_projet/trunk mon_projet

De plus, je peux naviguer dans l'arborescence svn de mon projet en pointant mon navigateur habituel vers http://localhost/Subversion/mon_projet.

Une petite note sur la sécurité : l'utilisation du protocole http et non https fait circuler les mots de passe en clair sur le réseau. Donc n'utilisez pas un mot de passe important (pas celui du système par exemple).

edit : les fichiers css et xsl ont déménagé chez Apache. J'ai donc corrigé les URL.

À lire aussi :

20 comments

  1. Remplacer les lignes:
    vi deny.htsvnaccesspolicy
    htpasswd -bc deny.htpasswd patpro mot-de-passe
    sudo chown -R www:www /Library/WebServer/Subversion

    par:
    vi Subversion/deny.htsvnaccesspolicy
    htpasswd -bc Subversion/deny.htpasswd patpro mot-de-passe
    sudo chown -R www:www /Library/WebServer/Subversion/mon_projet

  2. Mais, au fait, merci pour tuto ;)
    Bon j'ai passé 2h à cause des erreurs mais une fois corrigé, cela se met en place en 5min ;)

  3. Bonjour,
    merci pour le tuto.
    Je l'ai suivi, j'ai réussi à tout faire fonctionner.
    Pour faciliter l'utilisation quotidienne, j'utilise le logiciel Versions.
    Ca a bien fonctionné au début et là depuis ce soir, quand je veux faire un commit, il me jette une erreur disant :
    Can't open file '/Library/WebServer/subversion/clients/db/txn-current-lock': Permission denied
    Les permissions du dossier db semblent correctes.
    Je ne m'y connais pas vraiment dans tout ce qui est manip de Terminal et tout ça, donc je préfère pas m'aventurer seul dans du bidouillage donc si quelqu'un peut me donner la marche à suivre pour corriger ça, je l'e remercie d'avance !

  4. @websilone : j'ai dans l'idée que ton client "Versions" est paramétré pour accéder directement à ton repository sans passer par le serveur web. Me trompe-je ?

  5. @patpro : je ne pense pas, vu que lors de la creation de mon repo dans Versions, il me demande l'adresse du dossier ac les users et password (définis lors de l'install de svn) et que là je mets bien une adresse du genre : http://localhost/subversion/...
    Et puis le plus étrange c'est que ça a fonctionné ...
    J'ai testé en recréant un nouveau repo dans Versions mais ça n'a rien changé...

  6. bonjour

    après avoir scrupuleusement suivi vos instructions, j'ai les pbs suivant :
    - http://localhost/Subversion/monprojet => Erreur lors du chargement de la feuille de style : Échec de l'analyse d'une feuille de style XSLT.
    - sinon j'arrive à créer un mot de pass dans le fichier /Library/WebServer/Subversion/deny.htpasswd mais quand je veux ajouter un nouvel utilisateur, ca remplace et ca ne concatene pas

    merci

  7. J'ai suivi le tuto, il marche très bien, mais que en localhost. Comment faire pour que le repos soit accessible de l'extérieur ? Merci encore

  8. @Ice : normalement rien dans le tuto ne limite le fonctionnement à localhost. Dès que ton serveur apache est accessible de l'extérieur, ton repository est aussi accessible de l'extérieur.
    Vérifie bien toute ta chaîne (routeur, firewall, config apache…).

  9. Yop!

    Juste pour dire un petit merci!

    Je suis passé par MANP... je me suis rendu compte qu'il fallait la version "PRO"... puis j'ai essayé de rajouter les modules manquant à la main, toujours un conflit, etc.. Après je tombe sur un script payant (9 euros!) pour rajouter les modules manquant: "faut pas déconner quand même!" ;)

    Et enfin, sur ce blog.. Et en quelques minutes c'était réglé :)

  10. Salut,
    J'avais réussi à créer un dépôt, j'ai voulu en créer un second, et maintenant plus rien ne marche :(
    il me répond
    svn: PROPFIND request failed on '/Subversion/mon_projet'
    svn: PROPFIND of '/Subversion/mon_projet': 403 Forbidden (http://localhost)
    Pour les deux, même après la suppression du second.
    Un petit peu d'aide siouplait :)
    PS: J'ai réussi à y accéder de l'extérieur, ce n'était qu'un problème de port.

  11. OK, ça remarche si je remet le Subversion/deny.htsvnaccesspolicy comme avant. J'avais essayé de le configurer du genre
    [groups]
    admins = Ice
    autregroupe = nalc

    [projet1:/]
    @admins = rw
    @autregroupe = rw

    [projet2:/]
    @admin = rw

    et ça ne marchait pas.
    Comment faire si je veux deux projets ?

  12. le second "admin" devrait avoir un "s" à la fin, sinon le groupe est inexistant et peut être que cela suffit à mettre apache/svn en difficulté.

    Je viens de faire le test avec un second projet, et ça marche parfaitement. Je pense qu'il faut que tu cherches du coté de cette faute de syntaxe (ou d'une autre ailleurs...)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *