source: client/engine/Rsync.lib @ d063c01

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 d063c01 was f62ce4f, checked in by ramon <ramongomez@…>, 10 years ago

#595: Llamadas correctas a función ogHelp en librería RSync.

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

  • Property mode set to 100755
File size: 27.7 KB
RevLine 
[d2b8d24]1#!/bin/bash
[b648d88]2
3#/**
4# rsync
5#@brief Función para utilizar la versión de rsync situada en $OPENGNSYS/bin en vez de la del sistema operativo.
6#@param los mismos que el comando rsync del sistema operativo.
7#@return  instrucción para ser ejecutada.
8#*/
9function rsync ()
10{
11local RSYNC
12[ -x $OPENGNSYS/bin/rsync ] && RSYNC=$OPENGNSYS/bin/rsync
13RSYNC=${RSYNC:-$(which rsync)}
14
15$RSYNC "$@"
16}
17
18
[d2b8d24]19#/**
20# ogCreateFileImage  [ REPO | CACHE ] image_name extension size
21#@brief   Crear el archivo
22#@param 1 Repositorio  [ REPO | CACHE ]
23#@param 2 Nombre Imagen
[e24b042]24#@param 3 Tipo imagen [ img |diff ]
[d2b8d24]25#@param 4 Tamaño de la imagen
26#@return  instrucción para ser ejecutada.
27#*/
28
29function ogCreateFileImage () {
[332bbb1]30local SIZEREQUIRED IMGDIR IMGFILE DIRMOUNT LOOPDEVICE  IMGSIZE IMGEXT KERNELVERSION
[d2b8d24]31
32if [ "$*" == "help" ]; then
[f62ce4f]33    ogHelp "$FUNCNAME" \
34           "$FUNCNAME [ REPO|CACHE ] image_name extension  size(K)" \
[d2b8d24]35           "$FUNCNAME REPO Ubuntu12 img 300000" \
36           "$FUNCNAME CACHE Windows7 diff 20000000"
37    return
38fi
39
40
41if [ $# -lt 4 ]; then
42    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  [ REPO|CACHE ] image_name extension  size(k)"
43    return $?
44fi
45
46SIZEREQUIRED=$4
47[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
[332bbb1]48KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
[d2b8d24]49
50if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
[654d744]51        IMGDIR="$(ogGetParentPath "$1" "/$2")"
[e24b042]52        [ "$3" == "img" ] && IMGEXT="img" ||  IMGEXT="img.diff"
[654d744]53        IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT"
[d2b8d24]54        ## Si no existe, crear subdirectorio de la imagen.
55        if [ $? != 0 ]; then
[ebc31ef5]56            ogEcho log session  "      $MSG_HELP_ogMakeDir \"$1 $(dirname "$2")."
[654d744]57            ogMakeDir "$1" "$(dirname "/$2")" || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
58            IMGDIR="$(ogGetParentPath "$1" "/$2")" || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
[d2b8d24]59        fi
[654d744]60        DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" "$3")"
[d2b8d24]61        mkdir -p "$DIRMOUNT"
62        LOOPDEVICE=$(losetup -f)
63        # Si existe el fichero de la imagen se hace copia de seguridad, si  no existe se crea.
64        if [ -f "$IMGFILE" ]; then
[cd1f048]65                # Si la imagen esta montada la desmonto
66                if [ -r "$DIRMOUNT/ogimg.info" ]; then
67                    umount "$DIRMOUNT"
[e24b042]68                    [ $? -ne 0 ] && return $(ogRaiseError $OG_ERR_DONTUNMOUNT_IMAGE "$1 $2.$IMGEXT"; echo $?)
[cd1f048]69                fi
70
[87a78ad6]71                if [ "$BACKUP" == "true" -o "$BACKUP" == "TRUE" ]; then
[d2b8d24]72                    # Copia seguridad
[ebc31ef5]73                    ogEcho log session  "     $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" ->  \"$IMGFILE.ant\"."
[791d013]74                    cp -f  "$IMGFILE" "$IMGFILE.ant" 
[d2b8d24]75                    mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
76                    rm -f "$IMGFILE.sum"
77                fi
78
[654d744]79                IMGSIZE=$(ls -l --block-size=1024 "$IMGFILE" | awk '{print $5}')
[d2b8d24]80                if [ $IMGSIZE -lt $SIZEREQUIRED ];then
[ebc31ef5]81                   ogEcho log session  "      $MSG_SYNC_RESIZE"
82                   echo "      truncate --size=>$SIZEREQUIRED k $IMGFILE"
[f456755]83                   truncate --size=">$SIZEREQUIRED"k "$IMGFILE" &> $OGLOGCOMMAND
[e1b9340]84                   # FS de la imagen segun el contenido del archivo .img
85                   if file "$IMGFILE" |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then
[f456755]86                        losetup $LOOPDEVICE "$IMGFILE"
[ebc31ef5]87                        echo "      resize2fs -f $LOOPDEVICE"
[f456755]88                        resize2fs -f $LOOPDEVICE &> $OGLOGCOMMAND
89                       
90                   else
[ebc31ef5]91                        echo "      ogMountImage $1 "$2" $3"
[f456755]92                        ogMountImage $1 "$2" $3
[ebc31ef5]93                        echo "      btrfs filesystem resize max $DIRMOUNT"
[f456755]94                        btrfs filesystem resize max "$DIRMOUNT" &> $OGLOGCOMMAND
95                   fi
[d2b8d24]96                fi
97        else
[dfcc55a]98                touch "$IMGFILE"
99                echo "      truncate --size=>$SIZEREQUIRED k $IMGFILE"
100                truncate --size=">$SIZEREQUIRED"k "$IMGFILE" &> $OGLOGCOMMAND
[d2b8d24]101                #Formateamos imagen
102                losetup $LOOPDEVICE $IMGFILE
[d72ef09]103                # FS de la imagen segun la configuracion y la version del kernel: < 3.7 ext4, si >=  btrfs
[1a2fa9d8]104                [ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"}
[d72ef09]105
106                if [ "$IMGFS" == "EXT4" ]; then
[ebc31ef5]107                   echo "      mkfs.ext4 -i 4096  -b 4096 -L "${2##*\/}" $LOOPDEVICE"
[791d013]108                   mkfs.ext4 -i 4096  -b 4096 -L "${2##*\/}" $LOOPDEVICE 2>&1 |tee -a $OGLOGCOMMAND
[f456755]109                else
[ebc31ef5]110                   echo "      mkfs.btrfs  -L ${2##*\/} $LOOPDEVICE "
[791d013]111                   mkfs.btrfs  -L "${2##*\/}" $LOOPDEVICE 2>&1 | tee -a $OGLOGCOMMAND
[f456755]112                fi
[d2b8d24]113        fi
[f456755]114        # Monto la imagen
115        ogMountImage $1 "$2" $3 &>/dev/null
[30ad471]116        [ $? -eq 0 ] || return $( ogRaiseError $OG_ERR_IMAGE "$3 $4"; echo $?)
[c8bbcdc]117        echo "mounted"> $IMGFILE.lock
[d2b8d24]118
[8361974]119        # Si existe dispositivo de loop lo borro.
120        [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE 2>&1 &>/dev/null
[d2b8d24]121
122else
123        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[ebc31ef5]124        echo "      hose $REPOIP 2009 --out sh -c \"echo -ne CREATE_IMAGE $2 $3 $SIZEREQUIRED \""
[d2b8d24]125        hose $REPOIP 2009 --out sh -c "echo -ne CREATE_IMAGE \"$2\" $3 $SIZEREQUIRED"
126fi
127
128}
129
[f62ce4f]130
[d2b8d24]131#/**
[1ee5d4d3]132#  ogCreateInfoImage
[d2b8d24]133#@brief   Crear listados con la informacion de la imagen, los situa en /tmp.
134#@param 1 num_disk
135#@param 2 num_part
136#@param 3 Repositorio  [ REPO | CACHE ] (opcional en las completas)
137#@param 4 Nombre Imagen Basica (opcional en las completas)
[e24b042]138#@param 5 Tipo imagen [ img | diff ]
[dfcc55a]139#@version 1.0.6 rsync opcion W (whole) para que sea más rápido
[d2b8d24]140#*/
[f62ce4f]141function ogCreateInfoImage () {
[dfcc55a]142local  IMGTYPE IMGDIRAUX DIRMOUNT DESTRSYNC PASSWORD USERRSYNC ORIG FSTYPE PART DIREMPTY IMGLIST IMGINFO IMGACL KERNELVERSION
[d2b8d24]143# Ayuda o menos de 5 parametros y la imagen no es basica
144if [ "$*" == "help" -o   $# -lt 5 -a "$3" != "img"  ]; then
[f62ce4f]145    ogHelp "$FUNCNAME" \
[6b0b68d]146                "$FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name ] extension  " \
147                "base image -> $FUNCNAME 1 2 img" \
148                "diff image -> $FUNCNAME 1 1 CACHE Windows7 diff "
[f62ce4f]149    return
[d2b8d24]150fi
151
152if [ $# -lt 3 ]; then
153    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  num_disk num_part [ REPO|CACHE ] [ base_image_name]  extension  "
154    return $?
155fi
156
[5962edd]157# Comprobar errores.
158PART=$(ogDiskToDev "$1" "$2") || return $?
159ORIG=$(ogMount $1 $2) || return $?
160
[d2b8d24]161if [ $3 == "img" ]; then
[e24b042]162   IMGTYPE="img"
[d2b8d24]163else
[1ee5d4d3]164   # Comprobamos que las extension sea valida
[30ad471]165   ogCheckStringInGroup $5 "img diff" || return $( ogRaiseError  $OG_ERR_FORMAT "$MSG_SYNC_EXTENSION"; echo $?)
[e24b042]166   IMGTYPE=$5
167   if [ "$IMGTYPE" == "diff" ]; then
[d2b8d24]168        # Imagen completa con la que comparo la particion.
[654d744]169        IMGDIRAUX="$(ogGetMountImageDir "$4" "img")"
[d2b8d24]170        if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
171           DIRMOUNT="/tmp/$IMGDIRAUX"
[654d744]172           DESTRSYNC="$DIRMOUNT"
[d2b8d24]173        else
174           [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
175           DIRMOUNT="$OGIMG/$IMGDIRAUX"
176           USERRSYNC="opengnsys"
[097bc95]177           PASSWORD="--password-file=/scripts/passrsync"
[d2b8d24]178           DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$IMGDIRAUX"
179        fi
180   fi
181fi
182
183
184FSTYPE=$(ogGetFsType $1 $2)
185
186# Creamos la lista del contenido y lo situamos en la particion a copiar.
187DIREMPTY="/tmp/empty$$"
188IMGLIST="/tmp/ogimg.list"
189IMGINFO="/tmp/ogimg.info"
190IMGACL="/tmp/ogimg.acl"
191
192# Borramos archivos antiguos.
[ebc31ef5]193rm -f /tmp/ogimg.* 2>/dev/null
194rm -f $ORIG/ogimg.* 2>/dev/null
[d2b8d24]195
[1ee5d4d3]196# En las diferenciales no sabemos el tamaño -> ponemos una constante.
197SIZEDATA=${SIZEDATA:-"SIZEDATA"}
[d2b8d24]198
[f456755]199# Incluimos información de la imagen. Segun el kernel sera ext4 o btrfs.
[332bbb1]200KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
[1a2fa9d8]201[ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"}
[81ae95c]202echo "#$IMGFS:NO:$FSTYPE:$SIZEDATA" > $IMGINFO
[f456755]203
[e24b042]204if [ "$IMGTYPE" == "img" ]; then
[d2b8d24]205        # Imagen Basica
[dfcc55a]206        echo "      rsync -aHAXWvn --delete $ORIG/ $DIREMPTY >> $IMGINFO"
207        rsync -aHAXWvn --delete $ORIG/ $DIREMPTY>> $IMGINFO
[d2b8d24]208        sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGINFO
209        sed -i  '/^\.\//d' $IMGINFO
210
211else
212        # Imagen Diferencial
[dfcc55a]213        echo "      rsync -aHAXWvn  --delete  $ORIG/ $DESTRSYNC a $IMGLIST"
214        rsync -aHAXWvn $PASSWORD  --delete  "$ORIG/" "$DESTRSYNC" >> $IMGLIST
[d2b8d24]215        sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGLIST
216        sed -i  '/^\.\//d' $IMGLIST
217
218        # Creamos informacion de la imagen
219        grep -e '\->' -e  '\=>' $IMGLIST > /tmp/ogimg.ln
220        grep -e  ^deleting  $IMGLIST | sed s/^deleting\ //g | grep -v ^ogimg  > /tmp/ogimg.rm
221        #grep -v -e '\->' -e  '\=>'  -e ^deleting  $IMGLIST >> $IMGINFO
222        grep -v -e '\->' -e  '\=>'  -e ^deleting -e ^created  $IMGLIST >> $IMGINFO
223
[ebc31ef5]224        rm -f $IMGLIST
[d2b8d24]225
[791d013]226        # Comprobamos que los ficheros de diferencias no esten vacios o salimos con error.
227        if [ $(grep -v -e "^$"  -e "^#" $IMGINFO /tmp/ogimg.ln /tmp/ogimg.rm |wc -l) -eq 0 ]; then
[30ad471]228                ogRaiseError $OG_ERR_NOTDIFFERENT "$1 $2 $3 $4 $5"
[e2a7442]229                return $?       
[791d013]230        fi
231
[d2b8d24]232fi
233
234# Guardamos el contenido de las acl (Solo win) Necesario particion desmontada (esta asi)
235ogUnmount $1 $2
[e27c4f4]236if [ $FSTYPE == "NTFS" ]; then
[ebc31ef5]237        echo "      ntfs-3g.secaudit -b $PART /"
[1e3a1e2]238        ntfs-3g.secaudit -b $PART / > $IMGACL
[e27c4f4]239fi
[d2b8d24]240
241}
242
[6c2dee2]243
244#/**
245#  ogAclFilter
[1a2fa9d8]246#@brief Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial (falla: no se usa)
[6c2dee2]247#@param No.
248#@return  (nada)
249#*/
250function ogAclFilter () {
251local  IMGACL IMGINFO FILES ACLTMP
252
[1a2fa9d8]253# Ayuda
[30ad471]254if [ "$*" == "help" ]; then
[f62ce4f]255    ogHelp "$FUNCNAME" "$FUNCNAME"
256    return
[30ad471]257fi
258
[6c2dee2]259IMGACL="/tmp/ogimg.acl"
260IMGINFO="/tmp/ogimg.info"
261FILES="/tmp/files$$"
262ACLTMP="/tmp/acl$$.tmp"
[30ad471]263ACLFILES="/tmp/aclfiles$$"
[6c2dee2]264
265# comprobamos que existan los archivos de origen. Si no salimos sin error.
[d344ed8]266[ -f $IMGACL -a -f $IMGINFO ] || return 0
[6c2dee2]267
268echo "" > $ACLTMP
[30ad471]269grep -n  -e "File" -e "Directory" $IMGACL > $ACLFILES
[6c2dee2]270
[1a2fa9d8]271# Al listado de ficheros le quitamos las líneas sobrantes: comentarios y lineas vacias.
272sed -e s/"^#.*$"//g -e '/^$/d' $IMGINFO > $FILES
[6c2dee2]273
[d344ed8]274
[6c2dee2]275# Recorremos el listado y extraemos la acl correspondiente al fichero o directorio.
276while read LINE; do
[30ad471]277    read END INI <<< "$(grep -A 1 "$LINE" $ACLFILES | awk -F :  '!(NR%2){print $1" "p}{p=$1}' )"
[6c2dee2]278    let NUM=$END-$INI-1
[d344ed8]279    # Si algún archivo no se encuentra, el error lo mandamos a /dev/null
[30ad471]280    sed -n -e $INI,+"$NUM"p  $IMGACL 2>/dev/null >> $ACLTMP
281    echo "aclfilter: $LINE" >> $OGLOGCOMMAND
[6c2dee2]282done < $FILES
283
284cp $ACLTMP $IMGACL
[ebc31ef5]285rm -f $FILES $ACLTMP $ACLFILES
[6c2dee2]286}
287
[f62ce4f]288
[d2b8d24]289#/**
290#  ogRestoreInfoImage
[e24b042]291#@brief Crear o modificar enlaces y restaurar las ACL. La informacion esta ya copiada a la particion.
[d2b8d24]292#@param 1 num_disk
293#@param 2 num_part
294#*/
295function ogRestoreInfoImage () {
[5ccac26]296local  DEST PART IMGACL IMGLN OPTLN LINEA DESTLN ORIGLN TYPELN
[d2b8d24]297
298# Ayuda o menos de 5 parametros y la imagen no es basica
299if [ "$*" == "help" ]; then
[f62ce4f]300    ogHelp "$FUNCNAME" \
[6b0b68d]301                "$FUNCNAME num_disk num_part" \
302                "base image -> $FUNCNAME 1 2 " \
303                "diff image -> $FUNCNAME 1 1 "
[f62ce4f]304    return
[d2b8d24]305fi
306
307if [ $# -lt 2 ]; then
308    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part  "
309    return $?
310fi
311
[5962edd]312# Control de errores.
313PART=$(ogDiskToDev "$1" "$2") || return $?
314DEST=$(ogMount $1 $2) || return $?
315
[d2b8d24]316IMGACL="ogimg.acl"
[5ccac26]317IMGLN="ogimg.ln"
[1a2fa9d8]318IMGINFO="ogimg.info"
319
320# Copiamos informacion de la imagen a /tmp (para basicas)
321[ -r $DEST/$IMGACL ] && cp $DEST/ogimg.* /tmp
[5ccac26]322
323#Creamos o modificamos los enlaces.
324# La imagen diferencial tiene ogimg.ln
325# para la completa lo generamos con los enlaces que contengan  /mnt/
[1a2fa9d8]326[ -r "/tmp/$IMGLN" ] || grep -e "->" -e "=>" "/tmp/$IMGINFO"|grep "/mnt/" > "/tmp/$IMGLN"
327if [ $(wc -l "/tmp/$IMGLN"|cut -f1 -d" ") -ne 0 ]; then
[5ccac26]328   while read LINEA
329   do
330        ORIGLN="${LINEA#*> }"
331        # Si origen hace referencia a la particion lo modificamos
332        echo $ORIGLN|grep "/mnt/"> /dev/null && ORIGLN="$DEST/${ORIGLN#/mnt/*/}"
333        # rsync marca - los enlaces simbolicos y = enlaces "duros"
334        LINEA="${LINEA%>*}"
335        TYPELN="${LINEA##* }"
336        DESTLN="${LINEA% *}"
337
338        if [ "$TYPELN" == "-" ]
339        then
340           OPTLN='-s'
341        else
342           OPTLN=''
343        fi
[654d744]344        cd "$DEST/$(dirname "$DESTLN")"
[ebc31ef5]345        rm -f "$(basename "$DESTLN")"
[654d744]346        ln $OPTLN "$ORIGLN" "$(basename "$DESTLN")"
[5ccac26]347        echo -n "."
[1a2fa9d8]348   done < "/tmp/$IMGLN"  2>/dev/null
[5ccac26]349   echo ""
[d2b8d24]350
351fi
[1a2fa9d8]352cd /
353}
[f62ce4f]354
355
[1a2fa9d8]356#/**
357#  ogRestoreAclImage
358#@brief Restaurar las ACL. La informacion esta ya copiada al directorio /tmp
359#@param 1 num_disk
360#@param 2 num_part
361#*/
362function ogRestoreAclImage () {
363local PART IMGACL
364PART=$(ogDiskToDev "$1" "$2") || return $?
365IMGACL="ogimg.acl"
[d2b8d24]366
[5ccac26]367# Restauramos acl
[1a2fa9d8]368if [ "$(ogGetFsType $1 $2)" == "NTFS"  -a -f "/tmp/$IMGACL" ] ; then
[d2b8d24]369        cd /
370        ogUnmount "$1" "$2"
[ebc31ef5]371        echo "ntfs-3g.secaudit -se $PART /tmp/$IMGACL"
[791d013]372        ntfs-3g.secaudit -se $PART /tmp/$IMGACL
[f456755]373        # Para evitar que de falso error
374        echo ""
[5ccac26]375fi
[d2b8d24]376}
377
[f62ce4f]378
[d2b8d24]379function ogSyncCreate () {
380#/**
381# ogSyncCreate
[e24b042]382#@brief   sincroniza los datos de la partición a la imagen para crearla. La imagen esta montada en un directorio.
[d2b8d24]383#@param 1 num_disk
384#@param 2 num_part
385#@param 3 Repositorio  [ REPO | CACHE ]
386#@param 4 Nombre Imagen
[e24b042]387#@param 5 Tipo imagen [ img | diff ]
[d2b8d24]388#*/
[c4db9c1]389local ORIG DIRAUX DIRMOUNT DESTRSYNC USERRSYNC PASSWORD OPTRSYNC RETVAL
[d2b8d24]390
[791d013]391# Limpiamos los archivo de log
392echo  "" >$OGLOGCOMMAND;
393
[d2b8d24]394if [ "$*" == "help" ]; then
[f62ce4f]395    ogHelp "$FUNCNAME" \
[6b0b68d]396                "$FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension  " \
397                "$FUNCNAME 1 2 REPO Ubuntu12 img" \
398                "$FUNCNAME 1 1 CACHE Windows7 diff "
[f62ce4f]399    return
[d2b8d24]400fi
401
402
403if [ $# -lt 4 ]; then
404    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  num_disk num_part [ REPO|CACHE ] image_name extension  "
405    return $?
406fi
407
[5962edd]408ORIG=$(ogMount $1 $2) || return $?
409
[654d744]410DIRMOUNT="$(ogGetMountImageDir "$4" $5)"
[e24b042]411# Si la imagen es diferencial la lista de ficheros a transferir esta dentro de la imagen.
[654d744]412if [ "$5" == "diff" ]; then
413        FILESFROM=" --files-from=/tmp/ogimg.info"
414        # Borramos los directorios
415        sed -i '/\/$/d' /tmp/ogimg.info
416else
417        FILESFROM=""
418fi
[d2b8d24]419
420if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
421        DESTRSYNC="/tmp/$DIRMOUNT"
422else
423        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[097bc95]424        PASSWORD="--password-file=/scripts/passrsync"
425        [ "$ogrsyncz" ==  "true" ] && OPTRSYNC="z "
426        [ "$ogrsyncw" == "true" ] && OPTRSYNC="W$OPTRSYNC"
[d2b8d24]427        USERRSYNC="opengnsys"
428        DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
429fi
[1ee5d4d3]430# Sincronizamos los datos de la partición a la imagen
[ebc31ef5]431echo "      rsync -aHAX$OPTRSYNC --progress --inplace --delete $FILESFROM  $ORIG/ $DESTRSYNC"
[0b91489]432rsync -aHAX$OPTRSYNC $PASSWORD --progress --inplace --delete $FILESFROM  "$ORIG/" "$DESTRSYNC" 2>$OGLOGCOMMAND | egrep "^deleting|^sent|^sending|^total|%" |tee -a $OGLOGCOMMAND
433RETVAL=${PIPESTATUS[0]}
[ebc31ef5]434echo "      rsync -aHAX$OPTRSYNC --inplace /tmp/ogimg* $DESTRSYNC"
[791d013]435rsync -aHAX$OPTRSYNC  $PASSWORD  --inplace /tmp/ogimg* "$DESTRSYNC"
[d2b8d24]436
[0b91489]437return $RETVAL
[d2b8d24]438}
439
440
441#/**
442# ogSyncRestore
443#@brief   sincroniza los datos de la imagen a la partición para restaurarla.
444#@param 1 Repositorio  [ REPO | CACHE ]
445#@param 2 Nombre Imagen
[e24b042]446#@param 3 Tipo imagen [ img | diff ]
[d2b8d24]447#@param 4 num_disk
448#@param 5 num_part
449#*/
450function ogSyncRestore () {
[097bc95]451local DIRMOUNT ORIG DESTRSYNC PASSWORD OPTRSYNC USERRSYNC IMGINFO FILESFROM
[d2b8d24]452
[791d013]453# Limpiamos los archivo de log
454echo  "" >$OGLOGCOMMAND;
455
[d2b8d24]456if [ "$*" == "help" ]; then
[f62ce4f]457    ogHelp "$FUNCNAME" \
[6b0b68d]458                "$FUNCNAME [ REPO|CACHE ] image_name extension  num_disk num_part  " \
459                "$FUNCNAME REPO Ubuntu12 img 1 2" \
460                "$FUNCNAME CACHE Windows7 diff 1 1"
[f62ce4f]461    return
[d2b8d24]462fi
463
464
465if [ $# -lt 5 ]; then
466    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  [ REPO|CACHE ] image_name extension   num_disk num_part "
467    return $?
468fi
469
470
[654d744]471DIRMOUNT="$(ogGetMountImageDir "$2" "$3")"
[d2b8d24]472DESTRSYNC=$(ogGetMountPoint $4 $5)
473
474# Borramos ficheros de informacion de restauraciones antiguas
475rm -rf $DESTRSYNC/ogimg.*
[1a2fa9d8]476rm -rf /tmp/ogimg.*
[d2b8d24]477
478# Origen y destino de la sincronizacion y en REPO opciones rsync
479if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
480        ORIG="/tmp/$DIRMOUNT"
481else
482        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[097bc95]483        PASSWORD="--password-file=/scripts/passrsync"
484        [ "$ogrsyncz" ==  "true" ] && OPTRSYNC="z "
485        [ "$ogrsyncw" == "true" ] && OPTRSYNC="W$OPTRSYNC"
[d2b8d24]486        USERRSYNC="opengnsys"
487        ORIG="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
488fi
489
490# Opciones rsync en cache y repo
[e24b042]491# Para la imagen basica, opcion de borrar archivos de la particion que no existen en la imagen
[d2b8d24]492[ "$3" == "img" ] && [ "$ogrsyncdel" != "false" ] && OPTRSYNC="$OPTRSYNC --delete"
493
[1ee5d4d3]494# Nos traemos listado ficheros y bajamos la imagen
495
[ebc31ef5]496ogEcho log session "      $MSG_SYNC_RESTORE"
[d2b8d24]497
498# Si la imagen es diferencial nos traemos los archivos de informacion de la imagen.
499if [ "$3" == "diff" ]; then
500        # Lista de archivos a copiar:
501        IMGINFO="ogimg.info"
[1a2fa9d8]502        FILESFROM=" --files-from=/tmp/$IMGINFO"
[d2b8d24]503
[1a2fa9d8]504        echo "      rsync -aHAX$OPTRSYNC --progress  $ORIG/ogimg* /tmp"
505        rsync -aHAX$OPTRSYNC $PASSWORD --progress  "$ORIG"/ogimg* /tmp
[d2b8d24]506        # Borramos linea de información de la imagen, sino busca un fichero con ese nombre
[1a2fa9d8]507        sed -i   '/^\#/d' /tmp/$IMGINFO
[d2b8d24]508
509        cd $DESTRSYNC
[1ee5d4d3]510        # Diferencial: Borramos archivos sobrantes.
[ebc31ef5]511        ogEcho log session "      $MSG_SYNC_DELETE" 
[1a2fa9d8]512        sed -e s/^/\"/g -e s/$/\"/g "/tmp/ogimg.rm" 2>/dev/null | xargs rm -rf
[d2b8d24]513
514fi
515
[ebc31ef5]516echo "      rsync -aHAX$OPTRSYNC --progress  $FILESFROM  $ORIG/ $DESTRSYNC"
[0b91489]517rsync -aHAX$OPTRSYNC $PASSWORD --progress  $FILESFROM  "$ORIG/" "$DESTRSYNC"  2>$OGLOGCOMMAND | egrep "^deleting|^sent|^sending|^total|%"  |tee -a $OGLOGCOMMAND
[1a2fa9d8]518RETVAL=${PIPESTATUS[0]}
519cd /
520return $RETVAL
[d2b8d24]521}
522
[f62ce4f]523
[d2b8d24]524#/**
525# ogMountImage
526#@brief   Monta la imagen para sincronizar.
527#@param 1 Repositorio  [ REPO | CACHE ]
528#@param 2 Nombre Imagen
[e24b042]529#@param 3 Tipo imagen [ img |diff ]
[1ee5d4d3]530#@return punto de montaje
[d2b8d24]531#*/
[f62ce4f]532function ogMountImage () {
[332bbb1]533local IMGEXT IMGFILE DIRMOUNT KERNELVERSION
[d2b8d24]534
535if [ "$*" == "help" ]; then
[f62ce4f]536    ogHelp "$FUNCNAME" \
[6b0b68d]537                "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
538                "$FUNCNAME REPO Ubuntu12" \
539                "$FUNCNAME CACHE Windows7 diff"
[f62ce4f]540    return
[d2b8d24]541fi
542
543
544if [ $# -lt 2 ]; then
[5ccac26]545    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ]  image_name [ extension ]"
[d2b8d24]546    return $?
547fi
548
[e24b042]549[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
[d2b8d24]550
[654d744]551DIRMOUNT="$(ogGetMountImageDir "$2" ${IMGEXT#*\.})"
[1ee5d4d3]552
[1e3a1e2]553if [ "$1" == "REPO" -o "$1" == "repo" ]; then
554        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
555        hose $REPOIP 2009 --out sh -c "echo -ne MOUNT_IMAGE \"$2\" ${IMGEXT#*\.}"
556        echo "$OGIMG/$DIRMOUNT"
557else
[f456755]558        # Si está montado nada que hacer.
559        df | grep "$DIRMOUNT$" 2>&1 >/dev/null && echo "/tmp/$DIRMOUNT" && return 0
560
[1e3a1e2]561        IMGFILE="$(ogGetPath "$1" /"$2.$IMGEXT")" \
562                || return $(ogRaiseError $OG_ERR_NOTFOUND "$1 $2.$IMGEXT"; echo $?)
[cd1f048]563        mkdir -p "/tmp/$DIRMOUNT"
[f456755]564       
[e1b9340]565
566        # FS de la imagen segun el contenido del archivo .img
567        if file "$IMGFILE" |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then
[f456755]568            mount -t ext4 -o loop "$IMGFILE" "/tmp/$DIRMOUNT" 1>/dev/null
569        else
570            mount -o compress=lzo  "$IMGFILE" "/tmp/$DIRMOUNT" 1>/dev/null
571        fi
572
573        # Comprobamos que se ha montado bien
[30ad471]574        [ $? -eq 0 ] || return $(ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $3"; echo $?)
[1ee5d4d3]575        echo "/tmp/$DIRMOUNT"
[d2b8d24]576fi
577
578}
579
580
581#/**
582# ogUnmountImage  [ REPO | CACHE ] Image_name [ extension ]
583#@brief   Desmonta la imagen para sincronizar.
584#@param 1 Repositorio  [ REPO | CACHE ]
585#@param 2 Nombre Imagen
[e24b042]586#@param 3 Tipo imagen [ img |diff ]
[d2b8d24]587#*/
[f62ce4f]588function ogUnmountImage () {
[e24b042]589local IMGTYPE DIRMOUNT
[d2b8d24]590
591if [ "$*" == "help" ]; then
[f62ce4f]592    ogHelp "$FUNCNAME" \
[6b0b68d]593                "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
594                "$FUNCNAME REPO Ubuntu12" \
595                "$FUNCNAME CACHE Windows7 diff"
[d2b8d24]596    return
597fi
598
599if [ $# -lt 2 ]; then
[8361974]600    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME  [ REPO|CACHE ]  image_name [ extension ]"
[d2b8d24]601    return $?
602fi
603
[e24b042]604[ "$3" == "" ] && IMGTYPE="img" || IMGTYPE="$3"
[d2b8d24]605
606if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
[654d744]607        DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" $IMGTYPE)"
[d2b8d24]608        umount "$DIRMOUNT"
[8361974]609        rmdir "$DIRMOUNT"
[c8bbcdc]610        [ -f $IMGFILE.lock ] && sed -i s/"mounted"//g $IMGFILE.lock
[d2b8d24]611else
612        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[ebc31ef5]613        echo "      hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE"
[e24b042]614        hose $REPOIP 2009 --out sh -c "echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE"
[d2b8d24]615fi
616}
617
[f62ce4f]618
[d2b8d24]619#/**
[baa5919]620# ogGetMountImageDir
[d2b8d24]621#@brief   Devuelve el directorio de montaje de la imagen.
622#@param 1 Nombre Imagen
[e24b042]623#@param 2 Tipo imagen [ img |diff ]
[d2b8d24]624#*/
[f62ce4f]625function ogGetMountImageDir () {
[d2b8d24]626local DIRMOUNT
627if [ "$*" == "help" ]; then
[f62ce4f]628    ogHelp "$FUNCNAME" \
[6b0b68d]629                "$FUNCNAME image_name [ extension ]" \
630                "$FUNCNAME Ubuntu12" \
631                "$FUNCNAME Windows7 diff"
[d2b8d24]632    return
633fi
634
635
636if [ $# -lt 1 ]; then
637    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
638    return $?
639fi
640
641
642DIRMOUNT="mount/$1"
643[ "$2" == "diff" ] && DIRMOUNT="$DIRMOUNT.diff"
[654d744]644echo "$DIRMOUNT"
[d2b8d24]645
646}
647
648
649#/**
[c8bbcdc]650#  ogWaitSyncImage image_name extension stado imagen_size
[d2b8d24]651#@brief Se espera un tiempo a que se monte la imagen en el servidor.
652#@brief Cuando se esta creando la imagen hay que dar el tamaño, para que espere el tiempo de creación. 
653#@param 1 Respositorio [ REPO | CACHE ]
654#@param 2 Nombre Imagen
[e24b042]655#@param 3 Tipo imagen [ img | diff ]
[c8bbcdc]656#@param 4 Estado [ mounted | reduced ]
657#@param 5 Tamaño imagen (opcional)
[d2b8d24]658#*/
[c8bbcdc]659function ogWaitSyncImage () {
660local SIZE TIME DIRMOUNT TIMEOUT TIMEAUX LOCKFILE IMGDIR IMGEXT STATE
[d2b8d24]661
662TIME=$SECONDS
663
664# Ayuda o menos de 5 parametros y la imagen no es basica
665if [ "$*" == "help" ]; then
[f62ce4f]666    ogHelp "$FUNCNAME" \
[c8bbcdc]667                "$FUNCNAME [ REPO | CACHE ] image_name extension state [ image_size ] " \
[6b0b68d]668                "$FUNCNAME REPO Ubuntu12 img 30000000" \
669                "$FUNCNAME CACHE Windows7 diff "
[f62ce4f]670    return
[d2b8d24]671fi
672
[c8bbcdc]673if [ $# -lt 4 ]; then
674    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO | CACHE ]  image_name extension state [ image_size ] "
[1e3a1e2]675    return $?
[d2b8d24]676fi
677
[c8bbcdc]678SIZE=${5:-"300000"}
679STATE="$4"
680ogCheckStringInGroup "$STATE" "mounted reduced" || \
681        return $(ogRaiseError  command $OG_ERR_FORMAT "STATE = [ mounted | reduced  ]" )
682
683IMGDIR="$(ogGetParentPath "$1" "/$2")"
684[ "$3" == "img" ] && IMGEXT="img" ||  IMGEXT="img.diff"
685LOCKFILE="${IMGDIR}/$(basename "/$2").$IMGEXT.lock"
[d2b8d24]686
687if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
[baa5919]688        DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" $3)"
[d2b8d24]689else
[baa5919]690        DIRMOUNT="$OGIMG/$(ogGetMountImageDir "$2" $3)"
[d2b8d24]691fi
692
[791d013]693echo -n -e "      $MSG_SYNC_SLEEP: $DIRMOUNT\n      #"  | tee -a $OGLOGSESSION $OGLOGFILE
[d2b8d24]694
[c8bbcdc]695# Comprobamos: mounted -> que exista $DIRMOUNT/ogimg.info o que el fichero de lock contenga mounted
696#              reduced -> que el fichero de lock contenga reduced.
697
[d2b8d24]698# time-out segun el tamaño de la imagen. por defecto: 100000k -> 3s
699let TIMEOUT=$SIZE/$CREATESPEED
700[ $TIMEOUT -lt 60 ] && TIMEOUT=60
[c8bbcdc]701until $(grep -i $STATE $LOCKFILE &>/dev/null) ; do
[1a2fa9d8]702        [ $STATE = "mounted" -a -f "$DIRMOUNT/ogimg.info" ] && ogEcho log session "" && return 0
[d2b8d24]703        TIMEAUX=$[SECONDS-TIME]
[332bbb1]704        [  "$TIMEAUX" -lt "$TIMEOUT" ] || return $(ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
[791d013]705        echo -n "#"  | tee -a $OGLOGSESSION $OGLOGFILE
[d2b8d24]706        sleep 5
707done
[791d013]708echo  "" | tee -a $OGLOGSESSION $OGLOGFILE
[d2b8d24]709
710}
[cd1f048]711
[e24b042]712
[cd1f048]713#/**
714# ogReduceImage
715#@brief   Reduce el archivo de la imagen a tamaño datos + 500M
716#@param 1 Repositorio  [ REPO | CACHE ]
717#@param 2 Nombre Imagen
[e24b042]718#@param 3 Tipo Imagen [ img |diff ]
[cd1f048]719#@return
720#@exception OG_ERR_FORMAT     # 1 formato incorrecto.
721#@exception OG_ERR_NOTFOUND        # 2 Fichero o dispositivo no encontrado.
722#*/
[f62ce4f]723function ogReduceImage () {
[f456755]724local IMGEXT DIRMOUNT AVAILABLE USED IMGDIR IMGFILE ENDSIZE LOOPDEVICE
[cd1f048]725if [ "$*" == "help" ]; then
[f62ce4f]726    ogHelp "$FUNCNAME" \
[6b0b68d]727                "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
728                "$FUNCNAME REPO Ubuntu12" \
729                "$FUNCNAME CACHE Windows7 diff"
[cd1f048]730    return
731fi
732
733if [ $# -lt 2 ]; then
734    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
735    return $?
736fi
737
[f456755]738
[e24b042]739[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
[654d744]740IMGDIR="$(ogGetParentPath "$1" "/$2")"
741IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT"
[f456755]742
[cd1f048]743
744if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
[d34255f]745    # Para imagenes EXT4 reduzco, para BTRFS solo desmonto.
746    if file "$IMGFILE" | grep -i " ext4 filesystem " 2>&1 > /dev/null; then
[cd1f048]747        # Al montar se comprueba la existencia de la imagen
[c8bbcdc]748        DIRMOUNT="$(ogMountImage $1 "$2" ${IMGEXT#*\.})"
[56b3a42]749        AVAILABLE=$(df -k|grep "$DIRMOUNT$"|awk '{print $4}')
[cd1f048]750        # Si el espacio libre menor que 500Mb nos salimos
[f456755]751        if [ $AVAILABLE -lt 200000 ]; then
[654d744]752                ogUnmountImage $1 "$2" ${IMGEXT#*\.}
[c8bbcdc]753                echo "reduced" > "$IMGFILE.lock"
[e24b042]754                return 0
755        fi
[cd1f048]756
[f456755]757        # Calculamos la diferencia entre el tamaño interno y externo
[654d744]758        EXTSIZE=$(ls -l --block-size=1024 "$IMGFILE" | cut -f5 -d" ")
[f456755]759        INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
760        let EDGESIZE=$EXTSIZE-$INTSIZE
[654d744]761        ogUnmountImage $1 "$2" ${IMGEXT#*\.}
[f456755]762        LOOPDEVICE=$(losetup -f)
763        losetup $LOOPDEVICE "$IMGFILE"
764
765        # Redimensiono sistema de ficheros
[ebc31ef5]766        echo "      resize2fs -fpM $LOOPDEVICE"
[f456755]767        resize2fs -fpM $LOOPDEVICE |tee -a $OGLOGCOMMAND
[c8bbcdc]768        ogMountImage $1 "$2" ${IMGEXT#*\.} >/dev/null
[f456755]769
770        # Calculamos el tamaño final del archivo
771        INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
772        let EXTSIZE=$INTSIZE+$EDGESIZE
[654d744]773        umount "$DIRMOUNT"
[f456755]774
775        # Si existe dispositivo de loop lo borro.
776        [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE
777
778        # Corto el archivo al tamaño del sistema de ficheros.
[ebc31ef5]779        echo "      truncate --size=\"$EXTSIZE\"k $IMGFILE  "
[654d744]780        truncate --size="$EXTSIZE"k "$IMGFILE"
[d34255f]781    else
[c8bbcdc]782        # Desmonto  la imagen
[d34255f]783        umount "$DIRMOUNT"
784    fi
785
786    echo "reduced" > "$IMGFILE.lock"
787    rmdir "$DIRMOUNT"
[f456755]788
[cd1f048]789else
[6d24524]790        [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
[ebc31ef5]791        echo "      hose $REPOIP 2009 --out sh -c echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}"
[e24b042]792        hose $REPOIP 2009 --out sh -c "echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}"
[cd1f048]793fi
794
795}
796
797
798
[f456755]799#/**
800# ogIsSyncImage
801#@brief   Comprueba si la imagen es sincronizable
802#@param 1 Repositorio  [ REPO | CACHE ]
803#@param 2 Nombre Imagen
804#@param 3 Tipo Imagen [ img |diff ]
805#@return
806#@exception OG_ERR_FORMAT     # 1 formato incorrecto.
807#@exception OG_ERR_NOTFOUND        # 2 Fichero o dispositivo no encontrado.
808#*/
[f62ce4f]809function ogIsSyncImage () {
[f456755]810local IMGEXT IMGDIR IMGFILE
811
812if [ "$*" == "help" ]; then
[f62ce4f]813    ogHelp "$FUNCNAME" \
[6b0b68d]814                "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
815                "$FUNCNAME REPO Ubuntu12" \
816                "$FUNCNAME CACHE Windows7 diff"
[f456755]817    return
818fi
[cd1f048]819
[f456755]820if [ $# -lt 2 ]; then
821    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
822    return $?
823fi
[cd1f048]824
[f456755]825[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
[654d744]826IMGDIR="$(ogGetParentPath "$1" "/$2")"
[f456755]827IMGFILE="${IMGDIR}"/$(basename "/$2").$IMGEXT
[cd1f048]828
[f456755]829file "$IMGFILE" | grep -i -e " BTRFS Filesystem " -e " ext4 filesystem " >/dev/null
830[ $? -eq 0 ] && return 0 || return $OG_ERR_DONTSYNC_IMAGE
[cd1f048]831
[f456755]832}
[6b0b68d]833
[f62ce4f]834
[6b0b68d]835#/**
836# ogCheckSyncImage
837#@brief   Muestra el contenido de la imagen para comprobarla.
838#@param 1 Repositorio  [ REPO | CACHE ]
839#@param 2 Nombre Imagen
840#@param 3 Tipo Imagen [ img |diff ]
841#@return
842#@exception OG_ERR_FORMAT     # 1 formato incorrecto.
843#@exception OG_ERR_NOTFOUND        # 2 Fichero o dispositivo no encontrado.
844#*/
[c8bbcdc]845function ogCheckSyncImage () {
[332bbb1]846local IMGEXT  IMGDIR  IMGFILE DIRMOUNT ISMOUNT RETVAL KERNELVERSION
[6b0b68d]847
848if [ "$*" == "help" ]; then
[f62ce4f]849    ogHelp "$FUNCNAME" \
[6b0b68d]850                "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
851                "$FUNCNAME REPO Ubuntu12" \
852                "$FUNCNAME CACHE Windows7 diff"
853    return
854fi
855
856if [ $# -lt 2 ]; then
857    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
858    return $?
859fi
860
861[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
862IMGDIR="$(ogGetParentPath "$1" "/$2")"
863IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT"
864
[1e3a1e2]865ogIsSyncImage $1 "$2" "${IMGEXT#*\.}" || return $(ogRaiseError $OG_ERR_DONTSYNC_IMAGE "$3 $4"; echo $?)
[6b0b68d]866
[332bbb1]867# Comprobamos que no esté montada (daria falso error)
868if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
869        $(df | grep "/tmp/mount/$2${IMGEXT#img}$" &>/dev/null) && ISMOUNT=TRUE
870else
871        [ -f "$OGIMG/mount/$2${IMGEXT#img}/ogimg.info" ] && ISMOUNT=TRUE
872fi
[1a2fa9d8]873[ "$ISMOUNT" == TRUE ] && ogEcho log session warning "$MSG_SYNC_NOCHECK" && return 0
[332bbb1]874
[6b0b68d]875DIRMOUNT="/tmp/ogCheckImage$$"
[e1b9340]876mkdir "$DIRMOUNT"
877# FS de la imagen segun el contenido del archivo .img
878if file "$IMGFILE" |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then
[251c9e4]879        mount -t ext4 -o loop "$IMGFILE" "$DIRMOUNT" 2>&1 | tee -a $OGLOGCOMMAND
880        RETVAL=${PIPESTATUS[0]}
[6b0b68d]881else
[0b91489]882        mount -o compress=lzo  "$IMGFILE" "$DIRMOUNT" 2>&1 | tee -a $OGLOGCOMMAND
[251c9e4]883        RETVAL=${PIPESTATUS[0]}
[6b0b68d]884fi
[791d013]885ls -C "$DIRMOUNT" | tee -a $OGLOGCOMMAND
[251c9e4]886umount "$DIRMOUNT"
[6b0b68d]887
888rmdir "$DIRMOUNT"
[251c9e4]889return $RETVAL
[6b0b68d]890}
[f62ce4f]891
Note: See TracBrowser for help on using the repository browser.