summaryrefslogtreecommitdiffstats
path: root/client/engine/Image.lib
diff options
context:
space:
mode:
Diffstat (limited to 'client/engine/Image.lib')
-rwxr-xr-xclient/engine/Image.lib54
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.