Instalando Subversion y Websvn en Debian
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 [email protected] "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 [email protected]
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 [email protected] 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 [email protected] 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.