Archive for the 'administración de sistemas' Category

Indexación múltiple y unificada con Constellio (y conexión con Alfresco por CMIS)

Toni Marzo 26th, 2012

De entre los muchos sistemas de indexación que existen para las empresas está Constellio, un producto realizado por la gente de Doculibre y basado en Apache Solr. Constellio es Open Source y se puede contratar soporte con el fabricante dependiendo de las necesidades del cliente. Es una herramienta multiplataforma, instalación bastante sencilla con un asistente (java -jar constellio_install_1.3.jar).

Lo que me ha gustado de Constellio, y por eso he decidido contarlo en este post, es lo sencillo que resulta unificar/federar las búsquedas corporativas en un solo sistema, en una sola web.
  • Por ejemplo, imagina que tenemos uno o varios servidores Alfresco, un portal corporativo, un servidor de ficheros en Windows, un LDAP corporativo y una BBDD de clientes, todos esos sistemas tienen información que deben tener acceso rápido y sencillo los usuarios de nuestra organización (como si buscaran en Google). Con este producto podemos tenerlo todo unificado en un solo formulario de búsqueda, ahora bien, debe acceder a todos esos recursos y poder indexarlos en sus propios índices (recuerda que al fin y al cabo es un Solr), tiene una interfaz web de administrador bastante sencilla y auto-explicativa.
  • A cada uno de los contenedores de datos que queremos indexar (Alfresco u otros ECM, BBDD, LDAP, Servidor de Ficheros, etc.) Constellio los llama colecciones y podemos añadir tantos como necesitemos, viendo en el resultado de la búsqueda los resultados de todas las colecciones y pudiendo identificar visualmente de qué colección es cada resultado.
  • Configurar Constellio es muy fácil y en esta web tienes vídeos de como hacer casi cualquier cosa, en 10 minutos está configurado.
  • Os voy a explicar como crear una colección que indexe el contenido de Alfresco de forma externa en Constellio (recuerda que también se sigue indexando en Alfresco).
  • Una vez instalado Constellio, vamos al panel de administración accediendo como usuario administrador (tras hacer login como usuario admin) en la URL por defecto: http://localhost:8080/constellio
  • Ahora vamos a la pestaña “Collections management” -> “Add collection” -> ponemos un nombre por ejemplo “Alfresco Intranet” y el título que queramos. -> “Save”.
  • Pinchamos en la nueva colección llamada “Alfresco Intranet” y vamos a la sección “Connectors” -> “Add”.
  • Aquí os pongo una captura de como se configura Constellio para que indexe un repositorio Alfresco (o varios Alfrescos también se podrían configurar), como veis se hace mediante CMIS por lo que nos aporta mayor interoperabilidad con Alfresco o con cualquier otro repositorio CMIS ready.

    Configuración Constellio - Alfresco

    Pincha para ver la imagen completa

  • Tras guardar la configuración podemos ir a la sección “Indexing” del menú de la colección y veremos en tiempo real el estado de la reindexación de la nueva conexión que hemos creado.
  • Es tan fácil que casi no hay que explicar nada, sólo decir que el valor del parámetro “REPOSITORY” es el identificador único del repositorio CMIS y que podréis ver en vuestro servidor en la siguiente URL http://localhost:8080/alfresco/service/cmis/index.html -> “CMIS Repository Information” -> “Repository Id”.
  • La interfaz de usuario sería algo como esto:

    resultado de búsqueda

    Pincha para ver la imagen completa

  • En la captura anterior se ve el resultado de una búsqueda realizada sobre dos colecciones una es este blog y otra es un servidor Alfresco.
Esto es sólo un pequeño resumen de como conectarlo con Alfresco pero verás que tiene conectores muy útiles (HTTP, CMIS, BBDD, Servidor de Ficheros, LDAP, IMAP, POP, SOLR, XML y otros conectores específicos como Google Search Appliance u otros ECM propietarios). También se puede configurar a nivel de seguridad para filtrar resultados de búsquedas, integrar con sistemas de SSO externos, estadísticas, sinónimos, búsqueda avanzada, themes, facetas y otras muchas funcionalidades más.
  • Conclusión: si no unificas tus búsquedas es porque no quieres ;)
  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Video y presentación del webinar “Consejos de Seguridad con Alfresco”

Toni Marzo 7th, 2012

Cuanta más información almacenamos en Alfresco, más necesidad de protegerla tenemos y también más necesidad de disponer de la misma. Por eso pienso que este webinar puede ser muy interesante para cualquiera que debe mantener un entorno con Alfresco independientemente de la criticidad del mismo.

En este webinar de unos 50 minutos de duración vamos a ver qué aspectos relacionados con la seguridad debemos tener en cuenta en los diferentes procesos del ciclo de un proyecto con Alfresco como durante la planificación, instalación, configuración y fortificación así como en el mantenimiento, monitorización y auditoría.

Básicamente, este webinar es una colección de consejos y trucos que nos ayudan a fortificar y controlar nuestro entorno ECM.

Aquí está la presentación utilizada para poder descargarla desde la web de Slideshare:

  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Video del webinar “Alfresco y Solr”

Toni Enero 26th, 2012

SOLR es el nuevo motor de indexación que incorpora Alfresco en su versión 4.0, no obstante, se puede seguir usando Lucene. En este webinar de una hora de duración, junto a Baratz (Partner Gold de Alfresco), vamos a aprender qué es SOLR, cómo funciona y cómo está soportado, como configurarlo y migrar de Lucene a Solr, qué efectos tiene en el repositorio y que mejoras nos aporta.

  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Seguridad en las comunicaciones de Alfresco

Toni Enero 24th, 2012

En este artículo quiero hablar sobre las comunicaciones en Alfresco. Como buenos administradores debemos saber qué puertos utiliza la aplicación de entrada (tráfico inbound: servicios que publica Alfresco) y de salida (tráfico outbound: servicios externos a los que accede Alfresco). De esa forma podemos configurar apropiadamente el firewall local del servidor y también el firewall perimetral de la organización. Otro aspecto a tener en cuenta es la seguridad de los servicios que publicamos, las comunicaciones tipo cliente-servidor y entre capas de una instalación, es decir, la posibilidad de cifrar el tráfico de los servicios que publicamos y de los servicios que se usan entre las capas o entre nodos en caso de cluster.

Listado de puertos, servicios y origen/destino del tráfico

  • En el listado siguiente podemos ver puertos de servicio que se usan o se pueden usar en Alfresco. Posiblemente veréis alguno más de los que pensábais, cuento con que tenemos Alfresco Repository (alfresco.war) y Alfresco Share (share.war) desplegado en el mismo servidor de aplicaciones y la base de datos, LDAP y almacenamiento en servidores remotos, aunque como sabéis, estos servidores también podrían estar en local en caso de desarrollo o pruebas. Todos estos puertos son los que se establecen por defecto, y como veremos, algunos no están activados por defecto:
Protocolo Puerto TCP/UDP IN/OUT Activo Comentarios
HTTP 8080 TCP IN Si Incluye WebDav
FTP 21 TCP IN Si Modo pasivo
SMTP 25 TCP IN No
CIFS 137,138 UDP IN Si
CIFS 139,445 TCP IN Si
IMAP 143 TCP IN No
Share Point  Protocol 7070 TCP IN Si
Tomcat Admin 8005 TCP IN Si
Tomcat AJP 8009 TCP IN Si
SOLR admin 8443 TCP IN Si Hay que instalar cert en navegador
NFS 111,2049 TCP/UDP IN No
Lotus Quickr 6060 TCP IN No
RMI 50500-50507 TCP IN Si Usado por EHCache entre nodos de cluster y para gestión JMX
JGroups 7800 TCP IN No Cluster discovery entre nodos
JGroups 7801-7802 TCP IN No Comunicación Ehcache RMI entre nodos de cluster
OpenOffice 8100 TCP IN Si Sólo en localhost, no hay que abrirlo
  • Como hemos visto, los puertos indicados anteriormente son todos los que podría utilizar Alfresco en una instalación con todas las funcionalidades activadas y en cluster, en una instalación para producción deberemos arrancar el servidor de aplicaciones con un usuario no privilegiado (en caso de Linux), por lo tanto no podremos levantar los puertos por debajo del 1024, deberemos cambiarlos en la configuración para que sean por encima del puerto 1024 y posteriormente hacer una redirección con el firewall local. Aquí podéis ver un ejemplo.
  • Para controlar el tráfico de salida, es decir, la actividad que genera o sistemas a los que se conecta nuestro servidor, deberíamos crear reglas para controlar el tráfico. En muchos casos no sería necesario limitar la información de salida, pero si quieres realmente controlar todo lo que sale del sistema y tus requisitos de seguridad son elevados, controlar el tráfico de salida es vital:
Protocolo Puerto TCP/UDP IN/OUT Activo Comentarios
SMTP 25 TCP OUT No Configurado hacia tu MTA. Usado para enviar notificaciones.
DB – PostgreSQL 5432 TCP OUT Si* Depende de la BBDD usada
DB – MySQL 3306 TCP OUT Si* Depende de la BBDD usada
DB – MS SQL Server 1433 TCP OUT Si* Depende de la BBDD usada
DB – Oracle 1521 TCP OUT Si* Depende de la BBDD usada
DB – DB2 50000 TCP OUT Si* Depende de la BBDD usada
LDAP 396 TCP OUT No Hay que activar autenticación/sincronización
LDAPS 636 TCP OUT No Hay que activar autenticación/sincronización
docs.google.com 443 TCP OUT No
OpenOffice 8100 TCP OUT No Sólo si se usa OpenOffice externo
JGroups 7800-7802 TCP OUT No Entre nodos del cluster
NFS 111,2049 TCP/UDP OUT No Sólo si se usa un almacenamiento NFS remoto para contentstore
Kerberos 88 TCP/UDP OUT No Sólo si tenemos SSO con Kerberos
DNS 53 UDP OUT Si Si queremos que el servidor resuelva nombre
  • Seguro que hay otros puertos de salida a tener en cuenta, he destacado los necesarios para que funcione el servidor. Por ejemplo, habría que permitir el tráfico a servicios remotos de Facebook, Twitter, LinkedIn, Slideshare, Youtube, Flickr o Blogs, en caso de usar el Publishing Framework. En este caso, y dado que los puertos de salida comentados en el listado anterior pueden variar, lo más rápido sería abrir hacia internet todo el tráfico del servidor, capturar el tráfico y analizarlo. Hecho eso podremos abrir realmente el tráfico saliente que necesitamos. Claro, todo ese control de tráfico de salida habría que hacerlo si estás muy obsesionado con la seguridad, ahí tienes ideas.
  • Si usas autenticación externa, contra un LDAP, procura usar la conexión segura LDAPS (puerto 636 TCP).
  • Otro aspecto a tener en cuenta son las personalizaciones que utilizan o consumen información de otros servidores remotos, como es lógico, no está contemplado en el listado anterior.
  • Tampoco está contemplado en las tablas de arriba otros puertos y tráfico saliente con destino a servidores remotos en caso de usar Transfer/Replication Services de Alfresco, FSR (Alfresco File System Receiver), Liferay, Drupal, etc. En el caso del Replication Service es muy recomendable usar HTTPS y no realizar las transferencias con el usuario admin.
  • Recuerda: tener un firewall (o cuatro firewalls) bien configurado no es sinónimo de seguridad, es sólo un proceso continuo más que debemos llevar a cabo para controlar lo que ocurre en nuestras redes y en nuestros servidores.

Cifrado de la información:

Si no usamos cifrado en las comunicaciones, las contraseñas y los contenidos viajan en sin cifrar, por lo que esa información podría ser interceptada y usada sin nuestro consentimiento, con el grave perjuicio que eso conlleva.

Y de los servicios que publica Alfresco ¿cuales puedo hacer seguros? Vamos a ver los más importantes de cara al usuario y dónde consultar para aprender a configurarlos apropiadamente:

  • HTTP -> HTTPS:

De esta forma cifraríamos la comunicación (http y webdav) entre el navegador del usuario hasta Alfresco o hasta el frontal web que proteja al servidor de aplicaciones.

Para hacer seguro el acceso web a Alfresco Share, Explorer y webdav, podríamos hacerlo de tres formas:

  1. Usando un balanceador que soporte SSL offloading, en cuyo caso no se necesita configurar nada en el servidor web o servidor de aplicaciones.
  2. Activando HTTPS en el frontal web (Apache) y conectando a Alfresco por AJP (mod_proxy_ajp) o mod_Jk, en este caso deberíamos desactivar el acceso al puerto 8080 de Alfresco para evitar accesos no cifrados y obligar a los usuarios de la red local que accedan por el frontal web. Más información sobre los conectores aquí y como activar SSL en Apache aquí aunque hay miles de recurso en Internet disponibles para configuralo.
  3. Activando HTTPS en Tomcat o en el servidor de aplicaciones que tengas, para Tomcat también hay muchos recursos disponibles, por ejemplo aquí, y en este blog (sección CONFIGURING SSL FOR ALFRESCO TOMCAT). Si Alfresco Share está en una capa por delante de Alfresco habría que hacer la tarea en el frontal de Share y opcionalmente en el repositorio y cambiar la configuración de Share para el acceso a los puertos SSL del repositorio. Este artículo te ayudará a entender como separar en capas y su configuración.

Otra recomendación interesante en este punto puede ser el uso en el frontal web del módulo de Apache mod_security, que es un Web Application Firewall que permite filtrar y eliminar cierto tráfico malicioso hacia nuestro servidor como tráfico SQL injection o XSS e infinidad de otros ataques. Aquí un buen recursos para aprender a implementarlo:

http://www.jpereira.net/gestion-documental/alfresco-y-apache-proxy-security

  • FTP -> FTPS:

Permitiremos a los usuarios conectar mediante FTP cifrando la autenticación y la transferencia de contenidos. Es importante que el cliente FTP soporte FTPS, algo que la gran mayoría de clientes lo tienen superado. Es muy sencilla su configuración está bien explicada en la documentación oficial.

  • SharePoint -> SharePoint SSL:

Como comenté en el correspondiente webinar, la implementación Share Point de Alfresco se hace mediante un servidor de aplicaciones embebido en Alfresco llamado Jetty, que escucha por el puerto 7070 TCP. La configuración por defecto no está cifrada, de hecho, eso hace que tengamos que “parchear” el registro de Windows de los clientes para que funcione MS Office correctamente, como vimos en el webinar, o lidiar con la solicitud de contraseña varias veces. Si activamos SSL no es necesario modificar el registro en los clientes. Además, recuerda que se usará SSL en el mismo puerto (7070 TCP) y no estará disponible la comunicación no cifrada.

Aquí se pueden ver los pasos a para su activación:

http://docs.alfresco.com/4.0/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%2Ftasks%2FSharePoint-HTTPS-setup.html

  • SMTP -> SMTP SSL:

Correo saliente (notificaciones):

En este caso si hablamos de la conexión con el MTA de la organización para que Alfresco envíe notificaciones, no hay problema, podemos configurar Alfresco para que se conecte al servidor de correo remoto mediante SMTPS con autenticación y mediante TLS para cifrado. En el blog hablé de esto, puedes ver un ejemplo aquí, aunque en la versión 3.4 y superior es más sencillo, abajo vemos un ejemplo de parámetros para alfresco-global.properties usado con GMail:

### Outbound mail SMTP ###
mail.host=smtp.gmail.com
mail.port=465
mail.protocol=smtps
mail.smtps.auth=true
mail.username=correo@gmail.com
mail.password=Contraseña
mail.encoding=UTF-8
mail.from.default=correo@gmail.com
mail.smtp.starttls.enable=true

Correo entrante:

Del correo entrante también hablé aquí. Hasta la versión 4.0 no está soportado SMTP TLS en Alfresco, como puedes ver en este bug reportado en Jira. En la wiki está bien explicado como configurarlo y en docs.alfresco.com también hay información útil.

  • JGroups -> JGroups SSL:

Aunque si usamos interfaces dedicadas para el tráfico entre nodos no sería necesario, JGroups soporta encriptación en el tráfico entre nodos del cluster, aunque en Alfresco no está contemplada esta opción, se podía hacer: http://www.jgroups.org/javadoc/org/jgroups/protocols/ENCRYPT.html

  • IMAP -> IMAPS:

IMAPS (993 TCP) no está soportado por Alfresco, pero se puede poner una capa por delante a modo de proxy e implementarlo. Existen varias soluciones genéricas como stunnel y algunas específicas como PerditionNginx. En este enlace se puede ver más información: https://issues.alfresco.com/jira/browse/ENH-1152

  • SOLR:

En la versión 4.0, que incorpora SOLR, la comunicación entre repositorio y motor de indexación está cifrada y la autenticación también, además es mutua. Todo ese tráfico es HTTPS. Para otro artículo dejo el uso de los keystores por defecto usados para la protección de la comunicación y acceso a SOLR, que este caso usa claves RSA y certificados x.509. Así como para el cifrado de metadatos con la nueva característica de la versión 4.0, el nuevo tipo “d:encrypted” que permite indicar que una propiedad de un nodo se puede cifrar. De cualquier forma podéis encontrar más info aquí.

  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Persistencia en las credenciales JMX de Alfresco

Toni Diciembre 20th, 2011

Aunque esta es una funcionalidad activada y útil sobre todo para Alfresco Enterprise, creo que es una recomendación de seguridad necesaria y a tener muy en cuenta para entornos en producción. Sobre todo si no filtras los puertos con un firewall. Además así evitarás que alguien modifique la configuración de Alfresco.
Vamos a ver cómo cambiar usuarios y contraseñas de acceso JMX por defecto que vienen en Alfresco y que no se sobreescriban cuando actualizamos la versión y siempre tengamos protegido de forma segura el acceso a la consola de configuración y monitorización de Alfresco.
La receta es muy sencilla:
  • Para ello debemos copiar los ficheros alfresco-jmxrmi.access y alfresco-jmxrmi.password que podemos encontrar por defecto en el directorio tomcat/webapps/alfresco/WEB-INF/classes/alfresco/ y los copiamos por ejemplo en tomcat/shared/classes/.
  • Una vez copiados, podemos editarlos y modificarlos a nuestro gusto, los ficheros están muy bien comentados y no dan lugar a dudas.
  • En el fichero alfresco-jmxrmi.access encontramos los nombres de usuario disponibles y el rol asignado:
monitorRole   readonly
controlRole   readwrite
  • En el fichero alfresco-jmxrmi.password podemos cambiar la contraseña de cada uno de los usuarios disponibles:
monitorRole  mi-nuevo-password1
controlRole  mi-nuevo-password2
  • Por último deberemos añadir la siguiente linea en alfresco-global.properties y reiniciar el servidor de aplicaciones:
alfresco.jmx.dir=/directorio/instalacion/tomcat/shared/classes
Por lo tanto, usaríamos el usuario monitorRole para monitorización (aplicaciones externas como Hyperic o Nagios) y el usuario controlRole para acceder mediante jconsole y configurar Alfresco. De eso ya hablé aquí.
  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Algunos apuntes sobre Lucene en el mundo de Alfresco

Toni Diciembre 7th, 2011

En este artículo quiero hablaros de Lucene. Aunque en la versión 4.0 de Alfresco ya se incorpora SOLR como motor de indexación alternativo y escalable, también se puede seguir usando Lucene. Además, existen multitud de instalaciones que utilizan Lucene y que posiblemente seguirán utilizándolo. Voy a ampliar algunos conceptos al respecto para intentar ayudaros a comprender cómo funciona y cómo solucionar posibles problemas que nos podemos encontrar.
  • NOTA/DISCLAIMER: Lo que aprendas en este artículo no lo uses en producción salvo que sepas realmente lo que estás haciendo. No me hago responsable de los problemas que puedas tener derivados de este artículo ;)
Empecemos por el principio, el documento. Hay dos partes de un documento en Alfresco, la primera es el documento por si mismo y su contenido, la segunda son los metadatos asociados a ese documento. Por defecto, se indexan esas dos partes de un documento, por eso podemos buscarlos y localizarlos. Esta es una explicación simple ya que por debajo hay una serie de tareas automáticas y un poco más complejas que la descripción anterior. Vamos a verlo.
  • En Alfresco puedes buscar información mediante las interfaces web Share o Explorer y también mediante las diferentes APIs disponibles. Las búsquedas pueden ser por palabras clave o búsquedas booleanas, Alfresco las traduce a formato Lucene Query y las ejecuta sobre los índices en su instancia de Alfresco.
  • ¿Cómo puedo saber que hay realmente en los índices de Alfresco? Los índices por defecto se almacenan en un directorio llamado “lucene-indexes” dentro del directorio “alf_data“. Dentro del directorio principal de índices hay más carpetas y ficheros que están relacionados con los índices de los que no podemos ver su contenido directamente ya que son binarios y de los que hablaremos más adelante.
  • Puedes ver el contenido de esos ficheros con una herramienta de debug muy útil y multiplataforma llamada Luke. Para abrir los índices por ejemplo del workspace/Spacestore, en el browser de Luke navega hasta alf_data/lucene-indexes/workspace/SpacesStore y selecciona el fichero IndexInfo. Luke te permite abrir los índices con la opción “Open in Read Only mode”, úsala. Ya que con Luke puedes hacer tareas de lectura sobre los índices y también ¡borrados! Lee bien la documentación antes de aventurarte a hacer alguna fechoría con esta herramienta. No es el objetivo de este artículo hacer un manual de Luke, simplemente darlo a conocer si no lo conocías ya. Si lo usas y lo dominas puedes escribir un artículo que será muy útil para todos.

Sigamos con los índices. Veamos qué hace Alfresco de forma genérica cuando se sube un documento o se actualiza:
Como vemos en la imagen anterior, a ese diagrama global podríamos añadir el siguiente resumen del proceso de indexación:
  • 1º Se transforma el contenido a texto
  • 2º Se usa un analizador basado en el idioma del documento para extraer cadenas derivadas de plurales, mayúsculas, etc. Dependiendo del idioma, estos analizadores serán más o menos complejos.
  • 3º Lucene indexa los metadatos que están marcados para ser indexados.
  • 4º Lucene indexa el contenido, que sea susceptible de indexar (por ejemplo un documento, si se trata de un binario como una imagen no se indexa el contenido). La indexación del contenido se podría desactivar.
  • 5º Si se trata de una actualización, la versión anterior se mueve a otro directorio (interno de los índices) y la nueva versión se crea en el índice activo (live index).
Hay tres directorios que afectan a los índices y que se pueden configurar en alfresco-global.properties mediante las siguientes propiedades (recuerda que se configuraría usando propiedad=valor y todas las opciones está disponibles en el fichero alfresco/WEB-INF/classes/alfresco/repository.properties):
  • dir.idexes y dir.indexes.lock que necesitan estar en los discos locales donde se instala el repositorio (alfresco.war), ya que se hace un uso intensivo de I/O de disco.
  • dir.indexes.backup podemos ubicarlo donde queramos siempre que esté accesible por el servidor, ahí se almacenan los backups automáticos nocturnos a las 3AM cada día. Aunque también se puede ejecutar manualmente mediante JMX en la versión Enterprise. Si quieres saber qué procesos nocturnos afectan a los índices y cómo, lee este artículo. No tener controlados los backups de los índices te pueden llevar a tener que reindexar todo un repositorio completo, que puede llevar varios días dependiendo de la cantidad de contenidos.
Dentro del directorio dir.indexes hay una serie de directorios que corresponden a cada uno de los stores de Alfresco (más info aquí). Cada directorio o subdirectorio contiene un fichero llamado IndexInfo que nos da información sobre los índices de cada uno de los stores.
La indexación de los contenidos se gestionan mediante el modelo de datos, por defecto se utiliza el siguiente fichero alfresco/WEB-INF/classes/alfresco/model/contentModel.xml. Y las opciones para todos los contenidos, si no tenemos ningún tipo adicional es como sigue:
     <type name="cm:content">
        <title>Content</title>
        <parent>cm:cmobject</parent>
        <properties>
           <property name="cm:content">
              <type>d:content</type>
              <mandatory>false</mandatory>
              <index enabled="true">
                 <atomic>false</atomic>
                 <stored>false</stored>
                 <tokenised>true</tokenised>
              </index>
           </property>
        </properties>
     </type>
A este respecto, cuando un documento se sube a Alfresco, los metadatos se extraen y se indexan en el acto, pero el contenido no tiene por que ser indexado en ese momento (depende). Veremos más abajo que significan estas opciones y qué nos aportan.
Como vemos en la parte <index enabled=”true”>, hay diferentes opciones en cuanto a los índices de las propiedades o de los contenidos:
  • Enabled=”false”: Si está a “false” no se indexará esa propiedad.
  • Atomic=”true”: Si está a “true”, esa propiedad (metadato) es indexada en el momento de la transacción, si está a “false”, se indexará en background. La indexación de contenidos que necesitan transformación antes de ser indexados (p. ej. PDF), solo serán “atomic=true” si la transformación tarda menos tiempo que el valor especificado en el atributo lucene.maxAtomicTransformationTime. Todos los transformadores por defecto están aquí alfresco/WEB-INF/classes/alfresco/services-context.xml.
  • Stored=”true”: Si está a “true”, el valor de la propiedad se almacenará en el índice y debe ser consultado mediante la API de bajo nivel de Lucene. Esto es útil para debugging si queremos saber qué es exactamente lo que se está indexando, pero no está recomendado en absoluto para producción ya que escribe mucha más información en disco. Recomendado “false”.
  • Tokenised=”true”: Si está “true”, el valor de la cadena de la propiedad se tokeniza antes de ser indexado. Si está a “false”, se indexará como una única cadena, si está a “both” se harán las dos opciones. Valor recomendado “true”.
Recuerda que por defecto todo el contenido, si se indexa, es “not stored”, indexed y tokenized.
  • Si quieres cambiar el comportamiento por defecto puedes hacerlo pero deberás reindexar todos los contenidos tras hacer el cambio. No te recomiendo tocar el modelo por defecto, es mejor hacer el tuyo propio y heredar valores o no, dependiendo de las necesidades que tengas. Recuerda que si haces un tipo que herede del tipo raíz “cm:content” no podrás desactivar el indexado del contenido.
  • Por defecto, las versiones de un documento (que se almacenan en el store workspace://version2Store) no se indexan. Ese comportamiento se podría modificar modificando el fichero core-services-context.xml como se puede ver aquí, referenciando la entrada version2Store al bean avmLuceneIndexerAndSearcherFactory igual que se pueden ver el workspace y el avm. Si lo haces recuerda que tendrás un consumo mucho más elevado de disco en los índices (dependerá del número de versiones que tengas por contenido, si no lo controlas bien no lo hagas, puede ser una bomba). Aunque actives la indexación del store de versiones, los formularios de búsqueda de Share o Explorer no buscarán en version2Store, pero se puede usar la API para realizar la búsqueda.
En cuanto a la recuperación de índices, es importante saber que existen cuatro modos FULL, AUTO, VALIDATE y NONE, que se usan en alfresco-global.properties mediante el atributo index.recovery.mode.
  • index.recovery.mode=FULL: Borra todos los índices actuales y genera un nuevo índice de todo el contenido (reindexa), durante este proceso el servidor no estará disponible.
  • index.recovery.mode=AUTO: Comprueba los primeros y últimos 1000 identificadores de transacción (txn) son válidos en cada store (información en la BBDD y en los índices coincide). Si no son válidos, se realizará una indexación FULL. En un cluster es importante tener sincronizados horariamente los servidores porque de lo contrario se lanzarán las reindexaciones al no coincidir la BBDD con los índices y la hora del servidor.
  • index.recovery.mode=VALIDATE: Comprueba los primeros y últimos 1000 identificadores de transacción (txn) son válidos en cada store (información en la BBDD y en los índices coincide). Si no son válidos, simplente devolverá una excepción.
  • index.recovery.mode=NONE: No se hace ningún tipo de validación en los índices.
Como vemos, los índices son muy importantes para Alfresco, tanto que si al arrancar encuentra algún problema grave en ellos, que no se solucione reindexando, el servidor se parará automáticamente. Este comportamiento se controla mediante el valor system.bootstrap.config_check.strict que por defecto está a “true”, podríamos ponerlo a “false” para poder analizar mejor algún problema concreto del que no tenemos mucha información en los logs (úsalo sólo para debug, afecta a otras opciones de configuración) y que evita que Alfresco arranque totalmente.
Al principio decía que los índices deben estar en discos locales (lo más rápidos disponibles y dedicados si es posible) para garantizar el máximo rendimiento de la aplicación. Para evitar problemas de lentitud es recomendable tener el doble del tamaño del índice total como espacio libre, para evitar problemas en caso de reindexación y sobre todo para el merge de los índices que se realiza a menudo. De hecho si compruebas que la subida de ficheros es muy lenta comprueba que tienes suficiente espacio libre en la partición o disco de los índices y que tienes correctamente configurados los file descriptors del sistema operativo (ver este artículo).
En caso de reindexación FULL podrás ver en los logs trazas como las siguientes:
20:33:02,502 INFO [node.index.FullIndexRecoveryComponent] 100 % complete.
20:33:55,753 INFO [node.index.FullIndexRecoveryComponent] Index recovery completed.
Eso no significa que se hayan reindexado todos los contenidos, sólo nos indica que se han reindexado todas las propiedades (metadatos). A partir de ese momento Alfresco se pondrá a reindexar el contenido de los documentos. ¿Como podemos comprobar que está ocurriendo eso? Viendo la actividad en la CPU que puede provocar OpenOffice, ya que éste es utilizado para transformar ficheros MS Word a texto para poder ser indexados, por ejemplo.
Aunque ya lo comenté un poco en este artículo, quiero recordaros que existe el “Adminstrador de índices” o “Index Checker Console” disponible en la versión Enterprise desde la 3.1, puedes encontrarlo aquí: http://localhost:8080/alfresco/service/enterprise/admin/indexcheck. Esta consola te permite:
  • a) Comprobar los índices: por ejemplo, comprobar que cada transacción realizada por el repositorio está contemplada en los índices. Se puede comprobar por rangos de tiempo o rangos de transacciones.
  • b) Comprobar que un nodeRef específico o los nodos de una transacción específica están en el índice.
  • c) Reindexar desde un punto concreto hacia delante.
  • d) Comprobar el estado de sincronización de los índices entre transacciones y identificadores.
Bueno, esto ha sido todo, seguro que se quedan muchas cosas en el tintero pero espero que estos tips os resulten útiles e interesantes.
  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Cómo configurar Alfresco para usar Open Office remotamente, como servidor

Toni Agosto 19th, 2011

Cuando vamos a tener un sistema con gran cantidad de usuarios (miles) y con necesidades importantes de transformación de formatos o incluso para lanzar una reindexación completa de ficheros, metadatos y contenido de los ficheros, puede ser útil escalar, ampliar nuestra infraestructura de Alfresco para usar recursos que tengamos disponibles en otras máquinas.

En este artículo voy a enseñar como configurar Alfresco Enterprise para usar un Open Office corriendo como servidor en un servidor remoto.

  • En el servidor dedicado donde ejecutaremos Open Office, que tiene la IP 192.168.0.30 ejecutamos el siguiente comando, poniendo la IP que será en la que “escuche” el proceso:
/usr/bin/soffice -headless -nofirststartwizard -accept="socket,host=192.168.0.30,port=8100;urp;StarOffice.ServiceManager" &
  • En el servidor Alfresco, en el fichero alfresco-global.properties:
### External executable locations ###
ooo.exe=/backup/alfresco/alfresco-enterprise-3.4.3/openoffice/program/soffice.bin
ooo.enabled=false
ooo.port=8100
ooo.server=192.168.0.30
img.root=/backup/alfresco/alfresco-enterprise-3.4.3/common
img.dyn=${img.root}/lib
img.exe=${img.root}/bin/convert
swf.exe=/backup/alfresco/alfresco-enterprise-3.4.3/common/bin/pdf2swf
jodconverter.enabled=true
jodconverter.officeHome=/backup/alfresco/alfresco-enterprise-3.4.3/openoffice
jodconverter.portNumbers=8100

Recuerda, en el archivo anterior, activar “jodconverter.enabled=true” y añadir el valor “ooo.server” con la IP donde estará el servidor dedicado con Open Office.

  • También creamos el siguiente fichero tomcat/shared/classes/alfresco/extension/remote-openoffice-context.xml con el contenido:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

<bean id="openOfficeConnection" class="net.sf.jooreports.openoffice.connection.SocketOpenOfficeConnection">
   <constructor-arg type="java.lang.String" value="${ooo.server}"/>
   <constructor-arg type="int" value="${ooo.port}"/>
</bean>

<bean id="transformer.OpenOffice" class="org.alfresco.repo.content.transform.RemoteOpenOfficeContentTransformer" parent="baseContentTransformer" >
   <property name="connection">
         <ref bean="openOfficeConnection" />
   </property>
   <property name="documentFormatsConfiguration">
         <value>classpath:alfresco/mimetype/openoffice-document-formats.xml</value>
   </property>
</bean>

<bean id="openOfficeConnectionTester" class="org.alfresco.util.OpenOfficeConnectionTester">
   <property name="connection">
         <ref bean="openOfficeConnection"/>
   </property>
   <property name="strict">
         <value>false</value>
   </property>
</bean>

</beans>

Hechos esos cambios debemos reiniciar el servidor de aplicaciones y listo. Asegúrate que desde el servidor de Alfresco se llega al puerto de OpenOffice remoto por ejemplo haciendo “telnet 192.168.0.30 8100″, también puedes ver el tráfico que se genera entre los servidores lanzando el comando “tcpdump -nni eth0|grep 8100″ en el servidor de OpenOffice.

Recuerda que esta es una funcionalidad de escalabilidad adicional que está disponible en Alfresco Enterprise. Yo la he probado con la versión 3.4.3.

  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Alfresco scheduled jobs, tareas automáticas de mantenimiento

Toni Julio 1st, 2011

Con el objetivo de ampliar el conocimiento en Alfresco y enseñar algunos aspectos que no se suelen tratar a menudo, en esta ocasión quiero explicar unos procesos que intervienen cada día en el mantenimiento de Alfresco y que generalmente desconocemos o no los tenemos en cuenta. Se trata de los “scheduled jobs”.
En Alfresco se ejecutan una serie de procesos automáticos de mantenimiento, algunos de ellos son nocturnos y otras se lanzan automáticamente cada cierto tiempo. Estas tareas son ajenas al usuario final pero no deberían serlo para los administradores de la plataforma. En docs.alfresco.com podréis encontrar información que os voy a resumir en este artículo.
Todos esas tareas están definidas en <configRoot>/scheduled-jobs-context.xml (cuando hablo de <configroot> me estoy refiriendo a la configuración dentro del fichero alfresco.war, ahí no debes tocarla, más abajo cuento como modificarlo, si fuese necesario). Algunas de las expresiones cron de estas tareas están definidas en <configRoot>/repository.properties. Recuerda que la sintaxis de este cron es diferente a la de UNIX, es Quartz y puedes ver ejemplos para entenderlo mejor aquí. si quieres cambiar algunas puedes hacerlo en alfresco-global.properties. Estas son las tareas de las que hablo:
  • contentStoreCleanerTrigger: Lanza el bean contentStoreCleaner, que identifica, borra o purga contenidos huérfanos del contentstore. Un contenido es huérfano cuando todas las referencias en la base de datos al binario se han eliminado. En un entorno en cluster este proceso se puede activar en un sólo nodo, con lo que se mejora el rendimiento durante el proceso. Por defecto se ejecuta a las 4:00 AM cada día (0 0 4 * * ?). El parámetro “ProtectDays” establece el número mínimo de días que el contenido debe ser huérfano antes de poder eliminarlo, el valor predeterminado es de 7 días.
  • nodeServiceCleanupTrigger: Realiza operaciones de limpieza en los nodos del DM, incluyendo transacciones antiguas y nodos antiguos eliminados. En un entorno en cluster este proceso se puede activar en un sólo nodo, con lo que se mejora el rendimiento durante el proceso. Se ejecuta a las 21:00h de cada día (0 0 21 * * ?).
  • openOfficeConnectionTesterTrigger: Monitoriza y mantiene la conexión con OpenOffice. Se ejecuta cada minuto (0 * * * * ?).
  • indexBackupTrigger: Hace un backup seguro de los directorios de Lucene. Crea el directorio “backup-lucene-indexes” y copia de forma segura la información de Lucene. Para conocer mejor como restaurarlo de forma incremental y evitar “FULL indexes” mira aquí. En un entorno en cluster este proceso se debe ejecutar en todos los nodos. Se ejecuta todos los días a las 3:00 AM (0 0 3 * * ?).
  • tempFileCleanerTrigger: Limpia todos los ficheros temporales de Alfresco cada cierto tiempo. También se vacían directorios temporales y sus subdirectorios. Existe un parámetro llamado “protectHours” que permite indicar el tiempo de conservación de un fichero temporal desde su última modificación. Por ejemplo, ficheros resultantes de transformaciones, extractores, temporales de OpenOffice, etc., generalmente almacenado en <tomcat>/temp/Alfresco. Se ejecuta cada hora en el minuto 30 (0 30 * * * ?).
  • avmOrphanReaperJob y avmExpiredContentTrigger: la primera tarea se ejecuta cada minuto para eliminar nodos huérfanos en el repositorio AVM y la segunda tarea sirve buscar contenido caducado en cada Web Project de WCM, se ejecuta cada día a las 3:30 AM. Si no has instalado AVM no te debes preocupar de esto, ya no se instala por defecto. Es el repositorio que usaba la implementación anterior de WCM.
  • ehCacheTracerJob: Recoge las estadísticas detalladas de uso de la caché y las salidas por consola, dependiendo de la configuración de logs del servidor. Por defecto, no está activado. Para activarlo hay que eliminar el comentario correspondiente en el xml de configuración. Si se activa, se ejecuta en intervalos de 60 minutos.
  • ftsIndexerTrigger: Esta tarea, aunque está en el fichero anterior, no es una tarea planificada en un momento concreto como tal, es para mantener los índices continuamente, se ejecuta cada minuto.
  • Cuando Alfresco está configurado en cluster hay un proceso llamado “index.tracking” que se lanza cada 5 segundos y se encarga de mantener los índices de todos los nodos del cluster sincronizados.
  • Sincronización de usuarios con LDAP: No es una tarea que que se gestione desde este fichero, pero es algo a tener en cuenta dentro de los trabajos planificados ya que dependiendo de la cantidad de usuarios que se sincronicen y la periodicidad de la sincronización, podría afectar al rendimiento de la plataforma. Una o dos veces al día, serían suficientes.
Recuerda que todos los detalles a bajo nivel de estas tareas específicas están descritas en el Java Doc de Alfresco en http://dev.alfresco.com/resource/docs/java/.
Estos trabajos planificados se pueden monitorizar mediante JXM en el bean Alfresco:Name=Schedule,Group=*,Type=*,Trigger=*
¿Cómo puedo cambiar el horario o configuración de estas tareas existentes? Hay dos formas de acceder a dicha información pero sólo una para modificarlos que es mediante archivos de configuración xml. Aunque si accedemos por JMX con la utilidad, por ejemplo, jconsole, podremos lanzar bajo demanda los procesos que necesitemos en cada momento o forzar la ejecución algún proceso concreto. Para cambiarlo modificando ficheros de configuración deberás copiar el fichero <configRoot>/alfresco/scheduled-jobs-context.xml a <extension>/custom-scheduled-jobs-context.xml y editarlo a tu gusto o necesidad.
Para ver los valores de las tareas y forzar su ejecución mediante JMX accede a tu servidor Alfresco con jconsole, aquí ves dos capturas, la primera es la vista general del bean:
y en la segunda vemos el ejemplo de la tarea que hace backup de los índices cada noche a las 3AM:
En la sección “Operations” de cada “Trigger” encontrarás un botón llamado “executeNow“, adivina para que sirve ;) Cada tarea o trigger tiene una serie de propiedades que se explican por si solas, aunque me gustaría destacar la propiedad “Priority” que permite ejecutar una tarea sobre otra en caso de coincidir.
¿Cómo puedo hacer mi propia tarea planificada? Es algo que igual podría cubrir en un próximo artículo, de cualquier forma, puedes ver como hacerlo en esta página de la wiki. Y también puedes echar un vistazo al fichero <extension>/scheduled-action-services-context.xml.sample que es bastante ilustrativo.
  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Consejos sobre los logs en Alfresco

Toni Junio 2nd, 2011

Como muchos ya sabréis, Alfresco utiliza Log4j para los logs. Log4j es una herramienta Open Source para gestionar logs y permite a programadores y administradores controlar lo que ocurre en la aplicación de forma granular y a diferentes niveles de detalle.

Controlar cómo funcionan los logs en Alfresco es la mejor forma de conocer como funciona el sistema tanto para administradores como programadores y poder detectar/solucionar problemas en una instalación.

Se configura mediante un fichero de texto llamado log4j.properties que se encuentra dentro de alfresco.war concretamente en el caso de Tomcat en ${TOMCAT_HOME}/webapps/alfresco/WEB-INF/classes. En este fichero se especifica qué queremos que registre el log y cómo queremos que lo muestre (mayor o menor detalle). También es donde se establece el nombre del fichero de log (alfresco.log) y los ficheros de log anteriores a los que le añade fecha (alfresco.log.YYYY-MM-DD). Estos ficheros de logs generados los encontraremos en la raíz del directorio donde hemos instalado Alfresco también conocido como ${ALFRESCO_HOME}, ojo, ni esta variable ni ${TOMCAT_HOME} existen salvo que se declaren, se usa para indicar el directorio raíz de instalación de Alfresco y de Tomcat respectivamente.

Vamos a ver como cambiar la ubicación del fichero de log de Alfresco. Copiamos el fichero log4j.properties al directorio extension con otro nombre, por ejemplo custom-log4j.properties:

# cp ${TOMCAT_HOME}/webapps/alfresco/WEB-INF/classes/log4j.properties ${TOMCAT_HOME}/tomcat/shared/classes/alfresco/extension/custom-log4j.properties

Este cambio nos permitirá tener siempre la misma configuración de logs independientemente de que actualicemos Alfresco y despleguemos un nuevo alfresco.war donde se sobreescribiría la configuración personalizada si la hacemos dentro del war desplegado.

Editamos el fichero custom-log4j.properties y localizamos la línea:

log4j.appender.File.File=alfresco.log

para especificar la siguiente:

log4j.appender.File.File=/var/log/alfresco/alfresco.log

Como veis, este ejemplo está orientado a un sistema Linux o Unix, hay que tener en cuenta que si queréis poner los logs como he indicado hay que crear el directorio /var/log/alfresco y darle los permisos necesarios para que el usuario con el que se ejecuta Alfresco pueda escribir. También podríais poner los logs en alf_data/logs y así tener todo más centralizado. Para Windows habría que cambiar la ruta absoluta en el siguiente formato, por ejemplo “D:\logs\alfresco\alfresco.log”. Una recomendación de índole general para cualquier aplicativo y sus logs es disponer de una partición independiente encargado de almacenar estos ficheros (generalmente /var/log), de forma que si nos quedamos sin espacio en disco tanto en la aplicación como en los logs, no afecte al funcionamiento y podamos detectarlo de forma anticipada ya sea chequeando manualmente o con un sistema de monitorización, evidentemente también podemos poner una partición dedicada a los logs de Alfresco. Recuerda hacer backup de los logs regularmente.

Para entender mejor la sintaxis y opciones que encontramos en el fichero de configuración os recomiendo leer esta entrada en la Wikipedia. Destacaría el parámetro log4j.appender.File que especifica la rotación diaria del fichero de log y log4j.appender.File.File que permite indicar el nombre y path del fichero de log.

En cuanto a los niveles de detalle es importante conocer que existen los siguientes (de menos a mas detalle): OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE y ALL. Así que hay que tener cuidado con tener DEBUG, TRACE o ALL en un sistema en producción, salvo que sea necesario para solucionar un problema. Aquí puedes ver más información al respecto.

Si usáis un servidor de aplicaciones Tomcat, también es recomendable cambiar la ubicación del fichero de logs de Tomcat (o cualquier otro servidor de aplicaciones soportado), aquí vemos como cambiar el sitio donde se almacena el fichero catalina.out:

Editamos el fichero ${TOMCAT_HOME}/bin/catalina.sh, localizamos las líneas:

if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi

Y cambiamos la ruta de CATALINA_OUT por la ruta deseada:

if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="/var/log/alfresco/catalina.out"
fi

Para que los cambios anteriores surtan efecto hay que reiniciar el servidor de aplicaciones. Una vez reiniciado ya veremos los ficheros creados en el directorio correspondiente.

Todo lo que hemos visto anteriormente se puede hacer de una forma más sencilla accediendo al servidor con jconsole mediante RMI y sin tener que reiniciar el servidor. En Alfresco Enterprise 3.4 ya está activado el acceso remoto. Aquí expliqué como acceder por jconsole a Alfresco.

Como vemos en la siguiente captura de pantalla, en la sección MBeans podemos encontrar un grupo llamado “log4j” y desplegado podemos ver todas sus opciones.

Concretamente en la captura anterior vemos los “Attributes” del bean “File“, y ahí podemos cambiar las opciones como por ejemplo “file”, el fichero y ruta de log. Una vez cambiado a nuestro gusto, para que tenga efecto vamos a “Operations“, hacemos clic en “activateOptions” y listo.

Por ejemplo, los logs de Webdav por defecto están configurados como detalle tipo “ERROR”, si queremos hacer un análisis más exhaustivo podríamos localizar el bean “org.alfresco.webdav.protocol” y desplegamos el menú “Attributes” y hacemos clic en “priority“, doble clic en “ERROR” para editarlo y lo cambiamos por “DEBUG” (sin comillas), a continuación guardamos simplemente pulsando la tecla “Enter” y ya tendríamos configurado el nivel de log del componente de turno. Fácil ¿no?

Para terminar quiero mencionar este pequeño desarrollo que ha realizado Tjarda Peelen – @tpeelen que permite ver los logs en la propia interfaz de la aplicación. Puede ser útil.

También se podría usar Log4mongo u otras aplicaciones para presentar logs vía web, pero eso ya es otra historia.

¿Algún consejo más? ¡Cualquier comentario es bienvenido!

  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Añade más utilidades de administración en Alfresco Share

Toni Marzo 7th, 2011

Como muchos ya sabéis y también hablé aquí hace tiempo, Alfresco dispone de varios recursos internos que nos pueden ayudar en la administración y del servidor y también de cara a desarrollar. He preparado unos ficheros que nos permiten tener acceso a todos ellos de una forma sencilla y cómoda desde el menú de herramientas en Alfresco Share, como se puede ver aquí (pincha para ver la captura):

He creado un proyecto en Google Code para almacenar estos pequeños ficheros, lo he llamado alfresco-useful-admin-links. La instalación es muy sencilla, no hay que reiniciar el servidor:

  1. Descargar el conjunto de ficheros necesarios en el servidor desde aquí.
  2. Copia el contenido del fichero zip (sólo los ficheros contenido, no el directorio) en <tomcat home>/shared/classes/alfresco/web-extension/site-webscripts/org/alfresco/components/console. Si no existen esos directorios debes crearlos y si ya los tienes debes sobreescribir los ficheros existentes. Si no lo copias en esa dirección no te funcionará.
  3. Accede a la consola de Web Scripts de Alfresco Share http://localhost:8080/share/service/index.html
  4. Haz clic en “Refresh Web Scripts” y listo
  5. Accede a Alfresco Share, visita la sección “Herramientas” pinchando sobre el menú superior “Más…” -> “Repositorio

Lo he probado en Enterprise 3.4, si lo probáis en otras versiones y encontráis algún problema me indicáis para corregirlo.

Actualización: ¿Quieres instalarlo como AMP? Mira en el blog de Fernando Gonzalez, uno de los expertos españoles de Alfresco.

  • Meneame
  • Netvibes Share
  • Delicious
  • Digg
  • Google Reader
  • Technorati Favorites
  • LinkedIn
  • Twitter
  • TypePad Post
  • Blogger Post
  • Google Bookmarks
  • WordPress
  • Facebook
  • Share/Bookmark

Next »