Migrar una instalación de Subversion a otro servidor

Cómo migrar Subversion.

Apache Subversion, también llamado simplemente Subversion o SVN es un sistema de control de versiones basado en repositorios lanzado en el año 2000. Es software libre con una licencia Apache/BSD.

Estos facilitan el control de cambios realizados en documentos o archivos, guardando todas sus verisones anteriores e incluyendo un registro mediante fecha y hora. De esta manera, es posible qué usuario ha realizado cambios en un determinado momento y qué cambios ha implicado esta modificación, siendo posible restaurarlo a ese punto.

Tiene una arquitectura cliente-servidor, de esta manera, en un servidor se almacena uno o más repositorios y el usuario realiza modificaciones sobre la última versión almacenada en el servidor.

Posee mucha similitud con git que es más reciente (2005), pero tiene algunos puntos que lo difieren entre sí. SVN es centralizado y git es distribuido. Además, entre otras diferencias es que para SVN es necesario disponer siempre de una conexión de red, mientras que con git solo es necesario para la sincronización de los ficheros.

En el servidor: Debian 6.0

El equipo servidor donde está instalado actualmente Subversion es un Debian Squeeze 6.0 con la versión 1.5.1 de Subversion. Permite el acceso a través del navegador web y los usuarios se autentican contra un LDAP.

La migración de Subversion a otro servidor con la herramienta dump nos da la posibilidad de hacerlo repositorio a repositorio. Esta herramienta es svnadmin y con una opción generará un fichero resultado del volcado. En nuestro caso, migramos el repositorio que está ubicado en /usr/local/svn/evaristogz con el nombre evaristogz.svn_dump: svnadmin dump /usr/local/svn/evaristogz/ > evaristogz.svn_dump

Este proceso hará el volcado revisión a revisión, por lo que el tiempo dependerá del número de cambios producidos en el repositorio y el tamaño de estos. Una vez generado el volcado, es necesario copiarlo al nuevo servidor que tiene como dirección IP 192.168.1.119: scp evaristogz.svn_dump root@192.168.1.119:/root/evaristogz.svn_dump

Una manera más rápida y efectiva es copiar todos los repositorios ubicados en /usr/local/svn. En nuestro caso, al tratarse de 60GB dejamos la ejecución de un scp precedido del comando nohup: nohup scp -pr /usr/local/svn/ EvaristoGZ@192.168.1.119:/home/EvaristoGZ/svnbackup De esta manera, si cerramos la terminal el comando seguirá ejecutándose hasta que acabe.

En el servidor nuevo: RHEL 6.6

El nuevo servidor donde se quiere migrar los repositorios de Subversion es una máquina con RHEL 6.6. En ella instalamos el paquete Subversion 1.6.11 con yum install subversion

Tras su instalación creamos el repositorio que queremos migrar en la ubicación deseada, en este caso, en /usr/local/svn/, por ello ejecutamos: mkdir /usr/local/svn/ y svnadmin create /usr/local/svn/evaristogz luego.

Ahora, cargamos el archivo dump nuevamente con la herramienta svnadmin: svnadmin load /usr/local/svn/ < evaristogz.svn_dump y tendremos los archivos de nuestro repositorio en el interior de este directorio.

Si todo ha salido correctamente, podremos acceder al repositorio a través de línea de comandos pero en nuestro caso no podemos hacer revisiones en él. Es decir, podemos consultar pero no podemos realizar cambios en los repositorios debido a que falta el fichero de configuración svnserve.conf que controla el comportamiento según cada repositorio. Lo copiamos en el directorio donde se ubican nuestros repositorios (/usr/local/svn).

Más configuraciones: Subversion con Apache

Es necesario instalar un servidor Apache en el otro servidor, para poder servir los repositorios de Subversion a través de HTTP. Para ello ejecutamos la instrucción yum install httpd que instalará un servidor web.

También necesario instalar el módulo de Apache mod_dav_svn (yum install mod_dav_svn), que no se encuentra instalado por defecto. En el fichero de configuración /etc/httpd/conf/httpd.conf debemos tener estas líneas descomentadas para que carguen los módulos dav_module y dav_fs_module. No es necesario insertar una línea para el mod_dav_svn.

Buscamos y comprobamos que estas líneas están descomentadas en el fichero /etc/httpd/conf/httpd.conf

Al final de este archivo, añadimos la configuración para Subversion con Apache:

Volcar los repositorios

Para migrar los repositorios de Subversion del antiguo servidor al nuevo podemos hacerlo con el comando svnadmin load o copiando todos los archivos en el directorio /usr/local/svn/

La diferencia es que la herramienta SVN solo permite hacer el volcado repositorio a repositorio, mientras que copiando todos los archivos al directorio de Subversion ahorraremos tiempo. Para ello utilizamos el comando cp con la opción -a, que conserva las propiedades del archivo (permisos, usuario y grupo propietario, atributos extendidos…)
La ejecución es la siguiente: cp -a /home/EvaristoGZ/svn/* /usr/local/svn/

Una vez copiados todos los archivos podemos comprobar que mantienen su última fecha de modificación. Aún así debemos asignar como usuario y grupo propietario a apache, por lo tanto: chown -R apache.apache /usr/local/svn/ para hacerlo de forma recursiva.

Crear los usuarios SVN

Ahora vamos a añadir los usuarios que podrán acceder a SVN mediante http y lo harán con autenticación básica.

Estos se guardarán en un fichero llamado /etc/svn-auth.conf y el primer usuario será EvaristoGZ. Lo creamos con htpasswd -cm /etc/svn-auth-conf EvaristoGZ mientras que si queremos añadir más usuarios debemos hacerlo sin el parámetro -c, de esta manera htpasswd -m /etc/svn-auth-conf EGZ

Ahora Apache pedirá autenticación al ingresar en la dirección URL desde un navegador web para poder ver los repositorios de Subversion.
Ventana de autenticación de usuarios en Apache Subversion SVN.

Activar autenticación LDAP

En este caso, se requiere la autenticación a través de LDAP así que la configuración de Apache variará, siendo eliminada la autenticación básica anterior.

Modificamos el final del fichero /etc/httpd/conf/httpd.conf, donde reemplazamos la configuración del directorio /svn/

Lanzar el servidor Subversion

Por último, hay que lanzar el servidor SVN para que escuche las peticiones de una ubicación de ficheros en concreto. Esto lo realizamos con la ejecución de snvserve -d -r /usr/local/svn/

Con ps aux | grep svnserve podremos ver que está ejecutándose:

Ahora, si accedemos a un repositorio mediante el navegador web, podremos ver el contenido de este.
Migración de Apache Subversión de Debian a RedHat.
Referencias:

Compartir es agradecer. Si te ha gustado... ¡compartélo!
Comparte con tus amigos










Enviar

2 Respuestas

  1. andrescanm dice:

    Hola, gracias por el tutorial. Sería excelente si se pudiese complementar con la configuración SSL.

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.