Todo programador sabe de la importancia de un servidor de versiones a la hora de programar en grupo o de mantener un software que va creciendo con el tiempo, nada mejor que disponer de nuestro propio servidor SVN para esto.
Instalando y configurando el servidor SVN
Para instalar el servidor es muy sencillo, simplemente nos accedemos al terminal de línea de comandos como root y ejecutamos lo siguiente:
yum install subversion
Deberemos asegurarnos previamente de que no tenemos la palabra «perl» en la línea de excludes del fichero yum.conf, si fuera así deberíamos de comentar la línea de exludes, guardar cambios y volver a ejecutar el comando.
Una vez se haya completado la instalación, dispondremos del servidor y el cliente de subversion instalados en nuestro sistema. Ahora deberemos de crear el directorio donde guardaremos nuestros repositorios de software, en mi caso voy a guardarlos en el directorio /root/repos, después crearemos nuestro primer repositorio.
mkdir /root/repos svnadmin create /root/repos/nombre_repositorio
Siguiendo estos sencillos pasos ya disponemos de un repositorio creado, ahora vamos a ver como lanzar el servicio. Por defecto no se crea el script de inicialización que debería de almacenarse en /etc/init.d/subversion, por lo que tendremos que lanzar el servicio manualmente, para ello ejecutamos el siguiente comando:
mkdir /root/repos svnserve -d -r /root/repos
Este comando lanzará el proceso que dejará el servidor subversion a la escucha en el puerto 3690. Para saber si está el proceso a la escucha podemos emplear el siguiente comando:
netstat -anp | grep svn #La salida del comando debería ser algo así: # # tcp 0 0 :::3690 :::* LISTEN 17911/svnserve # #Vemos que hay un proceso con PID 17911 escuchando en el puerto 3690 del protocolo TCP.
Para parar el servicio, podemos proceder a matar el proceso con un «kill -9 PID», en este caso, «kill -9 17911» .
Para realizar una importación inicial podemos ejecutar el siguiente comando:
mkdir /root/repos svn import /home/david/software/miproyecto file:///root/repos/nombre_repositorio/ -m "Importacion inicial"
Este comando efectuará una importación inicial del directorio miproyecto al repositorio que acabamos de crear. Deberemos de tener el puerto 3690 abierto tanto en entrada como salida para poder usar el servidor y clientes de SVN respectivamente, podemos usar estos comandos:
iptables -A INPUT -p TCP --dport 3690 -j ACCEPT iptables -A OUTPUT -p TCP --dport 3690 -j ACCEPT
Ya tenemos nuestro servidor corriendo, vamos a ver como configurar los accesos al servidor. Si accedemos al directorio /root/repos/nombre_repositorio veremos que hay creados 3 ficheros: authz , passwd y svnserve.conf. Hacemos una copia de seguridad antes de editarlos por si acaso 🙂
Vamos al fichero svnserve.conf y dejamos los siguientes valores:
[general] anon-access = none auth-access = write password-db = passwd authz-db = authz realm = Mi software
Como veis, hemos limitado el acceso a gente anonima, por lo que todo el mundo deberá de acceder con usuario y contraseña que ahora veremos como definir. Ahora vamos al fichero passwd y dejamos los siguientes valores para crear el usuario david, puede cambiar el nombre de usuario y pass por el que quieras, logicamente:
[users] david = MiPasComplicado4758965
Por último editamos el fichero authz y lo dejamos como se muestra:
[groups] # harry_and_sally = harry,sally [nombre_repositorio:/] david = rw
Como puedes ver, se pueden definir grupos. En este caso le damos acceso de lectura y escritura al usuario david. Guardamos los cambios y ya tenemos nuestro servidor SVN configurado. Ahora vamos a ver como usar el cliente de línea de comandos de una forma básica.
Usando el cliente de SVN
Nos vamos a un ordenador cualquiera y hacemos el checkout inicial, para ello navegamos en línea de comandos hasta el directorio donde queremos hacer el checkout y usamos el siguiente comando:
svn checkout --username david svn://miserver.com:3690/nombre_repositorio/
Nos pedira el password y descargará todo el código al directorio actual. Ahora vamos a ver un par de comandos básicos para añadir ficheros y actualizar nuestro código. Imaginar que queremos crear un nuevo directorio y dentro de este directorio queremos crear un fichero, pues accedemos al código y ejecutamos lo siguiente.
mkdir midir cd midir nano mificheronuevo.php #Escribimos el contenido que necesitemos #Añadimos un nuevo fichero svn add midir mificheronuevo.php svn commit -m "Comentarios del commit" midir mificheronuevo.php
Con este código creamos un nuevo directorio, dentro creamos un fichero, los añadimos al repositorio central de Subversion y ejecutamos el commit para subirlos al servidor.
Copias de seguridad de Subversion
Podemos hacer copias de seguridad de nuestro repositorio empleando el siguiente comando:
svnadmin dump /root/repos/nombre_repositorio > nombre_repositorio.svn_dump
Después podemos recuperarla fácilmente en otro servidor creando un nuevo respositorio y volcando el dump:
svnadmin create /root/repos/nombre_repositorio svnadmin load /root/repos/nombre_repositorio < nombre_repositorio.svn_dump
Si investigas un poco más, verás como puedes hacer dumps solo de los cambios efectuados a partir de un número de revisión concreto y muchas cosas más. De momento, hasta aquí hemos llegado.. Recomiendo la lectura de este artículo de Ariel Camus para los no iniciados. Saludos!!