summaryrefslogtreecommitdiffstats
path: root/client/shared/scripts/cloneRemoteFromMaster
diff options
context:
space:
mode:
Diffstat (limited to 'client/shared/scripts/cloneRemoteFromMaster')
-rwxr-xr-xclient/shared/scripts/cloneRemoteFromMaster142
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