diff options
-rwxr-xr-x | admin/Sources/Services/ogAdmRepoAux | 13 | ||||
-rwxr-xr-x | client/engine/Rsync.lib | 6 | ||||
-rw-r--r-- | client/shared/etc/lang.ca_ES.conf | 2 | ||||
-rw-r--r-- | client/shared/etc/lang.en_GB.conf | 2 | ||||
-rw-r--r-- | client/shared/etc/lang.es_ES.conf | 2 | ||||
-rwxr-xr-x | server/bin/createfileimage | 55 | ||||
-rwxr-xr-x | server/bin/mountimage | 55 | ||||
-rwxr-xr-x | server/bin/reduceimage | 50 | ||||
-rwxr-xr-x | server/bin/unmountimage | 45 |
9 files changed, 218 insertions, 12 deletions
diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux index b26773a6..e1d40406 100755 --- a/admin/Sources/Services/ogAdmRepoAux +++ b/admin/Sources/Services/ogAdmRepoAux @@ -67,10 +67,9 @@ case "$PARM1" in MOUNTDIR="$REPODIR/mount/${PARM2}" [ "$IMGEXT" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGEXT" + mkdir -p "$MOUNTDIR" - # Aumentamos El tamaño por el error de rsycn -> Probar con menos tamaño SIZEREQUIRED="$PARM4" - #let SIZEREQUIRED=$PARM4*4/3 if [ -f "$IMGFILE" ]; then echolog "Redimensionamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED" @@ -117,15 +116,14 @@ case "$PARM1" in fi # Montamos la imagen. - mkdir -p "$MOUNTDIR" echolog "mount -o compress=lzo $IMGFILE $MOUNTDIR" mount -o compress=lzo "$IMGFILE" "$MOUNTDIR" [ "$?" == "0" -o "$?" == "32" ] || (echolog "Error al crear/redimensionar la imagen"; exit 1) touch "$MOUNTDIR/ogimg.info" TIME2=$[SECONDS-TIME] echolog "Fin creación/redimension de la imagen: $[TIME2/60]m $[TIME2%60]s" - echo losetup -d $LOOPDEVICE - losetup -d $LOOPDEVICE + # Si existe dispositivo loop lo borramos. + [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE # TODO: comprobar que no se quede el losetup bloqueado. ;; @@ -151,8 +149,9 @@ case "$PARM1" in IMGEXT="$PARM3" MOUNTDIR="$REPODIR/mount/$PARM2" [ "$IMGEXT" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGEXT" - echolog "Desmontamos la imagen $IMGFILE " + echolog "Desmontamos la imagen $PARM2 $PARM3 " umount $MOUNTDIR + rmdir $MOUNTDIR ;; REDUCE_IMAGE) @@ -162,7 +161,7 @@ case "$PARM1" in #3 Extensión [ img |diff ] IMGEXT="$PARM3" IMGFILE="$REPODIR$PARM2.$IMGEXT" - [ ! -f $IMGFILE ] && echolog "Imagen no existe" && exit 1 + [ ! -f $IMGFILE ] && echolog "Imagen $IMGFILE no existe" && exit 1 MOUNTDIR="$REPODIR""mount/${PARM2}" [ "$IMGEXT" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGEXT" diff --git a/client/engine/Rsync.lib b/client/engine/Rsync.lib index 425f20c6..aa4e2d95 100755 --- a/client/engine/Rsync.lib +++ b/client/engine/Rsync.lib @@ -82,7 +82,8 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then touch "$DIRMOUNT/ogimg.info" #fi - losetup -d $LOOPDEVICE 2>&1 &>/dev/null + # Si existe dispositivo de loop lo borro. + [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE 2>&1 &>/dev/null else [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp) @@ -483,7 +484,7 @@ if [ "$*" == "help" ]; then fi if [ $# -lt 2 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]" + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]" return $? fi @@ -492,6 +493,7 @@ fi if [ "$1" == "CACHE" -o "$1" == "cache" ]; then DIRMOUNT=/tmp/$(ogGetMountDir "$2" $IMGEXT) umount "$DIRMOUNT" + rmdir "$DIRMOUNT" else [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp) echo " hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGEXT" |tee -a $OGLOGFILE diff --git a/client/shared/etc/lang.ca_ES.conf b/client/shared/etc/lang.ca_ES.conf index 4c5ae882..47f23037 100644 --- a/client/shared/etc/lang.ca_ES.conf +++ b/client/shared/etc/lang.ca_ES.conf @@ -88,7 +88,7 @@ MSG_HELP_ogCheckFs="Comprueba la consistencia de un sistema de archivos." MSG_HELP_ogCompareChecksumFiles="Compara si coinciden las sumas de comprobación almacenadas de 2 ficheros." MSG_HELP_ogCopyFile="Copia un fichero a otro almacenamiento." MSG_HELP_ogCreateCache="Reserva espacio para la partición de caché al final del disco 1." -MSG_HELP_ogCreateFileImage="Crea el archivo de la imagen sincronizada" +MSG_HELP_ogCreateFileImage="Crea/Redimensiona el archivo de la imagen sincronizada" MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instalado localmente." MSG_HELP_ogCreateInfoImage="Crea informacion del contenido de la imagen" MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)." diff --git a/client/shared/etc/lang.en_GB.conf b/client/shared/etc/lang.en_GB.conf index 25270e45..201f941f 100644 --- a/client/shared/etc/lang.en_GB.conf +++ b/client/shared/etc/lang.en_GB.conf @@ -86,7 +86,7 @@ MSG_HELP_ogCheckFs="Check a filesystem." MSG_HELP_ogCompareChecksumFiles="Compare if the checksums match." MSG_HELP_ogCopyFile="Copy a file to other storage." MSG_HELP_ogCreateCache="Reserve space for the cache partition at the end of disc 1." -MSG_HELP_ogCreateFileImage="Crea el archivo de la imagen sincronizada" +MSG_HELP_ogCreateFileImage="Crea/Redimensiona el archivo de la imagen sincronizada" MSG_HELP_ogCreateImage="Create an exact image from a local filesystem." MSG_HELP_ogCreateInfoImage="Crea informacion del contenido de la imagen" MSG_HELP_ogCreateMbrImage="Create an MBR image." diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf index 74098143..63ae63cd 100644 --- a/client/shared/etc/lang.es_ES.conf +++ b/client/shared/etc/lang.es_ES.conf @@ -87,7 +87,7 @@ MSG_HELP_ogCheckFs="Comprueba la consistencia de un sistema de archivos." MSG_HELP_ogCompareChecksumFiles="Compara si coinciden las sumas de comprobación almacenadas de 2 ficheros." MSG_HELP_ogCopyFile="Copia un fichero a otro almacenamiento." MSG_HELP_ogCreateCache="Reserva espacio para la partición de caché al final del disco 1." -MSG_HELP_ogCreateFileImage="Crea el archivo de la imagen sincronizada" +MSG_HELP_ogCreateFileImage="Crea/redimensiona el archivo de la imagen sincronizada" MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instalado localmente." MSG_HELP_ogCreateInfoImage="Crea informacion del contenido de la imagen" MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)." diff --git a/server/bin/createfileimage b/server/bin/createfileimage new file mode 100755 index 00000000..181a99da --- /dev/null +++ b/server/bin/createfileimage @@ -0,0 +1,55 @@ +#!/bin/bash +#/** +# mountimage +#@brief Monta imagen sincronizable en el repositorio con permisos de escritura +#@param 1 imagen +#@param 2 extension [ img|diff ] opcional, por defecto img +#@return +#@exception OG_ERR_FORMAT # 1 formato incorrecto. +#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado +#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica) +#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada +#@version 1.0 - Montar imagen sincronizable +#@author Irina Gomez +#@date 2013-05-15 +#*/ ## +BASEDIR=/opt/opengnsys +REPODIR="$BASEDIR/images" +REPOLOG=$BASEDIR/log/ogAdmRepo.log +source $BASEDIR/client/etc/lang.$LANG.conf + +PROG="$(basename $0)" +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + echo -e " $PROG: $MSG_HELP_ogCreateFileImage \n" \ + "$MSG_FORMAT: $PROG image [ img|diff ] size_kb \n" \ + "base -> $PROG Windows7 img 3900000 \n" \ + "diff -> $PROG Ubuntu12 diff 450000" + exit 0 +fi + +[ $# -lt 3 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ] size_Kb " && exit 1 + +if [ "$USER" != "root" ]; then + echo "$PROG: Error: solo ejecutable por root" >&2 + exit 1 +fi + +IMGEXT="$2" + +# Si existe imagen, Comprobamos que es sincronizable +IMGFILE="$REPODIR/$1.$IMGEXT" +if [ -f $IMGFILE ]; then + if ! file $IMGFILE | grep " BTRFS Filesystem" >/dev/null ; then + echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2" + exit 71 + fi +fi + +# El tamaño minimo de la imagen es 300000 para podre formatear en fs btrfs. +SIZEREQUIRED=$3 +[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000 + +echo CREATE_IMAGE "$1" $IMGEXT $SIZEREQUIRED +echo -ne CREATE_IMAGE "$1" $IMGEXT $SIZEREQUIRED| /opt/opengnsys/sbin/ogAdmRepoAux +echo "Los resultado se registran en $REPOLOG. " diff --git a/server/bin/mountimage b/server/bin/mountimage new file mode 100755 index 00000000..5bcfd788 --- /dev/null +++ b/server/bin/mountimage @@ -0,0 +1,55 @@ +#!/bin/bash +#/** +# mountimage +#@brief Monta imagen sincronizable en el repositorio con permisos de escritura +#@param 1 imagen +#@param 2 extension [ img|diff ] opcional, por defecto img +#@return +#@exception OG_ERR_FORMAT # 1 formato incorrecto. +#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado +#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica) +#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada +#@version 1.0 - Montar imagen sincronizable +#@author Irina Gomez +#@date 2013-05-15 +#*/ ## +BASEDIR=/opt/opengnsys +REPODIR="$BASEDIR/images" +source $BASEDIR/client/etc/lang.$LANG.conf + +PROG="$(basename $0)" +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + echo -e " $PROG: $MSG_HELP_ogMountImage \n" \ + "$MSG_FORMAT: $PROG nombre_image [ img|diff ] \n" \ + "base -> $PROG Windows7 \n" \ + "diff -> $PROG Ubuntu12 diff" + exit 0 +fi + +[ $# -lt 1 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ]" && exit 1 + +if [ "$USER" != "root" ]; then + echo "$PROG: Error: solo ejecutable por root" >&2 + exit 1 +fi + +[ "$2" == "" ] && IMGEXT="img" || IMGEXT="$2" +# Comprobamos que existe imagen +IMGFILE="$REPODIR/$1.$IMGEXT" +[ ! -f $IMGFILE ] && echo "$PROG: Error: $MSG_ERR_NOTFOUND $1 $IMGEXT" && exit 2 + + +# Comprobar que la imagen es sincronizable +if ! file $IMGFILE | grep " BTRFS Filesystem" >/dev/null ; then + echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2" + exit 71 +fi + +MOUNTDIR="$REPODIR/mount/$1" +[ "$IMGEXT" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGEXT" +mkdir -p "$MOUNTDIR" +mount -o compress=lzo "$IMGFILE" "$MOUNTDIR" +[ "$?" == "0" ] || ( echo "$MSG_ERR_DONTMOUNT_IMAGE $1 $2" ; exit 70) +echo "$MOUNTDIR" + diff --git a/server/bin/reduceimage b/server/bin/reduceimage new file mode 100755 index 00000000..69094769 --- /dev/null +++ b/server/bin/reduceimage @@ -0,0 +1,50 @@ +#!/bin/bash +#/** +# mountimage +#@brief Monta imagen sincronizable en el repositorio con permisos de escritura +#@param 1 imagen +#@param 2 extension [ img|diff ] opcional, por defecto img +#@return +#@exception OG_ERR_FORMAT # 1 formato incorrecto. +#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado +#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica) +#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada +#@version 1.0 - Montar imagen sincronizable +#@author Irina Gomez +#@date 2013-05-15 +#*/ ## +BASEDIR=/opt/opengnsys +REPODIR="$BASEDIR/images" +REPOLOG=$BASEDIR/log/ogAdmRepo.log +source $BASEDIR/client/etc/lang.$LANG.conf + +PROG="$(basename $0)" +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + echo -e " $PROG: $MSG_HELP_ogReduceImage \n" \ + "$MSG_FORMAT: $PROG nombre_image [ img|diff ] \n" \ + "base -> $PROG Windows7 \n" \ + "diff -> $PROG Ubuntu12 diff" + exit 0 +fi + +[ $# -lt 1 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ]" && exit 1 + +if [ "$USER" != "root" ]; then + echo "$PROG: Error: solo ejecutable por root" >&2 + exit 1 +fi + +[ "$2" == "" ] && IMGEXT="img" || IMGEXT="$2" +# Comprobamos que existe imagen +IMGFILE="$REPODIR/$1.$IMGEXT" +[ ! -f $IMGFILE ] && echo "$PROG: Error: $MSG_ERR_NOTFOUND $1 $IMGEXT" && exit 2 + + +# Comprobar que la imagen es sincronizable +if ! file $IMGFILE | grep " BTRFS Filesystem" >/dev/null ; then + echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2" + exit 71 +fi +echo -ne REDUCE_IMAGE "$1" $IMGEXT | /opt/opengnsys/sbin/ogAdmRepoAux +echo "Los resultado se registran en $REPOLOG. " diff --git a/server/bin/unmountimage b/server/bin/unmountimage new file mode 100755 index 00000000..ad5eeee6 --- /dev/null +++ b/server/bin/unmountimage @@ -0,0 +1,45 @@ +#!/bin/bash +#/** +# mountimage +#@brief Monta imagen sincronizable en el repositorio con permisos de escritura +#@param 1 imagen +#@param 2 extension [ img|diff ] opcional, por defecto img +#@return +#@exception OG_ERR_FORMAT # 1 formato incorrecto. +#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado +#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica) +#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada +#@version 1.0 - Montar imagen sincronizable +#@author Irina Gomez +#@date 2013-05-15 +#*/ ## +BASEDIR=/opt/opengnsys +REPODIR="$BASEDIR/images" +REPOLOG=$BASEDIR/log/ogAdmRepo.log +source $BASEDIR/client/etc/lang.$LANG.conf + +PROG="$(basename $0)" +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + echo -e " $PROG: $MSG_HELP_ogUnmountImage \n" \ + "$MSG_FORMAT: $PROG nombre_image [ img|diff ] \n" \ + "base -> $PROG Windows7 \n" \ + "diff -> $PROG Ubuntu12 diff" + exit 0 +fi + +[ $# -lt 1 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ]" && exit 1 + +if [ "$USER" != "root" ]; then + echo "$PROG: Error: solo ejecutable por root" >&2 + exit 1 +fi + +[ "$2" == "" ] && IMGEXT="img" || IMGEXT="$2" +# Comprobamos que imagen la imagen esta montada +MOUNTDIR="$REPODIR/mount/$1" +[ "$IMGEXT" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGEXT" +[ ! -r $MOUNTDIR/ogimg.info ] && echo "La imagen REPO $1 $2 no esta montada" && exit 0 + +echo -ne UMOUNT_IMAGE "$1" $IMGEXT | /opt/opengnsys/sbin/ogAdmRepoAux +echo "Los resultado se registran en $REPOLOG. " |