Etiquetas: subversion tutorial http control versiones
Dificilmente concibo un proyecto de desarrollo de software con cierta complejidad, incluso aunque solo participe una persona, que tenga éxito sin utilizar algún sistema de control de versiones. Especialmente si el software llega a una versión estable en la que, con toda seguridad, habrá que corregir bugs y, además, se pretende desarrollar una nueva versión mientras la versión estable está en uso.
Por ello, el sistema de control de versiones es una herramienta imprescindible y básica en el toolbox de cualquier desarrollador de software.
Cierto es que "pillarle el rollo" a estos sistemas no es inmediato y suele suponer una barrera importante para el desarrollador novel. Pero todo el tiempo que se invierta en su conocimiento y en adquirir soltura con ellos bien utilizado está. No quepa duda de que se rentabilizará a la larga.
Subversion fué uno de los primeros sistemas de control de versiones open source y ha sido utilizado en muchos proyectos conocidísimos en el mundo del open source y el free software:
Son algunos de ellos.
En este tutorial vamos a mostrar como instalar un completo servidor de subversion en una máquina con GNU Linux Ubuntu 16.04.
A un repositorio de subversion se puede acceder de 3 formas:
Veremos la 3ª forma de acceso ya que es muy sencilla de desplegar y mantener al utilizar un servicio muy conocido y ubicuo como es HTTP con apache y la extensión WebDAV. Además, al exponer el servicio en el puerto 80, con lo que se evitan problemas con los cortafuegos perimetrales, ya que el puerto 80 (o 443 si se usa servidor seguro), se evitan problemas con los cortafuegos perimetrales ya que esos puertos están generalmente abiertos en cualquier infraestructura. Además ofrece una manera directa de navegar por los repositorios utilizando cualquier navegador web.
La instalación que describimos es para realizarla en un servidor con GNU Linux Ubuntu 16.04. No obstante sigue siendo válida para cualquier otra distribución de GNU Linux sin más que cambiar las instrucciones de instalación apt-get por las correspondientes para la gestión de paquetes de la distribución que se use (yum para CentOS o Fedora, por ejemplo).
Comenzamos instalando el servidor web apache, subversion y el módulo subversion de apache, que en cualquier distribución de GNU Linux se encuentran como paquetes instalables.
apt-get install apache2
apt-get install subversion
apt-get install libapache2-svn
El módulo libapache2-svn es que el hace posible acceder a los repositorios de subversion a través de WebDAV.
Ahora creamos el grupo subversion y añadimos el usuario www-data que es con el que se ejecuta el servicio apache, al grupo subversion.
addgroup subversion
adduser www-data subversion
y editamos el fichero /etc/apache2/mods-available/dav_svn.conf para configurar el directorio donde se alojarán los repositorios de subversion y para proteger el acceso mediante autoriación básica HTTP. El fichero de usuarios con sus password también se indica en este fichero.
<Location /svn>
DAV svn
SVNParentPath /var/lib/svn
SVNListParentPath On
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
Y ya lo tenemos todo, solo nos faltan los usuarios que tendrán acceso a los repositorios y algún repositorio para trabajar.
La creación de usuarios se hace con la herramienta estándar de apache htpasspwd:
htpasswd -c /etc/apache2/dav_svn.passwd juanda
Y la creación de repositorios con la herramienta svnadmin. Es importante que el usuario www-data tenga permisos de escritura sobre el repositorio para que los usuarios puedan enviar sus cambios y estos sean guardados en el repositorio.
svnadmin create /var/lib/svn/prueba
chown -R www-data /var/lib/svn/prueba
Y, por lo pronto solo el usuario juanda podrá comenzar a usar el servidor de subversion.
Por lo pronto todos los usuarios que se creen con htpasswd tendrán acceso a todos los repositorio. Pero podemos afinar esto un poco más y controlar el acceso por directorio. Para ello se usa el módulo de apache authz_svn, que lo hemos instalado con las instrucciones anteriores. Simplemente tenemos que configurarlo adecuadamente. Esto se hace sin más que añadir al fichero de configuración /etc/apache2/mods-available/dav_svn.conf, la línea AuthzSVNAccessFile /etc/apache2/auth_svn:
<Location /svn>
DAV svn
SVNParentPath /var/lib/svn
SVNListParentPath On
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
AuthzSVNAccessFile /etc/apache2/auth_svn
Require valid-user
</Location>
En dicha línea se hace referencia a un fichero que es el que contendrá las reglas de acceso a los directorios. Este archivo tiene la siguiente pinta:
[/]
* = r
[nombre_repo_1:/]
juanda = rw
jara = r
[nombre_repo_2:/trunk]
juanda = rw
No vamos a entrar a explicar con detalle la sintaxis de este fichero, puedes consultarla aquí. Pero como puedes ver es bastante intuitiva. El fichero de más arriba dice que todos los usuarios tienen acceso de lectura a todos los repositorios, que sobre el repositorio completo nombre_repo_1, juanda puede escribir y leer y jara solo leer. Y que sobre el directorio trunk del repositorio nombre_repo_2, juanda puede leer y escribir y los demás solo leer. En realidad la línea
jara = r
de la sección [nombre_repo_1:/] es innecesaria pues ya se ha dado acceso de lectura por defecto en las 2 primeras líneas, pero se ha añadido aquí para mostrar un poco más la sintaxis de este fichero de autorización.
Si se apunta con un navegador web a la url: http://mi.servidor-svn.es/svn podremos navegar por los repositorios creados y visualizar el contenido de sus archivos. No obstante el aspecto de la interfaz es muy pobre. Si queremos una interfaz algo más atractiva, podemos instalar la aplicación PHP websvn. Esta aplicación no se encuentra en el repositorio de Ubuntu 16.04, pero podemos instalarla a partir de sus fuentes:
apt-get install php libapache2-mod-php php-mcrypt
mkdir /var/www/html/
cd /var/www/html
wget http://websvn.tigris.org/files/documents/1380/49056/websvn-2.3.3.tar.gz
tar xvzf websvn-2.3.3.tar.gz
mv websvn-2.3.3 websvn
cd websvn
cp include/distconfig.php include/config.php
y editamos el fichero include/config.php para añadir al final la ubicación del directorio donde están los proyectos de subversion:
$config->parentPath("/var/lib/svn");
Protegemos el directorio /var/www/html/websvn tal y como hicimos con /var/lib/svn, usando autenticación básica HTTP. Para ello editamos el fichero /etc/apache2/sites-available/000-default.conf y añadimos dentro de la sección <VirtualHost>:
<Directory /var/www/html/websvn>
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Directory>
Y finalmente reiniciamos el servicio apache:
systemctl restart apache2
Et voilà! Ya tenemos un completo servidor de subversion para nuestro equipo de desarrollo.