Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

martes, 10 de noviembre de 2015

Control de versiones con subversion

Hoy vengo a hablaros de una de las herramientas más usadas por los desarroladores; el control de versiones. En su día ya hable de las bases de git, pero en este caso quiero hablaros de una perspectiva más orientada a servidores... A la creación y el manejo de un servidor de control de versiones basado en una alternativa a git: subversion. Esta fabulosa herramienta tiene el mismo propósito que el de git, si bien en mi opinión subversion es más cómoda de usar (para gustos los colores).

Portada_svn

En este caso en vez de trabajar con github, trabajaremos dentro de una red local en la que tendremos el control de todos los elementos envueltos en el sistema; es decir que esta vez nosotros seremos dueños tanto del servidor como del cliente. Es por ello que primero debemos de preparar nuestro servidor para hacer de servidor de control de versiones de nuestra red local; para lograr esto deberíamos comenzar instalando las dependencias necesarias; dependencias que nunca van instaladas por defecto, pero que pueden ser instaladas con increíble facilidad, ya que están incluidas dentro de los repositorios oficiales... La instalación es tan sencilla como escribir:

apt-get install subversion subversion-tools

En apenas unos segundos ya tendríamos la herramienta preparada, si bien no el servidor, pues para ello sería necesario realizar unos pocos preparativos... Estos preparativos se basan en preparar un repositorio para alojar cualquier proyecto, además de preparar dicho repositorio para que pueda ser accedido por un usuario válido. Es por ello que lo primero que habría que hacer sería crear una carpeta denominada subversion en un directorio a nuestra elección (preferiblemente en /var); carpeta que almacenaría los repositorios que fuésemos creando. En dicha carpeta crearíamos un repositorio al que podríamos denominar repositorio_nuevo. Esto lo lograríamos con únicamente dos comandos:

  1. mkdir /var/subversion
  2. svnadmin create --fs-type fsfs /var/subversion/repositorio_nuevo

Este repositorio únicamente podría ser accedido por el creador de éste, y a lo sumo el grupo al que pertenece el creador, pero nosotros queremos una política más específica: Queremos que únicamente su creador y un grupo específico denominado svngroup sean capaces de acceder a nuestro recién creado repositorio. Esto puede parecer complicado, pero en verdad no se trata de nada más que la combinación de los comandos groupadd, addgroup, chown y chmod. Esta combinación se realizaría de esta forma:

Primero crearíamos el grupo svngroup; grupo que tendrá acceso al repositorio:

groupadd svngroup

Habría que hacer que los usuarios que queremos que sean capaces de acceder al repositorio, pertenezcan al grupo que recién hemos creado mediante el comando addgroup. Yo en este caso solo he añadido al usuario ivan al grupo:

addgroup ivan svngroup

Por mucho que nosotros creemos el grupo y añadamos usuarios a éste, si no hacemos que el repositorio se encuentre dentro del grupo que hemos creado de nada servirá. Para cambiar el usuario y el grupo al que pertenece el repositorio, habría que recurrir al comando chown tal que así:

chown www-data:svngroup -R /var/subversion/repositorio_nuevo

Por último (aunque sería opcional) podemos hacer que solamente el usuario www-data y el grupo svngroup puedan acceder al repositorio, excluyendo al resto de usuarios mediante la modificación de permisos; modificación que realizaríamos con chmod:

chmod 770 -R /var/subversion/repositorio_nuevo

El repositorio de por sí aunque está ahí; no puede ser accedido mediante el protocolo svn, con lo que habría que hacer que el repositorio que recién hemos creado pudiese ser accedido mediante dicho protocolo. Esto es tan sencillo como escribir:

svnserve -d -r /var/subversion/repositorio_nuevo

Para no dejar el repositorio completamente vacío, añadiríamos unos cuantos directorios nuevos... Este procedimiento es muy simple y puede servir como plantilla para futuros directorios... Estos directorios no serán creados "a pelo", sino que serán importados:

  1. mdkir /home/ivan/carpeta
  2. mdkir /home/ivan/carpeta/subcarpeta1
  3. mdkir /home/ivan/carpeta/subcarpeta2
  4. mdkir /home/ivan/carpeta/subcarpeta3
  5. svn import /home/ivan/carpeta file:///var/lib/svn/repositorio_nuevo

En general es bastante simple, si bien más de uno se preguntará... ¿Por qué aparece como directorio de destino la sección file://? Esto es debido a que a la hora de especificar el directorio en el que se va a importar, se tiene que usar siempre un prefijo; prefijo que podemos escoger entre 5 opciones:
  • file:// --> Este prefijo es usado en caso de querer realizar una importación de archivos en el propio equipo local. Es decir que solamente podemos usar este prefijo en el servidor de subversion. Se podría decir que este escenario sería lo mismo que decir que el cliente y el servidor svn son el mismo equipo.
  • http:// --> En caso de tener una WUI (Web User Interface), podemos recurrir a este prefijo para establecer comunicación con el servidor.
  • https:// --> Exactamente como el anterior, con la diferencia de que aquí se usa cifrado SSL, con lo que sería una comunicación más segura.
  • svn:// --> Se puede establecer comunicación con el servidor mediante el protocolo svn (suele ser la comunicación más común), si bien para ello es necesario haber ejecutado svnserve en el servidor.
  • svn+ssh:// --> Es parecido a la anterior opción, con la diferencia de que se realiza un tunel ssh.
Generalmente para acceder desde otro equipo; este debe de tener la aplicación subversion instalada para poder usar el protocolo svn tal que así:

svn://192.168.1.5/repositorio_nuevo

Para poder acceder desde Windows no podría hacerse desde la consola, sino que habría que recurrir a una herramienta de terceros como TortoiseSVN.

Espero que os haya resultado útil.

Saludos.

No hay comentarios :

Publicar un comentario