uner-digital / DSpace

UNER-Digital es el repositorio institucional de la Universidad Nacional de Entre Ríos (UNER - http://www.uner.edu.ar/). El desarrollo está basado en DSpace y customizado por el equipo de desarrollo de SEDICI.
Other
1 stars 1 forks source link

Modificar 'clean_backups' para evitar el borrado del backup más reciente #68

Closed FacundoAdorno closed 7 years ago

FacundoAdorno commented 7 years ago

El script de actualización permite, al usuario que la ejecuta, indicar si desea eliminar los directorio de backup generados en el el directorio de instalación. El problema es que se borran todos los backups al confirmar dicha acción.

Sería necesario modificar en el build.xml de ANT la lógica de la tarea 'clean_backups' para que permita eliminar todos los directorios de backups (bin.bak, etc.bak, webapps.bak, lib.bak) excepto el último generado.

Para saber el último generado nos basaremos en el nombre del archivo ya que tiene en sí mismo la fecha en la que fue creado ese backup (p.e. se utiliza el patrón etc.bak-YYYYMMDD-HHmmss). No utilizaremos la fecha del filesystem ya que no es muy confiable y puede ser propenso a errores...

Como en el servidor se utiliza una versión de Apache-Ant >= v1.9.5, se puede realizar lo requerido utilizando la instrucción

<allbutfirst count=1>

que aparentemente permite seleccionar dentro de un aquellos que matchean excepto más reciente (debido al count=1).

Una solución para un caso similar se propone en StackOverflow --> http://stackoverflow.com/a/30286287.

También podría pensarse en agregar un parámetro que indique los N backups más recientes en vez de sólo el último.

Otros enlaces de posible ayuda

FacundoAdorno commented 7 years ago

Considerando hasta el momento el ultimo release estable de la distribución Debian es Jessie, la versión mas actualizada de ant que se encuentra en sus repositorios es 1.9.4, por lo que para instalar un paquete mayor a las versiones del release stable hay que utilizar el repositorio especial llamado jessie-backports, e instalando como se indica en esta página https://backports.debian.org/Instructions/.

### Agregar la línea inferior en la lista /etc/apt/sources.list
# deb http://ftp.debian.org/debian jessie-backports main
apt-get update
apt-get -t jessie-backports install "package"
FacundoAdorno commented 7 years ago

Se realizó lo requerido utilizando la invocación a un <target> interno que ejecuta un script sh ya que el uso de <allbutlast> no funciona como se esperaba. Se probó de varias formas la manera de seleccionar los directorios de backup, por ejemplo:

<delete includeemptydirs="true">
   <allbutlast count="1">
      <sort>
         <name/>
         <resources>
            <fileset dir="${dspace.dir}">
               <include name="${patron}" />
            </fileset>
         </resources>
      </sort>
   </allbutlast>
</delete>

utilizando como ${patrón} p.e. etc.bak-**/**, etc.bak-*/, etc.bak-**, y otros, pero ninguno funcionaba como se esperaba ya que o no se seleccionaba nada para eliminar, o se seleccionaban hasta archivos del directorio de backup que supuestamente debia conservarse. Además los directorios no eran eliminados, sino que se eliminaban los archivos unicamente. Probando con <dirset> en vez de <fileset> tampoco se conseguían resultados satisfactorios.