source: client/shared/scripts/cloneRemoteFromMaster @ bcfd3ad

opengnsys-1.0
Last change on this file since bcfd3ad was 5b82964b, checked in by adv <adv@…>, 14 years ago

trunk #384 #315 se gestiona desde asistente Clonacion particiones remotas el cambio de rol de cliente a Master para enviar ficheros-imagen al aula. El origen del fichero-imagen puede ser cache, o repo.

git-svn-id: https://opengnsys.es/svn/trunk@1892 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 9.3 KB
Line 
1#!/bin/bash
2
3#/**
4#         cloneremoteFromMaster
5#@brief   Restaura una particion o imagen sobre las particiones de equipos cliente remotos
6#@param 1 str_origen admite dirección IP del equipo Master.
7#@param 2 str_origen  admite int_disk    str_REPO|str_CACHE
8#@param 3 str_origen  admite int partorigen   stre_imagen
9#@param 4 str_sesion multicast|unicast
10#@param $5 int_disco_destino
11#@param $6 init_particion_destino
12#@param $7 str_tool_clone
13#@param $8 str_tool_compresor
14#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 1 1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
15#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 REPO /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
16#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
17#@return 
18#@exception OG_ERR_FORMAT     formato incorrecto.
19#@exception $OG_ERR_IMGSIZEPARTITION=30   #Imagen demasiado pequeña para ser clonada
20#@exception OG_ERR_REDUCEFS=17     #error al reducir sistema de archivos.
21#@exception OG_ERR_EXTENDFS=18     #errror al expandir el sistema de archivos.
22#@exception OG_ERR_UCASTSYNTAXT=50  # Error en la generación de sintaxis de transferenica unicast
23#@exception OG_ERR_UCASTSENDPARTITION=51  # Error en envio UNICAST de una particion
24#@exception OG_ERR_UCASTSENDFILE=52  # Error en envio UNICAST de un fichero
25#@exception OG_ERR_UCASTRECEIVERPARTITION=53  #Error en la recepcion UNICAST de una particion
26#@exception OG_ERR_UCASTRECEIVERFILE=54  #Error en la recepcion UNICAST de un fichero
27#@exception OG_ERR_MCASTSYNTAXT=55 # Error en la generacion de sintaxis de transferenica Multicast.
28#@exception OG_ERR_MCASTSENDFILE=56  # Error en envio MULTICAST de un fichero
29#@exception OG_ERR_MCASTRECEIVERFILE=57  #Error en la recepcion MULTICAST de un fichero
30#@exception OG_ERR_MCASTSENDPARTITION=58  # Error en envio MULTICAST de una particion
31#@exception OG_ERR_MCASTRECEIVERPARTITION=59  # Error en la recepcion MULTICAST de una particion
32#@exception OG_ERR_PROTOCOLJOINMASTER=60 # Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER
33#@note   
34#@todo:
35#@version 0.9.1 - integración con OpenGnsys
36#@author  Antonio J. Doblas Viso. Universidad de Malaga.
37#@date   2009/03/17
38#@version 0.9.2 - adaptacion a OpenGnsys
39#@author  Antonio J. Doblas Viso. Universidad de Malaga.
40#@date    2010/07/27
41#@version 0.1.0 - gestion unicast
42#@author  Antonio J. Doblas Viso. Universidad de Malaga.
43#@date    2011/01/26
44#@version 1.0 - control de errores para el ogAdmServer
45#@author  Antonio J. Doblas Viso. Universidad de Malaga.
46#@date    2011/04/24
47#*/ ##
48
49
50TIME1=$SECONDS
51PROG="$(basename $0)"
52if [ $# -lt 1 ]; then
53        echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp"
54        exit 1
55fi
56
57if [  $# -lt 6  ]; then
58    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ipMaster SOURCE_disco SOURCE_particion [MULTICAT|UNICAST] SESSION TARGER_disck TARGET_partition"
59    exit $?
60fi
61
62# Obtener información de los parámetros de entrada.
63HOSTIP=`ogGetIpAddress`
64if [ -z "$HOSTIP" ]
65then
66        source /tmp/net-eth*
67        HOSTIP=`ogGetIpAddress`
68fi
69MASTERIP=$1
70PROTOCOL=$4
71case $PROTOCOL in
72        MULTICAST|multicast)
73                SESSIONMCASTSERVER=$5
74                SESSIONMCASTCLIENT=`echo $5 | awk -F: '{print $1}'`
75        ;;
76        UNICAST|unicast)
77                SESSIONUCASTSERVER=$5
78        SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP
79        ;;
80esac
81# contenedor destino (disco particion)
82DISKTARGET=$6
83PARTTARGET=$7
84#herramienta de compresión.
85TOOLCLONE=$8
86COMPRESOR=$9
87
88pkill faucet
89
90# Preparando Instrucción según sea Master o Client
91case $MASTERIP in
92        $HOSTIP)
93                echo "[1] Equipo Master preparando el origen de los datos a enviar"
94                ogGetPath $2 $3.img &>/dev/null; RC=$?;
95                ogDiskToDev $2 $3 &>/dev/null; RETVAL=$?;
96
97                if [ "$RC" == "0" ]; then
98                        IMG=$(ogGetPath $2 $3.img); MODEMASTER=SENDFILE
99                elif [ "$RETVAL" == "0" ]; then
100                        DISKSOURCE=$2; PARTSOURCE=$3; MODEMASTER=SENDPARTITION
101                else
102                        ogRaiseError $OG_ERR_NOTFOUND "$2 $3"; exit $?
103                fi
104                echo $MODEMASTER
105                # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
106                                       
107                case "$MODEMASTER" in
108                        SENDPARTITION)
109                                echo "[5] Master en modo  $MODEMASTER: informacion inicial a los clientes-slaves"
110                                faucet 4000 --out echo "WORKING" &                     
111                                echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE"
112                                ogUnmount $2 $3 || exit $?
113                                echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE"
114                                #Obtener tamaño de la partición.
115                                SIZE=$(ogGetPartitionSize $2 $3) 
116                                # Reducir el sistema de archvios.
117                                ogReduceFs $2 $3 || exit $?
118                                REDSIZE=$(ogGetFsSize $2 $3)   
119                                echo "[20]: Reducido el  sistema de archivos a $REDSIZE  $DISKSOURCE $PARTSOURCE"
120                                if [ $REDSIZE -lt $SIZE ]; then
121                                        echo "[24] Redimensionar partición a $REDSIZE KB."
122                                        ogSetPartitionSize $2 $3 $REDSIZE
123                                fi
124                                echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
125                                pkill faucet
126                                faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
127                                               
128                                case $PROTOCOL in
129                                        MULTICAST|multicast)
130                                                echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR"
131                                                ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
132                                        ;;
133                                        UNICAST|unicast)
134                                                sleep 60
135                                                echo "[29] ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR"
136                                                ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
137                                        ;;
138                                esac   
139                               
140                                if [ $REDSIZE -lt $SIZE ]; then
141                                        echo "[85] Redimensionar partición a $SIZE KB."
142                                        ogSetPartitionSize $2 $3 $SIZE
143                                        echo "[90] Extender sistema de archivos."
144                                        ogExtendFs $2 $3
145                                fi
146                                pkill faucet
147                        ;;
148                        SENDFILE)                               
149                                echo "[5] Master en modo  $MODEMASTER: informacion inicial a los clientes-slaves"
150                                echo "[10]: Preparando Imagen: $IMG"
151                                TOOLCLONE=$(ogGetImageProgram $2 $3)
152                                COMPRESOR=$(ogGetImageCompressor $2 $3)
153                                REDSIZE=$(ogGetImageSize $2 $3)
154                                echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
155                                faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
156                                case $PROTOCOL in
157                                        MULTICAST|multicast)
158                                                echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER "
159                                                ogMcastSendFile  $2 $3.img $SESSIONMCASTSERVER  || RETVAL=$?
160                                                ;;
161                                        UNICAST|unicast)
162                                                sleep 60
163                                                echo "[29] ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER"
164                                                ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER || RETVAL=$?
165                                        ;;
166                                esac                                                   
167                                pkill faucet   
168                        ;;
169                esac
170                #exit $RETVAL
171        exit 0
172                # FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
173        ;;
174        *)
175                echo "[1] Equipo -Client- preparando para recibir datos"
176                ogUnmount $DISKTARGET $PARTTARGET || exit $?
177                echo -n "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: "
178                sleep 10
179                TIMEWAITMASTER=120
180                TIMEWAITING=0
181                GETINFO="NONE"
182                while [ "${GETINFO}" != "OK" ]
183                do
184                        INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null`
185                        sleep 10; echo -n "."
186                        #Si no consigue conectar con Master, comienza el timeout $TIMEWAITMASTER para abortar
187                        [ -z "$INFOEXTRA" ] && let TIMEWAITMASTER=$TIMEWAITMASTER-10
188                        [ "$TIMEWAITMASTER" -gt "0" ] || ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " " || exit $?
189                        #Si primer parametro desde el server es READY, salimos del bucle
190                        GETINFO=$(echo $INFOEXTRA | awk '{print $1}')
191                        [ "$GETINFO" == "READY" ] && GETINFO=OK
192                done           
193                echo $INFOEXTRA
194                TOOLCLONE=$(echo $INFOEXTRA | awk '{print $2}')
195                COMPRESOR=$(echo $INFOEXTRA | awk '{print $3}')
196                SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}')
197                echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE  compresor= $COMPRESOR size= $SIZEIMAGE "
198                # comprobamos que el tamaño de a imagen es menor que la del cliente.
199                SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET)
200                if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ]
201                then   
202                        echo "[30] Iniciando Cliente $PROTOCOL "
203                                case $PROTOCOL in
204                                        MULTICAST|multicast)
205                                                echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR
206                                                ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR"  || exit $?
207                                                        ;;
208                                        UNICAST|unicast)
209                                                echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR
210                                                ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $?
211                                        ;;
212                                esac
213                       
214                       
215                        echo "[90] Extender sistema de archivos"
216                        ogExtendFs $DISKTARGET $PARTTARGET
217                        # Cambiar nombre en sistemas Windows.
218                        if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then
219                                HOST=$(ogGetHostname)
220                                HOST=${HOST:-"UNKNOWN"}
221                                echo "[90] Cambiar nombre Windows a \"$HOST\"."
222                                ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST"
223                        fi             
224                else
225                    # Si el tamaño de los datos recibidos es más grande que la particion destino
226                        ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET  tamanio de la imagen= $SIZEIMAGE"; exit $?
227                fi
228        ;;
229esac
230TIME=$[SECONDS-TIME1]
231echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s"
232
233
Note: See TracBrowser for help on using the repository browser.