#!/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