Mercurial sobre Apache
Mi predilección por Mercurial ha quedado patente en algún que otro post, así que una vez estamos conforme con nuestro servidor de versiones llega el momento de dar un paso más. Intentaremos configurar un interfaz web para mostrar el código a todo el mundo (una especie de Trac solo para código y adaptado a Mercurial).
El proceso es tan sencillo como crear otro VirtualHost en tu Apache con unas características un poco especiales porque en vez de tirar de archivos dinámicos (.php, .asp…) vamos a tirar de un cgi en Python, así que la configuración sería algo así:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/www/userlinux/sd/mercurial/cgi-bin/
ServerName hg.userlinux.net
ScriptAlias / /home/www/userlinux/sd/mercurial/cgi-bin/hgwebdir.cgi/
<Directory "/home/www/userlinux/sd/mercurial/cgi-bin/">
SetHandler cgi-script
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /home/www/userlinux/sd/mercurial/logs/error.log
CustomLog /home/www/userlinux/sd/mercurial/logs/access.log combined
</VirtualHost>
Fijaos que el archivo hgwebdir.cgi es el que lleva todo el trabajo, y ¿de dónde lo sacamos?. Si tenemos instalado Mercurial (cosa que se da por supuesta), ya lo tenemos en el sistema, tan solo hemos de copiarlo a su nueva ubicación y tan contentos:
# cp /usr/share/doc/mercurial/examples/hgwebdir.cgi /home/www/userlinux/sd/mercurial/cgi-bin/ # chmod a+x /srv/hg/cgi-bin/hgwebdir.cgi
Ahora vamos a configurar alguna que otra preferencia del interfaz web, para ello creamos al mismo nivel del cgi un archivo de configuración llamado hgweb.config:
[paths]
rcms-plugin-prueba = /home/mercurial/rcms-plugin-prueba/
[web]
style = gitweb
allow_archive = bz2 gz zip
maxchanges = 200
En él -como veis- definimos los repositorios que vamos a mostrar (nombre = ruta) y varias opciones de la web como su theme, si permitimos o no descargar el contenido del repositorio…
Ojo con los permisos, tanto del archivo de configuración como de los repositorios, a los que ha de acceder el usuario propietario de Apache para leer. Un reinicio de Apache bastaría para tener el repositorio listo: