refs #1591 remove "imagenes sincronizadas"
parent
f1e6810d5a
commit
fe61288f83
|
@ -1,900 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
#/**
|
||||
# rsync
|
||||
#@brief Función para utilizar la versión de rsync situada en $OPENGNSYS/bin en vez de la del sistema operativo.
|
||||
#@param los mismos que el comando rsync del sistema operativo.
|
||||
#@warning Solo en clientes ogLive de 32 bits.
|
||||
#@return instrucción para ser ejecutada.
|
||||
#*/
|
||||
function rsync ()
|
||||
{
|
||||
local RSYNC
|
||||
[ "$(arch)" == "i686" -a -x $OPENGNSYS/bin/rsync ] && RSYNC=$OPENGNSYS/bin/rsync
|
||||
RSYNC=${RSYNC:-$(which rsync)}
|
||||
|
||||
$RSYNC "$@"
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogCreateFileImage [ REPO | CACHE ] image_name extension size
|
||||
#@brief Crear el archivo
|
||||
#@param 1 Repositorio [ REPO | CACHE ]
|
||||
#@param 2 Nombre Imagen
|
||||
#@param 3 Tipo imagen [ img |diff ]
|
||||
#@param 4 Tamaño de la imagen
|
||||
#@return instrucción para ser ejecutada.
|
||||
#*/
|
||||
|
||||
function ogCreateFileImage () {
|
||||
local SIZEREQUIRED IMGDIR IMGFILE DIRMOUNT LOOPDEVICE IMGSIZE IMGEXT KERNELVERSION
|
||||
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME [ REPO|CACHE ] image_name extension size(K)" \
|
||||
"$FUNCNAME REPO Ubuntu12 img 300000" \
|
||||
"$FUNCNAME CACHE Windows7 diff 20000000"
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
if [ $# -lt 4 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name extension size(k)"
|
||||
return $?
|
||||
fi
|
||||
|
||||
SIZEREQUIRED=$4
|
||||
[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
|
||||
KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
|
||||
|
||||
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
|
||||
IMGDIR="$(ogGetParentPath "$1" "/$2")"
|
||||
[ "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
|
||||
IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT"
|
||||
## Si no existe, crear subdirectorio de la imagen.
|
||||
if [ $? != 0 ]; then
|
||||
ogEcho log session " $MSG_HELP_ogMakeDir \"$1 $(dirname "$2")."
|
||||
ogMakeDir "$1" "$(dirname "/$2")" || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
|
||||
IMGDIR="$(ogGetParentPath "$1" "/$2")" || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
|
||||
fi
|
||||
DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" "$3")"
|
||||
mkdir -p "$DIRMOUNT"
|
||||
LOOPDEVICE=$(losetup -f)
|
||||
# Si existe el fichero de la imagen se hace copia de seguridad, si no existe se crea.
|
||||
if [ -f "$IMGFILE" ]; then
|
||||
# Si la imagen esta montada la desmonto
|
||||
if [ -r "$DIRMOUNT/ogimg.info" ]; then
|
||||
umount "$DIRMOUNT"
|
||||
[ $? -ne 0 ] && return $(ogRaiseError $OG_ERR_DONTUNMOUNT_IMAGE "$1 $2.$IMGEXT"; echo $?)
|
||||
fi
|
||||
|
||||
if [ "$BACKUP" == "true" -o "$BACKUP" == "TRUE" ]; then
|
||||
# Copia seguridad
|
||||
ogEcho log session " $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"."
|
||||
cp -f "$IMGFILE" "$IMGFILE.ant"
|
||||
mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
|
||||
rm -f "$IMGFILE.sum"
|
||||
fi
|
||||
|
||||
IMGSIZE=$(ls -l --block-size=1024 "$IMGFILE" | awk '{print $5}')
|
||||
if [ $IMGSIZE -lt $SIZEREQUIRED ];then
|
||||
ogEcho log session " $MSG_SYNC_RESIZE"
|
||||
echo " truncate --size=>$SIZEREQUIRED k $IMGFILE"
|
||||
truncate --size=">$SIZEREQUIRED"k "$IMGFILE" &> $OGLOGCOMMAND
|
||||
# FS de la imagen segun el contenido del archivo .img
|
||||
if file "$IMGFILE" |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then
|
||||
losetup $LOOPDEVICE "$IMGFILE"
|
||||
echo " resize2fs -f $LOOPDEVICE"
|
||||
resize2fs -f $LOOPDEVICE &> $OGLOGCOMMAND
|
||||
|
||||
else
|
||||
echo " ogMountImage $1 "$2" $3"
|
||||
ogMountImage $1 "$2" $3
|
||||
echo " btrfs filesystem resize max $DIRMOUNT"
|
||||
btrfs filesystem resize max "$DIRMOUNT" &> $OGLOGCOMMAND
|
||||
fi
|
||||
fi
|
||||
else
|
||||
touch "$IMGFILE"
|
||||
echo " truncate --size=>$SIZEREQUIRED k $IMGFILE"
|
||||
truncate --size=">$SIZEREQUIRED"k "$IMGFILE" &> $OGLOGCOMMAND
|
||||
#Formateamos imagen
|
||||
losetup $LOOPDEVICE $IMGFILE
|
||||
# FS de la imagen segun la configuracion y la version del kernel: < 3.7 ext4, si >= btrfs
|
||||
[ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"}
|
||||
|
||||
if [ "$IMGFS" == "EXT4" ]; then
|
||||
echo " mkfs.ext4 -i 4096 -b 4096 -L "${2##*\/}" $LOOPDEVICE"
|
||||
mkfs.ext4 -i 4096 -b 4096 -L "${2##*\/}" $LOOPDEVICE 2>&1 |tee -a $OGLOGCOMMAND
|
||||
else
|
||||
echo " mkfs.btrfs -L ${2##*\/} $LOOPDEVICE "
|
||||
mkfs.btrfs -L "${2##*\/}" $LOOPDEVICE 2>&1 | tee -a $OGLOGCOMMAND
|
||||
fi
|
||||
fi
|
||||
# Monto la imagen
|
||||
ogMountImage $1 "$2" $3 &>/dev/null
|
||||
[ $? -eq 0 ] || return $( ogRaiseError $OG_ERR_IMAGE "$3 $4"; echo $?)
|
||||
echo "mounted"> $IMGFILE.lock
|
||||
|
||||
# Si existe dispositivo de loop lo borro.
|
||||
[ $LOOPDEVICE ] && losetup -d $LOOPDEVICE 2>&1 &>/dev/null
|
||||
|
||||
else
|
||||
[ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
|
||||
echo " hose $REPOIP 2009 --out sh -c \"echo -ne CREATE_IMAGE $2 $3 $SIZEREQUIRED \""
|
||||
hose $REPOIP 2009 --out sh -c "echo -ne CREATE_IMAGE \"$2\" $3 $SIZEREQUIRED"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogCreateInfoImage
|
||||
#@brief Crear listados con la informacion de la imagen, los situa en /tmp.
|
||||
#@param 1 num_disk
|
||||
#@param 2 num_part
|
||||
#@param 3 Repositorio [ REPO | CACHE ] (opcional en las completas)
|
||||
#@param 4 Nombre Imagen Basica (opcional en las completas)
|
||||
#@param 5 Tipo imagen [ img | diff ]
|
||||
#@version 1.0.6 rsync opcion W (whole) para que sea más rápido
|
||||
#*/
|
||||
function ogCreateInfoImage () {
|
||||
local IMGTYPE IMGDIRAUX DIRMOUNT DESTRSYNC PASSWORD USERRSYNC ORIG FSTYPE PART DIREMPTY IMGLIST IMGINFO IMGACL KERNELVERSION
|
||||
# Ayuda o menos de 5 parametros y la imagen no es basica
|
||||
if [ "$*" == "help" -o $# -lt 5 -a "$3" != "img" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name ] extension " \
|
||||
"base image -> $FUNCNAME 1 2 img" \
|
||||
"diff image -> $FUNCNAME 1 1 CACHE Windows7 diff "
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $# -lt 3 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name] extension "
|
||||
return $?
|
||||
fi
|
||||
|
||||
# Comprobar errores.
|
||||
PART=$(ogDiskToDev "$1" "$2") || return $?
|
||||
ORIG=$(ogMount $1 $2) || return $?
|
||||
|
||||
if [ $3 == "img" ]; then
|
||||
IMGTYPE="img"
|
||||
else
|
||||
# Comprobamos que las extension sea valida
|
||||
ogCheckStringInGroup $5 "img diff" || return $( ogRaiseError $OG_ERR_FORMAT "$MSG_SYNC_EXTENSION"; echo $?)
|
||||
IMGTYPE=$5
|
||||
if [ "$IMGTYPE" == "diff" ]; then
|
||||
# Imagen completa con la que comparo la particion.
|
||||
IMGDIRAUX="$(ogGetMountImageDir "$4" "img")"
|
||||
if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
|
||||
DIRMOUNT="/tmp/$IMGDIRAUX"
|
||||
DESTRSYNC="$DIRMOUNT"
|
||||
else
|
||||
[ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
|
||||
DIRMOUNT="$OGIMG/$IMGDIRAUX"
|
||||
USERRSYNC="opengnsys"
|
||||
PASSWORD="--password-file=/scripts/passrsync"
|
||||
DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$IMGDIRAUX"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
FSTYPE=$(ogGetFsType $1 $2)
|
||||
|
||||
# Creamos la lista del contenido y lo situamos en la particion a copiar.
|
||||
DIREMPTY="/tmp/empty$$"
|
||||
IMGLIST="/tmp/ogimg.list"
|
||||
IMGINFO="/tmp/ogimg.info"
|
||||
IMGACL="/tmp/ogimg.acl"
|
||||
|
||||
# Borramos archivos antiguos.
|
||||
rm -f /tmp/ogimg.* 2>/dev/null
|
||||
rm -f $ORIG/ogimg.* 2>/dev/null
|
||||
|
||||
# En las diferenciales no sabemos el tamaño -> ponemos una constante.
|
||||
SIZEDATA=${SIZEDATA:-"SIZEDATA"}
|
||||
|
||||
# Incluimos información de la imagen. Segun el kernel sera ext4 o btrfs.
|
||||
KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
|
||||
[ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"}
|
||||
echo "#$IMGFS:NO:$FSTYPE:$SIZEDATA" > $IMGINFO
|
||||
|
||||
if [ "$IMGTYPE" == "img" ]; then
|
||||
# Imagen Basica
|
||||
echo " rsync -aHAXWvn --delete $ORIG/ $DIREMPTY >> $IMGINFO"
|
||||
rsync -aHAXWvn --delete $ORIG/ $DIREMPTY>> $IMGINFO
|
||||
sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGINFO
|
||||
sed -i '/^\.\//d' $IMGINFO
|
||||
|
||||
else
|
||||
# Imagen Diferencial
|
||||
echo " rsync -aHAXWvn --delete $ORIG/ $DESTRSYNC a $IMGLIST"
|
||||
rsync -aHAXWvn $PASSWORD --delete "$ORIG/" "$DESTRSYNC" >> $IMGLIST
|
||||
sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGLIST
|
||||
sed -i '/^\.\//d' $IMGLIST
|
||||
|
||||
# Creamos informacion de la imagen
|
||||
grep -e '\->' -e '\=>' $IMGLIST > /tmp/ogimg.ln
|
||||
grep -e ^deleting $IMGLIST | sed s/^deleting\ //g | grep -v ^ogimg > /tmp/ogimg.rm
|
||||
#grep -v -e '\->' -e '\=>' -e ^deleting $IMGLIST >> $IMGINFO
|
||||
grep -v -e '\->' -e '\=>' -e ^deleting -e ^created $IMGLIST >> $IMGINFO
|
||||
|
||||
rm -f $IMGLIST
|
||||
|
||||
# Comprobamos que los ficheros de diferencias no esten vacios o salimos con error.
|
||||
if [ $(grep -v -e "^$" -e "^#" $IMGINFO /tmp/ogimg.ln /tmp/ogimg.rm |wc -l) -eq 0 ]; then
|
||||
ogRaiseError $OG_ERR_NOTDIFFERENT "$1 $2 $3 $4 $5"
|
||||
return $?
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# Guardamos el contenido de las acl (Solo win) Necesario particion desmontada (esta asi)
|
||||
ogUnmount $1 $2
|
||||
if [ $FSTYPE == "NTFS" ]; then
|
||||
echo " ntfs-3g.secaudit -b $PART /"
|
||||
ntfs-3g.secaudit -b $PART / > $IMGACL
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogAclFilter
|
||||
#@brief Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial (falla: no se usa)
|
||||
#@param No.
|
||||
#@return (nada)
|
||||
#*/
|
||||
function ogAclFilter () {
|
||||
local IMGACL IMGINFO FILES ACLTMP
|
||||
|
||||
# Ayuda
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" "$FUNCNAME"
|
||||
return
|
||||
fi
|
||||
|
||||
IMGACL="/tmp/ogimg.acl"
|
||||
IMGINFO="/tmp/ogimg.info"
|
||||
FILES="/tmp/files$$"
|
||||
ACLTMP="/tmp/acl$$.tmp"
|
||||
ACLFILES="/tmp/aclfiles$$"
|
||||
|
||||
# comprobamos que existan los archivos de origen. Si no salimos sin error.
|
||||
[ -f $IMGACL -a -f $IMGINFO ] || return 0
|
||||
|
||||
echo "" > $ACLTMP
|
||||
grep -n -e "File" -e "Directory" $IMGACL > $ACLFILES
|
||||
|
||||
# Al listado de ficheros le quitamos las líneas sobrantes: comentarios y lineas vacias.
|
||||
sed -e s/"^#.*$"//g -e '/^$/d' $IMGINFO > $FILES
|
||||
|
||||
|
||||
# Recorremos el listado y extraemos la acl correspondiente al fichero o directorio.
|
||||
while read LINE; do
|
||||
read END INI <<< "$(grep -A 1 "$LINE" $ACLFILES | awk -F : '!(NR%2){print $1" "p}{p=$1}' )"
|
||||
let NUM=$END-$INI-1
|
||||
# Si algún archivo no se encuentra, el error lo mandamos a /dev/null
|
||||
sed -n -e $INI,+"$NUM"p $IMGACL 2>/dev/null >> $ACLTMP
|
||||
echo "aclfilter: $LINE" >> $OGLOGCOMMAND
|
||||
done < $FILES
|
||||
|
||||
cp $ACLTMP $IMGACL
|
||||
rm -f $FILES $ACLTMP $ACLFILES
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogRestoreInfoImage
|
||||
#@brief Crear o modificar enlaces y restaurar las ACL. La informacion esta ya copiada a la particion.
|
||||
#@param 1 num_disk
|
||||
#@param 2 num_part
|
||||
#*/
|
||||
function ogRestoreInfoImage () {
|
||||
local DEST PART IMGACL IMGLN OPTLN LINEA DESTLN ORIGLN TYPELN
|
||||
|
||||
# Ayuda o menos de 5 parametros y la imagen no es basica
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME num_disk num_part" \
|
||||
"base image -> $FUNCNAME 1 2 " \
|
||||
"diff image -> $FUNCNAME 1 1 "
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part "
|
||||
return $?
|
||||
fi
|
||||
|
||||
# Control de errores.
|
||||
PART=$(ogDiskToDev "$1" "$2") || return $?
|
||||
DEST=$(ogMount $1 $2) || return $?
|
||||
|
||||
IMGACL="ogimg.acl"
|
||||
IMGLN="ogimg.ln"
|
||||
IMGINFO="ogimg.info"
|
||||
|
||||
# Copiamos informacion de la imagen a /tmp (para basicas)
|
||||
[ -r $DEST/$IMGINFO ] && cp $DEST/ogimg.* /tmp
|
||||
|
||||
#Creamos o modificamos los enlaces.
|
||||
# La imagen diferencial tiene ogimg.ln
|
||||
# para la completa lo generamos con los enlaces que contengan /mnt/
|
||||
[ -r "/tmp/$IMGLN" ] || grep -e "->" -e "=>" "/tmp/$IMGINFO"|grep "/mnt/" > "/tmp/$IMGLN"
|
||||
if [ $(wc -l "/tmp/$IMGLN"|cut -f1 -d" ") -ne 0 ]; then
|
||||
while read LINEA
|
||||
do
|
||||
ORIGLN="${LINEA#*> }"
|
||||
# Si origen hace referencia a la particion lo modificamos
|
||||
echo $ORIGLN|grep "/mnt/"> /dev/null && ORIGLN="$DEST/${ORIGLN#/mnt/*/}"
|
||||
# rsync marca - los enlaces simbolicos y = enlaces "duros"
|
||||
LINEA="${LINEA%>*}"
|
||||
TYPELN="${LINEA##* }"
|
||||
DESTLN="${LINEA% *}"
|
||||
|
||||
if [ "$TYPELN" == "-" ]
|
||||
then
|
||||
OPTLN='-s'
|
||||
else
|
||||
OPTLN=''
|
||||
fi
|
||||
cd "$DEST/$(dirname "$DESTLN")"
|
||||
rm -f "$(basename "$DESTLN")"
|
||||
ln $OPTLN "$ORIGLN" "$(basename "$DESTLN")"
|
||||
echo -n "."
|
||||
done < "/tmp/$IMGLN" 2>/dev/null
|
||||
echo ""
|
||||
|
||||
fi
|
||||
cd /
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogRestoreAclImage
|
||||
#@brief Restaurar las ACL. La informacion esta ya copiada al directorio /tmp
|
||||
#@param 1 num_disk
|
||||
#@param 2 num_part
|
||||
#*/
|
||||
function ogRestoreAclImage () {
|
||||
local PART IMGACL
|
||||
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME num_disk num_part" \
|
||||
"$FUNCNAME 1 1"
|
||||
return
|
||||
fi
|
||||
|
||||
PART=$(ogDiskToDev "$1" "$2") || return $?
|
||||
IMGACL="ogimg.acl"
|
||||
|
||||
# Restauramos acl
|
||||
if [ "$(ogGetFsType $1 $2)" == "NTFS" -a -f "/tmp/$IMGACL" ] ; then
|
||||
cd /
|
||||
ogUnmount "$1" "$2"
|
||||
echo "ntfs-3g.secaudit -se $PART /tmp/$IMGACL"
|
||||
ntfs-3g.secaudit -se $PART /tmp/$IMGACL
|
||||
# Para evitar que de falso error
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogSyncCreate
|
||||
#@brief sincroniza los datos de la partición a la imagen para crearla. La imagen esta montada en un directorio.
|
||||
#@param 1 num_disk
|
||||
#@param 2 num_part
|
||||
#@param 3 Repositorio [ REPO | CACHE ]
|
||||
#@param 4 Nombre Imagen
|
||||
#@param 5 Tipo imagen [ img | diff ]
|
||||
#*/
|
||||
function ogSyncCreate () {
|
||||
local ORIG DIRAUX DIRMOUNT DESTRSYNC USERRSYNC PASSWORD OPTRSYNC RETVAL
|
||||
|
||||
# Limpiamos los archivo de log
|
||||
echo "" >$OGLOGCOMMAND;
|
||||
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension " \
|
||||
"$FUNCNAME 1 2 REPO Ubuntu12 img" \
|
||||
"$FUNCNAME 1 1 CACHE Windows7 diff "
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
if [ $# -lt 4 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension "
|
||||
return $?
|
||||
fi
|
||||
|
||||
ORIG=$(ogMount $1 $2) || return $?
|
||||
|
||||
DIRMOUNT="$(ogGetMountImageDir "$4" $5)"
|
||||
# Si la imagen es diferencial la lista de ficheros a transferir esta dentro de la imagen.
|
||||
if [ "$5" == "diff" ]; then
|
||||
FILESFROM=" --files-from=/tmp/ogimg.info"
|
||||
# Borramos los directorios
|
||||
sed -i '/\/$/d' /tmp/ogimg.info
|
||||
else
|
||||
FILESFROM=""
|
||||
fi
|
||||
|
||||
if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
|
||||
DESTRSYNC="/tmp/$DIRMOUNT"
|
||||
else
|
||||
[ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
|
||||
PASSWORD="--password-file=/scripts/passrsync"
|
||||
[ "$ogrsyncz" == "true" ] && OPTRSYNC="z "
|
||||
[ "$ogrsyncw" == "true" ] && OPTRSYNC="W$OPTRSYNC"
|
||||
USERRSYNC="opengnsys"
|
||||
DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
|
||||
fi
|
||||
# Sincronizamos los datos de la partición a la imagen
|
||||
echo " rsync -aHAX$OPTRSYNC --progress --inplace --delete $FILESFROM $ORIG/ $DESTRSYNC"
|
||||
rsync -aHAX$OPTRSYNC $PASSWORD --progress --inplace --delete $FILESFROM "$ORIG/" "$DESTRSYNC" 2>$OGLOGCOMMAND | egrep "^deleting|^sent|^sending|^total|%" |tee -a $OGLOGCOMMAND
|
||||
RETVAL=${PIPESTATUS[0]}
|
||||
echo " rsync -aHAX$OPTRSYNC --inplace /tmp/ogimg* $DESTRSYNC"
|
||||
rsync -aHAX$OPTRSYNC $PASSWORD --inplace /tmp/ogimg* "$DESTRSYNC"
|
||||
|
||||
return $RETVAL
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogSyncRestore
|
||||
#@brief sincroniza los datos de la imagen a la partición para restaurarla.
|
||||
#@param 1 Repositorio [ REPO | CACHE ]
|
||||
#@param 2 Nombre Imagen
|
||||
#@param 3 Tipo imagen [ img | diff ]
|
||||
#@param 4 num_disk
|
||||
#@param 5 num_part
|
||||
#*/
|
||||
function ogSyncRestore () {
|
||||
local DIRMOUNT ORIG DESTRSYNC PASSWORD OPTRSYNC USERRSYNC IMGINFO FILESFROM
|
||||
|
||||
# Limpiamos los archivo de log
|
||||
echo "" >$OGLOGCOMMAND;
|
||||
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME [ REPO|CACHE ] image_name extension num_disk num_part " \
|
||||
"$FUNCNAME REPO Ubuntu12 img 1 2" \
|
||||
"$FUNCNAME CACHE Windows7 diff 1 1"
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
if [ $# -lt 5 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name extension num_disk num_part "
|
||||
return $?
|
||||
fi
|
||||
|
||||
|
||||
DIRMOUNT="$(ogGetMountImageDir "$2" "$3")"
|
||||
DESTRSYNC=$(ogGetMountPoint $4 $5)
|
||||
|
||||
# Borramos ficheros de informacion de restauraciones antiguas
|
||||
rm -rf $DESTRSYNC/ogimg.*
|
||||
rm -rf /tmp/ogimg.*
|
||||
|
||||
# Origen y destino de la sincronizacion y en REPO opciones rsync
|
||||
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
|
||||
ORIG="/tmp/$DIRMOUNT"
|
||||
else
|
||||
[ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
|
||||
PASSWORD="--password-file=/scripts/passrsync"
|
||||
[ "$ogrsyncz" == "true" ] && OPTRSYNC="z "
|
||||
[ "$ogrsyncw" == "true" ] && OPTRSYNC="W$OPTRSYNC"
|
||||
USERRSYNC="opengnsys"
|
||||
ORIG="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
|
||||
fi
|
||||
|
||||
# Opciones rsync en cache y repo
|
||||
# Para la imagen basica, opcion de borrar archivos de la particion que no existen en la imagen
|
||||
[ "$3" == "img" ] && [ "$ogrsyncdel" != "false" ] && OPTRSYNC="$OPTRSYNC --delete"
|
||||
|
||||
# Nos traemos listado ficheros y bajamos la imagen
|
||||
|
||||
ogEcho log session " $MSG_SYNC_RESTORE"
|
||||
|
||||
# Si la imagen es diferencial nos traemos los archivos de informacion de la imagen.
|
||||
if [ "$3" == "diff" ]; then
|
||||
# Lista de archivos a copiar:
|
||||
IMGINFO="ogimg.info"
|
||||
FILESFROM=" --files-from=/tmp/$IMGINFO"
|
||||
|
||||
echo " rsync -aHAX$OPTRSYNC --progress $ORIG/ogimg* /tmp"
|
||||
rsync -aHAX$OPTRSYNC $PASSWORD --progress "$ORIG"/ogimg* /tmp
|
||||
# Borramos linea de información de la imagen, sino busca un fichero con ese nombre
|
||||
sed -i '/^\#/d' /tmp/$IMGINFO
|
||||
|
||||
cd $DESTRSYNC
|
||||
# Diferencial: Borramos archivos sobrantes.
|
||||
ogEcho log session " $MSG_SYNC_DELETE"
|
||||
sed -e s/^/\"/g -e s/$/\"/g "/tmp/ogimg.rm" 2>/dev/null | xargs rm -rf
|
||||
|
||||
fi
|
||||
|
||||
echo " rsync -aHAX$OPTRSYNC --progress $FILESFROM $ORIG/ $DESTRSYNC"
|
||||
rsync -aHAX$OPTRSYNC $PASSWORD --progress $FILESFROM "$ORIG/" "$DESTRSYNC" 2>$OGLOGCOMMAND | egrep "^deleting|^sent|^sending|^total|%" |tee -a $OGLOGCOMMAND
|
||||
RETVAL=${PIPESTATUS[0]}
|
||||
cd /
|
||||
#*/ " Comentario Doxygen
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogMountImage
|
||||
#@brief Monta la imagen para sincronizar.
|
||||
#@param 1 Repositorio [ REPO | CACHE ]
|
||||
#@param 2 Nombre Imagen
|
||||
#@param 3 Tipo imagen [ img |diff ]
|
||||
#@return punto de montaje
|
||||
#*/
|
||||
function ogMountImage () {
|
||||
local IMGEXT IMGFILE DIRMOUNT KERNELVERSION
|
||||
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
|
||||
"$FUNCNAME REPO Ubuntu12" \
|
||||
"$FUNCNAME CACHE Windows7 diff"
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
|
||||
return $?
|
||||
fi
|
||||
|
||||
[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
|
||||
|
||||
DIRMOUNT="$(ogGetMountImageDir "$2" ${IMGEXT#*\.})"
|
||||
|
||||
if [ "$1" == "REPO" -o "$1" == "repo" ]; then
|
||||
[ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
|
||||
hose $REPOIP 2009 --out sh -c "echo -ne MOUNT_IMAGE \"$2\" ${IMGEXT#*\.}"
|
||||
echo "$OGIMG/$DIRMOUNT"
|
||||
else
|
||||
# Si está montado nada que hacer.
|
||||
df | grep "$DIRMOUNT$" 2>&1 >/dev/null && echo "/tmp/$DIRMOUNT" && return 0
|
||||
|
||||
IMGFILE="$(ogGetPath "$1" /"$2.$IMGEXT")" \
|
||||
|| return $(ogRaiseError $OG_ERR_NOTFOUND "$1 $2.$IMGEXT"; echo $?)
|
||||
mkdir -p "/tmp/$DIRMOUNT"
|
||||
|
||||
|
||||
# FS de la imagen segun el contenido del archivo .img
|
||||
if file "$IMGFILE" |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then
|
||||
mount -t ext4 -o loop "$IMGFILE" "/tmp/$DIRMOUNT" 1>/dev/null
|
||||
else
|
||||
mount -o compress=lzo "$IMGFILE" "/tmp/$DIRMOUNT" 1>/dev/null
|
||||
fi
|
||||
|
||||
# Comprobamos que se ha montado bien
|
||||
[ $? -eq 0 ] || return $(ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $3"; echo $?)
|
||||
echo "/tmp/$DIRMOUNT"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogUnmountImage [ REPO | CACHE ] Image_name [ extension ]
|
||||
#@brief Desmonta la imagen para sincronizar.
|
||||
#@param 1 Repositorio [ REPO | CACHE ]
|
||||
#@param 2 Nombre Imagen
|
||||
#@param 3 Tipo imagen [ img |diff ]
|
||||
#*/
|
||||
function ogUnmountImage () {
|
||||
local IMGTYPE DIRMOUNT
|
||||
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
|
||||
"$FUNCNAME REPO Ubuntu12" \
|
||||
"$FUNCNAME CACHE Windows7 diff"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
|
||||
return $?
|
||||
fi
|
||||
|
||||
[ "$3" == "" ] && IMGTYPE="img" || IMGTYPE="$3"
|
||||
|
||||
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
|
||||
DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" $IMGTYPE)"
|
||||
umount "$DIRMOUNT"
|
||||
rmdir "$DIRMOUNT"
|
||||
[ -f $IMGFILE.lock ] && sed -i s/"mounted"//g $IMGFILE.lock
|
||||
else
|
||||
[ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
|
||||
echo " hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE"
|
||||
hose $REPOIP 2009 --out sh -c "echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogGetMountImageDir
|
||||
#@brief Devuelve el directorio de montaje de la imagen.
|
||||
#@param 1 Nombre Imagen
|
||||
#@param 2 Tipo imagen [ img |diff ]
|
||||
#*/
|
||||
function ogGetMountImageDir () {
|
||||
local DIRMOUNT
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME image_name [ extension ]" \
|
||||
"$FUNCNAME Ubuntu12" \
|
||||
"$FUNCNAME Windows7 diff"
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
|
||||
return $?
|
||||
fi
|
||||
|
||||
|
||||
DIRMOUNT="mount/$1"
|
||||
[ "$2" == "diff" ] && DIRMOUNT="$DIRMOUNT.diff"
|
||||
echo "$DIRMOUNT"
|
||||
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogWaitSyncImage image_name extension stado imagen_size
|
||||
#@brief Se espera un tiempo a que se monte la imagen en el servidor.
|
||||
#@brief Cuando se esta creando la imagen hay que dar el tamaño, para que espere el tiempo de creación.
|
||||
#@param 1 Respositorio [ REPO | CACHE ]
|
||||
#@param 2 Nombre Imagen
|
||||
#@param 3 Tipo imagen [ img | diff ]
|
||||
#@param 4 Estado [ mounted | reduced ]
|
||||
#@param 5 Tamaño imagen (opcional)
|
||||
#*/
|
||||
function ogWaitSyncImage () {
|
||||
local SIZE TIME DIRMOUNT TIMEOUT TIMEAUX LOCKFILE IMGDIR IMGEXT STATE
|
||||
|
||||
TIME=$SECONDS
|
||||
|
||||
# Ayuda o menos de 5 parametros y la imagen no es basica
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME [ REPO | CACHE ] image_name extension state [ image_size ] " \
|
||||
"$FUNCNAME REPO Ubuntu12 img 30000000" \
|
||||
"$FUNCNAME CACHE Windows7 diff "
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $# -lt 4 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO | CACHE ] image_name extension state [ image_size ] "
|
||||
return $?
|
||||
fi
|
||||
|
||||
SIZE=${5:-"300000"}
|
||||
STATE="$4"
|
||||
ogCheckStringInGroup "$STATE" "mounted reduced" || \
|
||||
return $(ogRaiseError command $OG_ERR_FORMAT "STATE = [ mounted | reduced ]" )
|
||||
|
||||
IMGDIR="$(ogGetParentPath "$1" "/$2")"
|
||||
[ "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
|
||||
LOCKFILE="${IMGDIR}/$(basename "/$2").$IMGEXT.lock"
|
||||
|
||||
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
|
||||
DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" $3)"
|
||||
else
|
||||
DIRMOUNT="$OGIMG/$(ogGetMountImageDir "$2" $3)"
|
||||
fi
|
||||
|
||||
echo -n -e " $MSG_SYNC_SLEEP: $DIRMOUNT\n #" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
# Comprobamos: mounted -> que exista $DIRMOUNT/ogimg.info o que el fichero de lock contenga mounted
|
||||
# reduced -> que el fichero de lock contenga reduced.
|
||||
|
||||
# time-out segun el tamaño de la imagen. por defecto: 100000k -> 3s
|
||||
let TIMEOUT=$SIZE/$CREATESPEED
|
||||
[ $TIMEOUT -lt 60 ] && TIMEOUT=60
|
||||
until $(grep -i $STATE $LOCKFILE &>/dev/null) ; do
|
||||
[ $STATE = "mounted" -a -f "$DIRMOUNT/ogimg.info" ] && ogEcho log session "" && return 0
|
||||
TIMEAUX=$[SECONDS-TIME]
|
||||
[ "$TIMEAUX" -lt "$TIMEOUT" ] || return $(ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
|
||||
echo -n "#" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
sleep 5
|
||||
done
|
||||
echo "" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogReduceImage
|
||||
#@brief Reduce el archivo de la imagen a tamaño datos + 500M
|
||||
#@param 1 Repositorio [ REPO | CACHE ]
|
||||
#@param 2 Nombre Imagen
|
||||
#@param 3 Tipo Imagen [ img |diff ]
|
||||
#@return
|
||||
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado.
|
||||
#*/
|
||||
function ogReduceImage () {
|
||||
local IMGEXT DIRMOUNT AVAILABLE USED IMGDIR IMGFILE ENDSIZE LOOPDEVICE
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
|
||||
"$FUNCNAME REPO Ubuntu12" \
|
||||
"$FUNCNAME CACHE Windows7 diff"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
|
||||
return $?
|
||||
fi
|
||||
|
||||
|
||||
[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
|
||||
IMGDIR="$(ogGetParentPath "$1" "/$2")"
|
||||
IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT"
|
||||
|
||||
|
||||
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
|
||||
# Para imagenes EXT4 reduzco, para BTRFS solo desmonto.
|
||||
if file "$IMGFILE" | grep -i " ext4 filesystem " 2>&1 > /dev/null; then
|
||||
# Al montar se comprueba la existencia de la imagen
|
||||
DIRMOUNT="$(ogMountImage $1 "$2" ${IMGEXT#*\.})"
|
||||
AVAILABLE=$(df -k|grep "$DIRMOUNT$"|awk '{print $4}')
|
||||
# Si el espacio libre menor que 500Mb nos salimos
|
||||
if [ $AVAILABLE -lt 200000 ]; then
|
||||
ogUnmountImage $1 "$2" ${IMGEXT#*\.}
|
||||
echo "reduced" > "$IMGFILE.lock"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Calculamos la diferencia entre el tamaño interno y externo
|
||||
EXTSIZE=$(ls -l --block-size=1024 "$IMGFILE" | cut -f5 -d" ")
|
||||
INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
|
||||
let EDGESIZE=$EXTSIZE-$INTSIZE
|
||||
ogUnmountImage $1 "$2" ${IMGEXT#*\.}
|
||||
LOOPDEVICE=$(losetup -f)
|
||||
losetup $LOOPDEVICE "$IMGFILE"
|
||||
|
||||
# Redimensiono sistema de ficheros
|
||||
echo " resize2fs -fpM $LOOPDEVICE"
|
||||
resize2fs -fpM $LOOPDEVICE |tee -a $OGLOGCOMMAND
|
||||
ogMountImage $1 "$2" ${IMGEXT#*\.} >/dev/null
|
||||
|
||||
# Calculamos el tamaño final del archivo
|
||||
INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
|
||||
let EXTSIZE=$INTSIZE+$EDGESIZE
|
||||
umount "$DIRMOUNT"
|
||||
|
||||
# Si existe dispositivo de loop lo borro.
|
||||
[ $LOOPDEVICE ] && losetup -d $LOOPDEVICE
|
||||
|
||||
# Corto el archivo al tamaño del sistema de ficheros.
|
||||
echo " truncate --size=\"$EXTSIZE\"k $IMGFILE "
|
||||
truncate --size="$EXTSIZE"k "$IMGFILE"
|
||||
else
|
||||
# Desmonto la imagen
|
||||
umount "$DIRMOUNT"
|
||||
fi
|
||||
|
||||
echo "reduced" > "$IMGFILE.lock"
|
||||
rmdir "$DIRMOUNT"
|
||||
|
||||
else
|
||||
[ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
|
||||
echo " hose $REPOIP 2009 --out sh -c echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}"
|
||||
hose $REPOIP 2009 --out sh -c "echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#/**
|
||||
# ogIsSyncImage
|
||||
#@brief Comprueba si la imagen es sincronizable
|
||||
#@param 1 Repositorio [ REPO | CACHE ]
|
||||
#@param 2 Nombre Imagen
|
||||
#@param 3 Tipo Imagen [ img |diff ]
|
||||
#@return
|
||||
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado.
|
||||
#*/
|
||||
function ogIsSyncImage () {
|
||||
local IMGEXT IMGDIR IMGFILE
|
||||
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
|
||||
"$FUNCNAME REPO Ubuntu12" \
|
||||
"$FUNCNAME CACHE Windows7 diff"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
|
||||
return $?
|
||||
fi
|
||||
|
||||
[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
|
||||
IMGDIR="$(ogGetParentPath "$1" "/$2")"
|
||||
IMGFILE="${IMGDIR}"/$(basename "/$2").$IMGEXT
|
||||
|
||||
file "$IMGFILE" | grep -i -e " BTRFS Filesystem " -e " ext4 filesystem " >/dev/null
|
||||
[ $? -eq 0 ] && return 0 || return $OG_ERR_DONTSYNC_IMAGE
|
||||
|
||||
}
|
||||
|
||||
|
||||
#/**
|
||||
# ogCheckSyncImage
|
||||
#@brief Muestra el contenido de la imagen para comprobarla.
|
||||
#@param 1 Repositorio [ REPO | CACHE ]
|
||||
#@param 2 Nombre Imagen
|
||||
#@param 3 Tipo Imagen [ img |diff ]
|
||||
#@return
|
||||
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado.
|
||||
#*/
|
||||
function ogCheckSyncImage () {
|
||||
local IMGEXT IMGDIR IMGFILE DIRMOUNT ISMOUNT RETVAL KERNELVERSION
|
||||
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$FUNCNAME" \
|
||||
"$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
|
||||
"$FUNCNAME REPO Ubuntu12" \
|
||||
"$FUNCNAME CACHE Windows7 diff"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
|
||||
return $?
|
||||
fi
|
||||
|
||||
[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
|
||||
IMGDIR="$(ogGetParentPath "$1" "/$2")"
|
||||
IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT"
|
||||
|
||||
ogIsSyncImage $1 "$2" "${IMGEXT#*\.}" || return $(ogRaiseError $OG_ERR_DONTSYNC_IMAGE "$3 $4"; echo $?)
|
||||
|
||||
# Comprobamos que no esté montada (daria falso error)
|
||||
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
|
||||
$(df | grep "/tmp/mount/$2${IMGEXT#img}$" &>/dev/null) && ISMOUNT=TRUE
|
||||
else
|
||||
[ -f "$OGIMG/mount/$2${IMGEXT#img}/ogimg.info" ] && ISMOUNT=TRUE
|
||||
fi
|
||||
[ "$ISMOUNT" == TRUE ] && ogEcho log session warning "$MSG_SYNC_NOCHECK" && return 0
|
||||
|
||||
DIRMOUNT="/tmp/ogCheckImage$$"
|
||||
mkdir "$DIRMOUNT"
|
||||
# FS de la imagen segun el contenido del archivo .img
|
||||
if file "$IMGFILE" |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then
|
||||
mount -t ext4 -o loop "$IMGFILE" "$DIRMOUNT" 2>&1 | tee -a $OGLOGCOMMAND
|
||||
RETVAL=${PIPESTATUS[0]}
|
||||
else
|
||||
mount -o compress=lzo "$IMGFILE" "$DIRMOUNT" 2>&1 | tee -a $OGLOGCOMMAND
|
||||
RETVAL=${PIPESTATUS[0]}
|
||||
fi
|
||||
ls -C "$DIRMOUNT" | tee -a $OGLOGCOMMAND
|
||||
umount "$DIRMOUNT"
|
||||
|
||||
rmdir "$DIRMOUNT"
|
||||
return $RETVAL
|
||||
}
|
||||
|
|
@ -1,368 +0,0 @@
|
|||
#!/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
|
||||
}
|
|
@ -1,166 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
#/**
|
||||
# createBaseImage
|
||||
#@brief Script de ejemplo para crear una imagen de un sistema de archivos.
|
||||
#@brief Se usa como base para el programa de creación de imágenes de OpenGnsys Admin).
|
||||
#@param 1 disco
|
||||
#@param 2 particion
|
||||
#@param 3 REPO|CACHE|IPREPO
|
||||
#@param 4 imagen
|
||||
#@return
|
||||
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
|
||||
#@exception OG_ERR_PARTITION # 3 Error en partición de disco o en su sistema de archivos
|
||||
#@exception OG_ERR_LOCKED # 4 Imagen o particion bloqueada
|
||||
#@exception OG_ERR_IMAGE # 5 Error en funcion ogCreateImage o ogRestoreImage.
|
||||
#@exception OG_ERR_NOTWRITE # 14 error de escritura
|
||||
#@exception OG_ERR_NOTCACHE # 15 si cache no existe 15
|
||||
#@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16
|
||||
#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada
|
||||
#@note No necesario permiso se escritura por samba en repo.
|
||||
#@todo: que hacer, si el tamaño de la cache es sufciente, pero no tiene espacio libre
|
||||
#@version 1.0 - creación imagen con btrfs
|
||||
#@author
|
||||
#@date 2012-12-04
|
||||
#@version 1.1.0 - Se muestra el espacio necesario para alojar la imagen y el disponible (ticket #771)
|
||||
#@author Irina Gomez - ETSII Universidad de Sevilla
|
||||
#@date 2017-03-28
|
||||
#@version 1.1.1 - Varios repositorios para un mismo cliente (ticket #679).
|
||||
#@author Irina Gomez - ETSII Universidad de Sevilla
|
||||
#@date 2018/11/06
|
||||
#*/ ##
|
||||
|
||||
trap "onexit $1 $2 $IMGFILE" 1 2 3 6 9 14 15 EXIT
|
||||
|
||||
# Si salimos con error demontamos la imagen y desbloqueamos la imagen y la particion
|
||||
function onexit() {
|
||||
local exit_status=$?
|
||||
if [ $exit_status -ne 4 ]; then
|
||||
ogUnlockImage "$IMGFILE"
|
||||
ogUnlock $1 $2
|
||||
fi
|
||||
exit $exit_status
|
||||
}
|
||||
|
||||
TIME1=$SECONDS
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
PROG="$(basename $0)"
|
||||
# Si se solicita, mostrar ayuda.
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$PROG: $MSG_HELP_createBaseImage" \
|
||||
"$PROG ndisco nparticion REPO|CACHE base_image" \
|
||||
"$PROG 1 1 REPO Windows7"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
[ $# -ne 4 ] && exit $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE imagen" ; echo $?)
|
||||
|
||||
# Limpiamos fichero de log
|
||||
echo " " > $OGLOGCOMMAND
|
||||
[ "$(ogGetCaller)" == "CrearImagenBasica" ] || echo -n ""> $OGLOGSESSION
|
||||
|
||||
ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
|
||||
|
||||
# Valores por defecto en etc/engine.cfg
|
||||
IMGEXT=${IMGEXT:-"img"}
|
||||
REPO="${3^^}"
|
||||
# No permite directorios diferentes para OU
|
||||
OGUNIT=""
|
||||
|
||||
# Si es una ip y es igual a la del equipo restaura desde cache
|
||||
[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
|
||||
# Si es una ip y es distinta a la del recurso samba cambiamos de REPO.
|
||||
ogCheckIpAddress $REPO
|
||||
if [ $? == 0 -o $REPO == "REPO" ] ; then
|
||||
# Si falla el cambio -> salimos con error repositorio no valido
|
||||
ogChangeRepo $REPO $OGUNIT || exit $(ogRaiseError $OG_ERR_NOTFOUND '$REPO'; echo $?)
|
||||
REPO="REPO"
|
||||
fi
|
||||
|
||||
# Comprobamos si la imagen o la particion estan bloqueada:
|
||||
ogIsImageLocked "$REPO" "$4.$IMGEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$REPO $4.$IMGEXT"; echo $?)
|
||||
ogIsLocked "$1" "$2" && exit $(ogRaiseError session $OG_ERR_LOCKED "$1 $2"; echo $?)
|
||||
|
||||
# Si el repositorio es CACHE comprobamos que exista
|
||||
if [ "$REPO" == "CACHE" -o "$REPO" == "cache" ]; then
|
||||
! ogFindCache >/dev/null && exit $(ogRaiseError session $OG_ERR_NOTCACHE "CACHE "; echo $?)
|
||||
fi
|
||||
|
||||
# Obtener información de los parámetros de entrada.
|
||||
PART=$(ogDiskToDev "$1" "$2" 2>/dev/null) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2" ; echo $?)
|
||||
# Comprobar consistencia del sistema de archivos.
|
||||
echo " " > $OGLOGCOMMAND
|
||||
SIZEFS=$(ogGetFsSize $1 $2)
|
||||
ogEcho log session "[20] $MSG_HELP_ogCheckFs $PART $SIZEFS (KB) "
|
||||
ogUnmount $1 $2
|
||||
ogCheckFs $1 $2 &> $OGLOGCOMMAND || exit $(ogRaiseError session $OG_ERR_PARTITION "ogCheckFs $1 $2"; echo $?)
|
||||
|
||||
# Comprobamos que la particion se puede montar
|
||||
ORIG=$(ogMount $1 $2) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2" ; echo $?)
|
||||
|
||||
# Borramos ficheros de paginacion y configuracion
|
||||
ogCleanOs $1 $2
|
||||
|
||||
#Comprobar espacio que requerira la imagen para ser almacenada
|
||||
read SIZEDATA SIZEREQUIRED SIZEFREE ISENOUGHSPACE <<< $(ogGetSizeParameters $1 $2 "$REPO" "$4" SYNC)
|
||||
|
||||
ogEcho log session "[16] $PROG: $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED $SIZEFREE"
|
||||
[ "$ISENOUGHSPACE" == "TRUE" ] || exit $(ogRaiseError session $OG_ERR_CACHESIZE "$REPO"; echo $?)
|
||||
|
||||
IMGDIR="$(ogGetParentPath "$REPO" "/$4")"
|
||||
IMGFILE=${IMGDIR}/$(basename "/$4").$IMGEXT
|
||||
|
||||
# Crear la imagen.
|
||||
echo " " > $OGLOGCOMMAND
|
||||
TIME2=$SECONDS
|
||||
|
||||
ogEcho log session "[40] $MSG_HELP_ogCreateImage $1 $2 $REPO $4 "
|
||||
|
||||
# Si existe el fichero de la imagen se hace copia de seguridad y se redimensiona, si no existe se crea.
|
||||
# Bloqueo la imagen. Si esta en modo lectura dara error y nos salimos
|
||||
ogEcho log session "[50] $MSG_HELP_ogCreateFileImage."
|
||||
ogLockImage "$REPO" "/$4.$IMGEXT" || exit $?
|
||||
ogCreateFileImage $REPO "$4" $IMGEXT $SIZEREQUIRED
|
||||
|
||||
# Creamos la lista del contenido y lo situamos en la particion a copiar.
|
||||
ogEcho log session "[60] $MSG_HELP_ogCreateInfoImage"
|
||||
ogCreateInfoImage $1 $2 $IMGEXT
|
||||
|
||||
TIMEAUX3=$[SECONDS-TIME2]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
|
||||
|
||||
# Esperamos que el servidor termine de crear y montar la imagen
|
||||
ogWaitSyncImage "$REPO" "$4" $IMGEXT "mounted" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$REPO $4 $IMGEXT: time_out."; echo $?)
|
||||
|
||||
# Sincronizamos los datos de la particion con la imagen.
|
||||
ogEcho log session "[70] $MSG_HELP_ogSyncCreate."
|
||||
ogSyncCreate $1 $2 $REPO "$4" $IMGEXT
|
||||
RETVAL=$?
|
||||
[ $RETVAL == 0 ] || ogEcho session warning "$MSG_ERR_SYNCHRONIZING"
|
||||
|
||||
TIMEAUX5=$[SECONDS-TIMEAUX3]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX5/60]m $[TIMEAUX5%60]s"
|
||||
|
||||
# Reducimos la imagen: solo para kernel <= 3.7, imagenes con FS ext4. (Desmonta y desbloquea la imagen)
|
||||
ogEcho log session "[80] $MSG_HELP_ogReduceImage: $REPO /$4.$IMGEXT"
|
||||
ogReduceImage $REPO "$4" $IMGEXT
|
||||
# Esperamos que el servidor termine de reducir la imagen
|
||||
ogWaitSyncImage "$REPO" "$4" $IMGEXT "reduced" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$REPO $4 $IMGEXT: time_out."; echo $?)
|
||||
|
||||
echo " " > $OGLOGCOMMAND
|
||||
sleep 2
|
||||
# Comprobamos que la imagen esta bien detectacdo que es un sistema de ficheros.
|
||||
ogEcho log session "[95] $MSG_HELP_ogCheckSyncImage"
|
||||
ogCheckSyncImage $REPO "$4" "img" || exit $(ogRaiseError session $OG_ERR_IMAGE "$REPO $4 img" ; echo $?)
|
||||
|
||||
#resumen de la operacion
|
||||
IMGSIZE=$(ls -l --block-size=1024 "$IMGFILE" | cut -f5 -d" ")
|
||||
|
||||
TIME=$[SECONDS-TIME1]
|
||||
ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
|
||||
ogEcho log session " FileSystem $PART with $SIZEDATA KB data created onto file-image as $4 and used $IMGSIZE KB acros DFS rsync "
|
||||
|
||||
# Si ha habido problema al sincronizar nos salimos con error
|
||||
[ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING
|
|
@ -1,201 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
#/**
|
||||
# createDiffImage
|
||||
#@brief Script de ejemplo para crear una imagen diferencial de un sistema de archivos.
|
||||
#@brief Se usa como base para el programa de creación de imágenes de OpenGnsys Admin).
|
||||
#@param 1 disco
|
||||
#@param 2 particion
|
||||
#@param 3 REPO|CACHE
|
||||
#@param 4 imagen_completa
|
||||
#@param 5 imagen_diferencial
|
||||
#@return
|
||||
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
|
||||
#@exception OG_ERR_PARTITION # 3 Error en partición de disco o en su sistema de archivos
|
||||
#@exception OG_ERR_NOTFOUND # Fichero de registro no encontrado.
|
||||
#@exception OG_ERR_IMAGE # 5 Error en funcion ogCreateImage o ogRestoreImage.
|
||||
#@exception OG_ERR_NOTWRITE # 14 error de escritura
|
||||
#@exception OG_ERR_NOTCACHE # 15 si cache no existe 15
|
||||
#@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16
|
||||
#@exception OG_ERR_LOCKED # 4 Partición o fichero bloqueado.
|
||||
#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada.
|
||||
#@exception OG_ERR_DONTSYNC_IMAGE # 71 Imagen no sincronizable (es monolitica)
|
||||
#@note Se toma como punto de partida el script createImage.
|
||||
#@todo: que hacer, si el tamaño de la cache es sufciente, pero no tiene espacio libre
|
||||
#@version 1.0 - creacion de la diferencial con rsync y btrfs
|
||||
#@author
|
||||
#@date 2012-12-04
|
||||
#@version 1.1.0 - Se muestra el espacio necesario para alojar la imagen y el disponible (ticket #771)
|
||||
#@author Irina Gomez - ETSII Universidad de Sevilla
|
||||
#@date 2017-03-28
|
||||
#@version 1.1.1 - Varios repositorios para un mismo cliente (ticket #679).
|
||||
#@author Irina Gomez - ETSII Universidad de Sevilla
|
||||
#@date 2018/11/06
|
||||
#*/ ##
|
||||
trap "onexit $1 $2 \"$4\" \"$5\"" 1 2 3 6 9 14 15 EXIT
|
||||
|
||||
function onexit() {
|
||||
local exit_status=$?
|
||||
ogUnmountImage $REPO "$5" $DIFFTYPE &>/dev/null
|
||||
ogUnmountImage $REPO "$3" $IMGEXT &>/dev/null
|
||||
if [ $exit_status -ne 4 ]; then
|
||||
ogUnlockImage "$IMGFILE" &>/dev/null
|
||||
ogUnlockImage "$DIFFFILE" &>/dev/null
|
||||
ogUnlock $1 $2 &>/dev/null
|
||||
fi
|
||||
exit $exit_status
|
||||
}
|
||||
|
||||
#Carga el configurador del engine desde el fichero engine.cfg
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
TIME1=$SECONDS
|
||||
|
||||
PROG="$(basename $0)"
|
||||
# Si se solicita, mostrar ayuda.
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$PROG: $MSG_HELP_createDiffImage" \
|
||||
"$PROG ndisco nparticion REPO|CACHE base_image diff_image" \
|
||||
"$PROG 1 1 REPO Windows7 Win7aula23"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
[ $# -lt 5 ] && exit $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE base_image diff_image"; echo $?)
|
||||
|
||||
# Limpiamos los archivo de log
|
||||
echo -n "" >$OGLOGCOMMAND
|
||||
[ "$(ogGetCaller)" == "RestaurarSoftIncremental" ] || echo -n "" > $OGLOGSESSION
|
||||
|
||||
ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
|
||||
|
||||
# Valores por defecto en etc/engine.cfg
|
||||
IMGEXT="img"
|
||||
DIFFEXT="img.diff"
|
||||
DIFFTYPE="diff"
|
||||
REPO="${3^^}"
|
||||
# No permite directorios diferentes para OU
|
||||
OGUNIT=""
|
||||
|
||||
# Si es una ip y es igual a la del equipo restaura desde cache
|
||||
[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
|
||||
# Si es una ip y es distinta a la del recurso samba cambiamos de REPO.
|
||||
ogCheckIpAddress $REPO
|
||||
if [ $? == 0 -o $REPO == "REPO" ] ; then
|
||||
# Si falla el cambio -> salimos con error repositorio no valido
|
||||
ogChangeRepo $REPO $OGUNIT || exit $(ogRaiseError $OG_ERR_NOTFOUND '$REPO'; echo $?)
|
||||
REPO="REPO"
|
||||
fi
|
||||
|
||||
# Comprobamos si la imagen diferencial o la particion estan bloqueada:
|
||||
ogIsImageLocked "$REPO" "$5.$DIFFEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$REPO $5.$DIFFEXT"; echo $?)
|
||||
ogIsLocked "$1" "$2" && exit $(ogRaiseError session $OG_ERR_LOCKED "$1 $2"; echo $?)
|
||||
|
||||
# Comprobar si la imagen completa existe.
|
||||
IMGFILE="$(ogGetPath "$REPO" "$4.$IMGEXT")"
|
||||
[ -n "$IMGFILE" ] || exit $(ogRaiseError session $OG_ERR_NOTFOUND "$REPO $4.$IMGEXT"; echo $?)
|
||||
|
||||
# Comprobar que la imagen completa es sincronizable
|
||||
ogIsSyncImage "$REPO" "$4" "img" || exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "$REPO $4"; echo $?)
|
||||
# Comprobar que no está bloqueada
|
||||
ogIsImageLocked "$REPO" "$4.$IMGEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$REPO $4.$IMGEXT"; echo $?)
|
||||
|
||||
# Si el repositorio es CACHE comprobamos que exista
|
||||
if [ "$REPO" == "CACHE" -o "$REPO" == "cache" ]; then
|
||||
! ogFindCache >/dev/null && exit $(ogRaiseError session $OG_ERR_NOTCACHE "CACHE "; echo $?)
|
||||
fi
|
||||
|
||||
echo " " > $OGLOGCOMMAND
|
||||
|
||||
# Obtener información de los parámetros de entrada.
|
||||
PART=$(ogDiskToDev "$1" "$2" 2>/dev/null) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2"; echo $?)
|
||||
#Comprobamos que la partición se puede montar.
|
||||
ORIG=$(ogMount $1 $2) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2"; echo $?)
|
||||
|
||||
DIFFDIR="$(ogGetParentPath "$REPO" "/$5")"
|
||||
DIFFFILE="$DIFFDIR/$5.$DIFFEXT"
|
||||
|
||||
# Bloqueo las imagenes -> Si no hay acceso de escritura dara error y nos saldremos.
|
||||
ogLockImage "$REPO" "/$4.$IMGEXT" || exit $?
|
||||
ogLockImage "$REPO" "/$5.$DIFFEXT" || exit $?
|
||||
|
||||
# Comprobar consistencia del sistema de archivos.
|
||||
echo " " > $OGLOGCOMMAND
|
||||
SIZEFS=$(ogGetFsSize $1 $2)
|
||||
ogEcho log session "[20] $MSG_HELP_ogCheckFs $1 $2 $SIZEFS (KB) "
|
||||
ogUnmount $1 $2
|
||||
ogCheckFs $1 $2 >$OGLOGCOMMAND || exit $(ogRaiseError session $OG_ERR_PARTITION "ogCheckFs $1 $2" ; echo $?)
|
||||
|
||||
# Borramos ficheros de paginacion y configuracion
|
||||
ogCleanOs $1 $2
|
||||
|
||||
# Crear la imagen.
|
||||
echo " " > $OGLOGCOMMAND
|
||||
TIME2=$SECONDS
|
||||
ogEcho log session "[40] $MSG_HELP_createDiffImage: $1 $2 $REPO $4"
|
||||
# Creamos la lista del contenido y lo situamos en la particion a copiar.
|
||||
|
||||
# Montamos imagen completa (con la que vamos a comparar)
|
||||
ogMountImage $REPO "$4" $IMGEXT >/dev/null
|
||||
|
||||
# Comprobar que la imagen completa se ha montado
|
||||
ogWaitSyncImage $REPO "$4" $IMGEXT "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$REPO $4 $IMGEXT: time_out."; echo $?)
|
||||
|
||||
# Creamos la informacion de la imagen.
|
||||
ogEcho log session "[45] $MSG_HELP_ogCreateInfoImage "
|
||||
ogCreateInfoImage $1 $2 $REPO "$4" "${DIFFTYPE}"
|
||||
[ $? -eq $OG_ERR_NOTDIFFERENT ] && exit $(ogRaiseError session $OG_ERR_NOTDIFFERENT; echo $?)
|
||||
|
||||
#Comprobar espacio que requerira la imagen para ser almacenada
|
||||
read SIZEDATA SIZEREQUIRED SIZEFREE ISENOUGHSPACE <<< $(ogGetSizeParameters $1 $2 "$REPO" "$5" DIFF)
|
||||
|
||||
ogEcho log session "[50] $PROG: $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED $SIZEFREE"
|
||||
[ "$ISENOUGHSPACE" == "TRUE" ] || exit $(ogRaiseError session $OG_ERR_CACHESIZE "$REPO"; echo $?)
|
||||
|
||||
#Calculamos el tamaño de la imagen:
|
||||
ogMount $1 $2 >/dev/null
|
||||
ogLock $1 $2
|
||||
|
||||
TIMEAUX3=$[SECONDS-TIME2]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
|
||||
|
||||
TIMEAUX5=$[SECONDS-TIMEAUX3]
|
||||
|
||||
# Configuro la informacion del tamaño de los datos en /tmp/ogimg.info
|
||||
sed -i s/SIZEDATA/"$SIZEDATA"/g /tmp/ogimg.info
|
||||
|
||||
# Creamos o redimensionamos la imagen
|
||||
ogEcho log session "[60] $MSG_HELP_ogCreateFileImage."
|
||||
ogCreateFileImage $REPO "$5" $DIFFTYPE $SIZEREQUIRED
|
||||
|
||||
# Esperamos que se monte la imagen despues de crarla en el servidor
|
||||
ogWaitSyncImage "$REPO" "$5" "$DIFFTYPE" "mounted" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$REPO $5 $DIFFTYPE: time_out."; echo $?)
|
||||
|
||||
ogEcho log session "[70] $MSG_HELP_ogSyncCreate"
|
||||
# Copio los datos a la imagen diferecial :
|
||||
ogSyncCreate $1 $2 $REPO "$5" $DIFFTYPE
|
||||
RETVAL=$?
|
||||
[ $RETVAL == 0 ] || ogEcho session warning "$MSG_ERR_SYNCHRONIZING"
|
||||
TIMEAUX6=$[SECONDS-TIMEAUX5]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX6/60]m $[TIMEAUX6%60]s"
|
||||
|
||||
# Reducimos la imagen diferencial -> solo para kernel <= 3.7, imagenes con FS ext4
|
||||
ogEcho log session "[80] $MSG_HELP_ogReduceImage: $REPO /$4.$IMGEXT"
|
||||
ogReduceImage $REPO "$5" $DIFFTYPE
|
||||
# Esperamos que el servidor termine de reducir la imagen
|
||||
ogWaitSyncImage "$REPO" "$5" $DIFFTYPE "reduced" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$REPO $4 $IMGEXT: time_out."; echo $?)
|
||||
# TODO: necesaria funcion que espere a que se reduzca la imagen para continuar el script
|
||||
|
||||
echo " " > $OGLOGCOMMAND
|
||||
sleep 2
|
||||
# Comprobamos que la imagen esta bien
|
||||
ogEcho log session "[95] $MSG_HELP_ogCheckSyncImage"
|
||||
ogCheckSyncImage $REPO "$5" diff || exit $(ogRaiseError session $OG_ERR_IMAGE "$REPO $5 diff"; echo $?)
|
||||
|
||||
#resumen de la operacion
|
||||
IMGSIZE=$(ls -l --block-size=1024 "${DIFFFILE}"| cut -f5 -d" ")
|
||||
TIME=$[SECONDS-TIME1]
|
||||
ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
|
||||
ogEcho log session " FileSystem $PART with $SIZEDATA KB data created onto file-image as $5 and used $IMGSIZE KB acros DFS rsync "
|
||||
|
||||
# Si ha habido problema al sincronizar nos salimos con error
|
||||
[ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING
|
|
@ -1,167 +0,0 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# CREAR IMAGEN BÁSICA
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la imagen que no estén en la partición
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $6 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la imagen del repositorio antes de crearla
|
||||
# X1XX: Copiar Imagen básica también a la cache
|
||||
# XX1X: Borrar previamente la imagen de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $7 Método de syncronización 1=Sincronización1 2=Sincronizacion2
|
||||
# $8 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 7 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio"
|
||||
usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
DISCO=$1
|
||||
NPART=$2
|
||||
NOMBREIMG=$3
|
||||
IPREPOSITORIO=$4
|
||||
|
||||
flag=$5
|
||||
echo "flah:$flag">/tmp/log
|
||||
WHLFILE=${flag:0:1}
|
||||
RMVFILE=${flag:1:1}
|
||||
CMPFILE=${flag:2:1}
|
||||
|
||||
flag=$6
|
||||
echo "flah:$flag">/tmp/log
|
||||
BORRARIMG=${flag:0:1}
|
||||
COPIACACHE=${flag:1:1}
|
||||
BORRACACHE=${flag:2:1}
|
||||
NOBORRACHIVOS=${flag:3:1}
|
||||
|
||||
RUTAORIGEN=$8
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Variables y configuración logs
|
||||
#___________________________________________________________________
|
||||
|
||||
source /opt/opengnsys/scripts/ImagenesSincronizadas.lib
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Activa navegador para ver progreso
|
||||
#___________________________________________________________________
|
||||
|
||||
coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Proceso
|
||||
#___________________________________________________________________
|
||||
|
||||
echo "Creacion de imagen basica..." | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
ORIGEN=$PARTICION$RUTAORIGEN/
|
||||
DESTINO="$REPOSITORIO/$NOMBREIMG/"
|
||||
|
||||
# Borrado previo de imagen en repositorio
|
||||
if [ $BORRARIMG -eq 1 ]; then
|
||||
echo "Borrando previamente imagen del repositorio" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
fi
|
||||
|
||||
## Marca de localizacion Repositorio
|
||||
FILE_IMG=".marcimg"
|
||||
MARCA=$ORIGEN$FILE_IMG
|
||||
## Marca de localizacion Repositorio en Imagen
|
||||
if [[ ! -f $MARCA ]]; then
|
||||
##echo "Creando Marca Repositorio en Imagen $MARCA" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
touch $MARCA
|
||||
fi
|
||||
|
||||
# Creación de la imagen básica
|
||||
echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
crearListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
|
||||
crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
|
||||
echo "!!! Finaliza correctamente !!! la creacion de imagen básica $NOMBREIMG entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
# Copia opcional a la caché
|
||||
if [ $COPIACACHE -eq 1 ]; then
|
||||
echo "Copiando imagen a cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
CACHE=$(montaCache)
|
||||
if [ -z $CACHE ]; then
|
||||
echo "No se ha podido copiar la imagen a la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_NOTCACHE
|
||||
fi
|
||||
|
||||
# Borrar imagen de la caché
|
||||
if [ $BORRACACHE -eq 1 ]; then
|
||||
echo "Borrando imagen $NOMBREIMG de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
rm -R $CACHE$OGIMG/$NOMBREIMG
|
||||
fi
|
||||
|
||||
# Redefinir destino
|
||||
DESTINO="$CACHE$OGIMG/$NOMBREIMG/"
|
||||
|
||||
## Marca de localizacion Repositorio
|
||||
FILE_IMG=".marcimg"
|
||||
MARCA=$ORIGEN$FILE_IMG
|
||||
## Marca de localizacion Repositorio en Imagen
|
||||
if [[ ! -f $MARCA ]]; then
|
||||
##echo "Creando Marca Repositorio en Imagen $MARCA" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
touch $MARCA
|
||||
fi
|
||||
|
||||
echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2
|
||||
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
echo "!!! Finaliza correctamente !!! la copia de imagen basica $NOMBREIMG a la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
fi
|
||||
|
||||
eliminaListaAcl $ORIGEN $SISTEMAFICHERO
|
||||
## Eliminar Marca Repositorio
|
||||
rm $MARCA
|
||||
|
||||
#comprimeImagen $NOMBREIMG
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Retorno
|
||||
#___________________________________________________________________
|
||||
|
||||
kill $COPROC_PID
|
||||
exit 0
|
|
@ -1,185 +0,0 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# CREAR IMAGEN INCREMENTAL
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Nombre canónico de la imagen incremental (sin extensión)
|
||||
# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la imagen que no estén en la partición
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la imagen incremental del repositorio antes de crearla
|
||||
# X1XX: Copiar imagen incremental también a la cache
|
||||
# XX1X: Borrar previamente la imagen incremental de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $8 Método de syncronización 1=Sincronización1 2=Sincronizacion2
|
||||
# $9 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 7 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio nombre_imagen_incremental"
|
||||
usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
DISCO=$1
|
||||
NPART=$2
|
||||
NOMBREIMG=$3
|
||||
IPREPOSITORIO=$4
|
||||
NOMBREIMGINC=$5
|
||||
|
||||
flag=$6
|
||||
echo "flah:$flag">/tmp/log
|
||||
WHLFILE=${flag:0:1}
|
||||
RMVFILE=${flag:1:1}
|
||||
CMPFILE=${flag:2:1}
|
||||
|
||||
flag=$7
|
||||
echo "flah:$flag">/tmp/log
|
||||
BORRARIMG=${flag:0:1}
|
||||
COPIACACHE=${flag:1:1}
|
||||
BORRACACHE=${flag:2:1}
|
||||
NOBORRACHIVOS=${flag:3:1}
|
||||
|
||||
RUTAORIGEN=$9
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Variables y configuración logs
|
||||
#___________________________________________________________________
|
||||
|
||||
source /opt/opengnsys/scripts/ImagenesSincronizadas.lib
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Activa navegador para ver progreso
|
||||
#___________________________________________________________________
|
||||
|
||||
coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Lista de archivos a sincronizar
|
||||
#___________________________________________________________________
|
||||
|
||||
TMPFILELIST="/tmp/_listatmp_"
|
||||
FILELIST="/tmp/_lista_"
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Proceso
|
||||
#___________________________________________________________________
|
||||
|
||||
echo "Creacion de imagen incremental..." | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
ORIGEN=$PARTICION$RUTAORIGEN/
|
||||
DESTINO="$REPOSITORIO/$NOMBREIMG/"
|
||||
|
||||
# Borrado previo de imagen en repositorio
|
||||
if [ $BORRARIMG -eq 1 ]; then
|
||||
echo "Borrando previamente imagen del $NOMBREIMGINC repositorio" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
fi
|
||||
|
||||
## Marca de localizacion Repositorio
|
||||
FILE_IMG=".marcimg"
|
||||
MARCAORIGEN=$ORIGEN$FILE_IMG
|
||||
## Marca de localizacion Repositorio en Imagen
|
||||
if [ ! -f $MARCAORIGEN ]; then
|
||||
##echo "Creando Marca Repositorio en Particion $MARCAORIGEN" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
touch $MARCAORIGEN
|
||||
fi
|
||||
|
||||
# Creación de la lista de archivos entre partición e imagen básica del repositorio
|
||||
echo "Creacion de la lista de archivos a transferir entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
crearListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
|
||||
crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1 1 $TMPFILELIST
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
|
||||
# Editar la lista y depurarla
|
||||
editarLista $TMPFILELIST $FILELIST
|
||||
|
||||
# Creación de la imagen incremental en el repositorio
|
||||
DESTINO="$REPOSITORIO/$NOMBREIMGINC/"
|
||||
echo "Sincronizacion para crear imagen incremental entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1 2 $FILELIST
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 && [$RETVAL -ne 23]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
## Marca de localizacion Repositorio
|
||||
FILE_IMG=".marcimg"
|
||||
MARCA=$DESTINO$FILE_IMG
|
||||
## Marca de localizacion Repositorio en Imagen
|
||||
if [ ! -f $MARCA ]; then
|
||||
##echo "Creando Marca Repositorio en Imagen $MARCA" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
touch $MARCA
|
||||
fi
|
||||
|
||||
echo "!!! Finaliza correctamente !!! la creacion de imagen incremental $NOMBREIMGINC entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
# Copia opcional a la caché
|
||||
if [ $COPIACACHE -eq 1 ]; then
|
||||
echo "Copiando imagen a cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
CACHE=$(montaCache)
|
||||
if [ -z $CACHE ]; then
|
||||
echo "No se ha podido copiar la imagen a la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_NOTCACHE
|
||||
fi
|
||||
|
||||
# Borrar imagen de la caché
|
||||
if [ $BORRACACHE -eq 1 ]; then
|
||||
echo "Borrando imagen $NOMBREIMGINC de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
rm -R $CACHE$OGIMG/$NOMBREIMGINC
|
||||
fi
|
||||
|
||||
DESTINO="$CACHE$OGIMG/$NOMBREIMGINC/"
|
||||
echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2 2 $FILELIST
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
echo "!!! Finaliza correctamente !!! la copia de imagen incremental $NOMBREIMGINC a la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
fi
|
||||
|
||||
## Marca de localizacion Repositorio
|
||||
FILE_IMG=".marcimg"
|
||||
MARCA=$DESTINO$FILE_IMG
|
||||
## Marca de localizacion Repositorio en CACHE
|
||||
if [ ! -f $MARCA ]; then
|
||||
##echo "Creando Marca Repositorio en CACHE $MARCA" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
touch $MARCA
|
||||
fi
|
||||
|
||||
## Eliminando Marca Origen Repositorio
|
||||
rm $MARCAORIGEN
|
||||
eliminaListaAcl $ORIGEN $SISTEMAFICHERO
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Retorno
|
||||
#___________________________________________________________________
|
||||
|
||||
kill $COPROC_PID
|
||||
exit 0
|
||||
|
|
@ -1,206 +0,0 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# RESTAURAR IMAGEN BÁSICA
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Tipo de transmisión 0=Unicast 1=Multicast
|
||||
# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la partición que no estén en la imagen
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
|
||||
# X1XX: Copiar Imagen básica también a la cache
|
||||
# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $8 Método de clonación 0=Desde caché 1=Desde repositorio
|
||||
# $9 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
|
||||
# $10 Ruta de origen de la Imagen (Carpeta)
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 8 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio copiar_a_caché "
|
||||
usage="$usage Borrar_cache_previamente metodo_clonación Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
DISCO=$1
|
||||
NPART=$2
|
||||
NOMBREIMG=$3
|
||||
IPREPOSITORIO=$4
|
||||
|
||||
flag=$6
|
||||
echo "flah:$flag">/tmp/log
|
||||
WHLFILE=${flag:0:1}
|
||||
RMVFILE=${flag:1:1}
|
||||
CMPFILE=${flag:2:1}
|
||||
|
||||
flag=$7
|
||||
echo "flah:$flag">/tmp/log
|
||||
BORRARIMG=${flag:0:1}
|
||||
COPIACACHE=${flag:1:1}
|
||||
BORRACACHE=${flag:2:1}
|
||||
NOBORRACHIVOS=${flag:3:1}
|
||||
|
||||
METCLONA=$8
|
||||
RUTAORIGEN=${10}
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Variables y configuración logs
|
||||
#___________________________________________________________________
|
||||
|
||||
source /opt/opengnsys/scripts/ImagenesSincronizadas.lib
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Activa navegador para ver progreso
|
||||
#___________________________________________________________________
|
||||
|
||||
coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Proceso
|
||||
#___________________________________________________________________
|
||||
|
||||
# Llamada a la función de sincronización.
|
||||
echo "Restauracion de imagen basica..." | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
# Borrado previo de la partición
|
||||
if [ $BORRARIMG -eq 1 ]; then
|
||||
if [ -n $RUTAORIGEN ]; then
|
||||
echo "Borrando carpeta $PARTICION$RUTAORIGEN" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
rm -R $PARTICION$RUTAORIGEN
|
||||
else
|
||||
echo "Formateando la particion" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
ogFormat $DISCO $PARTICION $TIPOPARTICION
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_PARTITION
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Sincronización desde repositorio
|
||||
if [ $METCLONA = 1 ]; then
|
||||
if [ $COPIACACHE = 0 ]; then
|
||||
echo "Restaurando imagen basica desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
ORIGEN="$REPOSITORIO/$NOMBREIMG/"
|
||||
DESTINO=$PARTICION$RUTAORIGEN/
|
||||
# Restauración de la imagen básica
|
||||
echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
|
||||
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
echo "***Error:$RETVAL. restaurando imagen basica desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
restauraListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
|
||||
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
echo "***Error:$RETVAL. restaurando listas ACL desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
echo "!!! Finaliza correctamente !!! la restauracion de imagen basica $NOMBREIMG desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
kill $COPROC_PID
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $METCLONA = 0 ]; then
|
||||
# Restauración desde la caché
|
||||
echo "Restaurando desde la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
fi
|
||||
# Comprobar si existe caché
|
||||
CACHE=$(montaCache)
|
||||
if [ -z $CACHE ]; then
|
||||
echo "No se puede restaurar la imagen desde la cache ya que no existe" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
kill $COPROC_PID
|
||||
ogRaiseError $OG_ERR_NOTCACHE "CACHE"
|
||||
exit $OG_ERR_NOTCACHE
|
||||
fi
|
||||
|
||||
# Borrar imagen de la caché
|
||||
if [ $BORRACACHE -eq 1 ]; then
|
||||
echo "Borrando imagen $NOMBREIMG de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
rm -R $CACHE$OGIMG/$NOMBREIMG
|
||||
fi
|
||||
|
||||
# Actualización de la caché
|
||||
echo "Actualizando cache local desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
ORIGEN="$REPOSITORIO/$NOMBREIMG/"
|
||||
DESTINO="$CACHE$OGIMG/$NOMBREIMG/"
|
||||
echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
|
||||
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
echo "***Error:$RETVAL. Actualizando cache local desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
|
||||
echo "!!! Finaliza correctamente !!! copia de imagen basica a cache local" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
# Restauración desde caché a la partición
|
||||
echo "Copiando imagen a la particion desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
ORIGEN="$CACHE$OGIMG/$NOMBREIMG/"
|
||||
DESTINO="$PARTICION$RUTAORIGEN/"
|
||||
echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2
|
||||
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
echo "***Error:$RETVAL. restaurando imagen basica desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
|
||||
restauraListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
echo "***Error:$RETVAL. restaurando listas ACL desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
|
||||
echo "Ejecutando configure OS" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
if which configureOsCustom &>/dev/null; then
|
||||
ogEcho log session "[90] configureOsCustom"
|
||||
configureOsCustom "$DISCO" "$NPART" "$IPREPOSITORIO" "$NOMBREIMG"
|
||||
else
|
||||
ogEcho log session "[90] $MSG_SCRIPTS_OS_CONFIGURE "
|
||||
configureOs "$DISCO" "$NPART"
|
||||
fi
|
||||
|
||||
|
||||
echo "!!! Finaliza correctamente !!! restauracion imagen basica $NOMBREIMG desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Retorno
|
||||
#___________________________________________________________________
|
||||
|
||||
kill $COPROC_PID
|
||||
|
||||
exit 0
|
|
@ -1,209 +0,0 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# RESTAURAR IMAGEN INCREMENTAL
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Nombre canónico del software incremental (sin extensión)
|
||||
# $6 Tipo de transmisión 0=Unicast 1=Multicast
|
||||
# $7 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la partición que no estén en la imagen
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $8 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
|
||||
# X1XX: Copiar Imagen básica también a la cache
|
||||
# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $9 Método de clonación 0=Desde caché 1=Desde repositorio
|
||||
# $10 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
|
||||
# $11 Ruta de origen de la Imagen (Carpeta)
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 6 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio copiar_a_caché "
|
||||
usage="$usage Borrar_cache_previamente metodo_clonación Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
DISCO=$1
|
||||
NPART=$2
|
||||
NOMBREIMG=$3
|
||||
IPREPOSITORIO=$4
|
||||
NOMBREIMGINC=$5
|
||||
|
||||
flag=$7
|
||||
echo "flah:$flag">/tmp/log
|
||||
WHLFILE=${flag:0:1}
|
||||
RMVFILE=${flag:1:1}
|
||||
CMPFILE=${flag:2:1}
|
||||
|
||||
flag=$8
|
||||
echo "flah:$flag">/tmp/log
|
||||
BORRARIMG=${flag:0:1}
|
||||
COPIACACHE=${flag:1:1}
|
||||
BORRACACHE=${flag:2:1}
|
||||
NOBORRACHIVOS=${flag:3:1}
|
||||
|
||||
METCLONA=$9
|
||||
RUTAORIGEN=${11}
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Variables y configuración logs
|
||||
#___________________________________________________________________
|
||||
|
||||
source /opt/opengnsys/scripts/ImagenesSincronizadas.lib
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Activa navegador para ver progreso
|
||||
#___________________________________________________________________
|
||||
|
||||
coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Proceso
|
||||
#___________________________________________________________________
|
||||
|
||||
echo "Restauracion de imagen incremental..." | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
# Borrado previo de la partición
|
||||
if [ $BORRARIMG -eq 1 ]; then
|
||||
if [ -n $RUTAORIGEN ]; then
|
||||
echo "Borrando carpeta $PARTICION$RUTAORIGEN" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
rm -R $PARTICION$RUTAORIGEN
|
||||
else
|
||||
echo "Formateando la particion" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
ogFormat $DISCO $PARTICION $TIPOPARTICION
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_PARTITION
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Sincronización desde repositorio
|
||||
if [ $METCLONA = 1 ]; then
|
||||
if [ $COPIACACHE = 0 ]; then
|
||||
echo "Restaurando imagen basica desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
ORIGEN="$REPOSITORIO/$NOMBREIMG/"
|
||||
DESTINO=$PARTICION$RUTAORIGEN/
|
||||
# Restauración de la imagen básica
|
||||
echo "Sincronizando imagen basica entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
|
||||
# Restauración de la imagen incremental
|
||||
echo "Restaurando imagen incremental desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
ORIGEN="$REPOSITORIO/$NOMBREIMGINC/"
|
||||
DESTINO=$PARTICION$RUTAORIGEN/
|
||||
OP_DELETE=""
|
||||
# Restauración de la imagen incremental
|
||||
echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
|
||||
restauraListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
|
||||
RETVAL=$?
|
||||
kill $COPROC_PID
|
||||
echo "!!! Finaliza correctamente !!! la restauracion de imagen incremental $NOMBREIMGINC desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
exit $RETVAL
|
||||
fi
|
||||
fi
|
||||
|
||||
# Restauración desde la caché
|
||||
echo "Restaurando desde la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
# Comprobar si existe caché
|
||||
CACHE=$(montaCache)
|
||||
if [ -z $CACHE ]; then
|
||||
echo "No se ha podido restaurar la imagen desde la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
ogRaiseError $OG_ERR_NOTCACHE "CACHE"
|
||||
kill $COPROC_PID
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# Borrar imagen de la caché
|
||||
if [ $BORRACACHE -eq 1 ]; then
|
||||
echo "Borrando imagen basica $NOMBREIMG de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
rm -R $CACHE$OGIMG/$NOMBREIMG
|
||||
echo "Borrando imagen incremental $NOMBREIMGINC de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
rm -R $CACHE$OGIMG/$NOMBREIMGINC
|
||||
fi
|
||||
|
||||
# Actualización de la caché
|
||||
echo "Actualizando cache local desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
ORIGEN="$REPOSITORIO/$NOMBREIMG/"
|
||||
DESTINO="$CACHE$OGIMG/$NOMBREIMG/"
|
||||
echo "Sincronizando imagen basica entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
ORIGEN="$REPOSITORIO/$NOMBREIMGINC/"
|
||||
DESTINO="$CACHE$OGIMG/$NOMBREIMGINC/"
|
||||
echo "Sincronizando imagen incremental entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
|
||||
echo "!!! Finaliza correctamente !!! copia de imagen basica e incremental a cache local" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
|
||||
# Restauración desde caché a la partición
|
||||
|
||||
echo "Copiando imagen basica a la partición desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
ORIGEN="$CACHE$OGIMG/$NOMBREIMG/"
|
||||
DESTINO=$PARTICION$RUTAORIGEN/
|
||||
echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
|
||||
echo "Copiando imagen incremental a la partición desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
ORIGEN="$CACHE$OGIMG/$NOMBREIMGINC/"
|
||||
DESTINO=$PARTICION$RUTAORIGEN/
|
||||
OP_DELETE=""
|
||||
echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2
|
||||
restauraListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -ne 0 ]; then
|
||||
kill $COPROC_PID
|
||||
exit $OG_ERR_IMAGE
|
||||
fi
|
||||
echo "!!! Finaliza correctamente !!! restauracion imagen incremental $NOMBREIMGINC desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Retorno
|
||||
#___________________________________________________________________
|
||||
|
||||
kill $COPROC_PID
|
||||
|
||||
exit 0
|
|
@ -1,175 +0,0 @@
|
|||
#!/bin/bash
|
||||
#/**
|
||||
# restoreBaseImage
|
||||
#@brief Script de ejemplo para restaurar una imagen
|
||||
#@brief Se usa como base para el programa de restauración de imágenes de OpenGnsys Admin).
|
||||
#@param 1 REPO|CACHE|IPREPO
|
||||
#@param 2 imagen
|
||||
#@param 3 disco
|
||||
#@param 4 particion
|
||||
#@param 5 protocolo
|
||||
#@param 6 opciones protocolo
|
||||
#@return
|
||||
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
|
||||
#@exception updateCache # 15 No hay cache
|
||||
#@exception updateCache # 16 no hay espacio sufiente
|
||||
#@exception OG_ERR_LOCKED # 4 Partición o fichero bloqueado.
|
||||
#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado.
|
||||
#@exception OG_ERR_FILESYS # 20 Sistema de archivos desconocido o no se puede montar
|
||||
#@exception OG_ERR_DONTSYNC_IMAGE # 71 Imagen no sincronizable (es monolitica)
|
||||
#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada.
|
||||
#@note se toma como punto de partida el script restoreImage
|
||||
#@version 1.0 - restauración de imagen con sincronizacion.
|
||||
#@author
|
||||
#@date 2012-12-04
|
||||
#@version 1.1.1 - Varios repositorios para un mismo cliente (ticket #679).
|
||||
#@author Irina Gomez - ETSII Universidad de Sevilla
|
||||
#@date 2018/11/06
|
||||
#*/ ##
|
||||
|
||||
trap "onexit $REPO \"$2\" $3 $4" 1 2 3 6 9 14 15 EXIT
|
||||
|
||||
# Si salimos con error demontamos la imagen y desbloqueamos la imagen y la particion
|
||||
function onexit() {
|
||||
local exit_status=$?
|
||||
ogUnmountImage "$REPO" "$2" "$IMGEXT" &>/dev/null
|
||||
[ $exit_status -ne 4 ] && ogUnlock $3 $4 &>/dev/null
|
||||
exit $exit_status
|
||||
}
|
||||
|
||||
# Limpiamos los archivo de log
|
||||
echo -n "" >$OGLOGCOMMAND;
|
||||
[ "$(ogGetCaller)" == "RestaurarImagenBasica" -o "$(ogGetCaller)" == "restoreDiffImage" ] || echo -n "" > $OGLOGSESSION
|
||||
|
||||
# Mensaje de inicio de script salvo si es llamado desde restoreDiffImage.
|
||||
[ "$(ogGetCaller)" == "restoreDiffImage" ] || ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
|
||||
|
||||
TIME1=$SECONDS
|
||||
PROG="$(basename $0)"
|
||||
# Si se solicita, mostrar ayuda.
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$PROG: $MSG_HELP_restoreBaseImage" \
|
||||
"$PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" \
|
||||
"$PROG REPO Windows7 1 1 " \
|
||||
"$PROG CACHE Ubuntu12 1 6 MULTICAST 9000:full-duplex:239.194.14.00:150M:50:60"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
[ $# -lt 4 ] && exit $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]"; echo $?)
|
||||
|
||||
# Procesar parámetros de entrada
|
||||
REPO="${1^^}"
|
||||
# No permite directorios diferentes para OU
|
||||
OGUNIT=""
|
||||
|
||||
# Si es una ip y es igual a la del equipo restaura desde cache
|
||||
[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
|
||||
# Si es una ip y es distinta a la del recurso samba cambiamos de REPO.
|
||||
ogCheckIpAddress $REPO
|
||||
if [ $? == 0 -o $REPO == "REPO" ] ; then
|
||||
# Si falla el cambio -> salimos con error repositorio no valido
|
||||
ogChangeRepo $REPO ${OGUNIT%/} || exit $(ogRaiseError $OG_ERR_NOTFOUND '$REPO $OGUNIT'; echo $?)
|
||||
REPO="REPO"
|
||||
fi
|
||||
|
||||
# Carga del configurador del engine
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Procesar parámetros de entrada
|
||||
REPOFILE="$(ogGetPath "REPO" "$2.$IMGEXT")"
|
||||
[ -n "$REPOFILE" ] || exit $(ogRaiseError session $OG_ERR_NOTFOUND "REPO, $2.$IMGEXT"; echo $?)
|
||||
|
||||
# Comprobar que es sincronizable (con REPO)
|
||||
ogIsSyncImage REPO "$2" $IMGEXT || exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "$REPO $2"; echo $?)
|
||||
|
||||
IMGEXT="img"
|
||||
# Comprobamos si la imagen o la particion estan bloqueada:
|
||||
ogIsImageLocked "REPO" "$2.$IMGEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$REPO $2.$IMGEXT"; echo $?)
|
||||
ogIsLocked "$3" "$4" && exit $(ogRaiseError session $OG_ERR_LOCKED "$3 $4"; echo $?)
|
||||
|
||||
# Detectamos el sistema de ficheros de la imagen
|
||||
# TODO ogGetImageInfo
|
||||
DIRMOUNT=$(ogMountImage "REPO" "$2")
|
||||
ogWaitSyncImage "REPO" "$2" "$IMGEXT" "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$REPO $2 $IMGEXT: time_out."; echo $?)
|
||||
IMGFSTYPE=$(head -1 $DIRMOUNT/ogimg.info |cut -d: -f3)
|
||||
|
||||
# Comprobamos si el sistema de ficheros se puede montar
|
||||
ogMount "$3" "$4" &>/dev/null || RETVAL=$?
|
||||
# Si da error formateamos el sistema de ficheros.
|
||||
if [ "$RETVAL" ] ; then
|
||||
ogEcho log session " $MSG_HELP_ogFormat: $3 $4 $IMGFSTYPE"
|
||||
ogFormat "$3" "$4" "$IMGFSTYPE" || exit $(ogRaiseError session $OG_ERR_FILESYS "$3 $4"; echo $?)
|
||||
ogMount "$3" "$4" || exit $(ogRaiseError session $OG_ERR_FILESYS "$3 $4"; echo $?)
|
||||
fi
|
||||
|
||||
# Warning si el sistema de ficheros de la imagen es distinto del de la particion destino
|
||||
[ "$IMGFSTYPE" == "$(ogGetFsType $3 $4)" ] || ogEcho session warning "$MSG_SYNC_DIFFERENTFS"
|
||||
|
||||
|
||||
PROTO=${5:-"UNICAST"}
|
||||
if [ "$REPO" == "CACHE" -o "$REPO" == "cache" ]; then
|
||||
# Las imagenes sincronizables aunque sean iguales no tienen el mismo sum.
|
||||
# Sincronizamos si existe el fichero y si no usamos updateCache.
|
||||
ogEcho log session "[10] $MSG_SCRIPTS_TASK_START updateCache REPO $2.$IMGEXT $PROTO $6"
|
||||
ogEcho log session " updateCache REPO" "/$2.$IMGEXT" "$PROTO" "$6"
|
||||
updateCache REPO "/$2.$IMGEXT" "$PROTO" "$6"
|
||||
RETVAL=$?
|
||||
if [ "$RETVAL" != "0" ]
|
||||
then
|
||||
ogEcho log session "[39] $MSG_SCRIPTS_TASK_END updateCache REPO $2.$IMGEXT $5 $6 con error $RETVAL"
|
||||
# RC=15 No hay cache
|
||||
# RC=16 no hay espacio sufiente
|
||||
exit $RETVAL
|
||||
fi
|
||||
TIMEAUX1=$[SECONDS-TIME]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX1/60]m $[TIMEAUX1%60]s"
|
||||
|
||||
# Montamos la imagen de cache
|
||||
ogMountImage "$REPO" "$2" >/dev/null
|
||||
ogWaitSyncImage "$REPO" "$2" "$IMGEXT" "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$REPO $2 $IMGEXT: time_out."; echo $?)
|
||||
fi
|
||||
|
||||
TIME2=$SECONDS
|
||||
|
||||
# Restaurar la imagen.
|
||||
ogEcho log session "[40] $MSG_HELP_ogRestoreImage: $REPO $2 $3 $4"
|
||||
|
||||
ogLock $3 $4
|
||||
|
||||
# Sincronizamos la partición con la imagen.
|
||||
ogEcho log session "[60] $MSG_HELP_ogSyncRestore: $REPO $2 $IMGEXT $3 $4"
|
||||
ogSyncRestore "$REPO" "$2" "$IMGEXT" $3 $4
|
||||
RETVAL=$?
|
||||
[ $RETVAL == 0 ] || ogEcho session warning "$MSG_ERR_SYNCHRONIZING"
|
||||
|
||||
TIMEAUX2=$[SECONDS-TIME2]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s"
|
||||
|
||||
# Desmontamos imagen basica.
|
||||
ogUnmountImage "$REPO" "$2" "$IMGEXT"
|
||||
|
||||
# Restableciendo acl
|
||||
ogUnlock $3 $4
|
||||
ogEcho log session "[70] $MSG_HELP_ogRestoreInfoImage"
|
||||
ogExecAndLog command ogRestoreInfoImage $3 $4
|
||||
|
||||
# Llamar al script de post-configuración del sistema operativo.
|
||||
# Si a este script lo ha llamado el script restoreDiffImage no post-configuramos
|
||||
if [ "$(ogGetCaller)" != "restoreDiffImage" ];then
|
||||
ogExecAndLog command ogRestoreAclImage $3 $4
|
||||
if which configureOsCustom &>/dev/null; then
|
||||
ogEcho log session "[90] configureOsCustom"
|
||||
configureOsCustom "$3" "$4" "$REPO" "$2"
|
||||
else
|
||||
ogEcho log session "[90] $MSG_HELP_configureOs"
|
||||
configureOs $3 $4
|
||||
fi
|
||||
fi
|
||||
TIMEAUX3=$[SECONDS-TIMEAUX2]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
|
||||
|
||||
TIME=$[SECONDS-TIME1]
|
||||
ogEcho log session "[100] $MSG_SCRIPTS_END $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m $[TIME%60]s"
|
||||
|
||||
# Si ha habido problema al sincronizar nos salimos con error
|
||||
[ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING
|
|
@ -1,159 +0,0 @@
|
|||
#!/bin/bash
|
||||
#/**
|
||||
# restoreDiffImage
|
||||
#@brief Script de ejemplo para restaurar una imagen diferencial.
|
||||
#@brief Se usa como base para el programa de restauración de imágenes de OpenGnsys Admin).
|
||||
#@param 1 REPO|CACHE
|
||||
#@param 2 imagen basica
|
||||
#@param 3 imagen diferencial
|
||||
#@param 4 disco
|
||||
#@param 5 particion
|
||||
#@param 6 protocolo
|
||||
#@param 7 opciones protocolo
|
||||
#@return
|
||||
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado
|
||||
#@exception OG_ERR_PARTITION# 3 Error en partición de disco.
|
||||
#@exception OG_ERR_LOCKED # 4 Partición o fichero bloqueado.
|
||||
#@exception updateCache # 15 No hay cache
|
||||
#@exception updateCache # 16 no hay espacio sufiente
|
||||
#@exception OG_ERR_DONTSYNC_IMAGE # 71 Imagen no sincronizable (es monolitica)
|
||||
#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada.
|
||||
#@todo: Se puede dar la opcion de que mantenga los ficheros nuevos.
|
||||
#@todo: Se puede dar la opcion que la trasferencia se manden los datos comprimidos.
|
||||
#@version 1.0 - restauración de imagen con sincronizacion.
|
||||
#@author
|
||||
#@date 2012-12-04
|
||||
#@version 1.1.1 - Varios repositorios para un mismo cliente (ticket #679).
|
||||
#@author Irina Gomez - ETSII Universidad de Sevilla
|
||||
#@date 2018/11/06
|
||||
#*/ ##
|
||||
|
||||
trap "onexit $REPO \"$2\" \"$3\" $4 $5" 1 2 3 6 9 14 15 EXIT
|
||||
|
||||
# Si salimos con error demontamos la imagen y desbloqueamos la imagen y la particion
|
||||
function onexit() {
|
||||
local exit_status=$?
|
||||
ogUnmountImage "$REPO" "$3" "$DIFFTYPE" &>/dev/null
|
||||
[ $exit_status -ne 4 ] && ogUnlock $4 $5 &>/dev/null
|
||||
exit $exit_status
|
||||
}
|
||||
|
||||
|
||||
# Limpiamos los archivo de log
|
||||
echo -n ""> $OGLOGSESSION
|
||||
echo "" >$OGLOGCOMMAND
|
||||
|
||||
TIME1=$SECONDS
|
||||
PROG="$(basename $0)"
|
||||
# Si se solicita, mostrar ayuda.
|
||||
if [ "$*" == "help" ]; then
|
||||
ogHelp "$PROG: $MSG_HELP_restoreDiffImage" \
|
||||
"$PROG REPO|CACHE base_image diff_image ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" \
|
||||
"$PROG REPO Windows7 Windows7_pc123 1 1 " \
|
||||
"$PROG CACHE Ubuntu12 Ubuntu12_aula21 1 6 MULTICAST 9000:full-duplex:239.194.14.00:150M:50:60"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
[ $# -lt 5 ] && exit $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE base_image diff_imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]"; echo $?)
|
||||
|
||||
ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
|
||||
|
||||
# Procesar parámetros de entrada
|
||||
DIFFTYPE="diff"
|
||||
DIFFEXT="img.diff"
|
||||
REPO="${1^^}"
|
||||
# No permite directorios diferentes para OU
|
||||
OGUNIT=""
|
||||
|
||||
# Si es una ip y es igual a la del equipo restaura desde cache
|
||||
[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
|
||||
# Si es una ip y es distinta a la del recurso samba cambiamos de REPO.
|
||||
ogCheckIpAddress $REPO
|
||||
if [ $? == 0 -o $REPO == "REPO" ] ; then
|
||||
# Si falla el cambio -> salimos con error repositorio no valido
|
||||
ogChangeRepo $REPO ${OGUNIT%/} || exit $(ogRaiseError $OG_ERR_NOTFOUND '$REPO $OGUNIT'; echo $?)
|
||||
REPO="REPO"
|
||||
fi
|
||||
|
||||
REPODIFFFILE="$(ogGetPath "REPO" "$3.$DIFFEXT")"
|
||||
[ -n "$REPODIFFFILE" ] || exit $(ogRaiseError session $OG_ERR_NOTFOUND "REPO $3.$DIFFEXT";echo $?)
|
||||
|
||||
# Comprobamos si la imagen o la particion estan bloqueada:
|
||||
ogIsImageLocked "$REPO" "$3.$DIFFEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$REPO $3.$DIFFEXT";echo $?)
|
||||
ogIsLocked "$4" "$5" && exit $(ogRaiseError session $OG_ERR_LOCKED "$4 $5";echo $?)
|
||||
|
||||
PART=$(ogDiskToDev "$4" "$5" 2>/dev/null ) || exit $(ogRaiseError session $OG_ERR_PARTITION "$REPO $3";echo $?)
|
||||
|
||||
# Carga del configurador del engine
|
||||
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
|
||||
|
||||
# Comprobar que es sincronizable
|
||||
ogIsSyncImage REPO "$3" diff || exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "$REPO $3";echo $?)
|
||||
|
||||
# Restauramos la imagen Basica.
|
||||
restoreBaseImage $REPO "$2" "$4" "$5" "$6" "$7"
|
||||
|
||||
PROTO=${6:-"UNICAST"}
|
||||
|
||||
if [ "$REPO" == "CACHE" -o "$REPO" == "cache" ]; then
|
||||
ogEcho log session "[10] $MSG_HELP_updateCache."
|
||||
ogEcho log session " updateCache REPO" "/$3.$DIFFEXT" "$PROTO" "$7"
|
||||
updateCache REPO "/$3.$DIFFEXT" "$PROTO" "$7"
|
||||
RETVAL=$?
|
||||
if [ "$RETVAL" != "0" ]
|
||||
then
|
||||
ogEcho log session "[39] $MSG_SCRIPTS_TASK_END updateCache REPO $3.$DIFFEXT $6 $7 con error $RETVAL"
|
||||
# RC=15 No hay cache
|
||||
# RC=16 no hay espacio sufiente
|
||||
exit $RETVAL
|
||||
fi
|
||||
|
||||
TIMEAUX1=$[SECONDS-TIME]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX1/60]m $[TIMEAUX1%60]s"
|
||||
fi
|
||||
TIME2=$SECONDS
|
||||
|
||||
# Restaurar la imagen.
|
||||
ogEcho log session "[40] $MSG_RESTORE $PART"
|
||||
|
||||
# Montamos la diferencial
|
||||
ogMountImage "$REPO" "$3" "$DIFFTYPE" &>/dev/null
|
||||
# Comprobar que la imagen diferencial se ha montado
|
||||
ogWaitSyncImage "$REPO" "$3" "$DIFFTYPE" "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$REPO $3 $DIFFTYPE: time_out $TIMEAUX seg.";echo $?)
|
||||
|
||||
ogMount $4 $5 >/dev/null
|
||||
ogLock $4 $5
|
||||
# Sincronizamos la partición con la imagen.
|
||||
ogEcho log session "[60] $MSG_HELP_ogSyncRestore: $REPO $3 $DIFFTYPE $4 $5"
|
||||
ogSyncRestore "$REPO" "$3" "$DIFFTYPE" $4 $5
|
||||
RETVAL=$?
|
||||
[ $RETVAL == 0 ] || ogEcho session warning "$MSG_ERR_SYNCHRONIZING"
|
||||
|
||||
# Desmontamos la imagen
|
||||
ogUnmountImage "$REPO" "$3" "$DIFFTYPE"
|
||||
ogUnlock $4 $5
|
||||
|
||||
TIMEAUX2=$[SECONDS-TIME2]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s"
|
||||
|
||||
# creando enlaces y restableciendo ACL (en windows)
|
||||
ogEcho log session "[70] $MSG_HELP_ogRestoreInfoImage"
|
||||
ogExecAndLog command ogRestoreInfoImage "$4" "$5"
|
||||
ogExecAndLog command ogRestoreAclImage "$4" "$5"
|
||||
TIMEAUX3=$[SECONDS-TIMEAUX2]
|
||||
ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
|
||||
|
||||
# Llamar al script de post-configuración del sistema operativo.
|
||||
if which configureOsCustom &>/dev/null; then
|
||||
ogEcho log session "[90] configureOsCustom"
|
||||
configureOsCustom "$4" "$5" "$REPO" "$2"
|
||||
else
|
||||
ogEcho log session "[90] $MSG_HELP_configureOs."
|
||||
configureOs $4 $5
|
||||
fi
|
||||
TIME=$[SECONDS-TIME1]
|
||||
ogEcho log session "[100] $MSG_SCRIPTS_END $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m $[TIME%60]s"
|
||||
|
||||
# Si ha habido problema al sincronizar nos salimos con error
|
||||
[ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING
|
|
@ -1,98 +0,0 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# CREAR IMAGEN BÁSICA
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la imagen que no estén en la partición
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $6 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la imagen del repositorio antes de crearla
|
||||
# X1XX: Copiar Imagen básica también a la cache
|
||||
# XX1X: Borrar previamente la imagen de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $7 Método de syncronización 1=Sincronización1 2=Sincronizacion2
|
||||
# $8 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
|
||||
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 7 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio"
|
||||
usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
#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 seguimiento para httpdlog
|
||||
echo -n "" > $OGLOGSESSION; echo -n "" > $OGLOGCOMMAND
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
# Si el destino es REPO y el cliente no está en modo "admin"; activar repositorio para escritura,
|
||||
PATH=$PATH:$(dirname $0)
|
||||
CLIENTIP=$(ogGetIpAddress)
|
||||
[ "$4" == "$CLIENTIP" ] && DEST=CACHE || DEST=REPO
|
||||
if [ "$DEST" == "REPO" -a "$boot" != "admin" ]; then
|
||||
CambiarAcceso admin &>> $OGLOGFILE
|
||||
RETVAL=$?
|
||||
[ $RETVAL -gt 0 ] && exit $RETVAL
|
||||
fi
|
||||
|
||||
if [ $7 -eq 1 ]; then
|
||||
#sincronizacion1
|
||||
ogCrearImagenBasica "$@"
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
if [ $7 -eq 2 ]; then
|
||||
# Sincronizacion2
|
||||
flag=$5
|
||||
WHOLE=${flag:0:1}
|
||||
DELFILE=${flag:1:1}
|
||||
COMPRESS=${flag:2:1}
|
||||
|
||||
# Nota los valores se pasan como variables de entorno,
|
||||
# la idea es que mas adelante vayan en el fichero PXE.
|
||||
[ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
|
||||
[ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
|
||||
[ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
|
||||
|
||||
# [ "$4" == "0.0.0.0" ] && DEST="CACHE" || DEST="REPO"
|
||||
|
||||
createBaseImage $1 $2 $DEST "$3"
|
||||
RETVAL=$?
|
||||
|
||||
fi
|
||||
|
||||
# Si estamos en modo user montamos el repositorio en modo lectura.
|
||||
[ "$DEST" == "REPO" -a "$boot" != "admin" ] && CambiarAcceso user
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
|
||||
|
||||
exit $RETVAL
|
||||
|
|
@ -1,98 +0,0 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# CREAR IMAGEN INCREMENTAL
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Nombre canónico de la imagen incremental (sin extensión)
|
||||
# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la imagen que no estén en la partición
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la imagen incremental del repositorio antes de crearla
|
||||
# X1XX: Copiar imagen incremental también a la cache
|
||||
# XX1X: Borrar previamente la imagen incremental de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $8 Método de syncronización 1=Sincronización1 2=Sincronizacion2
|
||||
# $9 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 8 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio nombre_imagen_incremental"
|
||||
usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
#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 seguimiento para httpdlog
|
||||
echo -n "" > $OGLOGSESSION; echo -n "" > $OGLOGCOMMAND
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
|
||||
# Si el destino es REPO y el cliente no está en modo "admin"; activar repositorio para escritura,
|
||||
PATH=$PATH:$(dirname $0)
|
||||
CLIENTIP=$(ogGetIpAddress)
|
||||
[ "$4" == "$CLIENTIP" ] && DEST=CACHE || DEST=REPO
|
||||
if [ "$DEST" == "REPO" -a "$boot" != "admin" ]; then
|
||||
CambiarAcceso admin &>> $OGLOGFILE
|
||||
RETVAL=$?
|
||||
[ $RETVAL -gt 0 ] && exit $RETVAL
|
||||
fi
|
||||
|
||||
if [ $8 -eq 1 ]; then
|
||||
#sincronizacion1
|
||||
ogCrearSoftIncremental "$@"
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
|
||||
if [ $8 -eq 2 ]; then
|
||||
#sincronizacion 2
|
||||
flag=$6
|
||||
WHOLE=${flag:0:1}
|
||||
DELFILE=${flag:1:1}
|
||||
COMPRESS=${flag:2:1}
|
||||
|
||||
# Nota los valores se pasan como variables de entorno,
|
||||
# la idea es que mas adelante vayan en el fichero PXE.
|
||||
[ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
|
||||
[ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
|
||||
[ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
|
||||
|
||||
# REPOSITORIO: Si la ip es la del propio equipo CACHE, si no REPO
|
||||
#CLIENTIP=$(ogGetIpAddress)
|
||||
#[ "$4" == "$CLIENTIP" ] && DEST=CACHE || DEST=REPO
|
||||
createDiffImage $1 $2 $DEST "$3" "$5"
|
||||
RETVAL=$?
|
||||
|
||||
fi
|
||||
|
||||
# Si estamos en modo user montamos el repositorio en modo lectura.
|
||||
[ "$DEST" == "REPO" -a "$boot" != "admin" ] && CambiarAcceso user
|
||||
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
exit $RETVAL
|
|
@ -1,89 +0,0 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# RESTAURAR IMAGEN BÁSICA
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Tipo de transmisión 0=Unicast 1=Multicast
|
||||
# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la partición que no estén en la imagen
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
|
||||
# X1XX: Copiar Imagen básica también a la cache
|
||||
# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $8 Método de clonación 0=Desde caché 1=Desde repositorio
|
||||
# $9 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
|
||||
# $10 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
|
||||
PROG="$(basename $0)"
|
||||
if [ $# -lt 9 ]; then
|
||||
usage=" ndisco nparticion nombre_imagen_basica ip_repositorio copiar_a_caché "
|
||||
usage="$usage Borrar_cache_previamente metodo_clonación Ruta_origen"
|
||||
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
|
||||
exit $?
|
||||
fi
|
||||
|
||||
#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 seguimiento para httpdlog
|
||||
echo -n "" > $OGLOGSESSION; echo " " > $OGLOGCOMMAND
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
if [ $9 -eq 1 ]; then
|
||||
#sincronizacion1
|
||||
ogRestaurarImagenBasica "$@"
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
if [ $9 -eq 2 ]; then
|
||||
#sincronizacion2
|
||||
# Opciones de clonacion
|
||||
flag=$6
|
||||
WHOLE=${flag:0:1}
|
||||
DELFILE=${flag:1:1}
|
||||
COMPRESS=${flag:2:1}
|
||||
|
||||
# Nota los valores se pasan como variables de entorno,
|
||||
# la idea es que mas adelante vayan en el fichero PXE.
|
||||
[ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
|
||||
[ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
|
||||
[ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
|
||||
|
||||
# Origen de la imagen.
|
||||
[ $8 -eq 0 ] && DEST="CACHE" || DEST="REPO"
|
||||
|
||||
# Protocolo de clonacion y opciones
|
||||
PROTO=${5%_*}
|
||||
OPT=${5#*_}
|
||||
|
||||
restoreBaseImage $DEST "$3" $1 $2 $PROTO $OPT
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
exit $RETVAL
|
|
@ -1,82 +0,0 @@
|
|||
#!/bin/bash
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# RESTAURAR IMAGEN INCREMENTAL
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Parámetros recibidos desde el cliente:
|
||||
#
|
||||
# $1 Número de disco
|
||||
# $2 Número de particion
|
||||
# $3 Nombre canónico de la imagen básica (sin extensión)
|
||||
# $4 Dirección del repositorio
|
||||
# $5 Nombre canónico del software incremental (sin extensión)
|
||||
# $6 Tipo de transmisión 0=Unicast 1=Multicast
|
||||
# $7 Es una cadena "nnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnn" donde "n" vale 0 ó 1.
|
||||
# 1XX: Gestionar fichero completo en lugar de diferencas
|
||||
# X1X: Eliminar archivos de la partición que no estén en la imagen
|
||||
# XX1: Comprimir archivos para enviarlos por la red
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $8 Es una cadena "nnnn" tipo flags que codifica varios parametros.
|
||||
# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
|
||||
# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
|
||||
# X1XX: Copiar Imagen básica también a la cache
|
||||
# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
|
||||
# XXX1: No borrar archivos en destino
|
||||
# El valor X indica que no importa el valor que tenga el dato
|
||||
# $9 Método de clonación 0=Desde caché 1=Desde repositorio
|
||||
# $10 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
|
||||
# $11 Ruta de origen de la Imagen (Carpeta)
|
||||
|
||||
#___________________________________________________________________
|
||||
#
|
||||
# Control parámetros
|
||||
#___________________________________________________________________
|
||||
#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 seguimiento para httpdlog
|
||||
echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND
|
||||
|
||||
# Registro de inicio de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_START $0 $*"
|
||||
|
||||
|
||||
if [ ${10} -eq 1 ]; then
|
||||
#sincronizacion1
|
||||
ogRestaurarSoftIncremental "$@"
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
if [ ${10} -eq 2 ]; then
|
||||
#sincronizacion2
|
||||
# Opciones de clonacion
|
||||
flag=$7
|
||||
WHOLE=${flag:0:1}
|
||||
DELFILE=${flag:1:1}
|
||||
COMPRESS=${flag:2:1}
|
||||
|
||||
# Nota los valores se pasan como variables de entorno,
|
||||
# la idea es que mas adelante vayan en el fichero PXE.
|
||||
[ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
|
||||
[ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
|
||||
[ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
|
||||
|
||||
# Origen de la imagen.
|
||||
[ $9 -eq 0 ] && DEST="CACHE" || DEST="REPO"
|
||||
|
||||
# Protocolo de clonacion y opciones
|
||||
PROTO=${6%_*}
|
||||
OPT=${6#*_}
|
||||
|
||||
restoreDiffImage $DEST "$3" "$5" $1 $2 $PROTO $OPT
|
||||
RETVAL=$?
|
||||
fi
|
||||
|
||||
# Registro de fin de ejecución
|
||||
ogEcho log session "$MSG_INTERFACE_END $RETVAL"
|
||||
|
||||
exit $RETVAL
|
Loading…
Reference in New Issue