summaryrefslogtreecommitdiffstats
path: root/client/engine/Image.lib
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2012-09-14 10:52:58 +0000
committerramon <ramongomez@us.es>2012-09-14 10:52:58 +0000
commitbbe1bcfc86a4025b54d71501d381e20472eeebc1 (patch)
treed162e1224522563eed768901c2007fc12f1c3d5e /client/engine/Image.lib
parent9a09967aaf5071183c1b6307328d0de6de00024d (diff)
#142 #397: Cambios en librería {{{Image}}}:
* función {{{ogCreateImage}}} genera el comando a ejecutar, crea bloqueos y ejecuta dicho comando; * función {{{ogCreateImageSyntax}}} integra el código de {{{ogPartcloneSyntax}}} para evitar efectos colaterales; * eliminada función {{{ogPartcloneSyntax}}}. git-svn-id: https://opengnsys.es/svn/branches/version1.0@3281 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/engine/Image.lib')
-rwxr-xr-xclient/engine/Image.lib161
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