source: client/engine/Rsync.lib @ 831830f

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 831830f was d2b8d24, checked in by irina <irinagomez@…>, 12 years ago

#565 script creacion y restauración de imagenes sincronizadas v2

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

  • Property mode set to 100755
File size: 16.7 KB
Line 
1#!/bin/bash
2#/**
3# ogCreateFileImage  [ REPO | CACHE ] image_name extension size
4#@brief   Crear el archivo
5#@param 1 Repositorio  [ REPO | CACHE ]
6#@param 2 Nombre Imagen
7#@param 3 Extensión [ img |diff ]
8#@param 4 Tamaño de la imagen
9#@return  instrucción para ser ejecutada.
10#*/
11
12function ogCreateFileImage () {
13local SIZEREQUIRED IMGDIR IMGFILE DIRMOUNT LOOPDEVICE  IMGSIZE
14
15if [ "$*" == "help" ]; then
16    ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name extension  size(K)" \
17           "$FUNCNAME REPO Ubuntu12 img 300000" \
18           "$FUNCNAME CACHE Windows7 diff 20000000"
19    return
20fi
21
22
23if [ $# -lt 4 ]; then
24    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  [ REPO|CACHE ] image_name extension  size(k)"
25    return $?
26fi
27
28SIZEREQUIRED=$4
29[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
30
31if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
32        IMGDIR=$(ogGetParentPath "$1" "/$2")
33        IMGFILE=${IMGDIR}/$(basename "/$2").$3
34        ## Si no existe, crear subdirectorio de la imagen.
35        if [ $? != 0 ]; then
36            echo "      $MSG_HELP_ogMakeDir \"$1 $(dirname "$2")." | tee -a $OGLOGSESSION $OGLOGFILE
37            ogMakeDir "$1" $(dirname "/$2") || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
38            IMGDIR=$(ogGetParentPath "$1" "/$2") || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
39        fi
40        DIRMOUNT=/tmp/$(ogGetMountDir "$2" "$3")
41        mkdir -p "$DIRMOUNT"
42        LOOPDEVICE=$(losetup -f)
43        # Si existe el fichero de la imagen se hace copia de seguridad, si  no existe se crea.
44        if [ -f "$IMGFILE" ]; then
45                if [ "$BACKUP" == "true" ]; then
46                    # Copia seguridad
47                    echo "     $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" ->  \"$IMGFILE.ant\"." | tee -a $OGLOGSESSION $OGLOGFILE
48                    cp -f  "$IMGFILE" "$IMGFILE.ant"  &> $OGLOGCOMMAND
49                    mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
50                    rm -f "$IMGFILE.sum"
51                fi
52
53                IMGSIZE=$(ls -lk $IMGFILE | awk '{print $5}')
54                if [ $IMGSIZE -lt $SIZEREQUIRED ];then
55                   echo "      Redimensionamos la imagen al tamaño necesario" | tee -a $OGLOGSESSION $OGLOGFILE
56                   echo "      truncate --size=>$SIZEREQUIRED k $IMGFILE" | tee -a $OGLOGSESSION $OGLOGFILE
57                   truncate --size=">$SIZEREQUIRED"k $IMGFILE &> $OGLOGCOMMAND
58                   echo "      mount -o compress=lzo $IMGFILE $DIRMOUNT"
59                   mount -o compress=lzo "$IMGFILE" "$DIRMOUNT" &> $OGLOGCOMMAND
60                   echo "      btrfs filesystem resize max $DIRMOUNT"
61                   btrfs filesystem resize max "$DIRMOUNT" &> $OGLOGCOMMAND
62                fi
63        else
64                echo "      dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED"
65                dd if=/dev/zero of="$IMGFILE" bs=1024 count=$SIZEREQUIRED &> $OGLOGCOMMAND
66                #Formateamos imagen
67                losetup $LOOPDEVICE $IMGFILE
68                echo "      mkfs.btrfs  -L ${2##*\/} $LOOPDEVICE "
69                mkfs.btrfs  -L "${2##*\/}" $LOOPDEVICE &> $OGLOGCOMMAND
70        fi
71                echo "      mount -o compress=lzo $IMGFILE $DIRMOUNT"
72                mount -o compress=lzo "$IMGFILE" "$DIRMOUNT" &> $OGLOGCOMMAND
73                # si ya esta montado  $? = 32
74                [ $? -eq 0 -o $? -eq 32 ] || ogRaiseError $OG_ERR_IMAGE "$3 $4"
75                touch "$DIRMOUNT/ogimg.info"
76
77        #fi
78        losetup -d $LOOPDEVICE 2>&1 &>/dev/null
79
80else
81        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
82        echo "      hose $REPOIP 2009 --out sh -c \"echo -ne CREATE_IMAGE $2 $3 $SIZEREQUIRED \""
83        hose $REPOIP 2009 --out sh -c "echo -ne CREATE_IMAGE \"$2\" $3 $SIZEREQUIRED"
84fi
85
86}
87
88function ogCreateInfoImage () {
89#/**
90#  ogCreateInfoImg
91#@brief   Crear listados con la informacion de la imagen, los situa en /tmp.
92#@param 1 num_disk
93#@param 2 num_part
94#@param 3 Repositorio  [ REPO | CACHE ] (opcional en las completas)
95#@param 4 Nombre Imagen Basica (opcional en las completas)
96#@param 5 Extensión [ img | diff ]
97#*/
98local  IMGEXT IMGDIRAUX DIRMOUNT DESTRSYNC OPTRSYNC USERRSYNC ORIG FSTYPE PART DIREMPTY IMGLIST IMGINFO IMGACL
99
100# Ayuda o menos de 5 parametros y la imagen no es basica
101if [ "$*" == "help" -o   $# -lt 5 -a "$3" != "img"  ]; then
102        ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name ] extension  " \
103               "base image -> $FUNCNAME 1 2 img" \
104               "diff image -> $FUNCNAME 1 1 CACHE Windows7 diff "
105        return
106fi
107
108if [ $# -lt 3 ]; then
109    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  num_disk num_part [ REPO|CACHE ] [ base_image_name]  extension  "
110    return $?
111fi
112
113if [ $3 == "img" ]; then
114   IMGEXT="img"
115else
116   ogCheckStringInGroup $5 "img diff" || ogRaiseError  $OG_ERR_FORMAT "Las extensiones de la imagenes deben ser img o diff"
117   IMGEXT=$5
118   if [ "$IMGEXT" == "diff" ]; then
119        # Imagen completa con la que comparo la particion.
120        IMGDIRAUX=$(ogGetMountDir "$4" "img")
121        if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
122           DIRMOUNT="/tmp/$IMGDIRAUX"
123           DESTRSYNC=$DIRMOUNT
124           OPTRSYNC=""
125        else
126           [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
127           DIRMOUNT="$OGIMG/$IMGDIRAUX"
128           USERRSYNC="opengnsys"
129           OPTRSYNC="$OPTRSYNC --password-file=/scripts/passrsync"
130           DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$IMGDIRAUX"
131        fi
132   fi
133fi
134
135
136ORIG=$(ogMount $1 $2)
137FSTYPE=$(ogGetFsType $1 $2)
138PART=$(ogDiskToDev "$1" "$2" 2>/dev/null)
139
140# Creamos la lista del contenido y lo situamos en la particion a copiar.
141DIREMPTY="/tmp/empty$$"
142IMGLIST="/tmp/ogimg.list"
143IMGINFO="/tmp/ogimg.info"
144IMGACL="/tmp/ogimg.acl"
145
146# Borramos archivos antiguos.
147rm /tmp/ogimg.* 2>/dev/null
148rm $ORIG/ogimg.* 2>/dev/null
149
150echo "      Creamos la lista del contenido."  | tee -a $OGLOGSESSION $OGLOGFILE
151
152echo "#BRTFS:LZO:$FSTYPE:SIZEDATA" > $IMGINFO
153if [ "$IMGEXT" == "img" ]; then
154        # Imagen Basica
155        echo "      rsync -aHAXvn --delete $ORIG/ $DIREMPTY >> $IMGINFO" | tee -a $OGLOGSESSION $OGLOGFILE
156        rsync -aHAXvn --delete $ORIG/ $DIREMPTY>> $IMGINFO
157        sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGINFO
158        sed -i  '/^\.\//d' $IMGINFO
159
160else
161        # Imagen Diferencial
162        # TODO en el echo quitar la $OPTRSYNC  para que no se vea el fichero de claves
163        echo "      rsync -aHAXvn$OPTRSYNC  --delete  $ORIG/ $DESTRSYNC a $IMGLIST" | tee -a $OGLOGSESSION $OGLOGFILE
164        rsync -aHAXvn$OPTRSYNC   --delete  "$ORIG/" "$DESTRSYNC" >> $IMGLIST
165        sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGLIST
166        sed -i  '/^\.\//d' $IMGLIST
167
168        # Creamos informacion de la imagen
169        grep -e '\->' -e  '\=>' $IMGLIST > /tmp/ogimg.ln
170        grep -e  ^deleting  $IMGLIST | sed s/^deleting\ //g | grep -v ^ogimg  > /tmp/ogimg.rm
171        #grep -v -e '\->' -e  '\=>'  -e ^deleting  $IMGLIST >> $IMGINFO
172        grep -v -e '\->' -e  '\=>'  -e ^deleting -e ^created  $IMGLIST >> $IMGINFO
173
174        rm $IMGLIST
175
176fi
177
178# Imagenes basicas  y diferenciales
179# Guardamos el contenido de las acl (Solo win) Necesario particion desmontada (esta asi)
180ogUnmount $1 $2
181[ $FSTYPE == "NTFS" ] && echo "     ntfs-3g.secaudit -b $PART /" |tee -a $OGLOGSESSION $OGLOGFILE &&  ntfs-3g.secaudit -b $PART / > $IMGACL
182
183}
184
185#/**
186#  ogRestoreInfoImage
187#@brief Restaurar las ACL y en las diferenciales crear enlaces y borrar ficheros sobrantes.
188#@param 1 num_disk
189#@param 2 num_part
190#*/
191function ogRestoreInfoImage () {
192local 
193
194# Ayuda o menos de 5 parametros y la imagen no es basica
195if [ "$*" == "help" ]; then
196        ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part" \
197               "base image -> $FUNCNAME 1 2 " \
198               "diff image -> $FUNCNAME 1 1 "
199        return
200fi
201
202if [ $# -lt 2 ]; then
203    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part  "
204    return $?
205fi
206
207
208
209DEST=$(ogMount $1 $2)
210PART=$(ogDiskToDev "$1" "$2" 2>/dev/null)
211
212# Informacion del contenido.
213IMGACL="ogimg.acl"
214
215
216#if [ -r $DEST/ogimg.rm ]; then
217#       cd $DEST
218#       # TODO comprobar que cuando hay archivos para borrar va bien
219#       cat $DEST/ogimg.rm 2>/dev/null | xargs rm -rf
220#fi
221
222if [ -r $DEST/ogimg.ln ]; then
223        while read dest enlace orig
224        do
225           if [ "$enlace" == "->" ]
226           then
227                OPTLN='-s'
228           else
229                OPTLN=''
230           fi
231           cd $DEST/$(dirname $dest)
232           ln $OPTLN $orig $(basename $dest) 2>/dev/null
233           echo -n "."
234        done < $DEST/ogimg.ln  2>/dev/null
235        echo ""
236
237fi
238
239# Imagen basica y diferencial.
240   if [ "$(ogGetFsType $1 $2)" == "NTFS" ] ; then
241        cd /
242        cp $DEST/$IMGACL /tmp
243        ogUnmount "$1" "$2"
244        echo "      ntfs-3g.secaudit -se $PART" |tee -a $OGLOGSESSION $OGLOGFILE
245        ntfs-3g.secaudit -se $PART /tmp/$IMGACL
246   fi
247
248}
249
250function ogSyncCreate () {
251#/**
252# ogSyncCreate
253#@brief   sincroniza los datos de la partición a la imagen para crearla.
254#@param 1 num_disk
255#@param 2 num_part
256#@param 3 Repositorio  [ REPO | CACHE ]
257#@param 4 Nombre Imagen
258#@param 5 Extensión [ img | diff ]
259#*/
260local ORIG DIRAUX DIRMOUNT DESTRSYNC USERRSYNC OPTRSYNC
261
262if [ "$*" == "help" ]; then
263        ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension  " \
264               "$FUNCNAME 1 2 REPO Ubuntu12 img" \
265               "$FUNCNAME 1 1 CACHE Windows7 diff "
266        return
267fi
268
269
270if [ $# -lt 4 ]; then
271    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  num_disk num_part [ REPO|CACHE ] image_name extension  "
272    return $?
273fi
274
275ORIG=$(ogMount $1 $2)
276DIRMOUNT=$(ogGetMountDir "$4" $5)
277[ "$5" == "diff" ] && FILESFROM=" --files-from=/tmp/ogimg.info" || FILESFROM=""
278
279if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
280        DESTRSYNC="/tmp/$DIRMOUNT"
281else
282        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
283        OPTRSYNC=" --password-file=/scripts/passrsync"
284        [ "$ogcompress" ==  "true" ] && OPTRSYNC="z $OPTRSYNC"
285        USERRSYNC="opengnsys"
286        DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
287fi
288echo "      Sincronizamos los datos de la partición a la imagen"  | tee -a $OGLOGSESSION $OGLOGFILE
289echo "      rsync -aHAX$OPTRSYNC --inplace --delete $FILESFROM  $ORIG/ $DESTRSYNC" | tee -a $OGLOGSESSION $OGLOGFILE
290rsync -aHAXq$OPTRSYNC --inplace --delete $FILESFROM  "$ORIG/" "$DESTRSYNC"
291echo "      rsync -aHAX$OPTRSYNC --inplace /tmp/ogimg* $DESTRSYNC" | tee -a $OGLOGSESSION $OGLOGFILE
292rsync -aHAXq$OPTRSYNC --inplace /tmp/ogimg* $DESTRSYNC
293
294}
295
296
297#/**
298# ogSyncRestore
299#@brief   sincroniza los datos de la imagen a la partición para restaurarla.
300#@param 1 Repositorio  [ REPO | CACHE ]
301#@param 2 Nombre Imagen
302#@param 3 Extensión [ img | diff ]
303#@param 4 num_disk
304#@param 5 num_part
305#*/
306function ogSyncRestore () {
307local DIRMOUNT ORIG DESTRSYNC OPTRSYNC USERRSYNC IMGINFO FILESFROM
308
309if [ "$*" == "help" ]; then
310        ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name extension  num_disk num_part  " \
311               "$FUNCNAME REPO Ubuntu12 img 1 2" \
312               "$FUNCNAME CACHE Windows7 diff 1 1"
313        return
314fi
315
316
317if [ $# -lt 5 ]; then
318    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  [ REPO|CACHE ] image_name extension   num_disk num_part "
319    return $?
320fi
321
322
323DIRMOUNT=$(ogGetMountDir "$2" "$3")
324#DESTRSYNC=$(ogMount $4 $5)
325DESTRSYNC=$(ogGetMountPoint $4 $5)
326
327# Borramos ficheros de informacion de restauraciones antiguas
328rm -rf $DESTRSYNC/ogimg.*
329
330# Origen y destino de la sincronizacion y en REPO opciones rsync
331if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
332        ORIG="/tmp/$DIRMOUNT"
333else
334        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
335        OPTRSYNC=" --password-file=/scripts/passrsync"
336        [ "$ogcompress" ==  "true" ] && OPTRSYNC="z $OPTRSYNC"
337        USERRSYNC="opengnsys"
338        ORIG="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
339fi
340
341# Opciones rsync en cache y repo
342[ "$3" == "img" ] && [ "$ogrsyncdel" != "false" ] && OPTRSYNC="$OPTRSYNC --delete"
343
344echo "      Nos traemos listado ficheros y bajamos la imagen." |tee -a  $OGLOGFILE
345
346# Si la imagen es diferencial nos traemos los archivos de informacion de la imagen.
347if [ "$3" == "diff" ]; then
348        # Lista de archivos a copiar:
349        IMGINFO="ogimg.info"
350        FILESFROM=" --files-from=$DESTRSYNC/$IMGINFO"
351
352        echo "      rsync -aHAXq$OPTRSYNC  $ORIG/ogimg* $DESTRSYNC" |tee -a  $OGLOGFILE
353        rsync -aHAXq$OPTRSYNC  $ORIG/ogimg* $DESTRSYNC
354        # Borramos linea de información de la imagen, sino busca un fichero con ese nombre
355        sed -i   '/^\#/d' $DESTRSYNC/$IMGINFO
356
357        cd $DESTRSYNC
358        # TODO comprobar que cuando hay archivos para borrar va bien
359        echo "      Borramos archivos sobrantes"  |tee -a  $OGLOGFILE
360        cat $DESTRSYNC/ogimg.rm 2>/dev/null | xargs rm -rf
361
362fi
363
364echo "      Sincronizamos los datos de la partición a la imagen"  | tee -a $OGLOGSESSION $OGLOGFILE
365echo "      rsync -aHAX$OPTRSYNC  $FILESFROM  $ORIG/ $DESTRSYNC" | tee -a $OGLOGSESSION $OGLOGFILE
366rsync -aHAXq$OPTRSYNC  $FILESFROM  "$ORIG/" "$DESTRSYNC"
367
368
369}
370
371function ogMountImage () {
372#/**
373# ogMountImage
374#@brief   Monta la imagen para sincronizar.
375#@param 1 Repositorio  [ REPO | CACHE ]
376#@param 2 Nombre Imagen
377#@param 3 Extensión [ img |diff ]
378#*/
379local IMGEXT IMGFILE DIRMOUNT
380
381if [ "$*" == "help" ]; then
382    ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
383           "$FUNCNAME REPO Ubuntu12" \
384           "$FUNCNAME CACHE Windows7 diff"
385    return
386fi
387
388
389if [ $# -lt 2 ]; then
390    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
391    return $?
392fi
393
394[ "$3" == "" ] && IMGEXT="img" || IMGEXT="$3"
395
396if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
397        IMGFILE=$(ogGetPath "$1" /"$2.$IMGEXT")
398        DIRMOUNT=/tmp/$(ogGetMountDir "$2" $IMGEXT)
399        mkdir -p "$DIRMOUNT"
400        echo "      mount -o compress=lzo  \"$IMGFILE\" \"$DIRMOUNT\"" | tee -a  $OGLOGFILE
401        mount -o compress=lzo  "$IMGFILE" "$DIRMOUNT" 1>/dev/null
402
403else
404        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
405        echo "      hose $REPOIP 2009 --out sh -c echo -ne MOUNT_IMAGE $2 $IMGEXT" |tee -a  $OGLOGFILE
406        hose $REPOIP 2009 --out sh -c "echo -ne MOUNT_IMAGE \"$2\" $IMGEXT"
407
408fi
409
410}
411
412
413function ogUnmountImage () {
414#/**
415# ogUnmountImage  [ REPO | CACHE ] Image_name [ extension ]
416#@brief   Desmonta la imagen para sincronizar.
417#@param 1 Repositorio  [ REPO | CACHE ]
418#@param 2 Nombre Imagen
419#@param 3 Extensión [ img |diff ]
420#*/
421local IMGEXT DIRMOUNT
422
423if [ "$*" == "help" ]; then
424    ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
425           "$FUNCNAME REPO Ubuntu12" \
426           "$FUNCNAME CACHE Windows7 diff"
427    return
428fi
429
430if [ $# -lt 2 ]; then
431    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
432    return $?
433fi
434
435[ "$3" == "" ] && IMGEXT="img" || IMGEXT="$3"
436
437if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
438        DIRMOUNT=/tmp/$(ogGetMountDir "$2" $IMGEXT)
439        umount "$DIRMOUNT"
440else
441        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
442        echo "      hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGEXT" |tee -a  $OGLOGFILE
443        hose $REPOIP 2009 --out sh -c "echo -ne UMOUNT_IMAGE \"$2\" $IMGEXT"
444fi
445
446}
447
448function ogGetMountDir () {
449#/**
450# ogGetMountDir
451#@brief   Devuelve el directorio de montaje de la imagen.
452#@param 1 Nombre Imagen
453#@param 2 Extensión [ img |diff ]
454#*/
455local DIRMOUNT
456if [ "$*" == "help" ]; then
457    ogHelp "$FUNCNAME" "$FUNCNAME image_name [ extension ]" \
458           "$FUNCNAME Ubuntu12" \
459           "$FUNCNAME Windows7 diff"
460    return
461fi
462
463
464if [ $# -lt 1 ]; then
465    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
466    return $?
467fi
468
469
470DIRMOUNT="mount/$1"
471[ "$2" == "diff" ] && DIRMOUNT="$DIRMOUNT.diff"
472echo $DIRMOUNT
473
474
475}
476
477
478#/**
479#  ogWaitMountImage image_name extension imagen_size
480#@brief Se espera un tiempo a que se monte la imagen en el servidor.
481#@brief Cuando se esta creando la imagen hay que dar el tamaño, para que espere el tiempo de creación. 
482#@param 1 Respositorio [ REPO | CACHE ]
483#@param 2 Nombre Imagen
484#@param 3 Extensión [ img | diff ]
485#@param 4 Tamaño imagen (opcional)
486#*/
487function ogWaitMountImage () {
488local SIZE TIME DIRMOUNT TIMEOUT TIMEAUX
489
490TIME=$SECONDS
491
492# Ayuda o menos de 5 parametros y la imagen no es basica
493if [ "$*" == "help" ]; then
494        ogHelp "$FUNCNAME" "$FUNCNAME [ REPO | CACHE ] image_name extension [ image_size ] " \
495               "$FUNCNAME REPO Ubuntu12 img 30000000" \
496               "$FUNCNAME CACHE Windows7 diff "
497        return
498fi
499
500if [ $# -lt 2 ]; then
501    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO | CACHE ]  image_name extension [ image_size ] "
502    return $?
503fi
504
505
506SIZE=${4:-"300000"}
507
508if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
509        DIRMOUNT="/tmp/$(ogGetMountDir "$2" $3)"
510else
511        DIRMOUNT="$OGIMG/$(ogGetMountDir "$2" $3)"
512fi
513
514echo -n -e "      Esperamos que se monte la imagen en $DIRMOUNT\n      #"
515
516# time-out segun el tamaño de la imagen. por defecto: 100000k -> 3s
517let TIMEOUT=$SIZE/$CREATESPEED
518[ $TIMEOUT -lt 60 ] && TIMEOUT=60
519until [ -f "$DIRMOUNT/ogimg.info" ] ; do
520        TIMEAUX=$[SECONDS-TIME]
521        #[  "$TIMEAUX" -gt "$TIMEOUT" ] && return $(ogRaiseError "Error al montar la imagen $1 $2 $3: time_out $TIMEAUX seg."; echo $?)
522        # TODO definir el error
523        [  "$TIMEAUX" -gt "$TIMEOUT" ] &&  return 2
524        echo -n "#"
525        sleep 5
526done
527echo -e "\n"
528
529}
Note: See TracBrowser for help on using the repository browser.