En este pequeño artículo voy a redactar lo que fue mi procedimiento para actualizar un servidor Alfresco (http://www.alfresco.com) version 2.9 instalado en un servidor foo a un servidor bar con la última versión estable hasta la fecha (3.2). Ambas versiones de alfresco son las versiones gratuitas (Community Edition).
Adicionalmente, para los interesados, describiré como configurar Alfresco para que autentique contra un directorio LDAP (OpenLDAP).
Empezemos...
Lo primero, describir la situación inicial: Como ya comenté se tiene un servidor "A" bajo Debian Lenny (stable) con Alfresco 2.9 usando como base de datos a MySQL y realizando la autenticación propia que viene de forma predeterminada.
A partir de Alfresco 3.2 se han hecho una serie de cambios en el diseño del sistema, se han incorporados subsistemas para darle mayor modularidad al mismo (Ej: subsistemas de autenticación, etc) por lo que hacer un backup del Alfresco 2.9 y luego intentar restaurarlo en un 3.2 "limpio" asi sin más, no es posible.
¿Cómo hacemos?
Necesitaremos un alfresco 3 Labs para utilizarlo como intermediario. En mi caso, busqué el archivo alfresco-labs-tomcat-3c.tar.gz (es el bundle) y lo descargue (preferiblemente puedes hacer esto en una máquina bien sea física o virtual diferente a donde tienes el sistema en producción para evitar cualquier "Oops" y termines dañando todo).
Bien, estando en esa máquina y ya descargado el archivo, procedemos a descomprimirlo/desempaquetarlo
Nota: Lo siguiente es realizado como root.
bar:/# mkdir /opt/alfresco3
bar:/# tar -xzvf alfresco-labs-tomcat-3c.tar.gz -C /opt/alfresco3
Deben asegurarnos que tengamos el paquete de Java instalado en el servidor nuevo:
bar:/# dpkg -l | grep sun-java6-jre
ii sun-java6-jre 6-12-1 Sun Java(TM) Runtime Environment (JRE) 6 (ar
En caso de que no, debemos instalarlo: aptitude install sun-java6-jre
Ahora debemos editar el archivo /opt/alfresco3/alfresco.sh para agregar la línea:
export JAVA_HOME="/usr/lib/jvm/java-6-sun-1.6.0.12"
Una vez editado el alfresco.sh debemos editar el archivo /opt/alfresco3/extras/databases/mysql/db_setup.sql de la siguiente manera:
El archivo original es este:
create database alfresco;
grant all on alfresco.* to 'alfresco'@'localhost' identified by 'alfresco' with grant option;
grant all on alfresco.* to 'alfresco'@'localhost.localdomain' identified by 'alfresco' with grant option;
Y debemos cambiarle el nombre de la base de datos que viene por defecto en vez de alfresco a alfresco3 (Esto es, para que después cuando instalemos el 3.2 este se quede con la config predeterminada). Quedaría así:
create database alfresco3;
grant all on alfresco3.* to 'alfresco'@'localhost' identified by 'alfresco' with grant option;
grant all on alfresco3.* to 'alfresco'@'localhost.localdomain' identified by 'alfresco' with grant option;
Nota: Por seguridad este password debería ser cambiado.
Luego, ejecutamos el script de la siguiente manera:
bar:/opt/alfresco3# mysql -u root -p
Ahora, a editar el archivo custom-repository.properties ubicado en /opt/alfresco3/tomcat/shared/classes/alfresco/extension
Allí deberemos cambiar:
- La primera linea que hace referencia al parámetro dir.root para colocarle una ruta completa, quedaría: /opt/alfresco3/alf_data.
- Comentar las lineas: db.driver=org.apache.derby.jdbc.EmbeddedDriver
y db.url=jdbc:derby:alf_data/derby_data/alfresco;create=true - Descomentar las líneas: db.driver=org.gjt.mm.mysql.Driver y db.url=jdbc:mysql://localhost/alfresco
- Linea a comentar: hibernate.dialect=org.hibernate.dialect.DerbyDialect
- Linea a descomentar: hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
Si todo sale bien, pues ahora tendremos que migrar del 2.9 al 3.
Ahora entonces debemos respaldar desde el servidor en producción (foo) el directorio alf_data (o su equivalente en caso de que lo hayan cambiado) y la base de datos.
Desde foo, vamos a respaldar bajo el directorio /opt/alfresco/alf_data los directorios:
- audit.contentstore
- contentstore
- contentstore.deleted
- lucene-indexes
Fijense que en ningún momento se respalda el directorio backup-lucene-indexes.
Para respaldar la base de datos, recomiendo (al menos basándome en mi experiencia personal) no usar mysqlhotcopy sino mysqldump.
Ej: mysqldump --opt -u root -p
En el otro servidor, primero nos aseguramos que el alfresco esté apagado, sino hacemos: cd /opt/alfresco3; ./alfresco.sh stop (Después de esto, asegurense que el alfresco este realmente apagado).
Ahora, deberemos borrar todos los directorios que están debajo de /opt/alfresco3/alf_data. Posteriormente colocaremos allí lo que estaba en el /opt/alfresco en el otro servidor (foo).
Nos queda copiar la base de datos, para evitar problemas, en lo personal prefiero borrar la base de datos que creamos al principio (alfresco3) y volverla a crear limpia y cargarle posteriormente las tablas que nos hemos traido del servidor en producción. El procedimiento es:
bar:/# mysql -u root -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 311
Server version: 5.0.51a-24+lenny2 (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> drop database alfresco3;
[...]
mysql> exit
Volvemos a ejecutar el script db_setup.sql para que cree de nuevo la base de datos y el usuario 'alfresco' en la db.
bar:/# mysql -u root -p
bar:/# mysql alfresco3 <> Ya tenemos la base de datos cargada, por lo que tenemos que hacer es prender de nuevo el alfresco, y si vamos siguiendo el archivo de log catalina.out veremos que el sistema empieza a ejectar una serie de parches a la base de datos para adaptarla a la de la versión 3. De nuevo, si vemos que al final todo va bien y no nos lanza ningún error ya tenemos el alfresco migrado a la versión 3, falta ahora hacer un proceso similar para llevar de alfresco 3 al 3.2. Podemos de una vez, crear un respaldo de la base de datos de alfresco3 (que es la misma que nos trajimos del otro servidor con algunos parches aplicados) usando el mismo procedimiento anterior, por supuesto, cambiandole el nombre al archivo resultante, puede ser algo así como backup_alfresco_ready_to_use_in_32.sql o whatever you want! :-)
Para ello, nos descargamos la versión del 3.2 (en mi caso, uso el bundle): alfresco-community-tomcat-3.2.tar.gz
Nos vamos hasta /opt y creamos el directorio /opt/alfresco desempaquetamos/descomprimimos el archivo, y modificamos el archivo /opt/alfresco/alfresco.sh de la misma manera que lo hicimos al comienzo (agregando la linea de export JAVA_HOME...)
Editamos el archivo /opt/alfresco/tomcat/shared/classes/alfresco-global.properties y cambiamos la ruta relativa de ./alf_data a /opt/alfresco/alf_data
Copiamos ahora el contenido del alf_data del alfresco3 al nuevo:
cp -aRpx /opt/alfresco3/alf_data /opt/alfresco
Luego, ejecutamos el script db_setup.sql para crear la base de datos, y despues de eso importamos las tablas de la base de datos que creamos antes en el archivo (backup_alfresco_ready_to_use_in_32.sql).
Iniciamos alfresco y voila! ya tenemos Alfresco 3.2 funcionando y migrado.
Autenticando contra LDAP
Como hice mención al principio del artículo, uno de los importantes cambios a partir de la versión 3.2 de Alfresco es la inclusión de algunos subsistemas entre ellos el de autenticación (+info), y deberemos hacer uso de él para configurar la autenticación contra el servidor LDAP.
Tal y como mencionan en este blog por alguna razón si hacemos la modificación en el archivo de configuración del subsistema de autenticación directamente Alfresco no lo toma, entonces lo que tendremos que hacer sería copiar el contenido del archivo al final del archivo /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
bar:/opt/alfresco# cat ./tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/Authentication/ldap/ldap-authentication.properties >> /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
Hecho esto, abrimos el alfresco-global.properties para editar las opciones relativas a LDAP, los parámetros relevantes los resalto en color azul.
authentication.chain=myldap:ldap
ldap.authentication.active=true
ldap.authentication.userNameFormat=uid\=%s,ou\=People,dc\=miempresa,dc\=org
ldap.authentication.java.naming.provider.url=ldap://ldap.miempresa.org:389
ldap.authentication.java.naming.security.authentication=simple
ldap.authentication.defaultAdministratorUserNames=admin
ldap.synchronization.active=true
ldap.synchronization.java.naming.security.principal=cn\=admin,dc\=miempresa,dc\=org
ldap.synchronization.java.naming.security.credentials=secretldap
ldap.synchronization.groupSearchBase=ou\=Groups,dc\=miempresa,dc\=org
ldap.synchronization.userSearchBase=ou\=People,dc\=miempresa,dc\=org
Esto es todo, espero le sirva a alguien :-)
Yo tengo que realizar esto actualmente, pero yo tengo un servidor alfresco 2.2 con oracle y he de migrar a otro alfresco 3.4 con mysql.
ResponderEliminarA la hora de actualizar a la 3.0 da errores de update de los scripts, y no acaba de funcionar, no sé si te encontraste con esto.