Cómo configurar un repositorio Mercurial con Apache

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.

5 comentarios en «Cómo configurar un repositorio Mercurial con Apache»

  1. Buenas, gracias por este gran tutorial 😀

    Solo hay un problema, y es que hago todos los pasos perfectos, pero cuando accedo via web me da un error "500 Internal server error"

     

    ¿Sabes por donde podrían estar los tiros?

     

    Gracias!

  2. El error es del Apache y sólo te indica que un comando no se ha ejecutado exitosamente, si revisas los logs del Apache, tal vez puedas encontrar más detalles. Asumo que el problema debe estar relacionado al permiso de ejecución del hgwebdir.cgi. Pero para estar seguro revisa los logs.

  3. Buenas. He logrado implementar un servidor de mercurial junto con el servidor de Apache para que sirva simultaneamente varios repositorios; pero sucede que quiero que no todos los usuarios puedan empujar cambios a todos los repositorios sino que cada usuario pueda empujar cambios a solo un subconjunto de ellos. La seguridad corre por parte de Apache ya que mercurial no implementa seguridad alguna. En denifitiva, ¿por dónde empiezo para lograr mi cometido?.

    Grascias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.