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.

Cet article a été publié dans Unix avec les mots-clefs : , , . Bookmarker le permalien. Laisser un commentaire ou faire un trackback : URL de trackback.

20 commentaires

  1. Le 29 octobre 2009 à 00:27 CET | Permalien

    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. patpro
    Le 29 octobre 2009 à 08:18 CET | Permalien

    Ho, c'est bien vu, je corrige. Merci :)

  3. Stephane
    Le 29 octobre 2009 à 21:08 CET | Permalien

    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 ;)

  4. websilone
    Le 4 décembre 2009 à 00:07 CET | Permalien

    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 !

  5. Le 4 décembre 2009 à 01:37 CET | Permalien

    @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 ?

  6. websilone
    Le 4 décembre 2009 à 11:41 CET | Permalien

    @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é...

  7. Le 29 janvier 2010 à 13:25 CET | Permalien

    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

  8. Le 29 janvier 2010 à 13:43 CET | Permalien

    oublier la 2e question (-b et non -bc); ca m'apprendra a pas lire les man...
    mais la 1ere reste

  9. Le 29 janvier 2010 à 16:52 CET | Permalien

    Indice : ouvrez le fichier svnindex.xsl que vous avez téléchargé pour vérifier qu'il est conforme.

  10. Mon nom
    Le 20 février 2010 à 01:24 CET | Permalien

    Bravo mec. J'ai pas tout saisi mais çà a fonctionné du permier coup. Merci!

  11. Ice
    Le 10 avril 2010 à 17:50 CET | Permalien

    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

  12. Le 10 avril 2010 à 18:04 CET | Permalien

    @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…).

  13. Le 19 avril 2010 à 02:43 CET | Permalien

    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é :)

  14. Ice
    Le 1 juillet 2010 à 14:57 CET | Permalien

    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.

  15. Le 1 juillet 2010 à 15:19 CET | Permalien

    Est-ce que les autorisations décrites dans Subversion/deny.htsvnaccesspolicy couvrent bien les répertoires ciblés ?

  16. Ice
    Le 1 juillet 2010 à 15:39 CET | Permalien

    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 ?

  17. Le 1 juillet 2010 à 16:19 CET | Permalien

    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...)

  18. Ice
    Le 1 juillet 2010 à 16:41 CET | Permalien

    Bien vu, tu avais raison, juste une erreur de frappe :S

  19. rwo
    Le 13 mai 2011 à 16:02 CET | Permalien

    Bonjour

    j'ai essayé le tuto mais au moment de faire cette commande:svn import depot_fichier/ http://10.16.13.101/Subversion/depot_fichier -m "init"

    voici l'option qu'on me renvoit:
    svn: OPTIONS of 'http://10.16.13.101/Subversion/depot_fichier': could not connect to server (http://10.16.13.101)

    ma version mac est mac os x 10.6

  20. Le 16 novembre 2011 à 12:00 CET | Permalien

    Super tuto, exactement ce que je recherchais.

Laisser un commentaire

Votre e-mail ne sera jamais publié ni communiqué. Les champs obligatoires sont indiqués par *

*
*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>