|
|
> IMPORTANTE: El SEDICI de la Universidad Nacional de la Plata aconseja utilizar la versión 6.3 de DSpace en lugar de la 6.0, ya que, a esta última, la consideran muy vieja y con muchísimos problemas de funcionamiento y, quizás, algunos de seguridad.
|
|
|
|
|
|
***
|
|
|
## Índice
|
|
|
* [Pasos para migrar a DSpace 6.3](#pasos-para-migrar-a-dspace-63)
|
|
|
* [Solución y Errores encontrados](#solución-y-errores-encontrados)
|
|
|
* [Pasos del RID para migrar DSpace](#pasos-del-rid-para-migrar-dspace)
|
|
|
* [Errores en la compilación](#errores-en-la-compilación)
|
|
|
|
|
|
## Pasos para migrar a DSpace 6.3
|
|
|
A continuación se detallan una estimación de pasos que deberían seguirse a la hora de migrar DSpace a la versión 6.3. A medida que se avance con este proceso, se irá documentando el mismo con el objetivo de ayudar a la comunidad Universitaria. La documentación generada deberá publicarse libremente en la wiki del repositorio del RID-UNRN: <https://github.com/crai-unrn/DSpace/wiki>
|
|
|
|
|
|
### 1. Realizar un Backup de nuestro DSpace
|
|
|
Antes de comenzar la actualización, se recomienda crear una copia de seguridad de la instancia de DSpace. Las copias de seguridad son fáciles de recuperar, pero una instalación y/o actualización fallida es muy difícil. Las cosas específicas de DSpace para respaldar son:
|
|
|
* Configuraciones
|
|
|
* Modificaciones del código fuente
|
|
|
* Base de datos y almacén de activos.
|
|
|
* En el servidor que ejecuta DSpace, verificar tareas cron programadas, el contenedor de servlets y la base de datos.
|
|
|
|
|
|
Realizar una copia de seguridad completa del sistema que incluya:
|
|
|
* Base de datos: realizar un snapshot a través del comando `pg_dump` de Postgres.
|
|
|
* Assetstore: Realizar una copia de seguridad del directorio `[dspace]/assetstore`, así como su configuración `[dspace]/config/dspace.cfg` ("_assetstore.dir_" y "_assetstore.dir.#_")
|
|
|
* Personalizaciones: si se posee un código personalizado, como temas, modificaciones y/o scripts, realizar una copia de los mismos.
|
|
|
* Datos estadísticos: Realizar una copia de seguridad de los directorios:
|
|
|
* `[dspace]/elasticsearch`
|
|
|
* `[dspace]/solr/statistics`
|
|
|
|
|
|
### 2. Actualizar los requisitos del servidor
|
|
|
Como se mencionó anteriormente, DSpace 6.3 cuenta con requisitos mínimos de sistema. Ver sección [Requisitos mínimos para migrar a DSpace 6.3](#requisitos-mínimos-para-migrar-a-dspace-63).
|
|
|
|
|
|
### 3. Asegurarse de que la base de datos sea compatible
|
|
|
PostgreSQL 9.4 o superior (con la extensión [pgcrypto](https://www.postgresql.org/docs/9.4/pgcrypto.html) instalada).
|
|
|
|
|
|
### 4. Crear MR para DSpace 6.3
|
|
|
Nuestro repositorio git reside en <https://github.com/crai-unrn/DSpace> y es un fork del repositorio original <https://github.com/DSpace/DSpace>.
|
|
|
La palabra fork se traduce al castellano, dentro del contexto que nos ocupa, como bifurcación. Cuando se realiza un fork de un repositorio, se hace una copia exacta en crudo (en inglés «bare») del repositorio original. Después de hacer fork se dispondrá de dos repositorios git idénticos pero con distinta URL. Estos repositorios son una copia idéntica e independientes que pueden evolucionar de forma autónoma. De hecho, los cambios que se hacen el repositorio original NO se transmiten automáticamente a la copia (fork) y viceversa.
|
|
|
|
|
|
Dicho lo anterior, se deberá:
|
|
|
1. Hacer un checkout de nuestra rama master (Ej: _master-unrn2_)
|
|
|
2. Crear un Merge Request desde git (línea de comandos) o gihutb.
|
|
|
3. Crear una rama nueva llamada `merge-con-ds63`, haciendo referencia a la versión de 6.3 de DSpace.
|
|
|
|
|
|
### 5. Realizar un Merge de DSpace 6.3
|
|
|
Quizás este proceso sea el más largo a la hora de migrar a DSpace 6.3.
|
|
|
Debemos realizar un merge (o fusión) con el tag _dspace-6.3_ del repositorio DSpace original. Una vez hecho lo anterior, se deberá abordar en la verificación de los cambios, resolución de conflictos y otras características provenientes de un merge de tal magnitud.
|
|
|
Fuente: <http://sedici.unlp.edu.ar/bitstream/handle/10915/77354/Documento_completo.pdf?sequence=2&isAllowed=y>
|
|
|
|
|
|
### 6. Reemplazar el archivo build.properties
|
|
|
A partir de DSpace 6.0, el archivo de configuración **build.properties** ha sido reemplazado por un archivo de configuración **local.cfg**. Por lo tanto, cualquier archivo **build.properties** antiguo (o archivos similares `[dspace-source]/*.properties`) SERÁ IGNORADO. Para obtener más información sobre las características de local.cfg, consulte la documentación de [Referencia de configuración](https://wiki.duraspace.org/display/DSDOC6x/Configuration+Reference), más precisamente la sección de [Configuración del archivo **local.cfg**](https://wiki.duraspace.org/display/DSDOC6x/Configuration+Reference#ConfigurationReference-Thelocal.cfgConfigurationPropertiesFile).
|
|
|
|
|
|
### 7. Compilar DSpace
|
|
|
Utilizar el comando `mvn -U clean package`. Esto permitirá instalar los paquetes de mvn, obligando a verificar las versiones faltantes y actualizar los snapshots de los repositorios remotos.
|
|
|
|
|
|
### 8. Actualizar la instalación de DSpace
|
|
|
Parar el servidor Tomcat y actualizar el directorio de instalación de DSpace con el nuevo código (y las librerías).
|
|
|
Este proceso, actualizará automáticamente todos los índices Solr existentes (por ejemplo, para Discovery, Statistics, OAI-PMH) a la última versión. Para instancias grandes, esto puede llevar algo de tiempo, pero es importante asegurarse de que los índices sean utilizables por la última versión de DSpace.
|
|
|
|
|
|
### 9. Actualizar y/o mover las configuraciones al archivo local.cfg
|
|
|
Se recomienda revisar todos los cambios de configuración que existen en el directorio de configuración y sus subdirectorios. Es útil comparar las configuraciones actuales con una comprobación limpia de su versión actual para ver lo que ha personalizado. Una herramienta útil para este propósito podría ser Meld o DiffMerge.
|
|
|
|
|
|
### 10. Decidir qué aplicaciones web de DSpace instalar
|
|
|
DSpace viene con una variedad de aplicaciones web (en [dspace]/webapps), cada una de las cuales proporciona una _interfaz_ diferente:
|
|
|
* **XMLUI**: Esta es la interfaz de usuario basada en XML, basada en Apache Cocoon. Viene con una variedad de temas listos para usar, incluidos Mirage 1 (el predeterminado) y Mirage 2 (basado en Bootstrap). Entre _xmlui_ y _jspui_, es probable que solo se necesite uno.
|
|
|
* **JSPUI**: Esta es la interfaz de usuario basada en JSP, que utiliza Bootstrap.
|
|
|
* **SOLR** (obligatorio): Esta es la aplicación web Apache Solr, que es utilizada por XMLUI y JSPUI (para la funcionalidad de búsqueda y exploración), así como por la interfaz OAI-PMH. Debe instalarse para admitir cualquiera de las interfaces de usuario.
|
|
|
* **OAI**: Esta es la interfaz DSpace OAI y permite la recolección de metadatos y flujo de bits (archivo de contenido), compatible con los protocolos OAI-PMH (Protocolo para la recolección de metadatos) y OAI-ORE (Reutilización e intercambio de objetos)
|
|
|
* **REST**: Esta es la API REST de DSpace
|
|
|
* **SWORD**: Esta es la interfaz DSpace SWORDv1.
|
|
|
* **SWORDv2**: Esta es la interfaz DSpace SWORDv2.
|
|
|
* **RDF**: Esta es la interfaz DSpace RDF que admite datos vinculados (abiertos).
|
|
|
|
|
|
> NOTA: el RID-UNRN utiliza **JSPUI** en lugar de **XMLUI**
|
|
|
|
|
|
### 11. Deploy de las aplicaciones web de DSpace
|
|
|
Si es necesario, copiar las aplicaciones web desde el directorio `[dspace]/webapps` al directorio `[tomcat]/webapps/`.
|
|
|
|
|
|
### 12. Actualizar la base de datos
|
|
|
Paso opcional, pero recomendado para actualizaciones importantes.
|
|
|
A partir de DSpace 5 (y superior), el código de DSpace actualizará automáticamente la base de datos (desde cualquier versión anterior de DSpace). Por defecto, esta actualización de la base de datos se produce automáticamente cuando se reinicie Tomcat (o su contenedor de servlet). Sin embargo, si el repositorio es grande o se está actualizando varias versiones de DSpace a la vez, es posible que se deba realizar la actualización manualmente (ya que podría llevar algún tiempo, de 5 a 15 minutos aproximadamente).
|
|
|
|
|
|
### 13. Reiniciar servidor Tomcat
|
|
|
Probar lo siguiente:
|
|
|
* **Actualización de la base de datos**: si se obvió la actualización manualmente su base de datos en el paso anterior, la base de datos se actualizará automáticamente a la última versión. Esto puede llevar algo de tiempo (segundos a minutos), dependiendo del tamaño del RID, etc. Verificar el registro de DSpace (`[dspace]/log/dspace.log.[Date]`) para obtener información sobre su estado.
|
|
|
* **Re-indexación de todo el contenido para búsqueda/exploración**: al actualizar la base de datos, todo el contenido de nuestro DSpace se volverá a indexar automáticamente para la búsqueda/exploración. Como el proceso puede llevar algo de tiempo (minutos a horas), se realiza en segundo plano; mientras tanto, DSpace puede usarse a medida que el índice se llena gradualmente. Tener en cuenta que no todo el contenido será visible hasta que se complete el proceso de indexación. Nuevamente, podemos revisar el registro de DSpace (`[dspace]/log/dspace.log.[Date]`) para obtener información sobre su estado.
|
|
|
|
|
|
### 14. Push de la rama creada para la migración
|
|
|
Realizar un push de la rama _merge-con-ds63_.
|
|
|
|
|
|
### 15. Deploy en producción
|
|
|
Una vez resuelto todos los conflictos y realizado el test exhaustivo, se deberá llevar a un entorno de producción. Para ello, se deberán realizar todas las tareas que conlleven la base de datos.
|
|
|
|
|
|
### 16. Verificar las tareas Cron y Scheduler
|
|
|
En versiones recientes de DSpace, algunos de los nombres de los scripts han cambiado.
|
|
|
|
|
|
Fuente: https://wiki.duraspace.org/display/DSDOC6x/Upgrading+DSpace
|
|
|
|
|
|
## Solución y Errores encontrados
|
|
|
### Pasos del RID para migrar DSpace
|
|
|
#### 1. Crear la rama en la que vamos a trabajar denominada según la versión elegida
|
|
|
```sh
|
|
|
git checkout -b merge-con-ds63
|
|
|
```
|
|
|
#### 2. Recuperar los commits de upstream
|
|
|
Hacer un fetch del repositorio de Dspace global
|
|
|
```sh
|
|
|
git fetch upstream
|
|
|
```
|
|
|
Si el comando falla o tira el siguiente error **fatal: 'upstream' does not appear to be a git repository**, es porque no se encuentra agregado al fetch.
|
|
|
Corroborar el fetch con el siguiente comando:
|
|
|
```sh
|
|
|
git remote -v
|
|
|
```
|
|
|
Si no se encuentra, agregarlo de la siguiente manera:
|
|
|
```sh
|
|
|
git remote add upstream https://github.com/DSpace/DSpace.git
|
|
|
```
|
|
|
Verificar
|
|
|
```sh
|
|
|
git remote -v
|
|
|
```
|
|
|
Fuente: https://github.com/Esri/developer-support/wiki/Setting-the-upstream-for-a-fork
|
|
|
|
|
|
#### 3. Realizar el merge con el tag _dspace-6.3_
|
|
|
Mergear la rama _merge-con-ds6.3_ con el tag _upstream/dspace-6.3_
|
|
|
```sh
|
|
|
git checkout merge-con-ds6.3
|
|
|
git merge --commit upstream/dspace-6.3
|
|
|
```
|
|
|
|
|
|
#### 4. Resolver conflictos entre las ramas
|
|
|
Si las personalizaciones del repositorio están hechas de acuerdo a las recomendaciones de dspace, es decir, todas ellas se encuentran en la carpeta `dspace/modules` y `dspace/conf`, se podría hacer un upgrade de 5 a 6 simplemente con un merge con `upstream/dspace-6.3`.
|
|
|
Sin embargo, si existen cambios de JSPUI o XMLUI fuera de modules, sería conveniente revisarlos (por ejemplo hacer un diff con un 5x limpio) y pasar a `dspace/modules` lo máximo posible. Luego, intentar hacer el merge, sabiendo que habrá menos conflictos.
|
|
|
|
|
|
#### 5. Compilar DSpace 6.3
|
|
|
```sh
|
|
|
mvn -U clean package
|
|
|
```
|
|
|
|
|
|
### Errores en la compilación
|
|
|
Al momento de compilar el código, salió el siguiente error:
|
|
|
```bash
|
|
|
[INFO] 100 warnings
|
|
|
[INFO] -------------------------------------------------------------
|
|
|
[INFO] -------------------------------------------------------------
|
|
|
[ERROR] COMPILATION ERROR :
|
|
|
[INFO] -------------------------------------------------------------
|
|
|
[ERROR] /home/msanhueza/Repositorios/rid/DSpace/dspace-api/src/main/java/org/dspace/storage/rdbms/migration/V5_0_2014_09_25__DS_1582_Metadata_For_All_Objects_drop_constraint.java:[55,34] method dropDBConstraint in class org.dspace.storage.rdbms.migration.MigrationUtils cannot be applied to given types;
|
|
|
required: java.sql.Connection,java.lang.String,java.lang.String,java.lang.String
|
|
|
found: java.sql.Connection,java.lang.String,java.lang.String
|
|
|
reason: actual and formal argument lists differ in length
|
|
|
[ERROR] /home/msanhueza/Repositorios/rid/DSpace/dspace-api/src/main/java/org/dspace/storage/rdbms/migration/V1_3_9__Drop_constraint_for_DSpace_1_4_schema.java:[54,34] method dropDBConstraint in class org.dspace.storage.rdbms.migration.MigrationUtils cannot be applied to given types;
|
|
|
required: java.sql.Connection,java.lang.String,java.lang.String,java.lang.String
|
|
|
found: java.sql.Connection,java.lang.String,java.lang.String
|
|
|
reason: actual and formal argument lists differ in length
|
|
|
[ERROR] -> [Help 1]
|
|
|
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project dspace-api: Compilation failure
|
|
|
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
|
|
|
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
|
|
|
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
|
|
|
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
|
|
|
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
|
|
|
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
|
|
|
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
|
|
|
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
|
|
|
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
|
|
|
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
|
|
|
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
|
|
|
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
|
|
|
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
|
|
|
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
|
|
|
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
|
|
|
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
|
|
|
at java.lang.reflect.Method.invoke (Method.java:498)
|
|
|
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
|
|
|
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
|
|
|
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
|
|
|
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
|
|
|
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure
|
|
|
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:972)
|
|
|
at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:129)
|
|
|
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
|
|
|
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
|
|
|
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
|
|
|
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
|
|
|
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
|
|
|
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
|
|
|
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
|
|
|
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
|
|
|
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
|
|
|
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
|
|
|
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
|
|
|
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
|
|
|
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
|
|
|
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
|
|
|
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
|
|
|
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
|
|
|
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
|
|
|
at java.lang.reflect.Method.invoke (Method.java:498)
|
|
|
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
|
|
|
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
|
|
|
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
|
|
|
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
|
|
|
[ERROR]
|
|
|
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
|
|
|
[ERROR]
|
|
|
[ERROR] For more information about the errors and possible solutions, please read the following articles:
|
|
|
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
|
|
|
[ERROR]
|
|
|
[ERROR] After correcting the problems, you can resume the build with the command
|
|
|
[ERROR] mvn <goals> -rf :dspace-api
|
|
|
```
|
|
|
#### Posibles soluciones
|
|
|
1. Eliminar la carpeta ~/.md/repository (no sirvió)
|
|
|
2. export MAVEN_OPTS="-Xmx4G" (no sirvió)
|
|
|
3. Setear JAVA_HOME y agregarlo al PATH (no sirvió)
|
|
|
1. export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
|
|
|
2. export PATH=$PATH:$JAVA_HOME/bin
|
|
|
|
|
|
#### Solución definitiva
|
|
|
En las clases que se habían modificado fuera de `dspace/modules` se creó un merge entre lo que tenía y lo propio de la versión de DSpace. De esta forma, había código de más que no era correcto o código repetido.
|
|
|
|
|
|
Compilar la vista con Apache Ant
|
|
|
```sh
|
|
|
ant update
|
|
|
```
|
|
|
|
|
|
Puede ser que falle porque falta instalar la extensión de pgcrypto. Para ello, habilitamos la extensión en la base de datos de DSpace.
|
|
|
```bash
|
|
|
# Login to your "dspace" database as a superuser
|
|
|
sudo su postgres
|
|
|
psql dspace
|
|
|
```
|
|
|
Una vez dentro de la Base de Datos ejecutar el comando:
|
|
|
```bash
|
|
|
# Enable the pgcrypto extension on this database
|
|
|
CREATE EXTENSION pgcrypto;
|
|
|
``` |
|
|
\ No newline at end of file |