Archivo de la categoría: tips

[TIP] Alfresco no funciona, no levanta o está roto

Si estás aquí es porque probablemente has ido a ver tu Alfresco y se encuentra apagado o fuera de cobertura. Bienvenido al mundo de Alfresco :)

En esta entrada os quiero explicar qué hacer y cómo ver qué ocurre “por detrás” para intentar solucionarlo. Antes de nada: Para tu Alfresco, no sirve de nada que siga ejecutándose comiendo recursos de la máquina.

¿Qué necesitamos? alfresco.log y catalina.out. Son logs donde se registran los detalles “técnicos” cuando se inicia Alfresco.

alfresco.log se encuentra en tu instalación en alfresco/alfresco.log

catalina.out se encuentra en alfresco/tomcat/logs/catalina.out

Prueba lo siguiente:

  1. Arranca alfresco y abre uno de esos logs, yo quizás te recomendaría que echaras un primer ojo a catalina.out y después a alfresco.log.
  2. Si puedes, lo ídeal es que el log se vaya refrescando a medida que vaya cargando.
    • En linux puedes lanzar el comando tail desde la terminal (tail -n500 -f /opt/alfresco/tomcat/logs/catalina.out)
    • En windows puedes utilizar esa utilidad  para obtener el mismo resultado que en linux
  3. Una vez tengas el log y empiecen las lineas a “correr”, fijate en la primera que contenta al inicio la palabra ERROR
  4. Una vez veas que tienes el / los errores, puedes parar tu Alfresco.
  5. Abre con un editor de texto el log (catalina.out o alfresco.log) Si tienes varios errores no te preocupes, busca siempre el primer ERROR que tengas, y mira a ver si tiene un Caused by algo más abajo.

Bien, ya tienes el error “técnico” pero no tienes ni la más remota idea de por dónde empezar. Aquí las claves:

  1. Busca el “Caused by:” completo de tu error  más la palabra “alfresco” en google.
    • Pincha aquí para ver un ejemplo.
  2. Prueba a poner el error completo en un nuevo hilo en la comunidad de alfresco.
  3. Chatea con expertos (normalmente en inglés aunque a veces hay gente en español que echan una mano).

Como veis no es muy complicado saber qué ocurre exactamente detrás de “alfresco no funciona”. Al menos ahora podréis encontrar vosotros mismos la solución o al menos sabéis dónde se encuentra los detalles técnicos del mismo.

Espero que os sirva como orientación.

¡Un saludo!

[Alfresco Share] A server error has ocurred

Buenas.

He realizado en mi Mac una instalación simple con el instalador de un Alfresco Community versión 5.0.d y cual ha sido mi sorpresa que nada más arrancar e intentar acceder por el navegador web (http://localhost:8080/share) me casca un “A server error has ocurred” de estos súper genérico:

Share default failed web page

Consultando el catalina.out al arrancar, observo lo siguiente:

INFORMACIÓN: Despliegue del archivo /Applications/Alfresco/community/alfresco-5.0.d/tomcat/webapps/share.war de la aplicación web
sep 04, 2017 7:00:25 PM org.apache.catalina.startup.ContextConfig beforeStart
GRAVE: Excepción arreglando docBase: /share
java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:418)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:413)
at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:144)
at org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:735)
at org.apache.catalina.startup.ContextConfig.beforeStart(ContextConfig.java:863)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1081)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1877)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Si me voy algo más abajo, coincidiendo con el momento de acceder por web, en uno de los Caused by, observo lo siguiente:

...
Caused by: org.springframework.extensions.surf.exception.PlatformRuntimeException: 09040000 No 'login' page type configured - but page auth required it.
at org.springframework.extensions.surf.mvc.PageView.renderView(PageView.java:260)
at org.springframework.extensions.surf.mvc.AbstractWebFrameworkView.renderMergedOutputModel(AbstractWebFrameworkView.java:316)
...

EL error está claro: No hay página de inicio.

Mirando la instalación he verificado que dentro de la carpeta webapps, no se descomprimía el share.war:

Cristina$ ls -la tomcat/webapps/
total 590896
drwxr-xr-x 9 Cristina admin 306 4 sep 19:00 .
drwxr-xr-x 16 Cristina admin 544 4 sep 18:56 ..
drwxr-xr-x 12 Cristina admin 408 4 sep 18:59 alfresco
-rw——- 1 Cristina admin 149546738 4 sep 18:57 alfresco.war
drwxr-xr-x 7 Cristina admin 238 4 sep 18:56 host-manager
drwxr-xr-x 8 Cristina admin 272 4 sep 18:56 manager
-rw——-1 Cristina admin 60471586 4 sep 18:57 share.war
drwxr-xr-x 10 Cristina admin 340 4 sep 18:59 solr4
-rw-r–r– 1 Cristina admin 92515594 19 mar 2015 solr4.war

Después de mirar, he caído que el problema viene del instalador: No establece los permisos adecuados a webapps/alfresco.war y share.war y tomcat no es capaz de descomprimirlo adecuadamente.

Echemos un ojo para comprender el problema

Por defecto, al realizar la instalación con el instalador y arrancado, tenemos lo siguiente:

Cristina$ ls -la tomcat/webapps/
total 590896
drwxr-xr-x 9 Cristina admin 306 4 sep 19:00 .
drwxr-xr-x 16 Cristina admin 544 4 sep 18:56 ..
drwxr-xr-x 12 Cristina admin 408 4 sep 18:59 alfresco
-rw——- 1 Cristina admin 149546738 4 sep 18:57 alfresco.war
drwxr-xr-x 7 Cristina admin 238 4 sep 18:56 host-manager
drwxr-xr-x 8 Cristina admin 272 4 sep 18:56 manager
-rw——-1 Cristina admin 60471586 4 sep 18:57 share.war
drwxr-xr-x 10 Cristina admin 340 4 sep 18:59 solr4
-rw-r–r– 1 Cristina admin 92515594 19 mar 2015 solr4.war

Si os fijáis, alfresco.war ocupa casi un giga y medio (149546738 4 sep 18:57 alfresco.war) y solo ha descomprimido 400kbs (408 4 sep 18:59 alfresco). Por lo que tampoco lo ha realizado bien.

Solución

Hay que ejecutar lo siguiente para otorgar los permisos adecuados. Tened en cuenta que debéis estar sobre la ruta en la que tengamos instalado nuestro Alfresco, por ejemplo C:/Alfresco/

  • chmod 0644 tomcat/webapps/share.war
  • chmod 0644 tomcat/webapps/alfresco.war

Los permisos adecuados deben ser:

Cristina$ ls -la tomcat/webapps/
total 590896
drwxr-xr-x 9 Cristina admin 306 4 sep 19:00 .
drwxr-xr-x 16 Cristina admin 544 4 sep 18:56 ..
drwxr-xr-x 12 Cristina admin 408 4 sep 18:59 alfresco
-rw-r–r– 1 Cristina admin 149546738 4 sep 18:57 alfresco.war
drwxr-xr-x 7 Cristina admin 238 4 sep 18:56 host-manager
drwxr-xr-x 8 Cristina admin 272 4 sep 18:56 manager
-rw-r–r– 1 Cristina admin 60471586 4 sep 18:57 share.war
drwxr-xr-x 10 Cristina admin 340 4 sep 18:59 solr4
-rw-r–r– 1 Cristina admin 92515594 19 mar 2015 solr4.war

Borramos el despliegue a que teníamos mal realizado de Alfresco:

  • rm -rf tomcat/webapps/alfresco/

Y ya solo nos queda arrancar Alfresco con un alfresco.sh start. Listo ;-)

Otra de esas cositas que son muy tontas pero que te quitan tiempo (mucho tiempo) en mirar de dónde viene el problema. Ahí queda :-)

¡Un saludo!

[ERROR]: The amp will overwrite an existing file in the war

Buenas tardes.

Os dejo aquí este tip por si el día de mañana os ocurre para que no os volváis loc@s :-P

Un poco de historia…

Intentando instalar mis amps (carpetas amps/ y amps_share/) con el script apply_amps.sh en uno de mis módulos me daba el siguiente error y no lo instalaba:

06280001 An error was encountered during deployment of the AMP into the WAR: 06280000 ERROR: The amp will overwrite an existing file in the war ‘/themes/sampleTheme/images/alfresco-imagelib.png’. Execution halted. By specifying -force , you can force installation of AMP regardless of the current war state.

El problema es que, si utilizamos el -force como se indica en ese parrafo obligamos a alfresco a sobre escribir archivos que ya tuviera desplegados previamente. Pero más allá de eso: ¿Por qué Alfresco tiene una versión previa de mi archivo si estoy desplegando una nueva?

Si miramos un poco más y usamos el ./apply_amps.sh -force , tenemos lo siguiente:

– WARNING: The file ‘/themes/sampleTheme/images/alfresco-imagelib.png’ is being overwritten by this module. The original has been backed-up to ‘/WEB-INF/classes/alfresco/module/backup/f2d9c362-73b2-11e7-9166-857b2fac416e.bin’

Y nuestro problema vendrá cuando corrijamos esa ruta e intentemos desplegar esa misma imagen en una ruta distinta, veremos como Alfresco carga la que tiene en backup.

Solución.

  • Pongamos que nuestro Alfresco es el 5.2.
  • Cogemos el war limpio de la misma versión. ¿Qué significa limpio? Pues nos descargamos los fuentes de Alfresco, y tomamos el war de la misma versión que nosotros usamos. Vamos, que no haya sido utilizado nunca.
  • Tenemos que renombrar el war que queramos sustituir de nuestra instalación: Por ejemplo de alfresco.war a alfresco.war.previous o lo que queráis pero .lo-que-quieras para que no sea tenido en cuenta cuando cargue tomcat.
  • Copiamos el war en nuestro_alfresco/tomcat/webapps/
  • Ejecutamos ./apply_amps.sh (o bat si es para plataforma windows).
  • Veremos como habrá desaparecido tanto el error como los warnings.
  • Serás más feliz :-)

Espero que os sirva.

¡Un saludo!

[Tip] Duplicity Error: The file specification cannot match any files in the base directory

Buenas.

Si trabajáis con Alfresco, de cara a la estrategia a seguir para implantar un sistema de backup y restore, seguramente os habréis topado con la utilidad BART. Pues bien, una vez configurado todo el sistema, al intentar lanzar un comando para realizar un backup, el script nos lanza el siguiente error:

Fatal Error: The file specification
/home/cristina/alfresco_backup/alfresco-db-backup
cannot match any files in the base directory
/opt/alfresco-5.2.e
Useful file specifications begin with the base directory or some
pattern (such as '**') which matches the base directory.

El error está relacionado con este problema, es decir, un problema con cómo está montado los include y exclude en la función filesBackup de dentro del archivo alfresco-bart.sh, deberemos tocar esa función para introducir “**” al comienzo y al final de cada variable.

Original:

function filesBackup {
# Getting a variable to know all includes and excludes
FILES_DIR_INCLUDES="$ALF_INSTALLATION_DIR"

if [ -d "$INDEXES_BACKUP_DIR" ]; then
OPT_INDEXES_BACKUP_DIR=" --exclude $INDEXES_BACKUP_DIR"
fi
if [ -d "$INDEXES_DIR" ]; then
OPT_INDEXES_DIR=" --exclude $INDEXES_DIR"
fi
if [ -d "$ALF_CONTENTSTORE" ]; then
OPT_ALF_CONTENTSTORE=" --exclude $ALF_CONTENTSTORE"
fi
if [ -d ${ALF_DIRROOT}/contentstore.deleted ]; then
OPT_ALF_CONTENSTORE_DELETED=" --exclude ${ALF_DIRROOT}/contentstore.deleted"
fi
if [ -d "$ALF_CACHED_CONTENTSTORE" ]; then
OPT_CACHED_CONTENTSTORE=" --exclude $CACHED_CONTENTSTORE"
fi
if [ -d "$ALF_CONTENTSTORE2" ]; then
OPT_ALF_CONTENTSTORE2=" --exclude $ALF_CONTENTSTORE2"
fi
if [ -d "$ALF_CONTENTSTORE3" ]; then
OPT_ALF_CONTENTSTORE3=" --exclude $ALF_CONTENTSTORE3"
fi
if [ -d "$ALF_CONTENTSTORE4" ]; then
OPT_ALF_CONTENTSTORE4=" --exclude $ALF_CONTENTSTORE4"
fi
if [ -d "$ALF_CONTENTSTORE5" ]; then
OPT_ALF_CONTENTSTORE5=" --exclude $ALF_CONTENTSTORE5"
fi
if [ -d "$LOCAL_BACKUP_DB_DIR" ]; then
OPT_LOCAL_BACKUP_DB_DIR=" --exclude $LOCAL_BACKUP_DB_DIR"
fi

echo "$LOG_DATE_LOG - $BART_LOG_TAG Backing up the Alfresco files to $BACKUPTYPE" >> $ALFBRT_LOG_FILE
echo "$LOG_DATE_LOG - $BART_LOG_TAG Starting backup - Alfresco files" >> $ALFBRT_LOG_FILE
echo "$LOG_DATE_LOG - $BART_LOG_TAG Running command - $DUPLICITYBIN $PARAMS $FILES_DIR_INCLUDES $OPT_INDEXES_BACKUP_DIR $OPT_INDEXES_DIR $OPT_ALF_CONTENTSTORE $OPT_ALF_CONTENSTORE_DELETED $OPT_CACHED_CONTENTSTORE $OPT_ALF_CONTENTSTORE2 $OPT_ALF_CONTENTSTORE3 $OPT_ALF_CONTENTSTORE4 $OPT_ALF_CONTENTSTORE5 $OPT_LOCAL_BACKUP_DB_DIR $OPT_LOCAL_DB_DIR $DEST/files" >> $ALFBRT_LOG_FILE

# files backup itself
$DUPLICITYBIN $PARAMS $FILES_DIR_INCLUDES $OPT_INDEXES_BACKUP_DIR $OPT_INDEXES_DIR \
$OPT_ALF_CONTENTSTORE $OPT_ALF_CONTENSTORE_DELETED $OPT_CACHED_CONTENTSTORE \
$OPT_ALF_CONTENTSTORE2 $OPT_ALF_CONTENTSTORE3 $OPT_ALF_CONTENTSTORE4 $OPT_ALF_CONTENTSTORE5 \
$OPT_LOCAL_BACKUP_DB_DIR $OPT_LOCAL_DB_DIR $DEST/files >> $ALFBRT_LOG_FILE
echo "$LOG_DATE_LOG - $BART_LOG_TAG Files backup done!" >> $ALFBRT_LOG_FILE
}

Corregido:

unction filesBackup {
# Getting a variable to know all includes and excludes
FILES_DIR_INCLUDES="$ALF_INSTALLATION_DIR"

if [ -d "$INDEXES_BACKUP_DIR" ]; then
OPT_INDEXES_BACKUP_DIR=" --exclude **$INDEXES_BACKUP_DIR**"
fi
if [ -d "$INDEXES_DIR" ]; then
OPT_INDEXES_DIR=" --exclude **$INDEXES_DIR**"
fi
if [ -d "$ALF_CONTENTSTORE" ]; then
OPT_ALF_CONTENTSTORE=" --exclude **$ALF_CONTENTSTORE**"
fi
if [ -d ${ALF_DIRROOT}/contentstore.deleted ]; then
OPT_ALF_CONTENSTORE_DELETED=" --exclude **${ALF_DIRROOT}/contentstore.deleted**"
fi
if [ -d "$ALF_CACHED_CONTENTSTORE" ]; then
OPT_CACHED_CONTENTSTORE=" --exclude **$CACHED_CONTENTSTORE**"
fi
if [ -d "$ALF_CONTENTSTORE2" ]; then
OPT_ALF_CONTENTSTORE2=" --exclude **$ALF_CONTENTSTORE2**"
fi
if [ -d "$ALF_CONTENTSTORE3" ]; then
OPT_ALF_CONTENTSTORE3=" --exclude **$ALF_CONTENTSTORE3**"
fi
if [ -d "$ALF_CONTENTSTORE4" ]; then
OPT_ALF_CONTENTSTORE4=" --exclude **$ALF_CONTENTSTORE4**"
fi
if [ -d "$ALF_CONTENTSTORE5" ]; then
OPT_ALF_CONTENTSTORE5=" --exclude **$ALF_CONTENTSTORE5**"
fi
if [ -d "$LOCAL_BACKUP_DB_DIR" ]; then
OPT_LOCAL_BACKUP_DB_DIR=" --exclude **$LOCAL_BACKUP_DB_DIR**"
fi

echo "$LOG_DATE_LOG - $BART_LOG_TAG Backing up the Alfresco files to $BACKUPTYPE" >> $ALFBRT_LOG_FILE
echo "$LOG_DATE_LOG - $BART_LOG_TAG Starting backup - Alfresco files" >> $ALFBRT_LOG_FILE
echo "$LOG_DATE_LOG - $BART_LOG_TAG Running command - $DUPLICITYBIN $PARAMS $FILES_DIR_INCLUDES $OPT_INDEXES_BACKUP_DIR $OPT_INDEXES_DIR $OPT_ALF_CONTENTSTORE $OPT_ALF_CONTENSTORE_DELETED $OPT_CACHED_CONTENTSTORE $OPT_ALF_CONTENTSTORE2 $OPT_ALF_CONTENTSTORE3 $OPT_ALF_CONTENTSTORE4 $OPT_ALF_CONTENTSTORE5 $OPT_LOCAL_BACKUP_DB_DIR $OPT_LOCAL_DB_DIR $DEST/files" >> $ALFBRT_LOG_FILE

# files backup itself
$DUPLICITYBIN $PARAMS $FILES_DIR_INCLUDES $OPT_INDEXES_BACKUP_DIR $OPT_INDEXES_DIR \
$OPT_ALF_CONTENTSTORE $OPT_ALF_CONTENSTORE_DELETED $OPT_CACHED_CONTENTSTORE \
$OPT_ALF_CONTENTSTORE2 $OPT_ALF_CONTENTSTORE3 $OPT_ALF_CONTENTSTORE4 $OPT_ALF_CONTENTSTORE5 \
$OPT_LOCAL_BACKUP_DB_DIR $OPT_LOCAL_DB_DIR $DEST/files >> $ALFBRT_LOG_FILE
echo "$LOG_DATE_LOG - $BART_LOG_TAG Files backup done!" >> $ALFBRT_LOG_FILE
}

Si os fijáis la única diferencia está en cómo se construye la llamada que se va a ejecutar en ese comando:
Original:

OPT_INDEXES_BACKUP_DIR=" --exclude $INDEXES_BACKUP_DIR"

Corregido:

OPT_INDEXES_BACKUP_DIR=" --exclude **$INDEXES_BACKUP_DIR**"

 

Espero que os sirve de ayuda :-)

¡Ah! Si queréis he he publicado en la comunidad de Venzia IT una guía completa para aprender más sobre Backup y Restore en Alfresco (aquí).

¡Un saludo! ^^