diff options
Diffstat (limited to 'client/shared/scripts/ImagenesSincronizadas.lib')
-rwxr-xr-x | client/shared/scripts/ImagenesSincronizadas.lib | 368 |
1 files changed, 368 insertions, 0 deletions
diff --git a/client/shared/scripts/ImagenesSincronizadas.lib b/client/shared/scripts/ImagenesSincronizadas.lib new file mode 100755 index 00000000..d28cb9b7 --- /dev/null +++ b/client/shared/scripts/ImagenesSincronizadas.lib @@ -0,0 +1,368 @@ +#!/bin/bash +#___________________________________________________________________ +# +#@file ImagenesSincronizadas.lib +#@brief Librería o clase ImagenesSincronizadas +#@class ImagenesSincronizadas +#@brief Funciones para la creación y restauración de imagenes por sincronización. +#@version 1.0.4 +#@warning License: GNU GPLv3+ +#___________________________________________________________________ + + #Load engine configurator from engine.cfg file. + #Carga el configurador del engine desde el fichero engine.cfg + [ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg + + # Clear temporary file used as log track by httpdlog + # Limpia los ficheros temporales usados como log de seguimieincludento para httpdlog + echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp + + # Registro de inicio de ejecución + #echo "[START Interface ] Run this command: $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE + echo "$MSG_INTERFACE_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE + + # Solo ejecutable por OpenGnSys Client. + PATH=$PATH:$(dirname $0) + PROG=$(basename $0) + + #___________________________________________________________________ + # + # Variables globales + #___________________________________________________________________ + + TIPOPARTICION="$(ogGetPartitionId $DISCO $NPART)"; # Tipo de particion + if [ -z $TIPOPARTICION ]; then + echo "No existe la partición $NPART, debe crearla" | tee -a $OGLOGSESSION $OGLOGFILE + exit $OG_ERR_PARTITION + fi + + PARTICION=$(ogMount $DISCO $NPART); # Monta partición + if [ -z $PARTICION ]; then + echo "No existe la unidad /dev/sda$NPART o no está formateada" | tee -a $OGLOGSESSION $OGLOGFILE + exit $OG_ERR_PARTITION + fi + + SISTEMAFICHERO="$(ogGetFsType $DISCO $NPART)" # Sistema de ficheros + if [ -z $SISTEMAFICHERO ]; then + echo "No se ha definido un sistema de fichero en la unidad /dev/sda$NPART. Debe formatearla previamente." | tee -a $OGLOGSESSION $OGLOGFILE + exit $OG_ERR_PARTITION + fi + + REPOSITORIO="opengnsys@$IPREPOSITORIO::ogimages" # Ruta de las imagenes en el repositorio + + FILE_ACL="ogwinimage.acl" + + + # Envío de archivo completo + OP_WHOLE="--whole" + if [ $WHLFILE -eq 0 ]; then + OP_WHOLE="" + fi + + # Borrar archivos en destino + OP_DELETE="--delete" + if [ $NOBORRACHIVOS -eq 1 ]; then + OP_DELETE="" + fi + if [ $RMVFILE -eq 0 ]; then + OP_DELETE="" + fi + + # Opción de compresión + OP_COMPRESS="-z" + if [ $CMPFILE -eq 0 ]; then + OP_COMPRESS="" + fi + + #___________________________________________________________________ + # + # Fichero con la clave remota del rsync para el parámetro + # "--password-file" para que no se pida ésta en el proceso. + #___________________________________________________________________ + # + FILE_PASSWD="--password-file=/scripts/passrsync" + + + #___________________________________________________________________ + # + # Función: montaCache + # + # Descripción: + # + # Monta la cache y devuelve la ruta hacía ella + # + # Parámetros: + # + # Ninguno + #___________________________________________________________________ + # + function montaCache() + { + # Error si no existe caché + if ! $(ogFindCache >/dev/null); then + echo "" + return + fi + cache=$(ogMountCache) + echo $cache + } + #___________________________________________________________________ + # + # Función: editarLista + # + # Descripción: + # + # Edita lista de archivos a transferir para depurar lineas + # + # Parámetros: + # + # $1 Lista de entrada + # $2 Lista de salida + #___________________________________________________________________ + # + function editarLista() + { + # Edición: + # a) Quitarle lineas que contengan './' + # b) La primera linea (reporter del rsync) + # c) Las dos últimas lineas del final (reporter del rsync) + + echo "Editando lista de archivos Entrada:$1 Salida:$2" | tee -a $OGLOGSESSION $OGLOGFILE + cat $1 | sed '/\.\//d' | sed '1d' | sed -n -e :a -e '1,2!{P;N;D;};N;ba'>$2 + + # Otra forma + #sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGINFO + #sed -i '/^\.\//d' $IMGINFO + + } + + #___________________________________________________________________ + # + # Función: crearImagen + # + # Descripción: + # + # Sincroniza archivos entre origen y destino. Al final del + # proceso el contenido de destino será igual al de origen. + # La creación de imagen siempre tiene lugar entre una partición + # y un repositorio como origen y destino respectivamente. + # + # Parámetros: + # + # $1: Origen + # $2: Destino + # $3: Sistema de ficheros de la partición + # $4: Indica si la sincronización es local o remota + # 1: El origen o el destino es remoto + # 2: Tanto el origen como el destino son locales + # $5: Vale + # 1=Para crear la lista de archivos a transferir + # 2= Cuando se quiere sincronizar usando la lista + # $6: Path a la lista de archivos + #___________________________________________________________________ + # + function crearImagen() + { + case "$3" in + NTFS) + OP_ARCHIVO="-aH" + rm "$1pagefile.sys" + #OP_EXCLUDE="--exclude 'pagefile.sys'" + ;; + EXT2 | EXT3 | EXT4 ) + OP_ARCHIVO="-alH" + OP_EXCLUDE="--exclude 'tmp' --exclude 'proc' --exclude 'sys'" + ;; + esac + + + case "$4" in + 1) + OP_PASSWD=$FILE_PASSWD + ;; + 2) + OP_PASSWD="" + ;; + esac + + FREG=$OGLOGCOMMAND # Por defecto se redirecciona al archivo de log de comandos + case "$5" in + 1) + OP_ARCHIVO=$OP_ARCHIVO"nv" # Simulación para crear lista + FREG=$6 + ;; + 2) + OP_FILELIST="--files-from=$6" + OP_ARCHIVO="$OP_ARCHIVO $OP_FILELIST" + ;; + esac + + echo "rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2 " | tee -a $OGLOGSESSION $OGLOGFILE + rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2>$FREG; + } + + #___________________________________________________________________ + # + # Función: restaurarImagen + # + # Descripción: + # + # Sincroniza archivos entre origen y destino. Al final del + # proceso el contenido de destino será igual al de origen. + # La restauración de imagen siempre tiene lugar entre la caché + # o un repositorio y una partición o carpeta como origen y destino + # respectivamente. + # + # Parámetros: + # + # $1: Origen + # $2: Destino + # $3: Sistema de ficheros de la partición + # $4: Indica si la sincronización es local o remota + # 1: El origen o el destino es remoto + # 2: Tanto el origen como el destino son locales + #___________________________________________________________________ + # + function restaurarImagen() + { + case "$3" in + NTFS) + OP_ARCHIVO="-aH" + ;; + EXT2 | EXT3 | EXT4) + OP_ARCHIVO="-alH" + ;; + esac + + case "$4" in + 1) + OP_PASSWD=$FILE_PASSWD + ;; + 2) + OP_PASSWD="" + ;; + esac + + echo "rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_PASSWD $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE + rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_PASSWD $1 $2>$OGLOGCOMMAND; + } + + #___________________________________________________________________ + # + # Función: crearListaAcl + # + # Descripción: + # + # Crea la lista de control de archivos para el sistema operativo + # que ocupa la partición que se quiere clonar + # + # Parámetros: + # + # $1: Origen + # $2: Destino + # $3: Sistema de ficheros de la partición + # $4: disco + # $5: partición + #___________________________________________________________________ + # + function crearListaAcl() + { + case "$3" in + NTFS) + echo "Creando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE + echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE + ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE + echo "Ejecutando comando ntfs-3g.secaudit -b /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE + ntfs-3g.secaudit -b /dev/sda$5 / > /tmp/$FILE_ACL + echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE + ogMount $4 $5 + echo "Copiando archivo de listas de control (ACL) desde /tmp/$FILE_ACL a $1." | tee -a $OGLOGSESSION $OGLOGFILE + cp /tmp/$FILE_ACL $1. + ;; + esac + } + #___________________________________________________________________ + # + # Función: restauraListaAcl + # + # Descripción: + # + # Restaura la lista de control de archivos para el sistema operativo + # que ocupa la partición que se quiere restaurar + # + # Parámetros: + # + # $1: Origen + # $2: Destino + # $3: Sistema de ficheros de la partición + # $4: disco + # $5: partición + #___________________________________________________________________ + # + function restauraListaAcl() + { + case "$3" in + NTFS) + echo "Restaurando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE + echo "Copiando archivo de listas de control (ACL) desde $2$FILE_ACL a /tmp/." | tee -a $OGLOGSESSION $OGLOGFILE + cp $2$FILE_ACL /tmp/. + echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE + ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE + echo "Ejecutando comando ntfs-3g.secaudit -se /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE + ntfs-3g.secaudit -se /dev/sda$5 /tmp/$FILE_ACL + echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE + ogMount $4 $5 + echo "Borrando archivo de listas de control (ACL) de $2$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE + rm $2$FILE_ACL + ;; + esac + } + #___________________________________________________________________ + # + # Función: eliminaListaAcl + # + # Descripción: + # + # Elimina la lista de control de archivos creada temporalmente + # para el proceso de creación e imagen + # + # Parámetros: + # + # $1: Origen + # $2: Sistema de ficheros de la partición + #___________________________________________________________________ + # + function eliminaListaAcl() + { + case "$2" in + NTFS) + echo "Borrando archivo de listas de control (ACL) de $1$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE + rm $1$FILE_ACL + ;; + esac + } + #___________________________________________________________________ + # + # Función: comprimeImagen + # + # Descripción: + # + # Comprimer la carpeta donde está se ha almacenado la imagen + # recientemente creada + # + # Parámetros: + # + # $1: Nombre de la imagen (Es el mismo que la carpeta que la alberga) + #___________________________________________________________________ + # + function comprimeImagen() + { + TIME1=$SECONDS + RUTAIMG="/opt/opengnsys/images" + CARPETAIMAGEN=$RUTAIMG/$1 + echo "Comprimiendo la imagen $1. Ruta de la imagen: $RUTAIMG" | tee -a $OGLOGSESSION $OGLOGFILE + echo "find $CARPETAIMAGEN | cpio -H newc -oa | gzip -9c en $CARPETAIMAGEN.IMG" | tee -a $OGLOGSESSION $OGLOGFILE + find $CARPETAIMAGEN | cpio -H newc -oa | gzip -9c > $CARPETAIMAGEN.IMG + TIME=$[SECONDS-TIME1] + echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE + } |