En esta entrada vamos a tratar la instalación y configuración básica de un servidor de repositorios y control de versiones con subversion bajo Debian squeeze.
Primero descargamos e instalamos los paquetes necesarios y sus dependencias, si no los tuviesemos ya, con sus configuraciones por defecto:
# apt-get install apache2 libapache2-mod-php5 openssl \ subversion libapache2-svn subversion-tools websvn
La configuración por defecto de websvn generará un archivo de configuración que interferirá con nuestros propósitos, por ello puedes borrarlo o comentar su contenido:
# rm /etc/apache2/conf.d/websvn
Acto seguido generamos el certíficado para la conexión segura, que lo haremos de la siguiente forma:
# mkdir /etc/apache2/ssl
# RANDFILE=/dev/random openssl req $@ -new -x509 -days 365 -nodes \
-out /etc/apache2/sslcerts/websvn.pem \
-keyout /etc/apache2/sslcerts/websvn.pem
# chmod 600 /etc/apache2/sslcerts/websvn.pem
En el momento de generar un certificado nos solicitará cierta información acerca de este, tales como el país, ciudad/provincia, empresa, área/departamento, etc.
El uso de un certificado generado de esta forma hará que el navegador muestre una alerta de seguridad. Si queremos evitar esto hay que pasar por caja y comprar un certificado a una Autoridad de Certificación.
Actualización:
Es posible adquirir certificados válidos para la mayoría de los navegadores actuales en StartSSL
Configuración de Apache2 + SSL + websvn
Pasamos a configurar el acceso seguro mediante SSL en Apache2, así como la ubicación de los repositorios.
El directorio donde alojaremos los repositorios, recordemos que debe estar accesible para websvn:
# mkdir /var/svn # chown www-data:www-data /var/svn # chmod 655 /var/svn
Creamos el archivo de configuración de Apache2:
# vi /etc/apache2/sites-available/svn
Contenido que agregaremos a este archivo:
NameVirtualHost *:443
<VirtualHost *:443>
ServerAdmin default@exmaple.com
SSLEngine On
SSLCertificateFile /etc/apache2/sslcerts/websvn.pem DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Alias /websvn /usr/share/websvn
<Directory /usr/share/websvn>
DirectoryIndex index.php
Options FollowSymLinks
Order allow,deny
Allow from all
AuthType Basic
AuthName Subversion Repository
AuthUserFile /var/svn/.auth
Require valid-user
</Directory>
<Location /svn/>
DAV svn
SVNParentPath /var/svn/
SVNListParentPath on
AuthType Basic
AuthName Subversion Repository
AuthUserFile /var/svn/.auth
Require valid-user
</Location>
</VirtualHost>
Ahora agregamos usuarios que tendrán permiso para acceder a nuesto repositorio:
# touch /var/svn/.auth # chown www-data:www-data /var/svn/.auth # htpasswd -m /var/svn/.auth nombre_del_usuario
Para agregar varios usuarios repetir la última línea tantas veces como sea necesario. Recuerda que con esta configuración todos los usuarios tendrán los mismos privilegios de acceso. Para afinar puedes consultar la documentación de mod_authz_svn
Observación de seguridad: el archivo con los datos de usuarios y contraseñas encriptadas únicamente sería accesible desde el exterior mediante el intérprete DAV. Si aun así queremos asegurarnos que no es accesible podemos agregar una directiva de seguridad en /etc/apache2/sites-available/svn, dentro del apartado VirtualHost:
<Files ~ /var/svn/.auth> Order allow,deny Deny from all </Files>
Activamos el sitio en Apache:
# ln -s /etc/apache2/sites-available/svn \ /etc/apache2/sites-enabled/svn
O bien:
# a2ensite svn
Tras esto reiniciamos el servicio Apache:
# /etc/init.d/apache2 restart
Y ya podremos verlo!! Por supuesto debemos autenticarnos antes.
https://direccion_de_mi_sitio/websvn/ para acceder a websvn
https://direccion_de_mi_sitio/svn/ para acceder a subversion
Configurar y usar repositorios
Para agregar un nuevo repositorio:
# cd /var/svn # mkdir mirepositorio # svnadmin create mirepositorio # chown www-data:www-data mirepositorio -R
En la interfaz de websvn aparece un repositorio de muestra llamado “repos 1″, para eliminar este hay que editar el archivo /etc/websvn/svn_deb_conf.inc y comentar o eliminar la línea donde se crea este.
...
#$config->addRepository("repos 1", "file:///var/svn");
...
Y ya por último, cómo agregar la información al repositorio. En mi caso he utilizado el cliente TortoiseSVN. Su uso es tan sencillo como abrir el “Repo-browser”, dar la dirección del repositorio (eg: https://misitio/svn/repositorio1), autenticarse y arrastrar los archivos a añadir o actualizar.
Fuentes consultadas:
- http://subversion.apache.org/
- http://svnbook.red-bean.com/index.es.html
- http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-serversetup-apache.html
- http://www.esdebian.org/wiki/subversion-apache2-ssl-interface-web-websvn
- http://wiki.freaks-unidos.net/Apache2%20SSL%20and%20Subversion%20in%20Debian
- http://httpd.apache.org/docs/2.0/mod/core.html

