107 lines
4.2 KiB
Bash
107 lines
4.2 KiB
Bash
#!/bin/bash
|
|
#/**
|
|
#@file restoreImage
|
|
#@brief Script de ejemplo para restaurar una imagen.
|
|
#@param $1 Repositorio (CACHE, REPO o dirección IP)
|
|
#@param $2 Nombre canónico de la imagen (sin extensión)
|
|
#@param $3 Número de disco
|
|
#@param $4 Número de particion
|
|
#@param $5 Protocolo (UNICAST, UNICAST-DIRECT, MULTICAST o MULTICAST-DIRECT)
|
|
#@param $6 Opciones del protocolo
|
|
#@exception OG_ERR_FORMAT 1 formato incorrecto.
|
|
#@exception OG_ERR_NOTFOUND 2 cambio de repositorio: repositorio no encontrado
|
|
#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados.
|
|
#@exception $OG_ERR_MCASTRECEIVERFILE 57 Error en la recepción Multicast de un fichero
|
|
#@exception $OG_ERR_PROTOCOLJOINMASTER 60 Error en la conexión de una sesión Unicast|Multicast con el Master
|
|
#@version 1.1 - Cambio de repositorio para el recurso remoto images si es necesario
|
|
#@author Irina Gomez, ETSII Universidad de Sevilla
|
|
#@date 2015-06-16
|
|
#@version 1.1 - Control de errores en transferencia multicast (ticket #781)
|
|
#@author Irina Gomez, ETSII Universidad de Sevilla
|
|
#@date 2017/04/20
|
|
#**/
|
|
|
|
TIME1=$SECONDS
|
|
PROG="$(basename $0)"
|
|
if [ $# -lt 4 ]; then
|
|
ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST opciones protocolo]"
|
|
exit $?
|
|
fi
|
|
|
|
#Load engine configurator from engine.cfg file.
|
|
#Carga el configurador del engine desde el fichero engine.cfg
|
|
# Valores por defecto: #IMGPROG="partclone" ; #IMGCOMP="lzop" ; #IMGEXT="img" #IMGREDUCE="TRUE"
|
|
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
|
|
|
# Clear temporary file used as log track by httpdlog
|
|
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
|
|
echo " " > $OGLOGCOMMAND
|
|
ogCheckStringInGroup "$(ogGetCaller)" "deployImage restoreImageCustom" || echo -n "" > $OGLOGSESSION;
|
|
|
|
ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
|
|
|
|
# Procesar parámetros de entrada
|
|
REPO="${1^^}"
|
|
IMGNAME="$2"
|
|
DISK="$3"
|
|
PART="$4"
|
|
PROTO="${5^^}"
|
|
PROTO=${PROTO:-"UNICAST"}
|
|
PROTOOPT="$6"
|
|
# Si MCASTWAIT menos que tiempo de espera del servidor lo aumento
|
|
if [ "${PROTO%-*}" == "MULTICAST" ] && [[ ${PROTOOPT##*:} =~ ^-?[0-9]+$ ]]; then
|
|
[ ${MCASTWAIT:-0} -lt ${PROTOOPT##*:} ] && let MCASTWAIT=${PROTOOPT##*:}+5
|
|
fi
|
|
IMGTYPE="${IMGTYPE:-"img"}"
|
|
|
|
# Unidad organizativa
|
|
[ "$ogunit" != "" ] && OGUNIT="$ogunit/"
|
|
|
|
# Si es una ip y es igual a la del equipo restaura desde cache
|
|
[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
|
|
# Si es una ip y es distinta a la del recurso samba cambiamos de REPO.
|
|
ogCheckIpAddress $REPO
|
|
if [ $? == 0 -o $REPO == "REPO" ] ; then
|
|
# Si falla el cambio -> salimos con error repositorio no valido
|
|
ogChangeRepo $REPO ${OGUNIT%/} || exit $(ogRaiseError $OG_ERR_NOTFOUND '$REPO $OGUNIT'; echo $?)
|
|
REPO="REPO"
|
|
fi
|
|
|
|
# Comprobar que existe la imagen del origen.
|
|
IMGFILE=$(ogGetPath "$REPO" "$IMGNAME.$IMGTYPE")
|
|
IMGDIR=$(ogGetParentPath "$REPO" "$IMGNAME")
|
|
if [ "$IMGFILE" == "" -o "$IMGDIR" == "" ]; then
|
|
ogRaiseError session $OG_ERR_NOTFOUND "$REPO, ${IMGNAME%/*}"
|
|
exit $?
|
|
fi
|
|
|
|
# Procesar protocolos de transferencia.
|
|
case "$PROTO" in
|
|
UNICAST|UNICAST-DIRECT)
|
|
# Restaurar la imagen.
|
|
ogEcho log session "[40] ogRestoreImage $REPO $IMGNAME $DISK $PART UNICAST"
|
|
ogExecAndLog command ogRestoreImage "$REPO" "$IMGNAME" "$DISK" "$PART"
|
|
RETVAL=$?
|
|
;;
|
|
MULTICAST|MULTICAST-DIRECT)
|
|
PORT=$(echo $PROTOOPT | cut -f1 -d":")
|
|
TOOL=$(ogGetImageProgram REPO $IMGNAME)
|
|
COMPRESS=$(ogGetImageCompressor REPO $IMGNAME)
|
|
#TODO comprobar parametros anteriores
|
|
ogEcho log session "[40] ogMcastReceiverPartition $DISK $PART $PORT $TOOL $COMPRESS"
|
|
ogMcastRequest "$IMGNAME.img" "$PROTOOPT" || exit $?
|
|
ogExecAndLog command ogMcastReceiverPartition "$DISK" "$PART" "$PORT" "$TOOL" "$COMPRESS"
|
|
RETVAL=$?
|
|
;;
|
|
*) # Protocolo desconocido.
|
|
ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST opciones ]"
|
|
exit $?
|
|
esac
|
|
|
|
TIME=$[SECONDS-TIME1]
|
|
ogEcho log session "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
|
|
|
|
# Código de salida del comando prinicpal de restauración.
|
|
exit $RETVAL
|
|
|