Dépôt Mercurial sur CentOs, Part 2 : Mercurial
Maintenant que nous avons un serveur sécurisé avec SSL (voir Dépôt Mercurial sur CentOs, Part 1), nous allons mettre en place le dépôt mercurial.
La structure qui sera mise en place permettra la gestion de multiprojets.
Installation de mercurial :
Ici rien de plus simple étant donné que celui-ci est déjà packagé :
yum install mercurial
Pour afficher le numéro de version de Mercurial mais aussi vérifier que celui-ci fonctionne bien avant de continuer quoi que ce soit il vous faut taper:
hg --version
Il faut maintenant créer un dossier où les dépôt seront stockés :
mkdir -p /srv/hg/cgi-bin
Note: Libre à vous de le changer si celui-ci ne vous convient pas.
Dans le répertoire cgi-bin nous allons y copier le cgi de mercurial :
cp /usr/share/doc/mercurial-1.2/hgwebdir.cgi /srv/hg/cgi-bin/
Note: Il existe deux cgi un pour la gestion de projet unique (hgweb) et un pour la gestions de plusieurs projets (hgwebdir). C'e sont ces scripts qui vont se charger de tout !
Il faut maintenant créer le fichier de configuration hgweb.config dans /srv/hg/cgi-bin/ et y ajouter ces deux lignes :
[collections]
/srv/hg = /srv/hg
Voilà c'est à peu près tout pour la mise en place de Mercurial, reste la configuration d'Httpd.
Configuration d'Httpd
Il faut rajouter les éléments permettant d'indiquer l'emplacement du cgi de mercurial dans /etc/httpd/conf.d/ssl.conf
Alias /hg /srv/hg/cgi-bin
<Directory "/srv/hg/cgi-bin/">
DirectoryIndex hgwebdir.cgi
SetHandler cgi-script
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/httpd/hg.log
Création d'un projet
Nous allons créer notre premier dépot dans /srv/hg/MonProjet et donner les droits d'écriture dans le dépôt à apache:
sudo -u apache hg init /srv/hg/MonProjet
Rendez-vous sur https://serveur/hg/hgwebdir.cgi où vous retrouverez votre projet !
Permettre le push
Avoir accès au dépôt ce n'est pas tout, il faut aussi pouvoir y écrire !
Pour celà il faut créer le fichier /srv/hg/MonProjet/.hg/hgrc et y mettre:
[web]
allow_push = *
L'étoile donne accès à n'importe qui, il faudra changer celle-ci par les noms d'utilisateurs devant avoir accès au dépôt. Il serait malencontreux que tout le monde puisse envoyer des données sur le dépôt.
Sécuriser le dépôt
Il est intéressant et même indispensable de protéger son répertoire pour éviter d'avoir des ennuis.
il faut tout d'abord commencer par créer un fichier qui contiendra les logins et password des personnes autorisées :
htpasswd -c /etc/mercurial/htpasswd remi
Note: Il est important de mettre le htpasswd en dehors des répertoires accessibles par les internautes.
Note: le '-c' n'est à mettre que si le fichier n'existe pas (afin de le créer).
Pour rajouter un autre utilsateur à la liste il suffira de faire :
htpasswd /etc/mercurial/htpasswd remi
Il faut maintenant placer un fichier .htaccess dans /srv/hg/cgi-bin :
AuthUserFile /etc/mercurial/htpasswd
AuthGroupFile /dev/null
AuthName "Identification"
AuthType Basic
<LimitExcept GET>
Require valid-user
</LimitExcept>
Désormais lors d'un push, un nom d'utilisateur et un mot de passe seront demandés !
Importation du dépot sur une machine de travail
Maintenant que notre repository est opérationnel, il faut l'importer sur les machines de travail !
Cela se fait très simplement au travers de la commande :
hg clone AdresseWebDuRepo RepertoireDeDestination
Conclusion
Et voilà, à vous les joies de Mercurial !
Améliorations
Un point intéressant serait de modifier le chemin d'accès actuel (https://serveur/hg/hgwebdir.cgi/MonProjet) par quelques chose de plus propre comme : https://hg.serveur/MonProjet.
N'ayant pas de certifs wildcard pour le moment pour mon domaine je ne l'ai pas encore fait. Cet article sera modifié quand je trouverai un peu de temps pour mettre ca en place ;)
L'authentification est ici de type 'Basic' ce qui signifie que les logins/mots de passes seront visibles sur le réseau si le SSL n'est pas activé (ce qui n'est pas notre cas).
Pour toutes remarques/observations n'hésitez pas à m'en faire part !