diff options
Diffstat (limited to 'client/shared/scripts/cloneRemoteFromMaster')
-rwxr-xr-x | client/shared/scripts/cloneRemoteFromMaster | 142 |
1 files changed, 93 insertions, 49 deletions
diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster index a7a5e11b..6516b587 100755 --- a/client/shared/scripts/cloneRemoteFromMaster +++ b/client/shared/scripts/cloneRemoteFromMaster @@ -44,12 +44,29 @@ #@version 1.0 - control de errores para el ogAdmServer #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/04/24 +#@version 1.0 - Uso de parted para controlar tamaño particion destino. Requiere Formateo FS previo -parted usa FS para el tamanyo". +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011/04/24 +#@version 1.0.1 - Se elimina la operación de reducir la particion. +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011/05/16 + #*/ ## +#test 1. cliente sin particiones. Detectado TODO: crear estrucutras de particiones +#test 2. cliente con particion mas pequeña. Detectado. +#test 3. cleinte con particion destinio no formateado. Detectado. +#test 4. cliente con particion destino ocupado por el usuario pwd . FALLO. +#test 5. master sin origen particion. +#test 6. master sin origen fichero. + + + +trap "pkill faucet; exit 1" 0 1 2 3 6 9 14 15 TIME1=$SECONDS PROG="$(basename $0)" -if [ $# -lt 1 ]; then +if [ $# -lt 1 -o "$1" == "help" ]; then echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp" exit 1 fi @@ -76,7 +93,10 @@ case $PROTOCOL in UNICAST|unicast) SESSIONUCASTSERVER=$5 SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP - ;; + ;; + *) + exit $(ogRaiseError $OG_ERR_FORMAT "Protocolo $PROTOCOL no soportado en esta operacion"; echo $?) + ;; esac # contenedor destino (disco particion) DISKTARGET=$6 @@ -102,29 +122,36 @@ case $MASTERIP in ogRaiseError $OG_ERR_NOTFOUND "$2 $3"; exit $? fi echo $MODEMASTER - # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} - + # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} case "$MODEMASTER" in SENDPARTITION) echo "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves" - faucet 4000 --out echo "WORKING" & + if ps aux | grep -v grep | grep "faucet 4000" + then + ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 118"; exit $? + else + faucet 4000 --out echo "WORKING" & + fi echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE" - ogUnmount $2 $3 || exit $? - echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" + ogUnmount $2 $3 || exit $(ogRaiseError $OG_ERR_LOCKED "no se puede desmontar $2 $3 l124"; echo $?) #Obtener tamaño de la partición. - SIZE=$(ogGetPartitionSize $2 $3) - # Reducir el sistema de archvios. - ogReduceFs $2 $3 || exit $? - REDSIZE=$(ogGetFsSize $2 $3) + SIZE=$(ogGetPartitionSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar tamaño partcion $2 $3 l127"; echo $?) + echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" + ogReduceFs $2 $3 || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al reducir el FS $2 $3 l129"; echo $?) + REDSIZE=$(ogGetFsSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar el nuevo FS $2 $3 l130"; echo $?) 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 + #if [ $REDSIZE -lt $SIZE ]; then + # echo "[24] Redimensionar partición a $REDSIZE KB." + # ogSetPartitionSize $2 $3 $REDSIZE + #fi 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" & - + if ps aux | grep -v grep | grep "faucet 4000" + then + ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 140"; exit $? + else + faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" & + fi case $PROTOCOL in MULTICAST|multicast) echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR" @@ -137,22 +164,34 @@ case $MASTERIP in ;; esac - if [ $REDSIZE -lt $SIZE ]; then - echo "[85] Redimensionar partición a $SIZE KB." - ogSetPartitionSize $2 $3 $SIZE + #if [ $REDSIZE -lt $SIZE ]; then + # echo "[85] Redimensionar partición a $SIZE KB." + # ogSetPartitionSize $2 $3 $SIZE echo "[90] Extender sistema de archivos." ogExtendFs $2 $3 - fi + #fi pkill faucet + if [ $RETVAL == 0 ] + then + exit 0 + else + exit $(ogRaiseError $OG_ERR_MCASTSENDPARTITION "Error al enviar la particion $2 $3 con protocolo $PROTOCOL l167"; echo $?) + fi + ;; 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) + TOOLCLONE=$(ogGetImageProgram $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "TOOLCLONE no detectado l174"; echo $?) + COMPRESOR=$(ogGetImageCompressor $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "COMPRESOR NO DETECTADO l175"; echo $?) + REDSIZE=$(ogGetImageSize $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "REDSIZE NO DETECTADO l176"; echo $?) 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" & + if ps aux | grep -v grep | grep "faucet 4000" + then + ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 140"; exit $? + else + faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" & + fi case $PROTOCOL in MULTICAST|multicast) echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " @@ -165,15 +204,27 @@ case $MASTERIP in ;; esac pkill faucet + if [ $RETVAL == 0 ] + then + exit 0 + else + exit $(ogRaiseError $OG_ERR_MCASTSENDFILE "Error al enviar la image $2 $3.img con protocolo $PROTOCOL l200"; echo $?) + fi ;; esac - #exit $RETVAL - exit 0 # FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} ;; *) - echo "[1] Equipo -Client- preparando para recibir datos" - ogUnmount $DISKTARGET $PARTTARGET || exit $? + echo "[1] Equipo -Client- preparando para recibir datos $PROTOCOL" + ogDiskToDev $DISKTARGET $PARTTARGET &>/dev/null || exit $(ogRaiseError $OG_ERR_LOCKED "El cliente no tiene esas particiones $DISKTARGET $PARTTARGET l211"; echo $?) + # TODO: si el cliente no está en la lista de clientes UNICAST salir. + case $PROTOCOL in + UNICAST|unicast) + echo "$SESSIONUCASTSERVER" | grep $HOSTIP || exit $(ogRaiseError $OG_ERR_PROTOCOLJOINMASTER "Este cliente no pertence a la sesion UNICAST l214"; echo $?) + ;; + esac + echo "[2] Desmontando particion destino" + ogUnmount $DISKTARGET $PARTTARGET || exit $(ogRaiseError $OG_ERR_LOCKED "no se puede desmontar la particion destino $2 $3 l218"; echo $?) echo -n "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: " sleep 10 TIMEWAITMASTER=120 @@ -183,9 +234,9 @@ case $MASTERIP in do INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null` sleep 10; echo -n "." - #Si no consigue conectar con Master, comienza el timeout $TIMEWAITMASTER para abortar + echo comienza el timeout $TIMEWAITMASTER para abortar [ -z "$INFOEXTRA" ] && let TIMEWAITMASTER=$TIMEWAITMASTER-10 - [ "$TIMEWAITMASTER" -gt "0" ] || ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " " || exit $? + [ "$TIMEWAITMASTER" -gt "0" ] || exit $(ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " l230 "; echo $?) #Si primer parametro desde el server es READY, salimos del bucle GETINFO=$(echo $INFOEXTRA | awk '{print $1}') [ "$GETINFO" == "READY" ] && GETINFO=OK @@ -194,36 +245,29 @@ case $MASTERIP in 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 " + echo -n "[26] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " + ogMount $DISKTARGET $PARTTARGET || ogFormat $DISKTARGET $PARTTARGET + SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB) + echo "[29] comprobando que el tamaño de la imagen $SIZEIMAGE es menor que el de la particion destino $SIZEPARTTARGET" # comprobamos que el tamaño de a imagen es menor que la del cliente. - SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET) if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ] then echo "[30] Iniciando Cliente $PROTOCOL " case $PROTOCOL in MULTICAST|multicast) echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR - ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $? - ;; + ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_MCASTRECEIVERPARTITION " l251 "; echo $?) + ;; UNICAST|unicast) echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR - ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $? + ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $(ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " l230 "; echo $?) ;; - esac - - - echo "[90] Extender sistema de archivos" - ogExtendFs $DISKTARGET $PARTTARGET - # Cambiar nombre en sistemas Windows. - if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then - HOST=$(ogGetHostname) - HOST=${HOST:-"UNKNOWN"} - echo "[90] Cambiar nombre Windows a \"$HOST\"." - ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST" - fi + esac + echo "[90] llamando a configureOS $DISKTARGET $PARTTARGET" + configureOs $DISKTARGET $PARTTARGET else # 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 $? + ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET menor que la imagen= $SIZEIMAGE"; exit $? fi ;; esac |