diff options
Diffstat (limited to 'client/engine/Image.lib')
-rwxr-xr-x | client/engine/Image.lib | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/client/engine/Image.lib b/client/engine/Image.lib index 399e3da1..a4b82b02 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -387,12 +387,15 @@ dd if="$DISK" of="$IMGFILE" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IM #@brief Comprueba si una imagen está bloqueada para uso exclusivo. #@param str_repo repositorio de imágenes (opcional) #@param path_image camino de la imagen (sin extensión) -#@return Código de salida: 0 - sin bloquear, 1 - bloqueada. +#@return Código de salida: 0 - bloqueado, 1 - sin bloquear o error. #@note repo = { REPO, CACHE } #@exception OG_ERR_FORMAT formato incorrecto. #@version 1.0 - Adaptación a OpenGnSys 1.0 #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2011/03/10 +#@version 1.0.1 - Devolver falso en caso de error. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-18 #*/ ## function ogIsImageLocked () { @@ -404,7 +407,7 @@ if [ "$*" == "help" ]; then return fi # Error si no se reciben 1 o 2 parámetros. -[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? +[ $# -lt 1 -o $# -gt 2 ] && return 1 # Comprobar si existe el fichero de bloqueo. test -n "$(ogGetPath $@.lock)" @@ -453,10 +456,12 @@ touch $IMGDIR/$(basename "${!#}").lock #@param int_ndisk nº de orden del disco #@param int_npartition nº de orden de la partición #@return (por determinar) -#@exception OG_ERR_FORMAT formato incorrecto. -#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados. -#@exception OG_ERR_LOCKED partición bloqueada por otra operación. -#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema. +#@exception OG_ERR_FORMAT 1 formato incorrecto. +#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados. +#@exception OG_ERR_PARTITION 3 # Error en partición de disco. +#@exception OG_ERR_LOCKED 4 partición bloqueada por otra operación. +#@exception OG_ERR_IMAGE 5 error al restaurar la imagen del sistema. +#@exception OG_ERR_IMGSIZEPARTITION 30 Tamaño de la particion es menor al tamaño de la imagen. #@todo Comprobar incongruencias partición-imagen, control de errores, definir parámetros, caché/repositorio, etc. #@version 0.1 - Integracion para Opengnsys - HIDRA:RestaurarImagen{EXT3, NTFS}.sh; EAC: RestorePartitionFromImage() en Deploy.lib #@author Ramon Gomez, ETSII Universidad de Sevilla @@ -466,6 +471,12 @@ touch $IMGDIR/$(basename "${!#}").lock #@version 0.9 - Primera version muy en pruebas para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/09/10 +#@version 1.0 - generacion sintaxis de restauracion +#@author Antonio J. Doblas Viso, Universidad de Malaga +#@date 2011/02/01 +#@version 1.0.1 - Control errores, tamaño particion, fichero-imagen +#@author Antonio J. Doblas Viso, Universidad de Malaga +#@date 2011/05/11 #*/ ## function ogRestoreImage () { @@ -479,21 +490,26 @@ if [ "$*" == "help" ]; then return fi # Error si no se reciben 4 parámetros. -[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? +[ $# -lt 4 ] && return $(ogRaiseError $OG_ERR_FORMAT; echo $?) # Procesar parámetros. -PART="$(ogDiskToDev "$3" "$4")" || return $? +PART="$(ogDiskToDev $3 $4)" || return $(ogRaiseError $OG_ERR_NOTFOUND " $3 $4"; echo $?) #IMGTYPE=$(ogGetImageType "$1" "$2") IMGTYPE=img -IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") -[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? +IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") +[ -r "$IMGFILE" ] || return $(ogRaiseError $OG_ERR_NOTFOUND " $3 $4"; echo $?) +# comprobamos consistencia de la imagen +ogGetImageInfo $IMGFILE >/dev/null || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?) + # Error si la imagen no cabe en la particion. -IMGSIZE=$(ogGetImageSize "$1" "$2") -PARTSIZE=$(ogGetPartitionSize $3 $4) +IMGSIZE=$(ogGetImageSize "$1" "$2") || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?) +#TODO: +#Si la particion no esta formateado o tiene problemas formateamos +ogMount $3 $4 || ogFormat $3 $4 +PARTSIZE=$(parted `ogDiskToDev $3 $4` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB) if [ $IMGSIZE -gt $PARTSIZE ]; then - ogRaiseError $OG_ERR_PARTITION "$IMGSIZE > $PARTSIZE" + ogRaiseError $OG_ERR_IMGSIZEPARTITION " $PARTSIZE < $IMGSIZE" return $? fi - # Comprobar el bloqueo de la imagen y de la partición. if ogIsImageLocked "$IMGFILE"; then ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $1, $2.$IMGTYPE" @@ -504,8 +520,8 @@ if ogIsLocked $3 $4; then return $? fi # Desmontar y bloquear partición. -ogUnmount $3 $4 2>/dev/null || return $? -ogLock $3 $4 || return $? +ogUnmount $3 $4 2>/dev/null || return $(ogRaiseError $OG_ERR_PARTITION " $3 $4"; echo $?) +ogLock $3 $4 || return $(ogRaiseError $OG_ERR_PARTITION " $3 $4"; echo $?) trap "ogUnlock $3 $4" 1 2 3 6 9 # Restaurar según el tipo de imagen. @@ -677,7 +693,7 @@ then then TOOLS=PARTCLONE FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}') - echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1048576 || SIZEFACTOR=1024 + echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1000000 || SIZEFACTOR=1024 SIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{gsub(/\: /,"\n"); printf "%d\n", $11*FACTOR;}') IMGDETECT="TRUE" fi @@ -751,8 +767,8 @@ local IMGFILE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME testing path_dir str_image int_ndisk int_npart" \ - "$FUNCNAME 1 1 REPO /aula1/winxp ==> 5642158" + ogHelp "$FUNCNAME" "$FUNCNAME REPO|CACHE /str_image" \ + "$FUNCNAME REPO /aula1/winxp ==> 5642158" return fi # Error si no se reciben menos de 2 parámetros. |