diff options
Diffstat (limited to 'client/engine/Image.lib')
-rwxr-xr-x | client/engine/Image.lib | 161 |
1 files changed, 68 insertions, 93 deletions
diff --git a/client/engine/Image.lib b/client/engine/Image.lib index 6c53d5da..84137727 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -10,117 +10,89 @@ -function ogPartcloneSyntax () -{ -#TODO: comprobar como unico parametro particion /dev/sda1 -#COMPAR="partclone.$FS --clone --force --source $PART" -COMPAR=" -d0 -F -c -s " -TYPE="$(ogGetFsType `ogDevToDisk $1`)" -case "$TYPE" in - EXT[234]) - echo "partclone.extfs $COMPAR $1" - ;; - REISERFS|XFS|JFS) - echo "partclone.dd $COMPAR $1" - ;; - NTFS|HNTFS) - echo "partclone.ntfs $COMPAR $1" - ;; - FAT16|FAT32|HFAT16|HFAT32) - echo "partclone.fat $COMPAR $1" - ;; - HFS|HFS+) - echo "partclone.hfsp $COMPAR $1" - ;; - *) ogRaiseError $OG_ERR_PARTITION "$1 $TYPE" - return $? ;; -esac -} - #/** -# ogCreateImageSyntax partition filename [tools] [levelcompresor] +# ogCreateImageSyntax path_device path_imagefile [str_tool] [str_compressionlevel] #@brief Genera una cadena de texto con la instrucción para crear un fichero imagen -#@param 1 partition identificador linux del dispositivo particion. -#@param 2 filename path absoluto del fichero imagen -#@param 3 [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone] -#@param 4 [opcional] str_levelcompresor nivel de compresion. [0 -none-, 1-lzop-, 2-gzip] -#@return cadena con el comando que se debe ejecutar. -#@exception OG_ERR_FORMAT formato incorrecto. -#@warning En pruebas iniciales +#@param path_device dispositivo Linux del sistema de archivos +#@param path_imagefile path absoluto del fichero imagen +#@param [opcional] str_tool herrmaienta de clonacion [partimage, partclone, ntfsclone] +#@param [opcional] str_compressionlevel nivel de compresion. [0 -none-, 1-lzop-, 2-gzip] +#@return str_command - cadena con el comando que se debe ejecutar. +#@warning Salida nula si se producen errores. #@TODO introducir las herramientas fsarchiver, dd -#@TODO introducir el nivel de compresion gzip #@version 1.0 - Primeras pruebas #@author Antonio J. Doblas Viso. Universidad de Málaga #@date 2010/02/08 +#@version 1.0.5 - Incrustar códico de antigua función ogPartcloneSyntax +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2012/09/14 #*/ ## - function ogCreateImageSyntax() { -local FS TOOL LEVEL PART IMGFILE BUFFER +local FS TOOL LEVEL PART IMGFILE BUFFER PARAM1 PARAM2 PARAM3 # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME partition filename [tool] [levelcompresor]" \ - "$FUNCNAME /dev/sda1 /opt/opengnsys/images/prueba.img partclone lzop" + ogHelp "$FUNCNAME" "$FUNCNAME path_device path_imagefile [str_tool] [str_compressionlevel]" \ + "$FUNCNAME /dev/sda1 /opt/opengnsys/images/prueba.img partclone lzop" \ + "$FUNCNAME /dev/sda1 /opt/opengnsys/images/prueba.img" return fi # Error si no se reciben al menos los 2 parámetros para obtener el valor default. [ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? -PART=`echo $1` -IMGFILE=`echo $2` - +PART="$1" +IMGFILE="$2" case "$#" in - "2") - # Sintaxis por defecto OG PART IMGFILE - #echo "partimage -M -f3 -o -d -V0 -B gui=no -c -z1 save $PART $IMGFILE" - # Se comenta la instruccion que debería ir aqui - ogCreateImageSyntax $1 $2 partclone gzip - ;; - "4") - # Sintaxis condicionada. - # comprobamos parametro herramienta compresion. - TOOL=$(echo $3 | tr [A-Z] [a-z]) - #ogCheckProgram $TOOL - #comprobar parámetro compresor. - LEVEL=$(echo $4 | tr [A-Z] [a-z]) - #ogCheckProgram $LEVEL - - # herramienta - case "$TOOL" in - "ntfsclone") - PARAM1="ntfsclone --force --save-image -O - $PART" - ;; - "partimage"|DEFAULT) - PARAM1="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $PART stdout" - ;; - "partclone") - PARAM1=`ogPartcloneSyntax $PART` || ogRaiseError $OG_ERR_FORMAT || return $? - ;; - esac - # mbuffer - which mbuffer > /dev/null && PARAM2="| mbuffer -q -m 40M " || PARAM2=" " + 2) # Sintaxis por defecto OG PART IMGFILE + TOOL="partclone" + LEVEL="gzip" + ;; + 4) # Sintaxis condicionada. + TOOL="${3,,}" + LEVEL="${4,,}" + ;; +esac - # nivel de compresion - case "$LEVEL" in - "0"|"none") - PARAM3=" > " - ;; - "1"|"lzop") - PARAM3=" | lzop > " - ;; - "2"|"gzip") - PARAM3=" | gzip -c > " - ;; - "3"|"bzip") - PARAM3=" | bzip -c > " - ;; - esac - #sintaxis final. - echo "$PARAM1 $PARAM2 $PARAM3 $IMGFILE" - ;; +case "$TOOL" in + ntfsclone) + PARAM1="ntfsclone --force --save-image -O - $PART" + ;; + partimage|default) + PARAM1="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $PART stdout" + ;; + partclone) + FS="$(ogGetFsType $(ogDevToDisk $PART 2>/dev/null))" + umount $PART 2>/dev/null + case "$FS" in + EXT[234]) PARAM1="partclone.extfs" ;; + BTRFS) PARAM1="partclone.btrfs" ;; + REISERFS) PARAM1="partclone.reiserfs" ;; + REISER4) PARAM1="partclone.reiser4" ;; + JFS) PARAM1="partclone.jfs" ;; + XFS) PARAM1="partclone.xfs" ;; + NTFS) PARAM1="partclone.ntfs" ;; + FAT16|FAT32) PARAM1="partclone.fat" ;; + HFS|HFSPLUS) PARAM1="partclone.hfsp" ;; + *) PARAM1="partclone.dd" ;; + esac + PARAM1="$PARAM1 -d0 -F -c -s $PART" + ;; +esac +# mbuffer +which mbuffer > /dev/null && PARAM2="| mbuffer -q -m 40M " || PARAM2=" " + +# Nivel de compresion. +case "$LEVEL" in + 0|none) PARAM3=" > " ;; + 1|lzop) PARAM3=" | lzop > " ;; + 2|gzip) PARAM3=" | gzip -c > " ;; + 3|bzip) PARAM3=" | bzip -c > " ;; esac + +# Sintaxis final. +[ -n "$PARAM1" ] && echo "$PARAM1 $PARAM2 $PARAM3 $IMGFILE" } @@ -242,13 +214,16 @@ fi #@warning En pruebas iniciales #@todo Comprobaciones, control de errores, definir parámetros, etc. #@version 0.1 - Integracion para Opengnsys - HIDRA:CrearImagen{EXT3, NTFS}.sh; EAC: CreateImageFromPartition () en Deploy.lib -#@author Ramon Gomez, ETSII Universidad de Sevilla +#@author Ramon Gomez, ETSII Universidad de Sevilla #@Date 2008/05/13 #@author Antonio J. Doblas Viso. Universidad de Malaga #@date 2008/10/27 #@version 0.9 - Versión en pruebas para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/10/07 +#@version 1.0 - Llama a función ogCreateImageSyntax para generar la llamada al comando. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010/02/08 #*/ ## function ogCreateImage () { @@ -279,6 +254,8 @@ if ogIsImageLocked "$IMGFILE"; then ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $3, $4" return $? fi +# Generar la instruccion a ejecutar antes de aplicar los bloqueos. +PROGRAM=$(ogCreateImageSyntax $PART $IMGFILE $5 $6) # Desmontar partición, bloquear partición e imagen. ogUnmount $1 $2 2>/dev/null ogLock $1 $2 || return $? @@ -286,8 +263,6 @@ ogLockImage "$3" "$4.$IMGTYPE" || return $? # Crear Imagen. trap "ogUnlock $1 $2; ogUnlockImage "$3" "$4.$IMGTYPE"; rm -f $IMGFILE" 1 2 3 6 9 -#Solicitamos la generación de la instruccion a ejecutar -PROGRAM=`ogCreateImageSyntax $PART $IMGFILE $5 $6` echo $PROGRAM eval $PROGRAM |