summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrina Gómez <irinagomez@us.es>2020-06-16 11:41:25 +0200
committerIrina Gómez <irinagomez@us.es>2020-06-16 11:41:25 +0200
commitf8711cec895c0879632831086be7d8a8e374ed9d (patch)
tree31920702f684d28dffce1ea985babd389b20e45a
parent1d1e06d319e3ba52619d4c7d7f3f790e675439d7 (diff)
#894 Scripts and functions for disk images:
ogGetSizeParameters: supports images of partition and disk. deployImage: supports images of partition and disk. deployDiskImage: link to deployImage. createDiskImage: script to create disk image (provisional). restoreDiskImage: script to restore disk image.
-rwxr-xr-xclient/engine/Image.lib72
-rwxr-xr-xclient/shared/scripts/createDiskImage138
l---------client/shared/scripts/deployDiskImage1
-rwxr-xr-xclient/shared/scripts/deployImage109
-rwxr-xr-xclient/shared/scripts/restoreDiskImage105
5 files changed, 363 insertions, 62 deletions
diff --git a/client/engine/Image.lib b/client/engine/Image.lib
index 20e7f7df..480d4253 100755
--- a/client/engine/Image.lib
+++ b/client/engine/Image.lib
@@ -455,7 +455,7 @@ dd if="$DISK" of="$IMGFILE" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IM
# ogGetSizeParameters int_num_disk int_num_part str_repo [monolit|sync|diff]
#@brief Devuelve el tamaño de los datos de un sistema de ficheros, el espacio necesario para la imagen y si cabe en el repositorio elegido.
#@param int_disk numero de disco
-#@param int_part numero de particion
+#@param int_part numero de particion (opcional)
#@param str_repo repositorio de imágenes { REPO, CACHE }
#@param str_imageName Nombre de la imagen
#@param str_imageType Tipo de imagen: monolit (por defecto), sync o diff. (parametro opcional)
@@ -471,31 +471,59 @@ dd if="$DISK" of="$IMGFILE" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IM
#@version 1.1.0 - Si la imagen ya existe en el REPO se suma su tamaño al espacio libre
#@author Irina Gomez - ETSII Universidad de Sevilla
#@date 2017-11-08
+#@version 1.1.2 - Calcula espacio necesario para imágenes de disco
+#@author Irina Gomez - ETSII Universidad de Sevilla
+#@date 2020-05-12
#*/ ##
function ogGetSizeParameters ()
{
-local REPO MNTDIR SIZEDATA KERNELVERSION SIZEREQUIRED FACTORGZIP FACTORLZOP FACTORSYNC SIZEFREE
+local REPO MNTDIR DEVICE SIZEDATA KERNELVERSION SIZEREQUIRED FACTORGZIP FACTORLZOP FACTORSYNC SIZEFREE
local IMGTYPE IMGDIR IMGFILE IMGEXT IMGSIZE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part str_repo path_imgname [monolit|sync|diff]" \
+ ogHelp "$FUNCNAME" "$FUNCNAME num_disk [ num_part ] str_repo path_imgname [monolit|sync|diff]" \
"if $FUNCNAME 1 2 REPO Windows10 sync ; then ...; fi" \
- "if $FUNCNAME 1 6 Ubuntu16 CACHE ; then ...; fi"
+ "if $FUNCNAME 1 disk1 CACHE ; then ...; fi"
return
fi
-# Error si no se reciben 1 o 2 parámetros.
-[ $# -lt 4 ] && return $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE imgname [monolit|sync|diff]" ; echo $?)
# Recogemos parametros
-REPO=${3^^}
-IMGTYPE="_${5^^}_"
-MNTDIR=$(ogMount $1 $2)
-if [ "$MNTDIR" == "" ]; then
- ogRaiseError $OG_ERR_PARTITION "$1 $2"
- return $?
-fi
+case "$#" in
+ 3)
+ # Imagenes de disco
+ # Montamos las particiones
+ for ((p=1; p<=$(ogGetPartitionsNumber $1); p++)); do
+ ogMount $1 $p &>/dev/null
+ done
+ DEVICE=$(ogDiskToDev $1) || return $?
+ REPO=${2^^}
+ IMGEXT="dsk.ant"
+ IMGNAME="$3"
+ ;;
+ 4|5)
+ # Imágenes de particiones
+ MNTDIR=$(ogMount $1 $2) || return $?
+ DEVICE=$(ogDiskToDev $1 $2)
+ REPO=${3^^}
+ IMGNAME="$4"
+ IMGTYPE="_${5^^}_"
+ # Extensión de imagen antigua (si existe en repositorio de destino)
+ case "${IMGTYPE}" in
+ _DIFF_) IMGEXT="img.diff"
+ ;;
+ _SYNC_) IMGEXT="img"
+ ;;
+ *) IMGEXT="img.ant"
+ ;;
+ esac
+ ;;
+ *)
+ # Error si no se reciben entre 3 y 5 parámetros.
+ return $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco [ nparticion ] REPO|CACHE imgname [monolit|sync|diff]" ; echo $?)
+ ;;
+esac
# Datos contenidos en la particion o en la lista de archivos de contiene la diferencial.
if [ "$IMGTYPE" == "_DIFF_" ]; then
@@ -504,7 +532,7 @@ if [ "$IMGTYPE" == "_DIFF_" ]; then
SIZEDATA=$(grep -v "\/$" /tmp/ogimg.info | tr '\n' '\0'| du -x -c --files0-from=- 2>/dev/null|tail -n1 |cut -f1)
cd /
else
- SIZEDATA=$(df -k | grep $MNTDIR\$ | awk '{print $3}')
+ SIZEDATA=$(df -k| awk -v D=$DEVICE '{if ($1~D) SUM += $3} END {print SUM}')
fi
#Aplicar factor de compresion
@@ -522,7 +550,6 @@ if [ "$IMGTYPE" == "_SYNC_" -o "$IMGTYPE" == "_DIFF_" ]; then
[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
else
- FACTORGZIP=55/100
FACTORLZOP=65/100
let SIZEREQUIRED=$SIZEDATA*$FACTORLZOP
fi
@@ -531,19 +558,8 @@ fi
[ "$REPO" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`)
[ "$REPO" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}')
-# Comprobamos si existe una imagen con el mismo nombre en $REPO
-# En sincronizadas restamos tamaño de la imagen y en monoloticas de la .ant
-case "${IMGTYPE}" in
- _DIFF_) IMGEXT="img.diff"
- ;;
- _SYNC_) IMGEXT="img"
- ;;
- *) IMGEXT="img.ant"
- ;;
-esac
-
-IMGDIR=$(ogGetParentPath "$REPO" "/$4")
-IMGFILE=$(ogGetPath "$IMGDIR/$(basename "/$4").$IMGEXT")
+IMGDIR=$(ogGetParentPath "$REPO" "/$IMGNAME")
+IMGFILE=$(ogGetPath "$IMGDIR/$(basename "/$IMGNAME").$IMGEXT" )
if [ -z "$IMGFILE" ]; then
IMGSIZE=0
else
diff --git a/client/shared/scripts/createDiskImage b/client/shared/scripts/createDiskImage
new file mode 100755
index 00000000..46ddc0b4
--- /dev/null
+++ b/client/shared/scripts/createDiskImage
@@ -0,0 +1,138 @@
+#!/bin/bash
+
+#/**
+#@file createDiskImage
+#@brief Script de ejemplo para crear una imagen de un disco
+#@brief Se usa como base para el programa de creación de imágenes de OpenGnsys Admin).
+#@param 1 disco
+#@param 2 REPO|CACHE
+#@param 3 imagen
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Dispositivo o encontrado (disco)
+#@exception OG_ERR_IMAGE # 5 Error en funcion ogCreateImage o ogRestoreImage.
+#@exception OG_ERR_NOTWRITE # 14 error de escritura
+#@exception OG_ERR_NOTCACHE # 15 si cache no existe 15
+#@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16
+#@exception OG_ERR_REDUCEFS # 17 error al reducir sistema de archivos.
+#@exception OG_ERR_EXTENDFS # 18 Errror al expandir el sistema de archivos.
+#@note Se toma como base el script createImage
+#@todo: que hacer, si el tamaño de la cache es sufciente, pero no tiene espacio libre
+#@todo: que hacer, si hay una imagen con igual nombre en la cache
+#@version 1.2 - Versión inicial
+#@author Irina Gomez - ETSII Universidad de Sevilla
+#@date 2020-05-14
+#*/ ##
+
+PROG="$(basename $0)"
+if [ $# -ne 3 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco REPO|CACHE imagen"
+ exit $?
+fi
+
+TIME1=$SECONDS
+
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Valores por defecto en etc/engine.cfg
+#IMGCOMP="lzop"
+IMGEXT="dsk"
+#IMGREDUCE="TRUE"
+DISK=$1
+REPO="${2^^}"
+IMGNAME="$3"
+
+# Unidad organizativa
+[ "$ogunit" != "" ] && OGUNIT="$ogunit"
+
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+# salvo si es llamado desde createImageCustom
+if [ "$(ogGetCaller)" != "createImageCustom" ]; then
+ echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
+fi
+
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+# 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'; echo $?)
+ REPO="REPO"
+fi
+
+# Si el repositorio es CACHE comprobamos que exista
+if [ "$REPO" == "CACHE" ]; then
+ ! ogFindCache >/dev/null && exit $(ogRaiseError $OG_ERR_NOTCACHE "CACHE "; echo $?)
+fi
+
+# Obtener información de los parámetros de entrada.
+ogDiskToDev "$DISK" &>/dev/null || exit $(ogRaiseError $OG_ERR_NOTFOUND "$DISK"; echo $?)
+
+#Comprobamos acceso de escritura.
+DIRTEMP=$(date +%Y%m%d-%H%M%S)
+ogMakeDir $REPO /$IMGNAME$DIRTEMP 2>/dev/null || exit $(ogRaiseError $OG_ERR_NOTWRITE "$REPO"; echo $?) && ogDeleteTree $REPO /$IMGNAME$DIRTEMP
+
+IMGDIR=$(ogGetParentPath "$REPO" "/$IMGNAME")
+# Si no existe, crear subdirectorio de la imagen.
+if [ $? != 0 ]; then
+ ogEcho log session "[5] $MSG_HELP_ogMakeDir \"$REPO $(dirname "$IMGNAME")."
+ ogMakeDir "$REPO" $(dirname "/$IMGNAME") || exit $(ogRaiseError $OG_ERR_NOTWRITE "$REPO /$IMGNAME"; echo $?)
+ IMGDIR=$(ogGetParentPath "$REPO" "/$IMGNAME") || exit $(ogRaiseError $OG_ERR_NOTWRITE "$REPO /$IMGNAME"; echo $?)
+fi
+IMGFILE=$IMGDIR/$(basename "/$IMGNAME").$IMGEXT
+
+echo " " > $OGLOGCOMMAND
+# Borramos ficheros de paginacion y configuracion
+for ((part=1; part<=$(ogGetPartitionsNumber $DISK); part++)); do
+ ogCleanOs $DISK $part
+done
+
+#Comprobar espacio que requerira la imagen para ser almacenada
+read SIZEDATA SIZEREQUIRED SIZEFREE ISENOUGHSPACE <<< $(ogGetSizeParameters $DISK "$REPO" "$IMGNAME")
+
+ogEcho log session "[16] $PROG: $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED $SIZEFREE $ISENOUGHSPACE"
+[ "$ISENOUGHSPACE" == "TRUE" ] || exit $(ogRaiseError session $OG_ERR_CACHESIZE "$REPO"; echo $?)
+
+# Comprobar consistencia del sistema de archivos.
+for ((part=1; part<=$(ogGetPartitionsNumber $DISK); part++)); do
+ echo " " > $OGLOGCOMMAND
+ SIZEFS=$(ogGetFsSize $DISK $part)
+ ogEcho log session "[20] $MSG_HELP_ogCheckFs $part $SIZEFS (KB)"
+ ogUnmount $DISK $part 2>/dev/null
+ # Muestro mensaje de error pero no me salgo.
+ ogCheckFs $DISK $part
+done
+
+# Renombrar el fichero de imagen si ya existe.
+if [ -f "$IMGFILE" ]; then
+ ogEcho log session "[35] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"."
+ mv "$IMGFILE" "$IMGFILE.ant"
+ mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
+ mv "$IMGFILE.sum" "$IMGFILE.sum.ant" 2>/dev/null
+ mv "$IMGFILE.full.sum" "$IMGFILE.full.sum.ant" 2>/dev/null
+fi
+
+# Crear la imagen.
+echo " " > $OGLOGCOMMAND
+TIME2=$SECONDS
+ogEcho log session "[40] $MSG_HELP_ogCreateDiskImage : ogCreateDiskImage $DISK $REPO $IMGNAME"
+ogExecAndLog command ogCreateDiskImage "$DISK" "$REPO" "/$IMGNAME" &>> $OGLOGCOMMAND || exit $(ogRaiseError $OG_ERR_IMAGE "ogCreateDiskImage"; echo $?)
+RESUMECREATEIMAGE=$(grep "Total Time:" $OGLOGCOMMAND)
+TIMEAUX2=$[SECONDS-TIME2]
+ogEcho log session " $RESUMECREATEIMAGE "
+ogEcho log session " $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s"
+
+#resumen de la operacion
+IMGSIZE=$(ls -s `ogGetPath $REPO /$IMGNAME.$IMGEXT`| cut -f1 -d" ")
+IMGOS=$(ogGetImageInfo `ogGetPath $REPO /$IMGNAME.$IMGEXT`)
+
+TIME=$[SECONDS-TIME1]
+ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
+ogEcho log session " FileSystem $DISK with $NEWSIZEFS KB data created onto file-image as $IMGNAME and used $IMGSIZE KB"
+ogEcho log session " Image-file $IMGNAME metada: $IMGOS"
diff --git a/client/shared/scripts/deployDiskImage b/client/shared/scripts/deployDiskImage
new file mode 120000
index 00000000..17af902f
--- /dev/null
+++ b/client/shared/scripts/deployDiskImage
@@ -0,0 +1 @@
+deployImage \ No newline at end of file
diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage
index d74d3ac2..5fb8d671 100755
--- a/client/shared/scripts/deployImage
+++ b/client/shared/scripts/deployImage
@@ -37,6 +37,9 @@
#@version 1.1 - Control de errores en transferencia multicast (ticket #781)
#@author Irina Gomez, ETSII Universidad de Sevilla
#@date 2017/04/20
+#@version 1.2 - Soporta imágenes de disco
+#@author Irina Gomez, ETSII Universidad de Sevilla
+#@date 2020/06/15
#**/
@@ -48,28 +51,53 @@
PROG="$(basename $0)"
-if [ $# -lt 4 ]; then
- ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion [ UNICAST-DIRECT|UNICAST|UNICAST-CACHE|MULTICAST-DIRECT|MULTICAST|MULTICAST-CACHE|TORRENT [opciones protocolo] ]"
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg (IMGEXT="img")
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Para imagen de partición
+NUMARGS=4
+ARGS=( "${@}" )
+CMDRESTORE="restoreImage"
+# Para imagen de disco
+if [ "$PROG" == "deployDiskImage" ]; then
+ NUMARGS=3
+ # Incluyo un argumento ficticio para la particion
+ ARGS=( "${ARGS[@]:0:3}" "diskImage" "${ARGS[@]:3}" )
+ CMDRESTORE="restoreDiskImage"
+ IMGEXT="dsk"
+fi
+if [ $# -lt $NUMARGS ]; then
+ [ "$IMGEXT" == "dsk" ] && MSGPART="" || MSGPART="nparticion"
+ ogRaiseError session log $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco $MSGPART [ UNICAST-DIRECT|UNICAST|UNICAST-CACHE|MULTICAST-DIRECT|MULTICAST|MULTICAST-CACHE|TORRENT [opciones protocolo] ]"
exit $?
fi
# Asignación de variables (repositorio y protocolo se convierten a mayúsculas).
TIME1=$SECONDS
-REPO="${1^^}"
+REPO="${ARGS[0]^^}"
REPO=${REPO:-"REPO"}
-IMGNAME="$2"
-DISK="$3"
-PART="$4"
-PROTO="${5^^}"
+IMGNAME="${ARGS[1]}"
+DISK="${ARGS[2]}"
+PART="${ARGS[3]}"
+PROTO="${ARGS[4]^^}"
PROTO="${PROTO:-"UNICAST"}"
-PROTOOPT="$6"
+PROTOOPT="${ARGS[5]}"
+# Imagen de disco: para configurar recorremos todas las particiones
+# Imagen de partición: al recorrer las particiones sólo hay una
+if [ "$PROG" == "deployDiskImage" ]; then
+ INIP=1
+ ENDP=$(ogGetPartitionsNumber $DISK)
+ [ -n "$ENDP" ] || exit $OG_ERROR_NOTFOUND
+else
+ INIP=$PART
+ ENDP=$PART
+fi
+
+ogEcho session log "REPO $REPO IMG $IMGNAME DISK $DISK PART $PART PROT $PROTO OPT $PROTOOPT"
# Unidad organizativa.
[ "$ogunit" != "" ] && OGUNIT="$ogunit"
-#Load engine configurator from engine.cfg file.
-#Carga el configurador del engine desde el fichero engine.cfg
-[ -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
@@ -78,11 +106,15 @@ echo " " > $OGLOGCOMMAND
# Registro de inicio de ejecución
ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
-# Si el origen(pariticion) esta bloqueada salir.
-ogIsLocked $DISK $PART && exit $(ogRaiseError session $OG_ERR_LOCKED "$MSG_PARTITION, $DISK $PART"; echo $?)
+# Si el origen (pariticion y disco) están bloqueados salir.
+[ "$PROG" == "deployDiskImage" ] && ogIsDiskLocked $DISK && exit $(ogRaiseError session $OG_ERR_LOCKED "$MSG_DISK, $DISK"; echo $?)
+# Recorremos las particiones
+for ((p=$INIP; p<=$ENDP; p++)); do
+ ogIsLocked $DISK $p && exit $(ogRaiseError session $OG_ERR_LOCKED "$MSG_PARTITION, $DISK $p"; echo $?)
-ogEcho log session "$MSG_HELP_ogUnmount $DISK $PART"
-ogUnmount $DISK $PART 2>/dev/null
+ ogEcho log session "$MSG_HELP_ogUnmount $DISK $p"
+ ogUnmount $DISK $p 2>/dev/null
+done
# Valor por defecto para el repositorio.
if [ "$REPO" == "$(ogGetIpAddress)" -o "$REPO" == "CACHE" ]; then
@@ -97,7 +129,7 @@ else
fi
#Informacioin previa de la imagen
-IMGOS=$(ogGetImageInfo `ogGetPath $MODE $IMGNAME.img`)
+IMGOS=$(ogGetImageInfo `ogGetPath $MODE $IMGNAME.$IMGEXT`)
case $? in
0) ;;
1) ogRaiseError session $OG_ERR_NOTFOUND "$REPO $2" || exit $? ;;
@@ -106,7 +138,7 @@ case $? in
esac
IMGSIZE=$(ls -s `ogGetPath $MODE $IMGNAME.img`| cut -f1 -d" ")
-ogEcho log session "[1] REPO=$REPO IMG-FILE=$IMGNAME.img SIZE=$IMGSIZE (KB) METADATA=$IMGOS"
+ogEcho log session "[1] REPO=$REPO IMG-FILE=$IMGNAME.$IMGEXT SIZE=$IMGSIZE (KB) METADATA=$IMGOS"
# Procesar repositorio.
case "$MODE" in
@@ -126,9 +158,11 @@ case "$MODE" in
TORRENT|TORRENT-CACHE|MULTICAST|MULTICAST-CACHE|UNICAST|UNICAST-CACHE)
# Eliminamos CACHE o DIRECT
PROTO=${PROTO%%-*}
- ogEcho log session "[2] updateCache "$REPO" \"/$IMGNAME.img\" $PROTO $PROTOOPT"
+ # Si imagen es de tipo disco comprobamos que el disco de destino no contenga la cache
+ [ "$PROG" == "deployDiskImage" ] && [[ "$(ogFindCache)" =~ "$DISK " ]] && exit $(ogRaiseError $OG_ERR_GENERIC "Disco de destino Contiene Cache")
+ ogEcho log session "[2] updateCache "$REPO" \"/$IMGNAME.$IMGEXT\" $PROTO $PROTOOPT"
TIME2=$SECONDS
- updateCache "$REPO" "/$IMGNAME.img" "$PROTO" "$PROTOOPT"
+ updateCache "$REPO" "/$IMGNAME.$IMGEXT" "$PROTO" "$PROTOOPT"
RETVAL=$?
TIME2=$[SECONDS-TIME2]
ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateCache $[TIME2/60]m $[TIME2%60]s"
@@ -202,13 +236,18 @@ case "$NEXTOPERATION" in
PARAMS="$REPO $IMGNAME $DISK $PART $PROTO $PROTOOPT" ;;
esac
+# Si es imagen de disco eliminamos el parámetro particion
+[ "$PROG" == "deployDiskImage" ] && PARAMS=$(echo $PARAMS| awk '{print $1, $2, $3, $5, $6}')
+
# Si existe, ejecuta script personalizado "restoreImageCustom"; si no, llama al genérico "restoreImage".
-if which restoreImageCustom &>/dev/null; then
- ogEcho log session "[55] $MSG_HELP_ogRestoreImage: restoreImageCustom $PARAMS"
- restoreImageCustom $PARAMS
+if which ${CMDRESTORE}Custom &>/dev/null; then
+ ogEcho log session "[55] $MSG_HELP_ogRestoreImage: ${CMDRESTORE}Custom $PARAMS"
+ #restoreImageCustom $PARAMS
+ eval ${CMDRESTORE}Custom $PARAMS
else
- ogEcho log session "[55] $MSG_HELP_ogRestoreImage: restoreImage $PARAMS"
- restoreImage $PARAMS
+ ogEcho log session "[55] $MSG_HELP_ogRestoreImage: ${CMDRESTORE} $PARAMS"
+ #restoreImage $PARAMS
+ eval ${CMDRESTORE} $PARAMS
fi
RETVAL=$?
@@ -225,15 +264,17 @@ fi
TIME3=$[SECONDS-TIME3]
ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME3/60]m $[TIME3%60]s"
-# Si existe, ejecuta script personalizado de postconfiguración "configureOsCustom"; si no, llama al genérico "configureOs".
-if which configureOsCustom &>/dev/null; then
- ogEcho log session "[90] configureOsCustom"
- configureOsCustom "$DISK" "$PART" "$REPO" "$IMGNAME"
-else
- ogEcho log session "[90] $MSG_SCRIPTS_OS_CONFIGURE "
- configureOs "$DISK" "$PART"
-fi
-
+# Si es imagen de disco hacemos recorremos todas las particiones
+for ((p=$INIP; p<=$ENDP; p++)); do
+ # Si existe, ejecuta script personalizado de postconfiguración "configureOsCustom"; si no, llama al genérico "configureOs".
+ if which configureOsCustom &>/dev/null; then
+ ogEcho log session "[90] configureOsCustom"
+ configureOsCustom "$DISK" "$p" "$REPO" "$IMGNAME"
+ else
+ ogEcho log session "[90] $MSG_SCRIPTS_OS_CONFIGURE $DISK $p"
+ configureOs "$DISK" "$p"
+ fi
+done
TIME=$[SECONDS-TIME1]
ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
diff --git a/client/shared/scripts/restoreDiskImage b/client/shared/scripts/restoreDiskImage
new file mode 100755
index 00000000..f910fc66
--- /dev/null
+++ b/client/shared/scripts/restoreDiskImage
@@ -0,0 +1,105 @@
+#!/bin/bash
+#/**
+#@file restoreDiskImage
+#@brief Script de ejemplo para restaurar una imagen de disco.
+#@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 Protocolo (UNICAST, UNICAST-DIRECT, MULTICAST o MULTICAST-DIRECT)
+#@param $5 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.2 - Versión inicial
+#@note Se toma como base el script restoreImage
+#@author Irina Gomez, ETSII Universidad de Sevilla
+#@date 2020/05/14
+#**/
+
+TIME1=$SECONDS
+PROG="$(basename $0)"
+if [ $# -lt 3 ]; then
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco"
+ exit $?
+fi
+
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -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"
+PROTO="${4^^}"
+PROTO=${PROTO:-"UNICAST"}
+PROTOOPT="$5"
+# 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
+IMGEXT="dsk"
+
+# 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.$IMGEXT")
+IMGDIR=$(ogGetParentPath "$REPO" "$IMGNAME")
+if [ "$IMGFILE" == "" -o "$IMGDIR" == "" ]; then
+ ogRaiseError session $OG_ERR_NOTFOUND "$REPO, ${IMGNAME%/*}"
+ exit $?
+fi
+
+# Desmontamos todas las particiones del disco
+ogUnmountAll $DISK || exit $?
+
+# Procesar protocolos de transferencia.
+case "$PROTO" in
+ UNICAST|UNICAST-DIRECT)
+ # Restaurar la imagen.
+ ogEcho log session "[40] ogRestoreDiskImage $REPO $IMGNAME $DISK"
+ ogExecAndLog command ogRestoreDiskImage "$REPO" "$IMGNAME" "$DISK"
+ RETVAL=$?
+ ;;
+# TODO: Crear si es posible función ogMcastReceiverDisk
+# 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 [ UNICAST ]"
+ 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
+