DIAS Services

Instalación Servidor de Desarrollo: svn, trac, webdav

Un amigo me facilitó el libro de David J. Murphy, Managing Sorftware Development with Trac and Subversion: Simple project management for software development, Pack Publishing 2007. Por supuesto, interesante porque las herramientas que menciona David (subversion, trac y WebDAV) son gratuitas y de código abierto (open source).

En el capítulo 3, se explica como instalar un servidor de Subversion (aquí se consigue el libro de Subversion o svnbook), Trac (una interface en Python para Subversion y otros manejadores de revisiones), además usando WebDAV (una funcionalidad del servidor HTTP Apache).

En esta nota voy a repasar los pasos mencionados en ese capítulo para instalar esas tres herramientas para Debian GNU/Linux 6.0 (Linux localhost.localdomain 2.6.32-5-686), Apache/2.2.16. Por cierto, svn y trac se instalan en Debian con el comando aptitude install subversion trac.

Hay dos razones por las cuales estoy escribiendo esto. La primera es que me parece difícil leerlo de allí porque David trata de explicar como se hace para Windows y Linux (Debian o Ubuntu) simultáneamente, y el lector (o sea yo) tiende a confundirse. La segunda razón es porque hay cosas que no me funcionaron haciendo los pasos tal como está allí indicado (esto fue, claro está, porque hay cosas que David no dice o pasa por alto). Entonces, esto es para novatos como yo.

Al verme detenido y con el servidor de desarrollo instalado a medias, le pregunté a San Google y de allí obtuve algunos artículos interesantes y otros que me enredaron la cabeza aún más. Lo mejor que conseguí (y que pudiera asociar o mezclar con lo del libro) es del Blog de Carlos Hernando, Servidor de proyectos con Subversion, Trac, Apache (y LDAP), un artículo que además está escrito en español.

La configuración que usé es la misma de David: un directorio "projects" en el raíz:

mkdir /projects

donde van a estar tres subdirectorios svn (repositorio de subversion), trac (Trac - obvio, no? -) y files (WebDAV).

cd /projects
mkdir svn trac files

 Claro, esta configuración cambia según los gustos. Estoy repasando solo lo propuesto por David.

Para hacer accesible este directorio desde el navegador con el URL http://localhost/projects hay que instalar algunas cosas en Apache Debian. (Aquí es por supuesto donde uno se da cuenta que no sabe nada de Apache o que le falta a uno bastante por aprender.)

Habilitar módulos de Debian

Lo primero es habilitar algunos módulos. David indica que se debe habilitar 

dav_fs

pero dependiendo de la configuración hacen falta otros (dav se instala por defecto al habilitar el anterior):

dav
dav_svn 
auth_basic
authn_file
mod_python 

Cada uno de estos mídulos se habilita de la siguiente forma (ejemplo con dav_fs):

a2enmod dav_fs

Modificar sites-enabled/default y mods-enabled/dav_svn.conf

Luego de habilitar los móduos, los archivos que hay que modificar son 

/etc/apache2/sites-enabled/default
/etc/apache2/mods-enabled/dav_svn.conf 

Al final del primer archivo, i.e. "default", se agrega lo siguiente:

<Location /projects>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /projects/trac
PythonOption TracUriRoot /projects
</Location>
<LocationMatch "/projects/[^/]+/login">
AuthType Basic
AuthName "Trac Environment"
AuthUserFile /projects/projects.password
Require valid-user
</LocationMatch>
Alias /files /projects/files
<Location /files>
DAV On
AuthType Basic
AuthName "Files"
AuthUserFile /projects/projects.password
Require valid-user
</Location>
<LocationMatch ^/files/[^/]+/(images|public)/>
<LimitExcept GET OPTIONS>
Require valid-user
</LimitExcept>
</LocationMatch>

Y el segundo archivo "dav_svn.conf" se modifica quitando el símbolo # de comentario, lo que resulta en:

<Location /svn>
# Uncomment this to enable the repository
DAV svn
# Set this to the path to your repository
#SVNPath /var/lib/svn
# Alternatively, use SVNParentPath if you have multiple repositories under
# under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, ...).
# You need either SVNPath and SVNParentPath, but not both.
SVNParentPath /projects/svn
# Access control is done at 3 levels: (1) Apache authentication, via
# any of several methods. A "Basic Auth" section is commented out
# below. (2) Apache <Limit> and <LimitExcept>, also commented out
# below. (3) mod_authz_svn is a svn-specific authorization module
# which offers fine-grained read/write access control for paths
# within a repository. (The first two layers are coarse-grained; you
# can only enable/disable access to an entire repository.) Note that
# mod_authz_svn is noticeably slower than the other two layers, so if
# you don't need the fine-grained control, don't configure it.
# Basic Authentication is repository-wide. It is not secure unless
# you are using https. See the 'htpasswd' command to create and
# manage the password file - and the documentation for the
# 'auth_basic' and 'authn_file' modules, which you will need for this
# (enable them with 'a2enmod').
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /projects/projects.passwd
# To enable authorization via mod_authz_svn
#AuthzSVNAccessFile /etc/apache2/dav_svn.authz
# The following three lines allow anonymous read, but make
# committers authenticate themselves. It requires the 'authz_user'
# module (enable it with 'a2enmod').
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>

Al hacer estas modificaciones, se puede ejecutar

apache2ctl restart

Crear el servidor svn y trac

Mis dolores de cabeza terminaron cuando esto funcionó. Ahora bien, lo demás termina como dice David:

cd /projects

Servidor de subversion:

svnadmin create /projects/svn/projectname --fs-type fsfs

Archivos a usar con WebDAV:

mkdir -p files/projectname/public files/projectname/private files/projectname/images

El miniambiente de gestión de proyectos Trac

trac-admin trac/projectname initenv

Este último comando nos pedirá varias cosas, la mayor parte por defecto (solo presionar enter), pero dos son importantes Project Name (projectname) y Path to repository (/projects/svn/projectname).

Seguridad y autentificación de usuarios

Para añadir seguridad, se usa el archivo /projects/projects.passwd, el cual se crea con el comando:

htpasswd -c /projects/projects.password usuario

donde usuario es el nombre del usuario. Al hacer esto, solicita un password que se alamacena en el archivo projects.password. El siguiente usuario se añade con el comando:

htpasswd /projects/projects.passwd otrousuario

La herramienta htpasswd se usa para seguridad, específicamente para autentificación de usuarios. Se añaden algunos permisos al directorio /projects:

chgrp -R www-data /projects
chmod -R g+w /projects
chmod -R g+s /projects 

Finalmente, algunos permisos más para Trac:

cd /projects
trac-admin trac/projectname 

Y se añade en trac-admin:

permission remove anonymous WIKI_CREATE WIKI_MODIFY BROWSER_VIEW
permission add authenticated WIKI_ADMIN BROWSER_VIEW MILESTONE_ADMIN
quit 

Todo funcionando

Para verificar la instalación se puede hacer como en este artículo de iNode: Nota Bene: se puede crear el directorio /tmp/newsvn con tres subdirectorios trunk, tags, branches (comunes de subversion). Y luego,

svn import /tmp/newsvn file:///projects/svn/projectname/ -m "initial import"

Se apunta el Navegador a la dirección

http://localhost/projects/projectname/

Y debe verse el ambiente de Trac:

Pantalla de Trac funcionando

Se hace clic en Login y debe pedir un usuario y password. Luego, apunte a Browse Source y deben aparecer los tres directorios creados anteriormente, branches, tags, trunk:

Directorios creados en el repositorio svn

Ah, y por cierto, el logo de Días Services lo agregué en /projects/trac/projectname/htdocs. Además, se debe modificar la directiva [header_logo] e incluir el nombre del archivo en /projects/trac/projectname/conf/trac.ini


DIAS Services Corp.Aunque me gradué de Ingeniero de Sistemas hace unos cuantos años no es sino hace unos tres o cuatro años que intento navegar en el diseño Web, comprender UX y jugar con plantillas CSS.

DIAS Services Corp. es una pequeña compañía, con base en Panamá, con la cual estoy colaborando actualmente. Aquí tienen una muestra de ese trabajo y de algunos proyectos en marcha.

 Dudas, preguntas o comentarios a nuestro Twitter @DiasServices o al email Esta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla.