Cómo instalar un Servidor de Subversion con Apache

Introducción

Cómo muchos de vosotros sabréis, Subversion es una herramienta para la gestión de la configuración.

En esta entrada trataré de explicar de manera sencilla y resumida como instalar un servidor central de Subversión mediante el servidor web Apache2 con autenticación de usuarios basada en SSL y autenticación y permisos con grano fino de carpetas, es decir, pudiendo dar permisos de acceso (lectura y/o escritura) por separado a cada carpeta dentro del repositorio y por usuarios y/o grupos.

Distribución base

La distribución Linux elegida, como siempre, será Ubuntu, en mi caso ha sido Ubuntu Server 10.10 64bits, aunque cualquier otra servirá para el propósito, y si es Debian también, sino tendréis que hacer las adaptaciones pertinentes a la hora de instalar paquetes o editar ficheros de configuración (dado que pueden alojarse en rutas diferentes a las descritas aquí).

Pasos

Durante todos los pasos se supone que estas logeado con permisos de superusuario, lo cual es posible o bien iniciando sesión con el usuario root, o bien haciendo un sudo -s desde una cuenta que tenga permisos para ello.

Apache2 + SSL

Lo primero es instalar Apache2, también será útil instalar otros servidores como MySQL (aunque no es necesario), PHP y ya que estamos un phpMyAdmin, para lo cual con instalar este último nos basta, dado que depende de todos los anteriores (al instalar nos pedirá que introduzamos lo primero una clave (2 veces, dado que hay que confirmar) para el usuario root de MySQL, luego al instalar phpMyAdmin, nos pedirá la clave de root de MySQL que acabamos de introducir, más la clave root del propio phpMyAdmin (también 2 veces)):

# aptitude install phpmyadmin

Podemos probar a visualizar el sitio de Apache2 (http://localhost) por defecto y el de phpMyAdmin (http://localhost/phpmyadmin).

Ahora habilitamos el módulo de SSL de Apache2, el sitio SSL por defecto y lo reiniciamos:

# a2enmod ssl
# a2ensite default-ssl
# /etc/init.d/apache2 restart

Subversion

Instalamos Subversion y el módulo de Apache2 homónimo:

# aptitude install subversion libapache2-svn

Ahora configuramos el módulo de DAV SVN que acabamos de instalar (edita el fichero con vim o con tu editor preferido):

# vim /etc/apache2/mods-available/dav_svn.conf

El contenido del fichero debería, tras su edición, debería ser parecido a lo siguiente (yo he decidido albergar el repositorio de Subversion en /home/svn):

<Location /svn>
DAV svn
SVNPath /home/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /home/svn/conf/passwd
AuthzSVNAccessFile /home/svn/conf/authz
Require valid-user
Satisfy Any
SSLRequireSSL
</Location>

Ahora creamos el repositorio de Subversion:

# mkdir /home/svn
# svnadmin create /home/svn

Creación de usuarios

Para crear los usuarios usaremos la herramienta de Apache2 para tal propósito (htpasswd), hay que distinguir entre 2 escenarios:

  1. Creación del primer usuario, y por tanto creación del fichero de usuarios (reemplazar <first_user> por el nombre de usuario que queramos):
    # htpasswd -c -m /home/svn/conf/passwd <first_user>
  2. Creación del resto de usuarios después del primero (reemplazar <other_user> por el nombre de usuario que queramos):
    # htpasswd -m /home/svn/conf/passwd 

Autenticación selectiva

Ahora editaremos el fichero de autorización, pudiendo definir grupos (en la sección [groups]) y luego definiendo rutas del repositorio con un listado de los permisos de los usuarios y/o grupos a dichas secciones:

# vim /home/svn/conf/authz

El contenido mímino sería algo similar a:

[groups]
admins = root

[/]
@admins = rw

En este fichero, se supone que tenemos que haber creado en el paso anterior un usuario root, de modo que dicho usuario root es añadido a un grupo llamado admins, luego se define la sección [/], es decir la raíz del repositorio, a la cual damos accesos de lectura y escritorio sólo a dicho grupo y a nadie más.

El fichero antes de que lo edites tiene mucha documentación al respecto de cómo configurarlo, es muy recomendable que lo leas con calma para evaluar las diferentes opciones que te puede dar su correcto uso.

Configurar permisos de ficheros

Dado que todas las operaciones las hemos hecho por comodidad como usuario root antes de terminar tendremos que asignar los permisos de la carpeta /home/svn al usuario que realmente tiene que usarlos, que en este caso es Apache2 y por ende www-data:

chown -R www-data:www-data /home/svn

Finalmente reiniciamos Apache2 y listo:

/etc/init.d/apache2 restart

Prueba

Para probar tu nuevo servidor, no tienes más que abrir un navegador web e introducir la ruta de tu repositorio (https://localhost/svn) y rellenar los credenciales (usuario y clave que hayas creado); también puedes usar tu cliente de consola habitual.

Deja un comentario