refs #1591 remove "imagenes sincronizadas"

pull/8/head
Natalia Serrano 2025-02-25 10:11:26 +01:00
parent f1e6810d5a
commit fe61288f83
14 changed files with 0 additions and 3103 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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