diff options
-rwxr-xr-x | client/shared/scripts/cloneRemoteFromMaster | 228 | ||||
-rwxr-xr-x | client/shared/scripts/createImage | 31 |
2 files changed, 128 insertions, 131 deletions
diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster index 1a3fd070..7fc94380 100755 --- a/client/shared/scripts/cloneRemoteFromMaster +++ b/client/shared/scripts/cloneRemoteFromMaster @@ -1,42 +1,51 @@ #!/bin/bash -# Script para la clonacion de particiones remotas. -# (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin). -# Versión: 0.9.1, 2009/03/17, - Antonio J. Doblas Viso. Universidad de Malaga. -# Versión: 0.9.2, 2010/07/27, - Antonio J. Doblas Viso. Universidad de Malaga. -# Version: 0.1.0 2011/01/26, - Antonio J. Doblas Viso. Universidad de Malaga. -TIME1=$SECONDS -PROG="$(basename $0)" -#if [ $# -ne 5 ]; then - # ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG tamaño" -# exit $? -#fi - - -#/** @function cloneremoteFromMaster: @brief Restaura una particion o imagen sobre las particiones de equipos cliente remotos -#@param $1 str_origen admite dirección IP del equipo Master. -#@param $2 str_origen admite int_disk str_REPO|str_CACHE -#@param $3 str_origen admite int partorigen stre_imagen -#@param $4 str_sesion multicast +#/** +# cloneremoteFromMaster +#@brief Restaura una particion o imagen sobre las particiones de equipos cliente remotos +#@param 1 str_origen admite dirección IP del equipo Master. +#@param 2 str_origen admite int_disk str_REPO|str_CACHE +#@param 3 str_origen admite int partorigen stre_imagen +#@param 4 str_sesion multicast|unicast #@param $5 int_disco_destino #@param $6 init_particion_destino +#@param $7 str_tool_clone +#@param $8 str_tool_compresor #@param ejemplo: cloneRemoteFromMaster 172.17.36.11 1 1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop #@param ejemplo: cloneRemoteFromMaster 172.17.36.11 REPO /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop #@param ejemplo: cloneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop -#@return la propia de la herramienta de clonacion partimage o ntfsclone -# - - - -FOUNDSOURCE=false -HOSTIP=`ogGetIpAddress` +#@return +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception $OG_ERR_IMGSIZEPARTITION=30 #Imagen demasiado pequeña para ser clonada +#@exception OG_ERR_REDUCEFS=17 #error al reducir sistema de archivos. +#@exception OG_ERR_EXTENDFS=18 #errror al expandir el sistema de archivos. +#@exception OG_ERR_UCASTSYNTAXT=50 # Error en la generación de sintaxis de transferenica unicast +#@exception OG_ERR_UCASTSENDPARTITION=51 # Error en envio UNICAST de una particion +#@exception OG_ERR_UCASTSENDFILE=52 # Error en envio UNICAST de un fichero +#@exception OG_ERR_UCASTRECEIVERPARTITION=53 #Error en la recepcion UNICAST de una particion +#@exception OG_ERR_UCASTRECEIVERFILE=54 #Error en la recepcion UNICAST de un fichero +#@exception OG_ERR_MCASTSYNTAXT=55 # Error en la generacion de sintaxis de transferenica Multicast. +#@exception OG_ERR_MCASTSENDFILE=56 # Error en envio MULTICAST de un fichero +#@exception OG_ERR_MCASTRECEIVERFILE=57 #Error en la recepcion MULTICAST de un fichero +#@exception OG_ERR_MCASTSENDPARTITION=58 # Error en envio MULTICAST de una particion +#@exception OG_ERR_MCASTRECEIVERPARTITION=59 # Error en la recepcion MULTICAST de una particion +#@exception OG_ERR_PROTOCOLJOINMASTER=60 # Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER +#@note +#@todo: +#@version 0.9.1 - integración con OpenGnsys +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2009/03/17 +#@version 0.9.2 - adaptacion a OpenGnsys +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2010/07/27 +#@version 0.1.0 - gestion unicast +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011/01/26 +#@version 1.0 - control de errores para el ogAdmServer +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011/04/24 +#*/ ## -SESSIONMCASTSERVER=$4 -SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'` -DISKTARGET=$5 -PARTTARGET=$6 -TOOLCLONE=$7 -COMPRESOR=$8 TIME1=$SECONDS PROG="$(basename $0)" @@ -50,26 +59,15 @@ if [ $# -lt 6 ]; then exit $? fi -#Chequeamos variables-constantes - -# check HOSTIP +# Obtener información de los parámetros de entrada. +HOSTIP=`ogGetIpAddress` if [ -z "$HOSTIP" ] then - source /tmp/net-eth0.conf + source /tmp/net-eth* HOSTIP=`ogGetIpAddress` fi -MODEMASTER=false - - -#Chequeamos parametros. - -# is $1 a valid IP MASTERIP=$1 - -# contendor origen (disco particion o file) - PROTOCOL=$4 -# Controlamos si multicast o unicast. case $PROTOCOL in MULTICAST|multicast) SESSIONMCASTSERVER=$5 @@ -80,88 +78,61 @@ case $PROTOCOL in SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP ;; esac - - # contenedor destino (disco particion) DISKTARGET=$6 PARTTARGET=$7 - #herramienta de compresión. TOOLCLONE=$8 COMPRESOR=$9 +pkill faucet -###IMG=$(ogGetPath $2 $3.img) -###echo $IMG - -# Check command in Master (sendFile or sendPartition) - +# Preparando Instrucción según sea Master o Client case $MASTERIP in $HOSTIP) - ogGetPath $2 $3.img - RC=`echo $?` - echo "$RC comenzando control del valor del origen $2 $3" - if [ $RC == "0" ] - then - echo "mode senfile" - IMG=$(ogGetPath $2 $3.img) - MODEMASTER=SENDFILE - else - if [ $(ogDiskToDev $2 $3) ] - then - echo "mode sendpartitons" - DISKSOURCE=$2 - PARTSOURCE=$3 - MODEMASTER=SENDPARTITION - fi - fi - - echo "modo " $MODEMASTER - - if [ "$MODEMASTER" == "false" ] - then - echo "cloneRemote: origen no encontrado" - exit 1 + echo "[1] Equipo Master preparando el origen de los datos a enviar" + ogGetPath $2 $3.img &>/dev/null; RC=$?; + ogDiskToDev $2 $3 &>/dev/null; RETVAL=$?; + + if [ "$RC" == "0" ]; then + IMG=$(ogGetPath $2 $3.img); MODEMASTER=SENDFILE + elif [ "$RETVAL" == "0" ]; then + DISKSOURCE=$2; PARTSOURCE=$3; MODEMASTER=SENDPARTITION else - echo "cloneRemote: sistema preparando para un $MODEMASTER" - fi - + ogRaiseError $OG_ERR_NOTFOUND "$2 $3"; exit $? + fi + echo $MODEMASTER + # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} case "$MODEMASTER" in SENDPARTITION) - echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" + echo "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves" + faucet 4000 --out echo "WORKING" & echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE" - ogUnmount $2 $3 || exit + ogUnmount $2 $3 || exit $? + echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" #Obtener tamaño de la partición. SIZE=$(ogGetPartitionSize $2 $3) # Reducir el sistema de archvios. - echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" - ogReduceFs $2 $3 || exit 1 - - #echo "salida de ogReduceFS" $? - #if [ $? == 1 ] - #then - # echo "no se ha podido reducir FS" -# exit 1 -# + ogReduceFs $2 $3 || exit $? REDSIZE=$(ogGetFsSize $2 $3) echo "[20]: Reducido el sistema de archivos a $REDSIZE $DISKSOURCE $PARTSOURCE" if [ $REDSIZE -lt $SIZE ]; then echo "[24] Redimensionar partición a $REDSIZE KB." ogSetPartitionSize $2 $3 $REDSIZE fi - echo "[25] ofreciendo informacion a los clientes-slaves" - faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & - - echo "[30] Enviando $PROTOCOL " + echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE" + pkill faucet + faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" & + case $PROTOCOL in MULTICAST|multicast) - echo ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR - ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR + echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR" + ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$? ;; UNICAST|unicast) sleep 60 - echo "ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR" - ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR + echo "[29] ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR" + ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$? ;; esac @@ -173,39 +144,45 @@ case $MASTERIP in fi pkill faucet ;; - SENDFILE) - echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" + SENDFILE) + echo "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves" echo "[10]: Preparando Imagen: $IMG" TOOLCLONE=$(ogGetImageProgram $2 $3) COMPRESOR=$(ogGetImageCompressor $2 $3) REDSIZE=$(ogGetImageSize $2 $3) - echo "[25] ofreciendo informacion a los clientes-slaves: $TOOLCLONE $COMPRESOR $REDSIZE" - faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & - - echo "[30] Enviando $PROTOCOL:" - echo "ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " - ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER - + echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE" + faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" & + echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " + ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER || RETVAL=$? pkill faucet - ;; + ;; esac - pkill faucet + exit $RETVAL + # FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} ;; *) - echo "[5]: cloneRemoteFromMaster: sistema preparando como CLIENTE modo $MODEMASTER" - ogUnmount $DISKTARGET $PARTTARGET - echo "[24] Cliente intentando conectar con el master $MASTERIP" - echo -n "[25] Buscando informacion extra sobre la clonacion: " - # While para esperar al servidor - while [ -z "$INFOEXTRA" ] + echo "[1] Equipo -Client- preparando para recibir datos" + ogUnmount $DISKTARGET $PARTTARGET || exit $? + echo -n "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: " + sleep 10 + TIMEWAITMASTER=120 + TIMEWAITING=0 + GETINFO="NONE" + while [ "${GETINFO}" != "OK" ] do INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null` - sleep 10 - echo -n "." + sleep 10; echo -n "." + #Si no consigue conectar con Master, comienza el timeout $TIMEWAITMASTER para abortar + [ -z "$INFOEXTRA" ] && let TIMEWAITMASTER=$TIMEWAITMASTER-10 + [ "$TIMEWAITMASTER" -gt "0" ] || ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " " || exit $? + #Si primer parametro desde el server es READY, salimos del bucle + GETINFO=$(echo $INFOEXTRA | awk '{print $1}') + [ "$GETINFO" == "READY" ] && GETINFO=OK done - TOOLCLONE=$(echo $INFOEXTRA | awk '{print $1}') - COMPRESOR=$(echo $INFOEXTRA | awk '{print $2}') - SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $3}') + echo $INFOEXTRA + TOOLCLONE=$(echo $INFOEXTRA | awk '{print $2}') + COMPRESOR=$(echo $INFOEXTRA | awk '{print $3}') + SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}') echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " # comprobamos que el tamaño de a imagen es menor que la del cliente. SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET) @@ -215,11 +192,11 @@ case $MASTERIP in case $PROTOCOL in MULTICAST|multicast) echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR - ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" + ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $? ;; UNICAST|unicast) echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR - ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR + ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $? ;; esac @@ -234,9 +211,8 @@ case $MASTERIP in ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST" fi else - echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " - echo -n "[26] ERROR tamanio particion= $SIZEPARTTARGET tamanio de la imagen= $SIZEIMAGE" - exit 1 + # Si el tamaño de los datos recibidos es más grande que la particion destino + ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET tamanio de la imagen= $SIZEIMAGE"; exit $? fi ;; esac diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage index 8e98113a..c0b2a036 100755 --- a/client/shared/scripts/createImage +++ b/client/shared/scripts/createImage @@ -1,6 +1,26 @@ #!/bin/bash -# createImage - Scirpt de ejemplo para crear una imagen de un sistema de archivos. -# (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin). + +#/** +# createImage +#@brief Scirpt de ejemplo para crear una imagen de un sistema de archivos. +#@brief (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin). +#@param 1 disco +#@param 2 particion +#@param 3 REPO|CACHE +#@param 4 imagen +#@return +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTCACHE #si cache no existe. +#@exception OG_ERR_REDUCEFS #error al reducir sistema de archivos. +#@exception OG_ERR_EXTENDFS #errror al expandir el sistema de archivos. +#@note +#@todo: +#@version 1.0 - control de errores para el ogAdmServer +#@author +#@date +#*/ ## + + TIME1=$SECONDS PROG="$(basename $0)" @@ -17,7 +37,7 @@ IMGEXT="img" # Si el repositorio es CACHE comprobamos que exista if [ "$3" == "CACHE" -o "$3" == "cache" ]; then if ! $(ogFindCache >/dev/null); then - ogRaiseError $OG_ERR_NOTFOUND "CACHE" + ogRaiseError $OG_ERR_NOTCACHE "$MSG_ERR_NOTCACHE" exit $? fi fi @@ -47,7 +67,7 @@ ogUnmount $1 $2 ogCheckFs $1 $2 echo "[30]: Reducir sistema de archivos." -ogReduceFs $1 $2 || exit 1 +ogReduceFs $1 $2 || $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; exit $?) # Crear la imagen. echo "[40] Crear imagen." @@ -55,7 +75,8 @@ ogCreateImage $1 "$2" $3 $4 "$IMGPROG" "$IMGCOMP" || exit $? #ogCreateImage $1 "$2" $3 $4 || exit $? echo "[90] Extender sistema de archivos." -ogExtendFs $1 $2 +ogExtendFs $1 $2 || $(ogRaiseError $OG_ERR_EXTENDFS "$1 $2"; exit $?) + TIME=$[SECONDS-TIME1] echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" |