Descarga automática de actualización para Segurmática AntiVirus

Dado que nuestro país ha regulado que el único antivirus oficialmente autorizado para las estaciones de trabajo sea el Segurmática Antivirus (SegAV), conviene hacer regularmente un espejo de las actualizaciones para el uso institucional.

Lamentablemente, la herramienta proporcionada por Segurmática para realizar esta tarea desde Linux (Replicator) no siempre funciona, de modo que en este simple script mostraremos cómo lograr lo mismo utilizando los comandos wget, grep, sed y un poco de expresiones regulares.

segav.sh
#!/bin/sh
# segav.sh
# Script de descarga de actualizaciones para Segurmática AntiVirus
# Versión 0.3 (2013-07-03), Hugo Florentino
# Nota: programar la ejecución como superusuario
 
# Definir directorios
SAVDIR="/opt/segurmatica"
SAVACT="/var/www/segav"
SAVTMP="/var/tmp/segav"
 
# URL de la página de descargas de Segurmática
SEGURL="http://www.segurmatica.cu/descargas/index.php"
 
# URL de origen de las actualizaciones
SAVURL="http://www.segurmatica.cu/descargas/actualizaciones/segavzip"
 
# Definir cadenas y códigos de error
MSAV01="Actualizador de SegAV"
MSAV02="Terminada la comprobación / creación de directorios."
MSAV03="Obteniendo el nombre del archivo de actualización..."
MSAV04="El archivo de actualización es "
MSAV05="Eliminando archivos temporales anteriores..."
MSAV06="Iniciando la descarga de la actualización..."
MSAV07="La actualización se descargó exitosamente."
MSAV08="Eliminando directorios de actualizaciones anteriores..."
MSAV09="Listo. Procediendo a extraer la actualización actual..."
MSAV10="La operación ha concluido exitosamente."
ESAV01="Imposible obtener el archivo de actualizaciones.\nCompruebe que hay acceso al sitio de Segurmática."
ESAV02="Ocurrió algún problema durante la descarga de la actualización."
ESAV03="Ocurrió algún problema al extraer la actualización."
 
# Inicio de la ejeución
echo $MSAV01
 
# Crear directorios si no existen
mkdir -p "$SAVACT" "$SAVTMP"
echo $MSAV02
 
# Obtener el nombre del archivo de actualización
echo $MSAV03
SAVNOM=`wget -q "$SEGURL" -O- | grep "/actualizaciones/segavzip/" | sed -r "s/(.*)(\/actualizaciones\/segavzip\/)([0-9]+\.zip)(.*)/\3/"`
 
# Si se pudo obtener el nombre:
if [ ! -z $SAVNOM ]; then
 
  echo -n "$MSAV04" && echo "$SAVNOM."
 
  # Eliminar archivos de actualizaciones anteriores
  echo $MSAV05
  find "$SAVTMP" -type f ! -name "$SAVNOM" -print0 | xargs -0 rm -f
 
  # Descargar el archivo actual de actualización
  echo $MSAV06
  wget -c "$SAVURL/$SAVNOM" -O "$SAVTMP/$SAVNOM" -o "$SAVDIR/wget.log"
 
  # Si el archivo se descargó sin errores:
  if [ $? -eq 0 ]; then
 
    echo $MSAV07
 
    # Obtener el nombre del directorio donde se va a descomprimir
    SAVNOMDIR=`echo "$SAVNOM" | sed -r "s/([0-9]+)\.zip/\1/"`
 
    # Eliminar directorios de actualizaciones anteriores
    echo $MSAV08
    find "$SAVACT" -type d ! -name "$SAVNOMDIR" -print0 | xargs -0 rm -fR && echo $MSAV09
 
    # Extraer la actualización actual
    unzip -o "$SAVTMP/$SAVNOM" -d "$SAVACT" && echo $MSAV10
 
  else
    echo $ESAV02
  fi
 
else
  echo $ESAV01
fi
 
exit 0

El script puede colocarse donde quiera (digamos en /opt/segurmatica/)1) y programarse en el crontab del superusuario,2) por ejemplo:

00 05 * * Mon-Fri /opt/segurmatica/segav.sh > /opt/segurmatica/segav.log 2>&1

Atribuciones

1)
Evidentemente, al script también se le deben asignar permisos de ejecución, por ejemplo: sudo chmod 755 /opt/segurmatica/segav.sh
2)
Para invocarlo, ejecutar sudo crontab -e