[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! ^^

[ERROR] Solr4: Unable to create core alfresco

Buenas.

Hace poco al instalar unos amps en un Alfresco 5.0.d usando el instalador apply_amps.sh de el directorio /opt/alfresco-5.0.d/bin/, al arrancar mi alfresco me encontré el siguiente error:

ERROR [solr.core.CoreContainer] [coreLoadExecutor-5-thread-2] Unable to create core: alfresco
org.apache.solr.common.SolrException: Could not load core configuration for core alfresco
at org.apache.solr.core.ConfigSetService.getConfig(ConfigSetService.java:66)
at org.apache.solr.core.CoreContainer.create(CoreContainer.java:554)
at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:261)
at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:253)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
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)
Caused by: org.apache.solr.common.SolrException: org.xml.sax.SAXParseException; systemId: solrres:/schema.xml; lineNumber: 403; columnNumber: 105; An invalid XML character (Unicode: 0x2) was found in the comment.. Schema file is /Applications/Alfresco/community/alfresco-5.0.d/solr4/workspace-SpacesStore/schema.xml
at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:593)
at org.apache.solr.schema.IndexSchema.<init>(IndexSchema.java:165)
at org.apache.solr.schema.IndexSchemaFactory.create(IndexSchemaFactory.java:55)
at org.apache.solr.schema.IndexSchemaFactory.buildIndexSchema(IndexSchemaFactory.java:69)
at org.apache.solr.core.ConfigSetService.createIndexSchema(ConfigSetService.java:89)
at org.apache.solr.core.ConfigSetService.getConfig(ConfigSetService.java:62)
... 9 more
Caused by: org.apache.solr.common.SolrException: org.xml.sax.SAXParseException; systemId: solrres:/schema.xml; lineNumber: 403; columnNumber: 105; An invalid XML character (Unicode: 0x2) was found in the comment.
at org.apache.solr.core.Config.<init>(Config.java:148)
at org.apache.solr.core.Config.<init>(Config.java:86)
at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:443)
... 14 more
Caused by: org.xml.sax.SAXParseException; systemId: solrres:/schema.xml; lineNumber: 403; columnNumber: 105; An invalid XML character (Unicode: 0x2) was found in the comment.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.scanComment(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanComment(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at org.apache.solr.core.Config.<init>(Config.java:134)
... 16 more

Después de leer esta incidencia de Alfresco, intenté aplicarla pero no pude porque sencillamente no aplicaba a mi instalación (ya tenía el archivo nombrado a solr4.xml y no había por ningún lado el parámetro docBase).

Finalmente dí con la solución:

  1. Me dirijo a la carpeta de mi instalación
    • cd /opt/alfresco-5.0.d/
  2. Paro Alfresco
    • ./alfresco.sh stop
  3. Elimino el directorio solr4/
    • rm -rf  tomcat/webapps/solr4/
  4. Inicio Alfresco
    • ./alfresco.sh start
  5. Monitorizo el log para ver que todo funciona bien
    • tail -n500 -f tomcat/logs/catalina.out

Y listo, todo como la seda.

Sé que es una chorrada pero me ha llevado algo de tiempo dar con lo que era y si publicándolo os puedo ahorrar algo de tiempo, mejor que mejor ;-)

¡¡Un saludo!!

[Error] Problemas con SLF4JLogFactory y Alfresco 4.2.x

Muy buenas.

Cuando nos toca trabajar con la SDK 1.1.1 – porque algunas veces puede ocurrir que nos encontremos algún cliente sigue usando Alfresco 4.2.x – nos tocará lidiar con esta versión de SDK siguiendo la tabla de compatibilidades publicada por Alfresco. Si utilizamos el arqueotipo “todo en uno” por defecto tenemos un error nada más arrancar:

GRAVE: Servlet /alfresco threw load() exception
org.apache.commons.discovery.DiscoveryException: Class org.apache.commons.logging.impl.SLF4JLogFactory does not implement org.apache.commons.logging.LogFactory
at org.apache.commons.discovery.tools.ClassUtils.verifyAncestory(ClassUtils.java:180)
at org.apache.commons.discovery.tools.SPInterface.verifyAncestory(SPInterface.java:201)
at org.apache.commons.discovery.tools.SPInterface.newInstance(SPInterface.java:195)
at org.apache.commons.discovery.tools.DiscoverClass.newInstance(DiscoverClass.java:579)
at org.apache.commons.discovery.tools.DiscoverSingleton.find(DiscoverSingleton.java:418)
at org.apache.commons.discovery.tools.DiscoverSingleton.find(DiscoverSingleton.java:378)
at org.apache.axis.components.logger.LogFactory$1.run(LogFactory.java:45)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.axis.components.logger.LogFactory.getLogFactory(LogFactory.java:41)
at org.apache.axis.components.logger.LogFactory.<clinit>(LogFactory.java:33)
at org.apache.axis.transport.http.AxisServletBase.<clinit>(AxisServletBase.java:58)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrConstructorNewInstance(ReflectiveInterceptor.java:1002)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlClassNewInstance(ReflectiveInterceptor.java:989)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:138)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5033)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5317)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

Incluso el error está reconocido por Alfresco en este ticket, pero lamentablemente la solución que proponen no funciona :-(

Después de horas de quebramiento de cabeza, cientos de pruebas y combinaciones, esto es lo que me funcionó:

Sigue leyendo

[Tutorial] Mi primer proyecto Alfresco con Maven

¡Muy buenas a tod@s!

Hace algún tiempo estuve echándole una mano a David Selma con su proyecto de carrera basado en Alfresco, en concreto con la configuración de un proyecto Maven para extender algunas funcionalidades de Alfresco. Eso, sumado a la insistencia de mi colega Jordi Solis, me ha llevado a publicar este mini tutorial para ayudar a aquellas personas que están empezando con Alfresco y Maven os resulte algo más sencillo “echar a andar”.

Este tutorial está pensado para que en unos minutos seas capaz de configurar dos proyectos, uno para el repositorio (que irá dirigido a la aplicación de Alfresco) y otro para Share, probarlo y no morir en el intento :-)

Antes de empezar…

Sigue leyendo