Instalando Collaboa.

Esta guia presupone que ya tienes instalado Ruby, Rubygems y Rails. Si no es asi te recomiendo la magnifica guia de Hivelogic al respecto, del que este ensayo sigue el esquema. Asi mismo mantengo la recomendación de utilizar el directorio /usr/local para ubicar todos los binarios que generemos de manera que se minimize la posibilidad de interferir con otras versiones que ya tengamos instaladas en otros paths del sistema y sigamos el feng-shui de Hivelogic.

Lo primero es lo primero

Creamos un directorio donde guardar el codigo fuente de las librerias a compilar por ejemplo ~/src. Primero instalaremos SWIG. Esta herramienta hace de pegamento entre los programas de C de Subversion y la aplicacion ruby de Collaboa. En general se encarga de conectar todo tipo de lenguajes (de scripting y de no scripting) con programas C/C++. Puedes enterarte más a fondo del tema aqui.

 tar xzvf swig-1.3.27.tar.gz
 cd swig-1.3.27/
 ./configure --prefix=/usr/local
 make
 sudo make install
 cd ..

A continuación toca instalar el propio Subversion. En el mundo-feliz-marca-acme no deberia llevar mucho tiempo aunque los problemas de dependecias, de versiones, etc… pueden ser tantos que no cabrian en esta guia todas las posible soluciones. Asi que en caso de problemas te recomiendo que acudas a la pagina del proyecto :

 tar xzvf subversion-1.3.0.tar.gz
 cd subversion-1.3.0/
 ./configure --prefix=/usr/local
 make
 sudo make install
 cd ..

Esto (con suerte) te habra compilado e instalado la parte cliente y servidora de subversion. Para comprobarlo apenas una linea:

aitor@osirys> svn --version
svn, versión 1.3.0 (r17949)
   compilado Jan 12 2006, 16:29:52

Bien hasta aqui hemos instalado swig y subversion. Para que ambos sepan mutuamente de su existencia una llamadita rapida (o no) a make:

  cd subversion-1.3.0/
  make swig-rb
  make check-swig-rb

Esta ultima instrucción comprobará que la compilación que acaba de hacer de los bindings swig-subversion funciona correctamente y la salida deberia paracerse a esto:

 cd /src/subversion-1.3.0/subversion/bindings/swig/ruby; \
  /usr/local/bin/ruby -I /src/subversion-1.3.0/subversion/bindings/swig/ruby \
    /src/subversion-1.3.0/subversion/bindings/swig/ruby/test/run-test.rb \
    --verbose=normal
Loaded suite test
Started
......................................E...................E........................
Finished in 301.567785 seconds.

Aunque con un poco de suerte la maquina donde estes compilado esto tendra menos de 5 años y no tardará 5 minutos en chequear los bindings. Esas dos “E” en la linea de puntos son dos errores que se han producido en los tests ejecutados. En mi caso eran los siguientes:

1) Error:
test_create(SvnFsTest):
Svn::Error::VERSION_MISMATCH: ... FS module version for 'bdb': found 1.3.0, expected 1.2.3
    ... /subversion/bindings/swig/ruby/svn/util.rb:58:in `svn_fs_create'
    ... /subversion/bindings/swig/ruby/svn/util.rb:58:in `create'
    ... /subversion/bindings/swig/ruby/svn/fs.rb:27:in `create'
    ... /subversion/bindings/swig/ruby/test/test_fs.rb:31:in `test_create'

  2) Error:
test_create(SvnReposTest):
Svn::Error::VERSION_MISMATCH: ... FS module version for 'bdb': found 1.3.0, expected 1.2.3
    ... /subversion/bindings/swig/ruby/svn/util.rb:58:in `svn_repos_create'
    ... /subversion/bindings/swig/ruby/svn/util.rb:58:in `create'
    ... /subversion/bindings/swig/ruby/svn/repos.rb:37:in `create'
    ... /subversion/bindings/swig/ruby/test/test_repos.rb:80:in `test_create'

119 tests, 609 assertions, 0 failures, 2 errors
make: *** [check-swig-rb] Error 1

Interludio para cuarteto de cuerda Opus. 23

Subversion es capaz de utilizar diferentes tipos de almacenamiento para su estructura interna dependiendo de las preferencias o requerimientos de cada instalacion. Los dos disponibles actualmente son Berkeley DB y FSFS. Inicialmente se utilizo Berkeley DB por varias razones aunque pronto hubo problemas con permisos y con el mantenimiento de los repositorios que utilizan este sistema (recuerdo algunas tardes muy dolorosas relacionadas con este punto…). A mediados de 2004 se introdujo FSFS que en realidad no es ningun tipo de BD sino un sistema de ficheros para almacenar los metadatos y ejecutar las operaciones relacionadas con cada repositorio. ¿Que cual es mejor?. Yo uso FSFS pero decidelo tu mismo .

Por lo tanto estos 2 errores estan relacionados con un dependencia no cumplida en cuanto al modulo de Berkeley DB. Por defecto la ultima version de SVN crea los repositorios con formato fsfs asi que en mi caso estos errores no representan mayor problema.

Seguimos para bingo

Una vez comprobado los bindings ruby de svn podemos proceder a instalarlos:

 sudo make install-swig-rb

Y… voila! ruby ya entiende SVN :


aitor@osirys:~/src/subversion-1.3.0> irb
irb(main):001:0> require 'svn/core'
=> true
irb(main):002:0> exit

Instalando Collaboa en algunas maquinas al llegar a este punto se ha producido en algunas ocasiones el siguiente error:

aitor@osirys:~/src/subversion-1.3.0> irb
irb(main):001:0> require 'svn/core'
LoadError: libsvn_swig_ruby-1.so.0: cannot open shared object file: 
No such file or directory -
 /usr/local/lib/ruby/site_ruby/1.8/i686-linux/svn/ext/core.so
        from /usr/local/lib/ruby/site_ruby/1.8/i686-linux/svn/ext/core.so
        from /usr/local/lib/ruby/site_ruby/1.8/svn/error.rb:1
        from /usr/local/lib/ruby/site_ruby/1.8/svn/core.rb:4
        from (irb):1

El problema esta en que el path utilizado por el sistema para encontrar librerias esta incompleto y no incluye aquellas que hemos compilado e instalado en /usr/local/lib (recuerda meter la variable en tu entorno para que cuando vuelvas a acceder no tengas que volver a exportar la variable):

export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"

Casi, casi lo tenemos. Solo quedan un par de puntos faciles, dos gemas que necesita Collaboa:

sudo gem install syntax
sudo gem install redcloth

Allegro subito ma non troppo

Primero descomprimimos la aplicación donde queramos instalarla ( /usr/local/rails puede ser un buen lugar pero cualquier directorio valdra ):

tar xzvf collaboa-0.5.6.tar.gz
cd collaboa-0.5.6/

Configuramos el fichero de base de datos (config/database.yml) para ajustarlo a nuestras necesidades:

production:
  adapter: mysql
  database: collaboa_production
  host: my_shiny_host
  username: aitor
  password: on_your_best_dreams

Una vez configurada la base de datos a utilizar, podemos crear las tablas necesarias en ella con el siguiente comando :

RAILS_ENV="production" rake db_schema_import

Collaboa trae un script llamado db/default_content.rb que contiene las instrucciones para crear un par de usuarios estandares y los estados por defecto de las tareas. Aquellos que las querais tener en castellano, podeis descargaros default_content_es.rb y ejecutarlo de la misma manera que el original:

RAILS_ENV="production" ruby db/default_content.rb

Ya solo queda decirle a Collaboa donde esta el codigo del proyecto que vamos a manejar. Para ello Collaboa viene con otro fichero YAML : config/repository.yml. Este contiene la información necesaria para que collaboa se pueda conectar al repositorio de svn, sincronizar su propia base de datos de changesets, detectar nuevas versiones, explorar el codigo fuente, y hacer unos batidos de chocolate fantasticos. La estructura es autodescriptiva y facil de entender:

production:
  repos_path: /srv/svn/repositories/my_shiny_web_3_0_project

Teoricamente podriamos arrancar ya la aplicacion puesto que Collaboa detectaria que no tiene la ultima version del repositorio y se sincronizaria, pero ya que este proceso puede ser largo y ocasionar time-outs en el navegador en repositorios que tengan bastante actividad, los chicos de Collaboa nos proporcionan otro script, para hacerlo offline y desde la linea de comandos:

 script/repository_syncer -e production
 

Bien esta lo que bien acaba

¡Por Fin!. Todo esta instalado y listo para que arranqueis vuestros script/server -e production. A lo largo de esta guia hemos instalado SWIG, Subversion, Subversion Ruby-bindings y Collaboa, lo cual no esta nada mal. Espero que esta guia os sirva de ayuda en vuestros proyectos y que si es asi me doneis ingentes cantidades de dinero para que pueda retirarme a Cuba a tomar ron y fumar habanos.