Una de las herramientas de control de versiones más fáciles de aprender y utilizar, a la vez que nos ofrece flexibilidad y potencia es Mercurial, que es un software Open Source con lo cual nos ofrece los beneficios de un costo bajo de implementación y la posibilidad de modificarlo en caso de que necesitemos cambios.
Para aquellos que no saben que es un sistema de control de versiones pueden leer este estupendo tutorial de Joel Spolsky HgInit, en el cual de paso aprenderan como utilizar Mercurial a nivel de usuario.
Si tiene planeado seguir este howto, debe considerar que lo he escrito teniendo en mente Debian Lenny, aunque en teoría puede ser usado con cualquier distribución de Linux, asumo además de que está familiarizado con apache y sabe como editar archivos de texto.
Pues bien, comencemos. Lo primero que debemos hacer es instalar Mercurial, para ello como usuario root debemos ejecutar este comando:
# apt-get install python python-dev mercurial
Con este sencillo paso ya tenemos instalado Mercurial en nuestro sistema, pero no nos permite exportar los repositorios a través del apache, para ello necesitamos un script llamado hgwebdir.cgi que ya está en nuestro sistema pero escondido dentro de la documentación de Mercurial que instaló Debian.
Comencemos pues a configurar nuestro apache para que exporte los repositorios a través de una conexión SSL, a la vez que nos permita hacer un "push" directamente al repositorio a través del apache.
Debemos crear un directorio donde estarán nuestros repositorios (todo esto como usuario root):
# mkdir -p /var/hg/repos
# touch /var/hg/hgweb.config
# chown -R www-data:www-data /var/hg
Ahora debemos de editar el archivo /var/hg/hgweb.config y poner dentro de él lo siguiente:
[collections]
repos/ = repos/
[web]
style = gitweb
Ahora necesitamos copiar el script que hará la magia de administrar los repositorios a través del apache:
# cd /var/hg/
# cp /usr/share/doc/mercurial/examples/hgwebdir.cgi ./
# chown www-data:www-data ./hgwebdir.cgi
# chmod +x ./hgwebdir.cgi
Lo siguiente que haremos será crear el archivo /etc/apache2/hg/main.conf
# mkdir /etc/apache2/hg
# touch /etc/apache2/hg/main.conf
En el interior de dicho archivo debemos de poner las siguiente líneas:
AddHandler cgi-script .cgi
ScriptAliasMatch ^/hg(.*) /var/hg/hgwebdir.cgi$1
<Directory "/var/hg">
Options FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Asumiendo de que tiene apache2 con soporte para SSL exitosamente instalado (si no lo tiene aún puede usar este tutorial), sólo debemos de editar el archivo /etc/apache/sites-available/default-ssl y agregar la siguiente línea antes de las directivas que habilitan el SSL:
Include /etc/apache2/hg/main.conf <– Linea que debe añadir
# SSL Engine Switch: <– Referencia de donde debe insertar
# Enable/Disable SSL for this virtual host.
SSLEngine on
Estamos listos para comenzar a utilizar nuestro repositorio, sólo necesitamos reiniciar el apache, para ello usamos el comando:
# /etc/init.d/apache2 force-reload
Desde este comento podemos comenzar a utilizar nuestro repositorio de Mercurial.
Para crear un nuevo repositorio, sólo debemos de utilizar el comando:
# su – www-data -c "hg init /var/hg/repos/<nuevo repositorio>"
Si deseamos configurar quieres pueden hacer "push" en el directorio debemos de crear el archivo /var/hg/repos/<nuevo repositorio>/.hg/hgrc y en el podemos configurar de acuerdo a nuestra conveniencia lo siguiente:
[web]
contact = Volkan Rivera
description = mi primer repositorio de Mercurial
allow_push = user1, user2, user3
# Habilita la descarga de último snapshot en forma comprimida
allow_archive = gz zip bz2
Para habilitar las contraseñas que permiten a los usuarios acceder al repositorio y publicar (push) código al repositorio, debemos usar el móduco mod_auth de apache y su configuración a través de .htaccess, aquí los detalles.
Y es todo, con estos sencillos pasos ya tenemos funcionando nuestro repositorio de Mercurial a través del apache (accesible a través de https://server.name.com/hg), para que todo nuestro equipo de desarrollo pueda utilizarlo a tavés de internet y de forma segura. Espero que les haya sido de utilidad a la vez que agradezco anticipadamente sus críticas y comentarios.