source: client/engine/Rsync.lib @ 4d2cdae

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 4d2cdae was e24b042, checked in by irina <irinagomez@…>, 12 years ago

#565 #564 cambio de extension las imagenes diferenciales a img.diff

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

  • Property mode set to 100755
File size: 19.8 KB
RevLine 
[d2b8d24]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
[e24b042]7#@param 3 Tipo imagen [ img |diff ]
[d2b8d24]8#@param 4 Tamaño de la imagen
9#@return  instrucción para ser ejecutada.
10#*/
11
12function ogCreateFileImage () {
[e24b042]13local SIZEREQUIRED IMGDIR IMGFILE DIRMOUNT LOOPDEVICE  IMGSIZE IMGEXT
[d2b8d24]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")
[e24b042]33        [ "$3" == "img" ] && IMGEXT="img" ||  IMGEXT="img.diff"
34        IMGFILE=${IMGDIR}/$(basename "/$2").$IMGEXT
[d2b8d24]35        ## Si no existe, crear subdirectorio de la imagen.
36        if [ $? != 0 ]; then
37            echo "      $MSG_HELP_ogMakeDir \"$1 $(dirname "$2")." | tee -a $OGLOGSESSION $OGLOGFILE
38            ogMakeDir "$1" $(dirname "/$2") || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
39            IMGDIR=$(ogGetParentPath "$1" "/$2") || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
40        fi
41        DIRMOUNT=/tmp/$(ogGetMountDir "$2" "$3")
42        mkdir -p "$DIRMOUNT"
43        LOOPDEVICE=$(losetup -f)
44        # Si existe el fichero de la imagen se hace copia de seguridad, si  no existe se crea.
45        if [ -f "$IMGFILE" ]; then
[cd1f048]46                # Si la imagen esta montada la desmonto
47                if [ -r "$DIRMOUNT/ogimg.info" ]; then
[56b3a42]48                    echo "umount $DIRMOUNT" | tee -a $OGLOGSESSION $OGLOGFILE
[cd1f048]49                    umount "$DIRMOUNT"
[e24b042]50                    [ $? -ne 0 ] && return $(ogRaiseError $OG_ERR_DONTUNMOUNT_IMAGE "$1 $2.$IMGEXT"; echo $?)
[cd1f048]51                fi
52
[d2b8d24]53                if [ "$BACKUP" == "true" ]; then
54                    # Copia seguridad
55                    echo "     $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" ->  \"$IMGFILE.ant\"." | tee -a $OGLOGSESSION $OGLOGFILE
56                    cp -f  "$IMGFILE" "$IMGFILE.ant"  &> $OGLOGCOMMAND
57                    mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
58                    rm -f "$IMGFILE.sum"
59                fi
60
[56b3a42]61                IMGSIZE=$(ls -l --block-size=1024 $IMGFILE | awk '{print $5}')
[d2b8d24]62                if [ $IMGSIZE -lt $SIZEREQUIRED ];then
[1ee5d4d3]63                   echo "      $MSG_SYNC_RESIZE" | tee -a $OGLOGSESSION $OGLOGFILE
[d2b8d24]64                   echo "      truncate --size=>$SIZEREQUIRED k $IMGFILE" | tee -a $OGLOGSESSION $OGLOGFILE
65                   truncate --size=">$SIZEREQUIRED"k $IMGFILE &> $OGLOGCOMMAND
66                   echo "      mount -o compress=lzo $IMGFILE $DIRMOUNT"
67                   mount -o compress=lzo "$IMGFILE" "$DIRMOUNT" &> $OGLOGCOMMAND
68                   echo "      btrfs filesystem resize max $DIRMOUNT"
69                   btrfs filesystem resize max "$DIRMOUNT" &> $OGLOGCOMMAND
70                fi
71        else
72                echo "      dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED"
73                dd if=/dev/zero of="$IMGFILE" bs=1024 count=$SIZEREQUIRED &> $OGLOGCOMMAND
74                #Formateamos imagen
75                losetup $LOOPDEVICE $IMGFILE
76                echo "      mkfs.btrfs  -L ${2##*\/} $LOOPDEVICE "
77                mkfs.btrfs  -L "${2##*\/}" $LOOPDEVICE &> $OGLOGCOMMAND
78        fi
79                echo "      mount -o compress=lzo $IMGFILE $DIRMOUNT"
80                mount -o compress=lzo "$IMGFILE" "$DIRMOUNT" &> $OGLOGCOMMAND
81                # si ya esta montado  $? = 32
82                [ $? -eq 0 -o $? -eq 32 ] || ogRaiseError $OG_ERR_IMAGE "$3 $4"
83                touch "$DIRMOUNT/ogimg.info"
84
85        #fi
[8361974]86        # Si existe dispositivo de loop lo borro.
87        [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE 2>&1 &>/dev/null
[d2b8d24]88
89else
90        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[1ee5d4d3]91        echo "      hose $REPOIP 2009 --out sh -c \"echo -ne CREATE_IMAGE $2 $3 $SIZEREQUIRED \"" | tee -a $OGLOGSESSION $OGLOGFILE
[d2b8d24]92        hose $REPOIP 2009 --out sh -c "echo -ne CREATE_IMAGE \"$2\" $3 $SIZEREQUIRED"
93fi
94
95}
96
97function ogCreateInfoImage () {
98#/**
[1ee5d4d3]99#  ogCreateInfoImage
[d2b8d24]100#@brief   Crear listados con la informacion de la imagen, los situa en /tmp.
101#@param 1 num_disk
102#@param 2 num_part
103#@param 3 Repositorio  [ REPO | CACHE ] (opcional en las completas)
104#@param 4 Nombre Imagen Basica (opcional en las completas)
[e24b042]105#@param 5 Tipo imagen [ img | diff ]
[d2b8d24]106#*/
[e24b042]107local  IMGTYPE IMGDIRAUX DIRMOUNT DESTRSYNC PASSWORD OPTRSYNC USERRSYNC ORIG FSTYPE PART DIREMPTY IMGLIST IMGINFO IMGACL
[d2b8d24]108
109# Ayuda o menos de 5 parametros y la imagen no es basica
110if [ "$*" == "help" -o   $# -lt 5 -a "$3" != "img"  ]; then
111        ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name ] extension  " \
112               "base image -> $FUNCNAME 1 2 img" \
113               "diff image -> $FUNCNAME 1 1 CACHE Windows7 diff "
114        return
115fi
116
117if [ $# -lt 3 ]; then
118    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  num_disk num_part [ REPO|CACHE ] [ base_image_name]  extension  "
119    return $?
120fi
121
122if [ $3 == "img" ]; then
[e24b042]123   IMGTYPE="img"
[d2b8d24]124else
[1ee5d4d3]125   # Comprobamos que las extension sea valida
126   ogCheckStringInGroup $5 "img diff" || ogRaiseError  $OG_ERR_FORMAT $MSG_SYNC_EXTENSION
[e24b042]127   IMGTYPE=$5
128   if [ "$IMGTYPE" == "diff" ]; then
[d2b8d24]129        # Imagen completa con la que comparo la particion.
130        IMGDIRAUX=$(ogGetMountDir "$4" "img")
131        if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
132           DIRMOUNT="/tmp/$IMGDIRAUX"
133           DESTRSYNC=$DIRMOUNT
134        else
135           [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
136           DIRMOUNT="$OGIMG/$IMGDIRAUX"
137           USERRSYNC="opengnsys"
[097bc95]138           PASSWORD="--password-file=/scripts/passrsync"
[d2b8d24]139           DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$IMGDIRAUX"
140        fi
141   fi
142fi
143
144
145ORIG=$(ogMount $1 $2)
146FSTYPE=$(ogGetFsType $1 $2)
147PART=$(ogDiskToDev "$1" "$2" 2>/dev/null)
148
149# Creamos la lista del contenido y lo situamos en la particion a copiar.
150DIREMPTY="/tmp/empty$$"
151IMGLIST="/tmp/ogimg.list"
152IMGINFO="/tmp/ogimg.info"
153IMGACL="/tmp/ogimg.acl"
154
155# Borramos archivos antiguos.
156rm /tmp/ogimg.* 2>/dev/null
157rm $ORIG/ogimg.* 2>/dev/null
158
[1ee5d4d3]159# En las diferenciales no sabemos el tamaño -> ponemos una constante.
160SIZEDATA=${SIZEDATA:-"SIZEDATA"}
[d2b8d24]161
[1ee5d4d3]162echo "#BRTFS:LZO:$FSTYPE:$SIZEDATA" > $IMGINFO
[e24b042]163if [ "$IMGTYPE" == "img" ]; then
[d2b8d24]164        # Imagen Basica
165        echo "      rsync -aHAXvn --delete $ORIG/ $DIREMPTY >> $IMGINFO" | tee -a $OGLOGSESSION $OGLOGFILE
166        rsync -aHAXvn --delete $ORIG/ $DIREMPTY>> $IMGINFO
167        sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGINFO
168        sed -i  '/^\.\//d' $IMGINFO
169
170else
171        # Imagen Diferencial
172        # TODO en el echo quitar la $OPTRSYNC  para que no se vea el fichero de claves
173        echo "      rsync -aHAXvn$OPTRSYNC  --delete  $ORIG/ $DESTRSYNC a $IMGLIST" | tee -a $OGLOGSESSION $OGLOGFILE
[097bc95]174        rsync -aHAXvn$OPTRSYNC $PASSWORD   --delete  "$ORIG/" "$DESTRSYNC" >> $IMGLIST
[d2b8d24]175        sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGLIST
176        sed -i  '/^\.\//d' $IMGLIST
177
178        # Creamos informacion de la imagen
179        grep -e '\->' -e  '\=>' $IMGLIST > /tmp/ogimg.ln
180        grep -e  ^deleting  $IMGLIST | sed s/^deleting\ //g | grep -v ^ogimg  > /tmp/ogimg.rm
181        #grep -v -e '\->' -e  '\=>'  -e ^deleting  $IMGLIST >> $IMGINFO
182        grep -v -e '\->' -e  '\=>'  -e ^deleting -e ^created  $IMGLIST >> $IMGINFO
183
184        rm $IMGLIST
185
186fi
187
188# Guardamos el contenido de las acl (Solo win) Necesario particion desmontada (esta asi)
189ogUnmount $1 $2
[e27c4f4]190if [ $FSTYPE == "NTFS" ]; then
191        echo "     ntfs-3g.secaudit -b $PART /" |tee -a $OGLOGSESSION $OGLOGFILE
192        ntfs-3g.secaudit -b $PART / > $IMGACL
193fi
[d2b8d24]194
195}
196
197#/**
198#  ogRestoreInfoImage
[e24b042]199#@brief Crear o modificar enlaces y restaurar las ACL. La informacion esta ya copiada a la particion.
[d2b8d24]200#@param 1 num_disk
201#@param 2 num_part
202#*/
203function ogRestoreInfoImage () {
[5ccac26]204local  DEST PART IMGACL IMGLN OPTLN LINEA DESTLN ORIGLN TYPELN
[d2b8d24]205
206# Ayuda o menos de 5 parametros y la imagen no es basica
207if [ "$*" == "help" ]; then
208        ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part" \
209               "base image -> $FUNCNAME 1 2 " \
210               "diff image -> $FUNCNAME 1 1 "
211        return
212fi
213
214if [ $# -lt 2 ]; then
215    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part  "
216    return $?
217fi
218
219DEST=$(ogMount $1 $2)
220PART=$(ogDiskToDev "$1" "$2" 2>/dev/null)
221IMGACL="ogimg.acl"
[5ccac26]222IMGLN="ogimg.ln"
223
224#Creamos o modificamos los enlaces.
225# La imagen diferencial tiene ogimg.ln
226# para la completa lo generamos con los enlaces que contengan  /mnt/
227[ -r $DEST/$IMGLN ] || grep -e "->" -e "=>" $DEST/ogimg.info|grep "/mnt/" > $DEST/$IMGLN
228if [ $(wc -l $DEST/$IMGLN|cut -f1 -d" ") -ne 0 ]; then
229   while read LINEA
230   do
231        ORIGLN="${LINEA#*> }"
232        # Si origen hace referencia a la particion lo modificamos
233        echo $ORIGLN|grep "/mnt/"> /dev/null && ORIGLN="$DEST/${ORIGLN#/mnt/*/}"
234        # rsync marca - los enlaces simbolicos y = enlaces "duros"
235        LINEA="${LINEA%>*}"
236        TYPELN="${LINEA##* }"
237        DESTLN="${LINEA% *}"
238
239        if [ "$TYPELN" == "-" ]
240        then
241           OPTLN='-s'
242        else
243           OPTLN=''
244        fi
245        cd "$DEST/$(dirname $DESTLN)"
246        rm "$(basename $DESTLN)"
247        ln $OPTLN "$ORIGLN" "$(basename $DESTLN)"
248        echo -n "."
249   done < $DEST/$IMGLN  2>/dev/null
250   echo ""
[d2b8d24]251
252fi
253
[5ccac26]254# Restauramos acl
255if [ "$(ogGetFsType $1 $2)" == "NTFS" ] ; then
[d2b8d24]256        cd /
257        cp $DEST/$IMGACL /tmp
258        ogUnmount "$1" "$2"
259        echo "      ntfs-3g.secaudit -se $PART" |tee -a $OGLOGSESSION $OGLOGFILE
260        ntfs-3g.secaudit -se $PART /tmp/$IMGACL
[5ccac26]261fi
[d2b8d24]262
263}
264
265function ogSyncCreate () {
266#/**
267# ogSyncCreate
[e24b042]268#@brief   sincroniza los datos de la partición a la imagen para crearla. La imagen esta montada en un directorio.
[d2b8d24]269#@param 1 num_disk
270#@param 2 num_part
271#@param 3 Repositorio  [ REPO | CACHE ]
272#@param 4 Nombre Imagen
[e24b042]273#@param 5 Tipo imagen [ img | diff ]
[d2b8d24]274#*/
[097bc95]275local ORIG DIRAUX DIRMOUNT DESTRSYNC USERRSYNC PASSWORD OPTRSYNC
[d2b8d24]276
277if [ "$*" == "help" ]; then
278        ogHelp "$FUNCNAME" "$FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension  " \
279               "$FUNCNAME 1 2 REPO Ubuntu12 img" \
280               "$FUNCNAME 1 1 CACHE Windows7 diff "
281        return
282fi
283
284
285if [ $# -lt 4 ]; then
286    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  num_disk num_part [ REPO|CACHE ] image_name extension  "
287    return $?
288fi
289
290ORIG=$(ogMount $1 $2)
291DIRMOUNT=$(ogGetMountDir "$4" $5)
[e24b042]292# Si la imagen es diferencial la lista de ficheros a transferir esta dentro de la imagen.
[d2b8d24]293[ "$5" == "diff" ] && FILESFROM=" --files-from=/tmp/ogimg.info" || FILESFROM=""
294
295if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
296        DESTRSYNC="/tmp/$DIRMOUNT"
297else
298        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[097bc95]299        PASSWORD="--password-file=/scripts/passrsync"
300        [ "$ogrsyncz" ==  "true" ] && OPTRSYNC="z "
301        [ "$ogrsyncw" == "true" ] && OPTRSYNC="W$OPTRSYNC"
[d2b8d24]302        USERRSYNC="opengnsys"
303        DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
304fi
[1ee5d4d3]305# Sincronizamos los datos de la partición a la imagen
[d2b8d24]306echo "      rsync -aHAX$OPTRSYNC --inplace --delete $FILESFROM  $ORIG/ $DESTRSYNC" | tee -a $OGLOGSESSION $OGLOGFILE
[097bc95]307rsync -aHAXq$OPTRSYNC $PASSWORD  --inplace --delete $FILESFROM  "$ORIG/" "$DESTRSYNC"
[d2b8d24]308echo "      rsync -aHAX$OPTRSYNC --inplace /tmp/ogimg* $DESTRSYNC" | tee -a $OGLOGSESSION $OGLOGFILE
[097bc95]309rsync -aHAXq$OPTRSYNC  $PASSWORD --inplace /tmp/ogimg* $DESTRSYNC
[d2b8d24]310
311}
312
313
314#/**
315# ogSyncRestore
316#@brief   sincroniza los datos de la imagen a la partición para restaurarla.
317#@param 1 Repositorio  [ REPO | CACHE ]
318#@param 2 Nombre Imagen
[e24b042]319#@param 3 Tipo imagen [ img | diff ]
[d2b8d24]320#@param 4 num_disk
321#@param 5 num_part
322#*/
323function ogSyncRestore () {
[097bc95]324local DIRMOUNT ORIG DESTRSYNC PASSWORD OPTRSYNC USERRSYNC IMGINFO FILESFROM
[d2b8d24]325
326if [ "$*" == "help" ]; then
327        ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name extension  num_disk num_part  " \
328               "$FUNCNAME REPO Ubuntu12 img 1 2" \
329               "$FUNCNAME CACHE Windows7 diff 1 1"
330        return
331fi
332
333
334if [ $# -lt 5 ]; then
335    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  [ REPO|CACHE ] image_name extension   num_disk num_part "
336    return $?
337fi
338
339
340DIRMOUNT=$(ogGetMountDir "$2" "$3")
341DESTRSYNC=$(ogGetMountPoint $4 $5)
342
343# Borramos ficheros de informacion de restauraciones antiguas
344rm -rf $DESTRSYNC/ogimg.*
345
346# Origen y destino de la sincronizacion y en REPO opciones rsync
347if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
348        ORIG="/tmp/$DIRMOUNT"
349else
350        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[097bc95]351        PASSWORD="--password-file=/scripts/passrsync"
352        [ "$ogrsyncz" ==  "true" ] && OPTRSYNC="z "
353        [ "$ogrsyncw" == "true" ] && OPTRSYNC="W$OPTRSYNC"
[d2b8d24]354        USERRSYNC="opengnsys"
355        ORIG="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
356fi
357
358# Opciones rsync en cache y repo
[e24b042]359# Para la imagen basica, opcion de borrar archivos de la particion que no existen en la imagen
[d2b8d24]360[ "$3" == "img" ] && [ "$ogrsyncdel" != "false" ] && OPTRSYNC="$OPTRSYNC --delete"
361
[1ee5d4d3]362# Nos traemos listado ficheros y bajamos la imagen
363
364echo "      $MSG_SYNC_RESTORE" |tee -a  $OGLOGSESSION   $OGLOGFILE
[d2b8d24]365
366# Si la imagen es diferencial nos traemos los archivos de informacion de la imagen.
367if [ "$3" == "diff" ]; then
368        # Lista de archivos a copiar:
369        IMGINFO="ogimg.info"
370        FILESFROM=" --files-from=$DESTRSYNC/$IMGINFO"
371
372        echo "      rsync -aHAXq$OPTRSYNC  $ORIG/ogimg* $DESTRSYNC" |tee -a  $OGLOGFILE
[097bc95]373        rsync -aHAXq$OPTRSYNC $PASSWORD  $ORIG/ogimg* $DESTRSYNC
[d2b8d24]374        # Borramos linea de información de la imagen, sino busca un fichero con ese nombre
375        sed -i   '/^\#/d' $DESTRSYNC/$IMGINFO
376
377        cd $DESTRSYNC
[1ee5d4d3]378        # Diferencial: Borramos archivos sobrantes.
379        echo "      $MSG_SYNC_DELETE"  |tee -a  $OGLOGFILE
[d2b8d24]380        cat $DESTRSYNC/ogimg.rm 2>/dev/null | xargs rm -rf
381
382fi
383
384echo "      rsync -aHAX$OPTRSYNC  $FILESFROM  $ORIG/ $DESTRSYNC" | tee -a $OGLOGSESSION $OGLOGFILE
[097bc95]385rsync -aHAXq$OPTRSYNC $PASSWORD  $FILESFROM  "$ORIG/" "$DESTRSYNC"
[d2b8d24]386
387
388}
389
390function ogMountImage () {
391#/**
392# ogMountImage
393#@brief   Monta la imagen para sincronizar.
394#@param 1 Repositorio  [ REPO | CACHE ]
395#@param 2 Nombre Imagen
[e24b042]396#@param 3 Tipo imagen [ img |diff ]
[1ee5d4d3]397#@return punto de montaje
[d2b8d24]398#*/
399local IMGEXT IMGFILE DIRMOUNT
400
401if [ "$*" == "help" ]; then
402    ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
403           "$FUNCNAME REPO Ubuntu12" \
404           "$FUNCNAME CACHE Windows7 diff"
405    return
406fi
407
408
409if [ $# -lt 2 ]; then
[5ccac26]410    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ]  image_name [ extension ]"
[d2b8d24]411    return $?
412fi
413
[e24b042]414[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
[d2b8d24]415
[e24b042]416DIRMOUNT=$(ogGetMountDir "$2" ${IMGEXT#*\.})
[1ee5d4d3]417
[d2b8d24]418if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
[cd1f048]419        IMGFILE=$(ogGetPath "$1" /"$2.$IMGEXT")
420        mkdir -p "/tmp/$DIRMOUNT"
[1ee5d4d3]421        mount -o compress=lzo  "$IMGFILE" "/tmp/$DIRMOUNT" 1>/dev/null
422        echo "/tmp/$DIRMOUNT"
[d2b8d24]423
424else
[cd1f048]425        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[e24b042]426        hose $REPOIP 2009 --out sh -c "echo -ne MOUNT_IMAGE \"$2\" ${IMGEXT#*\.}"
[cd1f048]427        echo "$OGIMG/$DIRMOUNT"
[d2b8d24]428
429fi
430
431}
432
433
[cd1f048]434
435
436
[d2b8d24]437function ogUnmountImage () {
438#/**
439# ogUnmountImage  [ REPO | CACHE ] Image_name [ extension ]
440#@brief   Desmonta la imagen para sincronizar.
441#@param 1 Repositorio  [ REPO | CACHE ]
442#@param 2 Nombre Imagen
[e24b042]443#@param 3 Tipo imagen [ img |diff ]
[d2b8d24]444#*/
[e24b042]445local IMGTYPE DIRMOUNT
[d2b8d24]446
447if [ "$*" == "help" ]; then
448    ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
449           "$FUNCNAME REPO Ubuntu12" \
450           "$FUNCNAME CACHE Windows7 diff"
451    return
452fi
453
454if [ $# -lt 2 ]; then
[8361974]455    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  [ REPO|CACHE ]  image_name [ extension ]"
[d2b8d24]456    return $?
457fi
458
[e24b042]459[ "$3" == "" ] && IMGTYPE="img" || IMGTYPE="$3"
[d2b8d24]460
461if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
[e24b042]462        DIRMOUNT=/tmp/$(ogGetMountDir "$2" $IMGTYPE)
[d2b8d24]463        umount "$DIRMOUNT"
[8361974]464        rmdir "$DIRMOUNT"
[d2b8d24]465else
466        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[e24b042]467        echo "      hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE" |tee -a  $OGLOGFILE
468        hose $REPOIP 2009 --out sh -c "echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE"
[d2b8d24]469fi
470
471}
472
473function ogGetMountDir () {
474#/**
475# ogGetMountDir
476#@brief   Devuelve el directorio de montaje de la imagen.
477#@param 1 Nombre Imagen
[e24b042]478#@param 2 Tipo imagen [ img |diff ]
[d2b8d24]479#*/
480local DIRMOUNT
481if [ "$*" == "help" ]; then
482    ogHelp "$FUNCNAME" "$FUNCNAME image_name [ extension ]" \
483           "$FUNCNAME Ubuntu12" \
484           "$FUNCNAME Windows7 diff"
485    return
486fi
487
488
489if [ $# -lt 1 ]; then
490    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
491    return $?
492fi
493
494
495DIRMOUNT="mount/$1"
496[ "$2" == "diff" ] && DIRMOUNT="$DIRMOUNT.diff"
497echo $DIRMOUNT
498
499
500}
501
502
503#/**
504#  ogWaitMountImage image_name extension imagen_size
505#@brief Se espera un tiempo a que se monte la imagen en el servidor.
506#@brief Cuando se esta creando la imagen hay que dar el tamaño, para que espere el tiempo de creación. 
507#@param 1 Respositorio [ REPO | CACHE ]
508#@param 2 Nombre Imagen
[e24b042]509#@param 3 Tipo imagen [ img | diff ]
[d2b8d24]510#@param 4 Tamaño imagen (opcional)
511#*/
512function ogWaitMountImage () {
513local SIZE TIME DIRMOUNT TIMEOUT TIMEAUX
514
515TIME=$SECONDS
516
517# Ayuda o menos de 5 parametros y la imagen no es basica
518if [ "$*" == "help" ]; then
519        ogHelp "$FUNCNAME" "$FUNCNAME [ REPO | CACHE ] image_name extension [ image_size ] " \
520               "$FUNCNAME REPO Ubuntu12 img 30000000" \
521               "$FUNCNAME CACHE Windows7 diff "
522        return
523fi
524
525if [ $# -lt 2 ]; then
526    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO | CACHE ]  image_name extension [ image_size ] "
527    return $?
528fi
529
530
531SIZE=${4:-"300000"}
532
533if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
534        DIRMOUNT="/tmp/$(ogGetMountDir "$2" $3)"
535else
536        DIRMOUNT="$OGIMG/$(ogGetMountDir "$2" $3)"
537fi
538
[1ee5d4d3]539echo -n -e "      $MSG_SYNC_SLEEP: $DIRMOUNT\n      #"
[d2b8d24]540
541# time-out segun el tamaño de la imagen. por defecto: 100000k -> 3s
542let TIMEOUT=$SIZE/$CREATESPEED
543[ $TIMEOUT -lt 60 ] && TIMEOUT=60
544until [ -f "$DIRMOUNT/ogimg.info" ] ; do
545        TIMEAUX=$[SECONDS-TIME]
[1ee5d4d3]546        #[  "$TIMEAUX" -gt "$TIMEOUT" ] && return $(ogRaiseError "$MSG_ERR_DONTMOUNT_IMAGE $1 $2 $3: time_out $TIMEAUX seg."; echo $?)
[d2b8d24]547        # TODO definir el error
548        [  "$TIMEAUX" -gt "$TIMEOUT" ] &&  return 2
549        echo -n "#"
550        sleep 5
551done
[1ee5d4d3]552echo  ""
[d2b8d24]553
554}
[cd1f048]555
[e24b042]556
557# DA ERROR
558# ERROR: unable to resize 'imagen' - File too large
[cd1f048]559function ogReduceImage () {
560#/**
561# ogReduceImage
562#@brief   Reduce el archivo de la imagen a tamaño datos + 500M
563#@param 1 Repositorio  [ REPO | CACHE ]
564#@param 2 Nombre Imagen
[e24b042]565#@param 3 Tipo Imagen [ img |diff ]
[cd1f048]566#@return
567#@exception OG_ERR_FORMAT     # 1 formato incorrecto.
568#@exception OG_ERR_NOTFOUND        # 2 Fichero o dispositivo no encontrado.
569#*/
570local IMGEXT DIRMOUNT AVAILABLE USED IMGDIR IMGFILE ENDSIZE
571if [ "$*" == "help" ]; then
572    ogHelp "$FUNCNAME" "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
573           "$FUNCNAME REPO Ubuntu12" \
574           "$FUNCNAME CACHE Windows7 diff"
575    return
576fi
577
578if [ $# -lt 2 ]; then
579    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
580    return $?
581fi
582
[e24b042]583[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
[cd1f048]584
585if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
586        # Al montar se comprueba la existencia de la imagen
[e24b042]587        DIRMOUNT=$(ogMountImage $1 $2 ${IMGEXT#*\.})
[cd1f048]588
[56b3a42]589        AVAILABLE=$(df -k|grep "$DIRMOUNT$"|awk '{print $4}')
[cd1f048]590        # Si el espacio libre menor que 500Mb nos salimos
[e24b042]591        if [ $AVAILABLE -lt 500000 ]; then
592                ogUnmountImage $1 $2 ${IMGEXT#*\.}
593                return 0
594        fi
[cd1f048]595
596        # Reducimos el archivo de imagen:
597        IMGDIR=$(ogGetParentPath "$1" "/$2")
598        IMGFILE=${IMGDIR}/$(basename "/$2").$IMGEXT
[56b3a42]599        USED=$(df -k|grep "$DIRMOUNT$"|awk '{print $3}')
600        let ENDSIZE=$USED+500000
[cd1f048]601        echo -e -n "      btrfs filesystem resize "$ENDSIZE"k $DIRMOUNT \n      "
602        btrfs filesystem resize "$ENDSIZE"k $DIRMOUNT
[e24b042]603        ogUnmountImage $1 $2 ${IMGEXT#*\.}
[cd1f048]604        echo "      truncate --size=\"$ENDSIZE\"k $IMGFILE  "
605        truncate --size="$ENDSIZE"k $IMGFILE
606else
[6d24524]607        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[e24b042]608        echo "      hose $REPOIP 2009 --out sh -c echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}"
609        hose $REPOIP 2009 --out sh -c "echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}"
[cd1f048]610fi
611
612
613}
614
615
616
617
618
619
620
621
Note: See TracBrowser for help on using the repository browser.