source: client/shared/scripts/cloneRemoteFromMaster @ b92b4bb

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since b92b4bb was 51f686c, checked in by adv <adv@…>, 14 years ago

version 1.0.2 httplog correccion errores #421 #422

git-svn-id: https://opengnsys.es/svn/branches/version1.0@2361 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 12.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#@version 1.0 - Uso de parted para controlar tamaño particion destino. Requiere Formateo FS previo -parted usa FS para el tamanyo".
48#@author  Antonio J. Doblas Viso. Universidad de Malaga.
49#@date    2011/04/24
50#@version 1.0.1 - Se elimina la operación de reducir la particion.
51#@author  Antonio J. Doblas Viso. Universidad de Malaga.
52#@date    2011/05/16
53
54#*/ ##
55
56#test 1. cliente sin particiones.    Detectado  TODO: crear estrucutras de particiones
57#test 2. cliente con particion mas pequeña. Detectado.
58#test 3. cleinte con particion destinio no formateado.  Detectado.
59#test 4. cliente con particion destino ocupado por el usuario pwd .  FALLO.
60#test 5. master sin origen particion.
61#test 6. master sin origen fichero.
62
63
64
65trap "pkill faucet; exit 1" 0 1 2 3 6 9 14 15
66
67TIME1=$SECONDS
68PROG="$(basename $0)"
69if [ $# -lt 1 -o "$1" == "help" ]; then
70        echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp"
71        exit 1
72fi
73
74if [  $# -lt 6  ]; then
75    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ipMaster SOURCE_disco SOURCE_particion [MULTICAT|UNICAST] SESSION TARGER_disck TARGET_partition"
76    exit $?
77fi
78
79# Obtener información de los parámetros de entrada.
80HOSTIP=`ogGetIpAddress`
81if [ -z "$HOSTIP" ]
82then
83        source /tmp/net-eth*
84        HOSTIP=`ogGetIpAddress`
85fi
86MASTERIP=$1
87PROTOCOL=$4
88case $PROTOCOL in
89        MULTICAST|multicast)
90                SESSIONMCASTSERVER=$5
91                SESSIONMCASTCLIENT=`echo $5 | awk -F: '{print $1}'`
92        ;;
93        UNICAST|unicast)
94                SESSIONUCASTSERVER=$5
95        SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP
96    ;;
97    *)
98     exit $(ogRaiseError $OG_ERR_FORMAT "Protocolo $PROTOCOL no soportado en esta operacion"; echo $?)
99    ;;
100esac
101# contenedor destino (disco particion)
102DISKTARGET=$6
103PARTTARGET=$7
104#herramienta de compresión.
105TOOLCLONE=$8
106COMPRESOR=$9
107
108pkill faucet
109
110# Preparando Instrucción según sea Master o Client
111case $MASTERIP in
112        $HOSTIP)
113                echo "[1] Equipo Master preparando el origen de los datos a enviar"
114                ogGetPath $2 $3.img &>/dev/null; RC=$?;
115                ogDiskToDev $2 $3 &>/dev/null; RETVAL=$?;
116
117                if [ "$RC" == "0" ]; then
118                        IMG=$(ogGetPath $2 $3.img); MODEMASTER=SENDFILE
119                elif [ "$RETVAL" == "0" ]; then
120                        DISKSOURCE=$2; PARTSOURCE=$3; MODEMASTER=SENDPARTITION
121                else
122                        ogRaiseError $OG_ERR_NOTFOUND "$2 $3"; exit $?
123                fi
124                echo $MODEMASTER
125                # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}                                   
126                case "$MODEMASTER" in
127                        SENDPARTITION)
128                                echo "[5] Master en modo  $MODEMASTER: informacion inicial a los clientes-slaves"
129                                if ps aux | grep -v grep | grep "faucet 4000"
130                                then
131                                        ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 118"; exit $?     
132                                else
133                                        faucet 4000 --out echo "WORKING" &     
134                                fi                             
135                                echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE"
136                                ogUnmount $2 $3 ||  exit $(ogRaiseError $OG_ERR_LOCKED "no se puede desmontar $2 $3  l124"; echo $?)
137                                #Obtener tamaño de la partición.
138                                SIZE=$(ogGetPartitionSize $2 $3)  || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar tamaño partcion $2 $3  l127"; echo $?)
139                                echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE"
140                                ogReduceFs $2 $3 || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al reducir el FS $2 $3  l129"; echo $?)
141                                REDSIZE=$(ogGetFsSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar el nuevo FS $2 $3  l130"; echo $?)     
142                                echo "[20]: Reducido el  sistema de archivos a $REDSIZE  $DISKSOURCE $PARTSOURCE"
143                                #if [ $REDSIZE -lt $SIZE ]; then
144                        #               echo "[24] Redimensionar partición a $REDSIZE KB."
145                        #               ogSetPartitionSize $2 $3 $REDSIZE
146                                #fi
147                                echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
148                                pkill faucet
149                                if ps aux | grep -v grep | grep "faucet 4000"
150                                then
151                                        ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 140"; exit $?     
152                                else
153                                        faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
154                                fi
155                                case $PROTOCOL in
156                                        MULTICAST|multicast)
157                                                echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR"
158                                                ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
159                                        ;;
160                                        UNICAST|unicast)
161                                                sleep 60
162                                                echo "[29] ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR"
163                                                ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
164                                        ;;
165                                esac   
166                               
167                                #if [ $REDSIZE -lt $SIZE ]; then
168                                #       echo "[85] Redimensionar partición a $SIZE KB."
169                                #       ogSetPartitionSize $2 $3 $SIZE
170                                        echo "[90] Extender sistema de archivos."
171                                        ogExtendFs $2 $3
172                                #fi
173                                pkill faucet
174                                if [ $RETVAL == 0 ]
175                                then
176                                        exit 0
177                                else
178                                    exit $(ogRaiseError $OG_ERR_MCASTSENDPARTITION "Error al enviar la particion  $2 $3 con protocolo $PROTOCOL l167"; echo $?)
179                                fi
180                               
181                        ;;
182                        SENDFILE)                               
183                                echo "[5] Master en modo  $MODEMASTER: informacion inicial a los clientes-slaves"
184                                echo "[10]: Preparando Imagen: $IMG"
185                                TOOLCLONE=$(ogGetImageProgram $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "TOOLCLONE no detectado l174"; echo $?)
186                                COMPRESOR=$(ogGetImageCompressor $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "COMPRESOR NO DETECTADO l175"; echo $?)
187                                REDSIZE=$(ogGetImageSize $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "REDSIZE NO DETECTADO l176"; echo $?)
188                                echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
189                                if ps aux | grep -v grep | grep "faucet 4000"
190                                then
191                                        ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 140"; exit $?     
192                                else
193                                        faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
194                                fi                             
195                                case $PROTOCOL in
196                                        MULTICAST|multicast)
197                                                echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER "
198                                                ogMcastSendFile  $2 $3.img $SESSIONMCASTSERVER  || RETVAL=$?
199                                                ;;
200                                        UNICAST|unicast)
201                                                sleep 60
202                                                echo "[29] ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER"
203                                                ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER || RETVAL=$?
204                                        ;;
205                                esac                                                   
206                                pkill faucet   
207                                if [ $RETVAL == 0 ]
208                                then
209                                        exit 0
210                                else
211                                    exit $(ogRaiseError $OG_ERR_MCASTSENDFILE "Error al enviar la image $2 $3.img con protocolo $PROTOCOL l200"; echo $?)
212                                fi
213                        ;;
214                esac
215                # FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
216        ;;
217        *)
218                echo "[1] Equipo -Client- preparando para recibir datos $PROTOCOL"
219                ogDiskToDev $DISKTARGET $PARTTARGET &>/dev/null || exit $(ogRaiseError $OG_ERR_LOCKED "El cliente no tiene esas particiones $DISKTARGET $PARTTARGET l211"; echo $?)     
220                # TODO: si el cliente no está en la lista de clientes UNICAST salir.
221                case $PROTOCOL in
222                        UNICAST|unicast)
223                                echo "$SESSIONUCASTSERVER" | grep $HOSTIP || exit $(ogRaiseError $OG_ERR_PROTOCOLJOINMASTER "Este cliente no pertence a la sesion UNICAST l214"; echo $?)
224                        ;;
225                esac   
226                echo "[2] Desmontando particion destino"         
227                ogUnmount $DISKTARGET $PARTTARGET || exit $(ogRaiseError $OG_ERR_LOCKED "no se puede desmontar la particion destino $2 $3  l218"; echo $?)
228                echo -n "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: "
229                sleep 10
230                TIMEWAITMASTER=120
231                TIMEWAITING=0
232                GETINFO="NONE"
233                while [ "${GETINFO}" != "OK" ]
234                do
235                        INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null`
236                        sleep 10; echo -n "."
237                        echo comienza el timeout $TIMEWAITMASTER para abortar
238                        [ -z "$INFOEXTRA" ] && let TIMEWAITMASTER=$TIMEWAITMASTER-10
239                        [ "$TIMEWAITMASTER" -gt "0" ] || exit $(ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " l230 "; echo $?)
240                        #Si primer parametro desde el server es READY, salimos del bucle
241                        GETINFO=$(echo $INFOEXTRA | awk '{print $1}')
242                        [ "$GETINFO" == "READY" ] && GETINFO=OK
243                done           
244                echo $INFOEXTRA
245                TOOLCLONE=$(echo $INFOEXTRA | awk '{print $2}')
246                COMPRESOR=$(echo $INFOEXTRA | awk '{print $3}')
247                SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}')
248                echo -n "[26] $INFOEXTRA = herramienta= $TOOLCLONE  compresor= $COMPRESOR size= $SIZEIMAGE "
249                ogMount $DISKTARGET $PARTTARGET || ogFormat $DISKTARGET $PARTTARGET
250                #SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB)
251                SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | grep Disk | awk -F" " '{print $3}' | tr -d kB);
252
253                echo "[29] comprobando que el tamaño de la imagen $SIZEIMAGE es menor que el de la particion destino $SIZEPARTTARGET"   
254                # comprobamos que el tamaño de a imagen es menor que la del cliente.
255                if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ]
256                then   
257                        echo "[30] Iniciando Cliente $PROTOCOL "
258                                case $PROTOCOL in
259                                        MULTICAST|multicast)
260                                                echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR
261                                                ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR"  || exit $(ogRaiseError $OG_ERR_MCASTRECEIVERPARTITION " l251 "; echo $?)
262                                        ;;
263                                        UNICAST|unicast)
264                                                echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR
265                                                ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $(ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " l230 "; echo $?)
266                                        ;;
267                                esac                                           
268                        echo "[90] llamando a configureOS $DISKTARGET $PARTTARGET"
269                        configureOs $DISKTARGET $PARTTARGET                     
270                else
271                    # Si el tamaño de los datos recibidos es más grande que la particion destino
272                        ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET  menor que la imagen= $SIZEIMAGE"; exit $?
273                fi
274        ;;
275esac
276TIME=$[SECONDS-TIME1]
277echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s"
278
279
Note: See TracBrowser for help on using the repository browser.