source: client/shared/scripts/cloneRemoteFromMaster @ 0b43097

Last change on this file since 0b43097 was dd0aa68, checked in by adv <adv@…>, 14 years ago

trunk #381 scripts (createImage y cloneRemoteFromMaster) incluyendo codigos de error para el ogAdmServer

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

  • Property mode set to 100755
File size: 9.0 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                case "$MODEMASTER" in
107                        SENDPARTITION)
108                                echo "[5] Master en modo  $MODEMASTER: informacion inicial a los clientes-slaves"
109                                faucet 4000 --out echo "WORKING" &                     
110                                echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE"
111                                ogUnmount $2 $3 || exit $?
112                                echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE"
113                                #Obtener tamaño de la partición.
114                                SIZE=$(ogGetPartitionSize $2 $3) 
115                                # Reducir el sistema de archvios.
116                                ogReduceFs $2 $3 || exit $?
117                                REDSIZE=$(ogGetFsSize $2 $3)   
118                                echo "[20]: Reducido el  sistema de archivos a $REDSIZE  $DISKSOURCE $PARTSOURCE"
119                                if [ $REDSIZE -lt $SIZE ]; then
120                                        echo "[24] Redimensionar partición a $REDSIZE KB."
121                                        ogSetPartitionSize $2 $3 $REDSIZE
122                                fi
123                                echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
124                                pkill faucet
125                                faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
126                                               
127                                case $PROTOCOL in
128                                        MULTICAST|multicast)
129                                                echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR"
130                                                ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
131                                        ;;
132                                        UNICAST|unicast)
133                                                sleep 60
134                                                echo "[29] ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR"
135                                                ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
136                                        ;;
137                                esac   
138                               
139                                if [ $REDSIZE -lt $SIZE ]; then
140                                        echo "[85] Redimensionar partición a $SIZE KB."
141                                        ogSetPartitionSize $2 $3 $SIZE
142                                        echo "[90] Extender sistema de archivos."
143                                        ogExtendFs $2 $3
144                                fi
145                                pkill faucet
146                        ;;
147                        SENDFILE)                               
148                                echo "[5] Master en modo  $MODEMASTER: informacion inicial a los clientes-slaves"
149                                echo "[10]: Preparando Imagen: $IMG"
150                                TOOLCLONE=$(ogGetImageProgram $2 $3)
151                                COMPRESOR=$(ogGetImageCompressor $2 $3)
152                                REDSIZE=$(ogGetImageSize $2 $3)
153                                echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
154                                faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
155                                echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER "
156                                ogMcastSendFile  $2 $3.img $SESSIONMCASTSERVER  || RETVAL=$?                   
157                                pkill faucet   
158                        ;;
159                esac
160                exit $RETVAL
161                # FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
162        ;;
163        *)
164                echo "[1] Equipo -Client- preparando para recibir datos"
165                ogUnmount $DISKTARGET $PARTTARGET || exit $?
166                echo -n "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: "
167                sleep 10
168                TIMEWAITMASTER=120
169                TIMEWAITING=0
170                GETINFO="NONE"
171                while [ "${GETINFO}" != "OK" ]
172                do
173                        INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null`
174                        sleep 10; echo -n "."
175                        #Si no consigue conectar con Master, comienza el timeout $TIMEWAITMASTER para abortar
176                        [ -z "$INFOEXTRA" ] && let TIMEWAITMASTER=$TIMEWAITMASTER-10
177                        [ "$TIMEWAITMASTER" -gt "0" ] || ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " " || exit $?
178                        #Si primer parametro desde el server es READY, salimos del bucle
179                        GETINFO=$(echo $INFOEXTRA | awk '{print $1}')
180                        [ "$GETINFO" == "READY" ] && GETINFO=OK
181                done           
182                echo $INFOEXTRA
183                TOOLCLONE=$(echo $INFOEXTRA | awk '{print $2}')
184                COMPRESOR=$(echo $INFOEXTRA | awk '{print $3}')
185                SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}')
186                echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE  compresor= $COMPRESOR size= $SIZEIMAGE "
187                # comprobamos que el tamaño de a imagen es menor que la del cliente.
188                SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET)
189                if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ]
190                then   
191                        echo "[30] Iniciando Cliente $PROTOCOL "
192                                case $PROTOCOL in
193                                        MULTICAST|multicast)
194                                                echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR
195                                                ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR"  || exit $?
196                                                        ;;
197                                        UNICAST|unicast)
198                                                echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR
199                                                ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $?
200                                        ;;
201                                esac
202                       
203                       
204                        echo "[90] Extender sistema de archivos"
205                        ogExtendFs $DISKTARGET $PARTTARGET
206                        # Cambiar nombre en sistemas Windows.
207                        if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then
208                                HOST=$(ogGetHostname)
209                                HOST=${HOST:-"UNKNOWN"}
210                                echo "[90] Cambiar nombre Windows a \"$HOST\"."
211                                ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST"
212                        fi             
213                else
214                    # Si el tamaño de los datos recibidos es más grande que la particion destino
215                        ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET  tamanio de la imagen= $SIZEIMAGE"; exit $?
216                fi
217        ;;
218esac
219TIME=$[SECONDS-TIME1]
220echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s"
221
222
Note: See TracBrowser for help on using the repository browser.