Artículo traducido de: http://www.howtoforge.com/debian_subversion_websvn
Proposito de este howto
Este howto muestra como instalar y configurar Subversion y Websvn en un servidor Debian con las siguientes características:
- Multiples repositorios Subversion
- Acceso a los repositorios a través de WebDAV (https, http) y ssh
- Acceso a traves de las cuentas de usuario de Linux y/o permisos de Apache
- Websvn seguro (aplicación web php para visualizar el código fácilmente)
- Coloreado de sintaxis en websvn con gnu enscript
No configuraré inetd con svnserve en este howto. Subversion será totalmente funcional sin el. Puede copiar/pegar la mayoría de este howto y le funcionará.
Paquetes que se asume que deben estar instalados
Este howto asume que PHP y Apache2 están instalados y configurados. La configuración de apache2 con SSL es opcional.
Instalando Subversion
Paquetes Subversion
Como root puede introducir los siguientes comandos para instalar los paquetes necesarios para el funcionamiento de Subversion:
# apt-get update # apt-get install subversion # apt-get install libapache2-svn
El paquete libapache2-svn instalará el módulo apache WebDav de subversion.
Creando y poblando los repositorios
Para trabajar con este howto crearemos dos repositorios:
# mkdir /var/svn-repos/ # svnadmin create --fs-type fsfs /var/svn-repos/project_zen # svnadmin create --fs-type fsfs /var/svn-repos/project_wombat
Los directorios de los repositorios necesitan los permisos apropiados para apache y los demás usuarios. Crearé un grupo y le añadiré los usuarios (no haga copiar/pegar aquí). El usuario de apache no lo pondremos en el grupo, ya que lo encuentro algo inseguro.
# groupadd subversion # addgroup john subversion # addgroup bert subversion # addgroup you subversion ... # chown -R www-data:subversion /var/svn-repos/* # chmod -R 770 /var/svn-repos/*
Ahora configuraremos la conexión ssh, en la máquina cliente introduzca los siguientes comandos:
$ mkdir ~/.ssh/ $ cd ~/.ssh/ $ ssh-keygen -t dsa $ cat ~/.ssh/id_dsa.pub | ssh you@example.com "cat - >> ~/.ssh/authorized_keys"
El servidor ejemplo.com es donde tenemos instalado Subversion. Por facilidad de uso de ssh puede elegir no usar contraseña con tu clave o usar el agente para mantenerse autenticado. Sino, cada transacción entre la máquina del usuario y el servidor Subversion le obligará a introducir la contraseña (muy molesto). El uso del agente se puede hacer mediante:
$ ssh-agent $ ssh-add $ ssh usuario@ejemplo.com
Ya tenemos todo preparado para usar el repositorio. Lo puede usted probar con esto, hará un import y un checkout:
$ mkdir ~/TEMP/ $ echo "testing svn" > ~/TEMP/testing.txt $ svn import -m "importing test over ssh+svn" ~/TEMP/ svn+ssh://example.com/var/svn-repos/project_zen/trunk $ svn co svn+ssh://example.com/var/svn-repos/project_zen/trunk testcheckout
Como resultado debemos obtener el fichero testing.txt en un directorio llamado testcheckout. En el servidor puede observar los repositorios con svnlook.
# svnlook tree /var/lib/svn/project_zen/
Configurando el WebDAV de Subversion
Por lo general el módulo de apache viene configurado, de todas formas puede asegurarse con los siguientes comandos:
# a2enmod dav # a2enmod dav_svn
La configuración se hace en el fichero /etc/apache2/mods-available/dav_svn.conf, pero primero debemos crear el fichero de acceso.
# htpasswd2 -c /etc/apache2/dav_svn.passwd usuario # htpasswd2 -c /etc/apache2/dav_svn.passwd john ...
Este es el contenido de mi fichero /etc/apache2/mods-available/dav_svn.conf:
<Location /svn_zen> DAV svn SVNPath /var/svn-repos/project_zen AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user SSLRequireSSL </Location> <Location /svn_wombat> DAV svn SVNPath /var/svn-repos/project_wombat AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user SSLRequireSSL </Location>
Puede comentar la linea SSLRequireSSL sino desea utilizar SSL, pero entonces deberá utilizar http en vez de https en los comandos siguientes. Deberemos reiniciar apache y probar desde la máquina cliente. Importaremos el mismo fichero de prueba en el proyecto wombat.
# /etc/init.d/apache2 restart $ svn import -m "probando sobre https" https://ejemplo.com/svn_wombat ~/TEMP/
Usando un navegador web puede visitar https://ejemplo.com/svn_wombat y ver el nuevo archivo. Esta es una vista muy basica del repositorio, pero usando un front-end web como websvn obtendremos una navegación por el repositorio mucho más completa.
Instalando Websvn
Paquetes requeridos
Para echar a andar websvn necesitamos los siguientes paquetes, los dos te mostrarán pantallas de configuración (se explica en el siguiente párrafo):
# apt-get install enscript # apt-get install websvn
Enscript no es obligatorio, pero es necesario para el coloreado de sintaxis en websvn.
Configuración
Enscript le preguntará por el tamaño del papel, esto es porque enscript es usado también para convertir ficheros ASCII a PostScript. Nosotros lo necesitamos para el coloreado de sintraxis.
Websvn nos preguntará que servidor queremos configurar, seleccionamos el nuestro y pulsamos intro.
La siguiente pantalla nos preguntará por el directorio del repositorio padre y por los directorios de repositorios específicos, esto determinará que repositorios serán visibles desde websvn. Nosotros sólo introduciremos el repositorio padre (/var/lib/svn), todos los repositorios creados en este directorio serán visibles mediante websvn. Si usted sólo quiere mostrar algunos repositorios específicos introduzca la ruta complete en la segunda pantalla y deje el directorio padre en blanco.
Como resultado de la configuracion el ficher /etc/websvn/svn_deb_conf.inc será creado. Puede volver a ejecutar las pantallas de configuración del paquete debian mediante dpkg-reconfigure. Aparte, el resto de la configuración de websvn está en el fichero /etc/websvn/config.inc. Este es el contenido de mi fichero con algunas extensiones para el coloreado de sintaxis.
< ?php
// --- LOOK AND FEEL ---
//
// Uncomment ONLY the display file that you want.
$config->setTemplatePath("$locwebsvnreal/templates/Standard/");
// $config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/");
// $config->setTemplatePath("$locwebsvnreal/templates/Zinn/");
// $contentType[".c"] = "plain/text"; // Create a new association
// $contentType[".doc"] = "plain/text"; // Modify an existing one
unset($contentType[".sh"]); // Remove a default association -> .sh is regarded as a binary file by default, needs to be unset
// --- COLOURISATION ---
// Uncomment this line if you want to use Enscript to colourise your file listings
//
// You'll need Enscript version 1.6 or higher AND Sed installed to use this feature.
// Set the path above.
//
$config->useEnscript();
// Enscript need to be told what the contents of a file are so that it can be colourised
// correctly. WebSVN includes a predefined list of mappings from file extension to Enscript
// file type (viewable in setup.inc).
//
// Here you should add and other extensions not already listed or redefine the default ones. eg:
//
// php is default correctly colourized
$extEnscript[".java"] = "java";
$extEnscript[".pl"] = "perl";
$extEnscript[".py"] = "python";
$extEnscript[".sql"] = "sql";
$extEnscript[".java"] = "java";
$extEnscript[".html"] = "html";
$extEnscript[".xml"] = "html";
$extEnscript[".thtml"] = "html";
$extEnscript[".tpl"] = "html";
$extEnscript[".sh"] = "bash";
// --- MISCELLANOUS ---
// Uncomment this if you don't have the right to use it. Be warned that you may need it however!
set_time_limit(0);
// Comment this line to turn off caching of repo information. This will slow down your browsing.
$config->setCachingOn();
// Number of spaces to expand tabs to in diff/listing view across all repositories
$config->expandTabsBy(8);
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// $config->findRepository("myrep")->expandTabsBy(3); // Expand Tabs by 3 for repository 'myrep'
?>
<?php
if ( file_exists("/etc/websvn/svn_deb_conf.inc") ) {
include("/etc/websvn/svn_deb_conf.inc");
}
?>
Lo siguiente es configurar el virtualhost en apache para websvn. Un ejemplo usando SSL:
<VirtualHost *:443> ServerAdmin webmaster@ejemplo.com ServerName svn.ejemplo.com DocumentRoot /var/www/websvn/ <Location /> Options FollowSymLinks order allow,deny allow from all AuthType Basic AuthName "Subversion Repository" Require valid-user AuthUserFile /etc/apache2/dav_svn.passwd <IfModule mod_php4.c> php_flag magic_quotes_gpc Off php_flag track_vars On </IfModule> </Location> SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.pem </VirtualHost>
Y un ejemplo sin SSL:
<VirtualHost *:80> ServerAdmin webmaster@ejemplo.com ServerName svn.ejemplo.com DocumentRoot /var/www/websvn/ <Location /> Options FollowSymLinks AllowOverride None order allow,deny allow from all AuthType Basic AuthName "Subversion Repository" Require valid-user AuthUserFile /etc/apache2/dav_svn.passwd <IfModule mod_php4.c> php_flag magic_quotes_gpc Off php_flag track_vars On </IfModule> </Location> </VirtualHost>
N.T.: Fijese en el mod_php4.c puede que usted esté utilizando otra versión diferente.
Reinicie apache y eche un vistazo al resultado en https://svn.ejemplo.com/.
Enlaces de interes sobre Subversion
Más información
- Sitio oficial de subversion
- Version control with Subversion, libro libre on-line
- websvn
Clientes subversion
- Subclipse
- RapidSVN
- kdesvn
- Zigversion (Mac OS X)
- Quicksilver plugin (Mac OS X)
- TortoiseSVN (Windows)
Espero que este howto te haya sido útil. Esta no es una configuracion perfecta, pero espero que te ayude a utilizar Subversion. Por favor, siente con toda libertad para enviar comentarios y correcciones.
![Validate my RSS feed [Valid RSS]](http://validator.w3.org/feed/images/valid-rss.png)
Thank you for making a translation of the howto, it’s a really nice complement
I noticed the contents of the apache configurationfiles in your blogpost here are missing tags. Replacing the arrowbrackets with html entities should fix it.
Thanks Bert, now the apache configuration typos are fixed.
Buenas.
Tengo un pequeño problema con el tutorial y con subversión.
Supongo que en algo me estoy equivocando, vaya que tengo algo mal en la configuración.
Resulta que cuando hago un commit en local algunos archivos del repositorio cambian su owner y group al usuario que estoy usando dejando de ser de www-data:subversion.
Esto acarrea que cuando quiero ver el repositorio a traves de websvn me devuelva este error:
Error running this command: svnlook youngest ‘/var/lib/svn/AplWeb’
svnlook: Can’t open file ‘/var/lib/svn/AplWeb/db/current’: Permission denied
Bien, este error lo solvento dando permisos de lectora a otros sobre el repositorio. Pero aun así me queda el gusanillo de donde me equivoco…
He estado buscando por google “alante” y no encontré nada salvo activar el atributo suid sobre el directorio pero esto solo impide que se cambie el group no el owner.
¿Alguna idea?
Muchas gracias y muy buen tutorial y traducción
M.
Subversion es la caña, nosotros lo tenemos implementado y funciona de maravilla.
Un saludo.
Para añadir usuarios al webdav utilizas la siguiente sentencia:
htpasswd2 -c /etc/apache2/dav_svn.passwd usuario
Esto es correcto para el primer usuario, pero los siguientes no deben llevar el parametro “-c” ya que en ese caso sobreescribe los usuarios anteriores.
Deberia ser asi:
htpasswd2 -c /etc/apache2/dav_svn.passwd usuario1
htpasswd2 /etc/apache2/dav_svn.passwd usuario2
htpasswd2 /etc/apache2/dav_svn.passwd usuario3
…
Saludos.
Hay un pequeño fallo de seguridad en este howto, el fichero de passwords no esta protegido y cualquier usuario de nuestro sistema podrá tener acceso a él y dado que se hace uso de codificación base64 equivale a obtener los passwords en claro. Para solventar este comportamiento podremos hacerlo:
chgrp www-data /etc/apache2/dav_svn.passwd
chmod o-r /etc/apache2/dav_svn.passwd
Me ha ayudado mucho este árticulo, hasta ahora solo había utilizado svnserve por la simplicidad… sin embargo ahora veo que usar svn apache es una solución más realista y no tan complicada como pensaba, mil gracias por la traducción
Salu2!
Tengo el mismo problema que Manuel, alguien lo ha resuelto?
Saludos amigos.
excelente gracias
Me ha ido muy bien este tutorial para preparar una documentación que esoty haciendo para un curso en catalan: http://xarxantoni.net:8080/mediawiki/index.php/Subversion#Instal.C2.B7laci.C3.B3_pas_a_pas_d.27un_servidor_subversion
Solo un comentatio. Creo que es muy restricitvo i da problemas el hecho de dar permisos 770 al repositorio. Me he encontrado que con estos permisos, al crear el repositorio primero con WebDav los ficheros pasan a ser de www-data grupo a www-data www-data con lo que luego al acceder via ssh da problemas de permissos…
Buenas, tengo el mismo problema que Manuel (yo tambi�n).
donde tengo los repositorios pertenecen a root:desarrollo donde desarrollo tiene todos los permisos. Y el svn/repositorio/db siendo de root:desarrollo (incluido ficheros dentro). El problema es que cada vez que hago un commit, y se crea una nueva versi�n… tanto el db/current como el db/versionquesea (un numero) pasan a ser de root:root en vez de root:desarrollo , con lo cual el websvn me dice el error que comenta Manuel.
Alguien sabe como arreglarlo??
a manuel starman y demas, la solucion pauperrima que he encontrado de momento a
/db/current’: Permission denied
es:
chmod 777 [ruta hasta el repositorio]
pero esto coloca tu repositorio en una esquina con tacones y una minifalda muy corta. Estoy buscando otras soluciones…