Instalar Alfresco Community en un Ubuntu Server 11.10 x86 (32 bit)

Mi jefe es un híbrido entre una fabrica de papel y un aspersor, y debido a circunstancias de la producción me va a tocar a mi archivarle los papeles. Visto lo visto y lo traumatizados que han salido todos los que han tenido este cometido he decidido hacerlo bien, con un gestor documental informatizado, es decir, escaneas todos los papeles y luego categorizas y añades meta-tags e
indexas por contenido. Asi cuando vayas a buscar algo es casi instantáneo.

Tras investigar y probar (demos online) bastante he llegado a la conclusión que todo el mundo conoce sin investigar, lo mejor es Alfresco y despues Nuxeo, aunque hay otras buenas alternativas como Plone o FengOffice.
Plone me pareción muy bueno, sencillo y manejable, aunque algo limitado a la hora de configurar. FengOffice me encantó principalmente por su interfaz, que es muy moderna, pero no veo cómo hacer para que tenga previsualización y edición de documentos online (con previsualización me conformaría), algo así como swftools o integración con el servicio LibreOffice. ¡Qué demonios!, usemos el mejor, Alfresco.

Como tengo por ahí un viejo servidor HP Server tc2110 (Pentium 4 2.0GHz 640MB RAM, 18.2 GB SCSI HDD) me dicidí a instalar Alfresco:

1. Elegir el sistema operativo.

Alfresco se puede ejecutar tanto en Linux como en Windows, en ambos casos en arquitercturas x86 o x64. Tratándose de un servidor tan viejo y con tan poca RAM habría que estar más loco para ponerle un Windows.
Así, le pondré Ubuntu 11.10 Server Edition x86 (porque el Pentium 4 no soporta x64).

El primer problema derivado de esta elección es que Alfresco tiene instaladores automatizados para Windows x86 y x64 y para Linux x64, pero
(maldita sea) no para x86. No problem! Siempre es mucho más divertido instalar a mano, y además, dejaremos la instalación totalmente personalizada. Por ejemplo, en lugar de poner como gestor de base de datos MySQL (que es lo que hace el instalardor automatizado) utilizaremos postgresql que es más liviano. De igual modo, en lugar de usar OpenOffice (que se cuelga bastante) usaremos LibreOffice.

Total, nos descargamos la ISO de Ubuntu Server 11.10, la grabamos en un CD y la instalamos en nuestro HP tc2110.

 


2. Instalamos los requisitos de Alfresco

Atención: Esta guía es para Ubuntu Server x86 (32 bits).
Si tu sistema es otro busca una guía más sencilla, que las hay. Esta guía es más complicada debido a que Alfresco ya no da soporte para versiones de Linux de 32 bits.

Alfresco se encarga de indexar todos los documentos que le damos, pero para hacerlo necesita algunas utilidades que debe tener el sistema. Por ejemplo necesita el servidor web TomCat para que desde otros puestos de la oficina podamos comunicarnos con él y use páginas web con extensión jsp. Necesita un sistema gestor de base de datos, MySQL, Postgresql, etc. Evidentemente también necesita Java y algunas cosillas menores como imagemagick, swftools, libreoffice que en algún caso son opcionales.
Así, empezemos por tener todos esto ok antes de instalar Alfresco.

Lo primero que suelo hacer cuando monto un servidor es instalar el servicio SSH, para poder conectarme a él remotamente y trabajar a gusto desde mi mesa. Así que, aunque esto no es necesario para Alfresco, empiezo por ahí.

# sudo apt-get install openssh-server

Ahora vamos a instalar algunas cosillas que necesita Alfresco.

# sudo apt-get install imagemagick swftools sun-java6-jre postgresql

El paquete imagemagick debe instalarse sin problemas, pero el swftools nos irá que no lo encuentra, así que nos toca instalarlo a mano.


# sudo apt-get update
# sudo apt-get install gcc g++ make
# sudo apt-get install libgif-dev xpdf  libfreetype6 libfreetype6-dev libjpeg62 libjpeg8 libjpeg8-dev
# sudo apt-get install git


# cd ~
# git clone git://git.swftools.org/swftools
# cd ~/swftools/lib/pdf
# sudo perl inject-xpdf.pl xpdf-3.02.tar.gz
# cd ~/swftools
# ./configure
# sudo make
# sudo make install
# which pdf2swf
# pdf2swf –version

Si todo ha ido bien ya tenemos swftools instalado. De este paquete Alfresco usará la utilidad pdf2swf para poder previsualizar los pdf convirtiéndolos a flash. En cualquier caso, deberíamos copiar el ejecutable a /user/bin para que Alfresco lo encuentre.

# sudo cp /usr/local/bin/pdf2swf /usr/bin

En caso de que por algún motivo no consiguiésemos instalar swftools tampoco tendríamos que preocuparnos demasiado, todo funcionaría salvo que no podríamos previsualizar los pdf, aunque podríamos corregirlo instalando mas tarde swftools.

Para continuar debemos editar el fichero /etc/apt/sources.list para descomentar (quitar la #) en la línea del repositorio partner. Esto habilita un repositorio que tiene algunos paquetes que nos harán falta.

Para editar hacemos

# sudo nano /etc/apt/sources.list

Descomentamos las líneas:

deb http://archive.canonical.com/ubuntu oneiric partner
deb-src http://archive.canonical.com/ubuntu oneiric partner

Salimos de nano guardando los cambios (Ctrl+X)

y actualizamos los paquetes disponibles con

# sudo apt-get update

Ahora vamos a instalar java. Al parecer los de Ubuntu están peleados con
el Java de Sun, y ahora en sus repositorios sólo ofrecen un Java Open
Source llamado OpenJava. A nosotros para Alfresco no nos interesa ese,
nos interesa el Java de Sun, así que necesitamos instalar un repositorio
extra para poder instalar Java. Allá vamos:

# apt-get install python-software-properties
# sudo add-apt-repository ppa:ferramroberto/java
# sudo apt-get update
# sudo apt-get install sun-java6-jre

Otra opción es instalar Java Sun a mano, descargando y compilando. Más información aquí.

Lo siguiente es instalar la base de datos que usará Alfresco. Lo normal es instalar MySQL, así que vamos a instalar PostgreSQL.

# sudo apt-get install postgresql

Ya está, este ha sido fácil.

Ahora vamos a instalar algo para poder previsualizar/editar documentos.
Lo normal es instalar OpenOffice, así que vamos a instalar LibreOffice,
que según he leido se cuelga bastante menos (el servicio). Primero
limpiamos cualquier rastro de OpenOffice, por si lo hubiera, y a
continuación instalamos LibreOffice (añadiendo su correspondiente
repositorio).

# sudo apt-get purge openoffice.org ure
# sudo add-apt-repository ppa:libreoffice/ppa
# sudo apt-get update
# sudo apt-get install libreoffice

Bien, ahora vamos a por TomCat y sus librerías nativas.

# sudo apt-get install tomcat6
# sudo apt-get install libtcnative-1

Más fácil imposible.

 

 3. Instalar Alfresco en nuestro Ubuntu 11.10 (Oneiric Ocelot).

Llegó el momento, vamos a instalar Alfresco. Para ello empezamos por descargar el WAR desde el sitio de Alfresco.

Vamos a la página de Alfresco y descargamos la última versión, en el momento de escribir este artículo la 4.0.

# wget http://dl.alfresco.com/release/community/build-3979/alfresco-community-4.0.c.zip

Descomprimimos creando la carpeta Alfresco en nuestro home

# sudo apt-get install unzip
# unzip alfresco-community-4.0.c.zip -d alfresco

Paramos el servicio de TomCat

# sudo service tomcat6 stop

Y ahora configuramos TomCat copiando algunos archivos de Alfresco:

# sudo cp -r ~/alfresco/web-server/shared /var/lib/tomcat6
# sudo cp -r ~/alfresco/web-server/webapps /var/lib/tomcat6
# sudo cp -r ~/alfresco/web-server/lib /var/lib/tomcat6/shared/lib
# sudo cp -r ~/alfresco/bin /var/lib/tomcat6/bin
# sudo cp -r ~/alfresco/licenses /var/lib/tomcat6/licenses
# sudo cp -r ~/alfresco/README.txt /var/lib/tomcat6/README.txt
# sudo rm /var/lib/tomcat6/shared/lib/mysql-connector-java-5.1.13-bin.jar

La última orden es sólo por si acaso; normalmente no tendremos ese fichero, pero si lo tenemos hay que eliminarlo.

Ahora necesitamos los drivers JDBC para poder utilizar PostgreSQL, así
que vamos a la web de PostgreSQL y los descargamos y se los pasamos a
TomCat.

# wget http://jdbc.postgresql.org/download/postgresql-9.1-901.jdbc3.jar
# sudo cp ~/postgresql-9.1-901.jdbc3.jar /var/lib/tomcat6/shared/lib/postgresql-9.0-801.jdbc3.jar

Ahora configuramos Alfresco a partir de los archivos de configuración de ejemplo

# sudo mv
/var/lib/tomcat6/shared/classes/alfresco-global.properties.sample
/var/lib/tomcat6/shared/classes/alfresco-global.properties
# sudo mv
/var/lib/tomcat6/shared/classes/alfresco/web-extension/share-config-custom.xml.sample

/var/lib/tomcat6/shared/classes/alfresco/web-extension/share-config-custom.xml
Y editamos el archivo catalina.properties de TomCat cambiando la línea que empieza por shared.loader=… que será algo como esta:

shared.loader=${catalina.home}/shared/classes,${catalina.home}/shared/*.jar,/var/lib/tomcat6/shared/classes,/var/lib/tomcat6/shared/*.jar

y dejándola así:

shared.loader=${catalina.home}/shared/classes,${catalina.home}/shared/*.jar,/var/lib/tomcat6/shared/classes,/var/lib/tomcat6/shared/lib/*.jar

Vamos, un cambio de nada, sólo hemos añadido el /lib/ al final.

Ahora nos toca configurar TomCat para que funcione con Java correctamente, editando el fichero /etc/default/tomcat6

# sudo nano /etc/default/tomcat6

Y añadimos:

JAVA_HOME=/usr/lib/jvm/java-6-sun
JAVA_OPTS=»${JAVA_OPTS} -XX:MaxPermSize=512m -Xms128m -Xmx768m -Dalfresco.home=/opt/alfresco -Dcom.sun.management.jmxremote»
JAVA_OPTS=»${JAVA_OPTS} -XX:+CMSIncrementalMode»

Si quieres saber más sobre cómo ajustar el rendimiento de la máquina
virtual de Java para que funcione ok con Alfresco puedes leerlo aquí, en el apartado Tunning the JVM.

 

Bien, ya casi estamos. Vamos a crear la base de datos alfresco en PostgreSQL junto con el usuario alfresco con contraseña alfresco, original ¿no?.

# sudo -i
# su – postgres
# psql
CREATE USER alfresco WITH PASSWORD ‘alfresco’;
CREATE DATABASE alfresco WITH OWNER=alfresco;
GRANT ALL PRIVILEGES ON DATABASE alfresco TO alfresco;
\l
\du
\q

Ahora creamos un directorio para nuestros datos y le damos permisos aTomCat para ese directorio.

# sudo mkdir -p /srv/www/alfresco/alf_data
# sudo chown -R tomcat6:tomcat6 /var/lib/tomcat6 /srv/www/alfresco

Editamos la configuración de Alfresco

# sudo nano /var/lib/tomcat6/shared/classes/alfresco-global.properties

Al principio del documento creamos la línea que indica a Alfresco dónde guardar los documentos.

dir.root=/srv/www/alfresco/alf_data

En la sección External locations añadimos lo siguiente:

ooo.exe=/usr/lib/libreoffice/program/soffice
ooo.enabled=true
jodconverter.officeHome=/usr/lib/libreoffice
jodconverter.portNumbers=8101
jodconverter.enabled=true
img.root=/usr/lib/ImageMagick-6.5.7
img.exe=/usr/bin/convert
swf.exe=/usr/bin/pdf2swf

En la sección PostgreSQL añadimos:

db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://localhost:5432/alfresco

Y en la sección URL Generation Parameters descomentamos:

alfresco.context=alfresco
alfresco.host=${localname}
alfresco.port=8080
alfresco.protocol=http


share.context=share
share.host=${localname}
share.port=8080
share.protocol=http

¡Listo! Lanzamos el Tomcat

# sudo service tomcat6 start

Y comprobamos si podemos acceder a Alfresco con un navegador web.

 


http://192.168.1.100:8080/share/

Ten en cuetna poner la ip de tu servidor, el puerto que hayas
configurado, y esperar porque la primera vez que accedes tarda un poco.

Ah! Por defecto el usuario es admin y la contraseña también admin.

Ahora a escanear se ha dicho.

 


4. Algunas cosillas más

Si queréis poder acceder al servidor por su nombre en lugar de por su ip, es decir, poder poner http://ubuntuserver:8080/share en lugar de http://192.168.1.100:8080/share tendréis que instalar samba:

# sudo apt-get install samba sbmfs

Además también lo necesitaréis para que la máquinas Windows del resto de
la red puedan acceder al servidor mediante su nombre (ubuntuserver) y
no solo por su ip. Es decir, una vez habilitado CIFS las máquinas
windows podrán hacer \\ubuntuservera\alfresco y acceder a las carpetas.

Problemillas con CIFS. Si quieres que funcione CIFS te toca pringarte.
El problema es el siguiente: En linux los puertos del 0 al 1024 son
puertos privilegiados, sólo los pueden utilizar aplicaciones lanzadas
con la cuenta root (por ejemplo). Alfresco escucha en los puertos 445,
139, 137 y 138 para hacer de servidor Samba y CIFS. Pero claro, Alfresco
se lanza con el usuario tomcat6, que no es un usuario privilegiado, por
eso no funciona CIFS recién instalado. Tenemos dos opciones:

1. Lanzar alfresco con el usuario root

2. Decierle a Alfresco que ejecute el servidor SAMBA/CIFS en puertos no
privilegiados (por encima del 1024) y redirigir los puertos
privilegiados a esos con iptables.

 

La primera opción nos pueded dar muchos problemas de seguridad, TomCat
no debe ejecutarse con tantos privilegios, si alguien se apodera de él
se apodera de todo el sistema.

Usamos la segunda opción, así que primero cambiamos los puertos CIFS en
el archivo
/var/lib/tomcat6/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers.properties,
dejando las siguientes líneas así:

# cifs.tcpipSMB.port=1445
# cifs.netBIOSSMB.sessionPort=1139
# cifs.netBIOSSMB.namePort=1137
# cifs.netBIOSSMB.datagramPort=1138

Tan sólo hemos añadido un 1 delante de cada puerto para que ya no sean
puertos privilegiados. Ahora debemos decirle a iptables que rediriga los
antiguos puertos privilegiados, que es donde todo el mundo (windows)
espera encontrar al servidor SAMBA/CIFS, a los nuevos puertos.

# sudo su
# echo 1 > /proc/sys/net/ipv4/ip_forward
# modprobe iptable_nat
# iptables -F
# iptables -t nat -F
# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -t nat -A PREROUTING -p tcp –dport 445 -j REDIRECT –to-ports 1445
# iptables -t nat -A PREROUTING -p tcp –dport 139 -j REDIRECT –to-ports 1139
# iptables -t nat -A PREROUTING -p udp –dport 137 -j REDIRECT –to-ports 1137
# iptables -t nat -A PREROUTING -p udp –dport 138 -j REDIRECT –to-ports 1138

Reiniciamos tomcar y listo, ya debería funcionar CIFS.

Por supuesto las reglas de iptables se borrarán al reiniciar y CIFS
dejará de funcionar. Para que se queden debemos instalar el paquete
iptables-persistent (hay más formas, pero esta es más fácil).


# sudo apt-get install iptables-persistent

Y cada vez que queramos que las reglas que se estén ejecutando se guarden debemos hacer


# iptables-save > /etc/iptables/rules.v4

Listo, iptables guardado a prueba de reinicios

La guinda:

Si a Alfresco le ponemos un plugin llamado media-viewers ya se quda niquelao.Principalmente porque ese plugin incluye pdf.js,
que es un lector de pdfs online que nos permitirá deshacercnos del
asqueros previsualizador de pdfs Flash que viene por defecto en la
instalación de Alfresco.