Migrar una instalación de Subversion a otro servidor
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
1 2 3 4 |
(...) LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so (...) |
Al final de este archivo, añadimos la configuración para Subversion con Apache:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<VirtualHost *:80> DocumentRoot /var/www/ ServerName localhost <Location /svn/> DAV svn SVNParentPath /usr/local/svn/ AuthzSVNAccessFile "/usr/local/svn/svnserve.conf" AuthType Basic AuthName "Repositorio Subversion" AuthUserFile /etc/svn-auth.conf Require valid-user </Location> </VirtualHost> |
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.
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/
1 2 3 4 5 6 7 8 9 10 11 12 |
<Location /svn/> DAV svn SVNParentPath /usr/local/svn/ DavDepthInfinity on AuthzSVNAccessFile "/usr/local/svn/svnserve.conf" AuthType Basic AuthBasicProvider ldap AuthName "Repositorio Subversion" AuthLDAPURL "ldap://ldap.evaristogz.es/ou=People,o=evaristogz.es?uid?sub?(objectClass=*)" AuthzLDAPAuthoritative on Require valid-user </Location> |
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:
1 2 3 4 5 |
[root@servidor ~]# svnserve -d -r /usr/local/svn/ [root@servidor ~]# ps aux | grep svnserve root 10628 0.0 0.0 182720 924 ? Ss 09:09 0:00 svnserve -d -r /usr/local/svn/ root 10630 0.0 0.0 105364 844 pts/0 S+ 09:09 0:00 grep svnserve [root@servidor ~]# |
Ahora, si accedemos a un repositorio mediante el navegador web, podremos ver el contenido de este.
Referencias:
- How to Setup SubVersion Server on CentOS, RHEL & Fedora
- Cómo instalar y usar un servidor SVN en Linux
- Instalación de Subversion y Apache en Ubuntu
Hola, gracias por el tutorial. Sería excelente si se pudiese complementar con la configuración SSL.
Hola andrescanm. Ojalá pudiera, pero no cuento con este escenario de prueba ahora mismo :/ Saludos.