h1

Montar un repositorio Subversion con acceso SVN y HTTP

6 enero 2010

A continuación explico cómo puse a punto un repositorio Subversion funcionando sobre una máquina con Kubuntu, y permitiendo acceso mediante los protocolos HTTP y el propio de SVN. Las instrucciones se pueden aplicar a otras distribuciones o a Windows, salvando las distancias.

Descarga de componentes

El primer paso es descargar los paquetes necesarios. Para ello, utilizamos la orden:

sudo apt-get install subversion subversion-tools apache2 libapache2-svn

Tal como nos sugiere apt, después de instalar los paquetes reiniciamos el servidor Apache para que registre la configuración del módulo mod_dav_svn mediante la orden:

sudo /etc/init.d/apache2 force-reload

Creación del repositorio

Primero se debe crear manualmente el directorio que contendrá el repositorio, por ejemplo, en la ruta /usr/local/repositorio. Podemos utilizar ese mismo directorio como un repositorio general o como contenedor para otros tantos; por simplicidad, en este caso se contemplará la primera posibilidad.

A continuación, por motivos de seguridad lo mejor es crear un usuario dedicado únicamente al acceso y gestión del repositorio. En este caso lo llamaremos “svn”, para que sea fácil de recordar🙂 Y asignamos dicho usuario y su grupo (del mismo nombre) como propietarios del directorio /usr/local/repositorio.

Como el usuario svn, ejecutamos la orden para crear el repositorio con formato FSFS:

svnadmin create --fs-type fsfs /usr/local/repositorio
Después de este paso, dentro de la carpeta deberíamos tener cuatro subcarpetas conf, db, hooks y lock, además de un par de archivos sueltos.

Para arrancar el servidor SVN como un daemon, se ejecuta la orden svnserve -d. Además, con el parámetro -r y una ruta se restringen la publicación solo a los repositorios ubicados en ella.

svnserve -d -r /usr/local/repositorio

Acceso por svn://

Para comprobar el correcto funcionamiento del servidor, hacemos un checkout de su contenido; si se obtiene el mensaje “Revisión obtenida: 0” y se crea un subdirectorio oculto .svn está funcionando bien. Sin embargo, al crear directorios y/o ficheros en la copia de trabajo e intentar hacer commit se debería obtener un error de autenticación. Para solucionarlo es necesario modificar el fichero conf/svnserve.conf en el directorio del repositorio.

Permitir lectura y escritura anónima

Es suficiente modificar la directiva “anon-access” asignándole el valor “write”.

Restringir escritura

A la directiva “anon-access” se le asigna el valor “read”, y a “auth-access” el valor “write”. Para indicar dónde está el fichero con los nombres y contraseñas de usuarios con acceso se usa la directiva “password-db”. El fichero al que apunta debe ser de la forma:

[users]
nombre_de_usuario_1 = contraseña_1
nombre_de_usuario_2 = contraseña_2
...
nombre_de_usuario_N = contraseña_N

Una vez guardado ya nos debería permitir hacer commit, solicitando el usuario y la contraseña.

Acceso por http://

Al abrir el navegador y teclear nuestra dirección IP deberíamos poder ver una página en blanco con la frase “It works!”. Esto significa que Apache está funcionando como debe.

Para configurar el acceso por HTTP hay que activar el módulo mod_dav_svn con la orden a2enmod dav_svn. A continuación se debe modificar el fichero /etc/apache2/mods-available/dav-svn.conf. El resultado debería contener algo como lo siguiente:

<Location /svn>
# Uncomment this to enable the repository
DAV svn
# Set this to the path to your repository
SVNPath /usr/local/repositorio
# Basic Authentication is repository-wide.
AuthType Basic
AuthName "Repositorio Subversion de Arklad"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>

Este sistema de autenticación no es demasiado seguro, pero si el repositorio no es algo crítico se puede asumir el riesgo.

Finalmente, al igual que definimos unos usuarios para el acceso por el protocolo SVN, se debe hacer lo mismo por HTTP mediante la orden siguiente. Con el parámetro -c crea el fichero y con -m lo encripta en MD5.

htpasswd -cm ruta_fichero_password usuario_a_insertar

Ahora, al acceder por HTTP a http://maquina:puerto/svn el navegador debería mostrar un pop-up pidiendo usuario y contraseña. En caso de que el servidor mostrase el mensaje de que no existe la ruta indicada basta con ejecutar la orden siguiente para que Apache se recargue bien:

sudo /etc/init.d/apache2 reload

Conclusión

Con esto ya se puede hacer uso de un repositorio Subversion propio accesible a través de diferentes medios, sin grandes alardes pero que para uso de un grupo reducido de personas es suficiente. En caso de buscar más seguridad habría que configurar Apache con SSL, pero eso queda para otra ocasión🙂

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: