viernes, 29 de julio de 2016

Cómo instalar y usar un servidor SVN en Linux

Después de un tiempo sin subir nada, voy a subir este instructivo que use y es muy bueno, le doy creditos a David (visiten su blog http://www.nosolocodigo.com/author/david )
Este blog es de información privada, que a mi me es útil y prefiero resguardar en caso que desaparezca la fuente original donde lo encontré

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... Saludos!!