Configurar un servidor SVN sin dolor

martes, enero 29, 2008

Con esta entrada pretendo explicar como configurar tu propio servidor SVN de una forma indolora :D. Los pasos que describo son los que he seguido para configurar mi propio servidor, así que sí los siguen al pie de la letra y no se topan con ninguna "anormalidad" todo debería marchar sobre ruedas.

No pretendo extenderme en la explicación, sólo daré las bases para que estes en capacidad de manejar y mantener su propio servidor. Todos los procedimientos aquí descritos fueron realizados bajo Debian "Lenny" sin embargo, son compatibles para cualquier distro Debian-based. Si no usas una distribución basada en Debian entonces debes buscar el equivalente para algunos de los comandos (principalmente para los de instalación).

Antes de comenzar aclaro que todos los comandos que comienzen con # deben ser ejecutados con privilegios de super usuario o root. Los que comiencen con $ pueden ser ejecutados por el usuario corriente.

Bueno ¡Comencemos!


  • Primero, instalemos Subversion. Como root debes ejecutar:
    # apt-get install subversion

  • Luego creamos un repositorio de pruebas. Por defecto, subversion creará al árbol de directorios en /srv/svn, así que usaremos ésta ruta para nuestro repo
    # svnadmin create /srv/svn/repo

  • Ahora configuremos quienes pueden acceder al repositorio. Editamos el archivo /srv/svn/test/conf/svnserve.conf y nos aseguramos que quede como se indica más abajo.
    ¡Atención!: Estos permisos serán concedidos de una forma bastante básica. Si necesitas un nivel de seguridad mayor te recomiendo que leas al detalle el manual de SVN.
    [general]
    anon-access = none
    auth-access = write
    password-db = passwd

    Con esa modificación le decimos al servidor svn que los usuarios anónimos no tienen acceso, los usuarios autenticados pueden leer/escribir y que la base de datos empleada para las contraseñas es el archivo passwd.

  • Pasemos a la configuración de los usuarios y las contraseñas. Editamos el archivo /srv/svn/test/conf/passwd
    [users]
    pete = contraseña_de_pete
    maria = contraseña_de_maria

  • Es hora de iniciar el servidor:
    # svnserve -d -r /srv/svn

    Fíjense en el argumento "-r", esto se usa para esconder la ruta real de nuestro repositorio en la url pública del repositorio. Explicaré esto mejor con un ejemplo: sin la -r los usuarios para hacer una tarea común como el 'checkout' deben hacer svn checkout svn://hostname/srv/svn/test, pero si incluímos la -r a la hora de iniciar el servidor solo basta con hacer svn checkout svn://hostname/test para realizar la tarea (Nótese la ausencia de la ruta /srv/svn en la segunda opción)

  • Ahora creamos la carpeta de nuestro proyecto (con la estructura trunk, branch y tags), en este caso test:
    # mkdir -p /srv/svn/repo/test/trunk
    # mkdir -p /srv/svn/repo/test/branch
    # mkdir -p /srv/svn/repo/test/tags


Ok, ¡estamos listos con el servidor! Fácil, ¿no? Bueno, ahora probemos nuestro repo. Vamos a crear unos archivos de prueba y hagamos el primer 'commit'.

$ echo "Hola Mundo" > /tu_directorio_actual/test
$ echo "Texto de prueba" > /tu_directorio_actual/test2


Con el cliente svn ejecutamos la siguiente instrucción:
$ svn import /tu_directorio_actual/ svn://hostname/test -m "Initial Commit"
Adding /tu_directorio_actual/test1
Adding /tu_directorio_actual/test2

Commited revision 1.

Excelente, ya tenemos configurado nuestro servidor SVN y ¡funciona!. Recuerda que en la instrucción anterior debes reemplazar hostname por la dirección IP del servidor

Para actualizar tu "copia" del repositorio ejecuta:
$ svn update

Para verificar el estado de tus archivos de trabajo:
$ svn status

Y por último, pero no menos importante, el envío de tus modificaciones al servidor (commit):
$ svn commit -m "Comentario del Commit"

Es todo por ahora, espero que ésta pequeña guía les sea de utilidad.