Introducción
Con el fin de mejorar este tutorial, aportaré como he configurado el subversion para que responda a través de internet, funcione correctamente con el http://tortoisesvn.net/ y habilitar contraseñas según los proyectos.Queremos no solo que el subversión funcione, sino que pueda haber varios proyectos en nuestro repertorio y cada uno tenga unos permisos de acceso distintos, de forma que algunos usuarios puedan acceder a ciertos proyectos y otros no.
También deseamos que la comunicación con el servidor sea seguro, mediante https.
Instalación en el servidor con Centos 5El primer paso es instalar el svn:yum -y install mod_dav_svn mod_ssl subversion
Crear los distintos repertorios para el subversion:- /usr/subversion/svn/ Para guardar los distintos proyectos.
- /usr/subversion/access/ Para los archivos de permisos, contraseñas y certificados
mkdir /usr/subversion
mkdir /usr/subversion/svn
mkdir /usr/subversion/access
Modificar el propietario/grupo:
chown -R apache /usr/subversion
chgrp -R apache /usr/subversion
Crear un proyecto de prueba:svnadmin create /usr/subversion/svn/prueba
Crear un fichero de usuarios:Creamos un fichero de usuario, es un fichero estándar que contiene sencillamente una lista de nombres de usuarios y sus respectivas contraseñas codificadas, del que apache verificará si el usuario tiene los permisos adecuados.
Nota: los valores entre < y > son a tu elección.
El archivo de usuarios (que vamos a llamar users por ejemplo) lo colocaremos en la carpeta access.
htpasswd -c /usr/subversion/access/users <usuario1>
<pass>
<pass>
htpasswd /usr/subversion/access/users <usuario2>
<pass>
<pass>
htpasswd /usr/subversion/access/users <usuario3>
<pass>
<pass>
...
Configurar el acceso de cada usuario:Ahora configuraremos un archivo que asigna qué usuarios pueden acceder a qué proyecto. En nuestro caso solo tenemos uno, pero podría haber muchos.
Creamos un archivo (ACL por ejemplo) en nuestra carpeta access:
nano /usr/subversion/access/ACL
Y escribimos lo siguiente:
[prueba:/]
@pruebaTeam=rw
[groups]
pruebaTeam=usuario1, usuario2
Una pequeña explicación:
Para cada proyecto, escribimos:
[<repoName>:<repoPath>]
<usuario>=<permisos>
<usuario>=<permisos>
...
Nota: los permisos empiezan por ser nulos para todos y se asignan, por lo que si en una linea das por ejemplo "rw" y a la siguiente asignas solo "r", el usuario tendrá "rw"
Los permisos son "r" = lectura, "w"=escritura.
Se pueden crear grupos de usuarios mediante:
[groups]
<nombreGrupo>=<usuario>, <usuario>, ...
Configurar Apache:Debemos elegir nuestro dominio/directorio que corresponderá al subversion, por ejemplo, en nuestro caso usaremos http://<dominio>/svn/<proyecto>
Accedemos al archivo de configuración del subversion para apache:
nano /etc/httpd/conf.d/subversion.conf
- Quitamos las lineas de LimitExcept Para que nos pida contraseña también para descargar y no solo para el commit.
- Añadimos AuthzSVNAccessFile /usr/subversion/access/ACL dentro del Location
- Modificamos la linea SVNParentPath a /usr/subversion/svn
- Modificamos la linea <Location.. por <Location /svn>
- Modificamos la linea AuthUserFile a /usr/subversion/access/users
El archivo final queda aproximadamente como:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
#diversos comentarios
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
Listen 447
#Elegimos nuestro puerto, por ejemplo 447 para el svn ssl
<VirtualHost miHost:447>
#la raiz no puede ser subversion, para evitar acceso a /access
#style es una buena opción, allí guardaremos la hoja .xsl
DocumentRoot "/usr/subversion/styles"
#nuestro servidor
ServerName miHost
#activar SSL
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
#las carpetas de los certificados, aun no creadas
SSLCertificateFile /usr/subversion/access/ssl.crt
SSLCertificateKeyFile /usr/subversion/access/ssl.pem
#la carpeta de subversion, en nuestro caso /svn
<Location /svn>
DAV svn
SVNParentPath /usr/subversion/svn
AuthzSVNAccessFile /usr/subversion/access/ACL
Satisfy all
Require valid-user
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /usr/subversion/access/users
</Location>
</VirtualHost>
No olvides de sustituir
miHost por tu host real, por ejemplo: quijost.com
Claves SSL:El siguiente paso es insertar los certificados si los tenemos: ssl.pem para la clave privada y ssl.crt para el certificado.
En nuestro caso, como no tenemos dinero de sobra, crearemos un certificado auto-firmado:
cd /sur/subversion/access
openssl genrsa -des3 -rand file1:file1 -out ssl.key 1024
openssl rsa -in ssl.key -out ssl.pem
openssl req -new -key ssl.pem -out ssl.csr
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.pem -out ssl.crt
Hay que responder a algunas preguntas, pero tampoco requieren de mucha explicación: claves, nombres, etc.
El .csr es el archivo que hay que pasar a las entidades para que nos proporcionen un certificado real.
También hay que tener en cuenta que el nombre del host no puede ser una IP si queremos un certificado real, y debe ser obligatoriamente el nombre de nuestro servidor web, por ejemplo quijost.com
Iniciamos el servicio:service httpd start
Otras operaciones interesantes:Puede hacer un backup de todo el svn con:
svnadmin dump /usr/subversion/svn/prueba > /usr/subversion/prueba.dmp
Y puede volver a cargar un backup mediante:
svnadmin load /usr/subversion/svn/prueba < /usr/subversion/prueba.dmp
Muy práctico para no tener disgustos o para transferir el servidor svn a otro lado.
Espero que les sea útil
Nuestro Subversion esta listo, una vez instalado el TortoiseSVN en tu sobremesa, creas una carpeta y haces un "SVN Checkout" que viene en el menú al hacer clic derecho sobre la carpeta.
Te pedirá la clave de alguno de los usuarios que hemos creado y listo.
No te olvides de hacer commit después de trabajar.
Puede acceder a el mediante:
https://mihost:447/svn/prueba