summaryrefslogtreecommitdiffstats
path: root/admin/Sources/Services/ogAdmRepoAux
diff options
context:
space:
mode:
Diffstat (limited to 'admin/Sources/Services/ogAdmRepoAux')
-rwxr-xr-xadmin/Sources/Services/ogAdmRepoAux163
1 files changed, 111 insertions, 52 deletions
diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux
index 7e9c2b45..b7efe1dc 100755
--- a/admin/Sources/Services/ogAdmRepoAux
+++ b/admin/Sources/Services/ogAdmRepoAux
@@ -21,13 +21,36 @@ MCASTLOGBASE=$BASEDIR/log/mcastlog
MCASTLOG=$MCASTLOGBASE/ogAdmRepoMcast.`date +%Y%m%d-%H%M%S`
REPODIR="$BASEDIR/images/"
+# Para las sincronizadas
BACKUP=$(grep BACKUP /opt/opengnsys/client/etc/engine.cfg| cut -d= -f2)
+# FS segun kernel. ext4 para < 3.7, para >= BTRFS
+#KERNEL=$(file $BASEDIR/tftpboot/ogclient/ogvmlinuz |awk '{print $9}')
+#[[ "$KERNEL" < "3.7" ]] && IMGFS="EXT4" || IMGFS="BTRFS"
+KERNEL=$(file $BASEDIR/tftpboot/ogclient/ogvmlinuz |awk -F . '{print $2}')
+[ $KERNEL -lt 7 ] && IMGFS="EXT4" || IMGFS="BTRFS"
# Añade registro de incidencias.
function echolog () {
date +"%Y%m%d-%H%M%S $*" >> $REPOLOG
}
+function mountImage () {
+ #@param 1 image_file
+ #@param 2 mount_dir
+ #@param 3 openciones mount
+ [ "$3" != "" ] && OPTMOUNT=" -o $3 "
+ # Si está montado nada que hacer
+ df |grep "$2$" 2>&1 >/dev/null && return 0
+ if [ $IMGFS == "EXT4" ]; then
+ echolog "mount $OPTMOUNT -t ext4 $1 $2"
+ mount $OPTMOUNT -t ext4 $1 $2
+ else
+ echolog "mount $OPTMOUNT -o compress=lzo $1 $2"
+ mount $OPTMOUNT -o compress=lzo "$1" "$2"
+ fi
+ return $?
+}
+
mkdir -p $MCASTLOGBASE
@@ -36,6 +59,9 @@ PARM2=$(echo $PARM | cut -f2 -d" ")
PARM3=$(echo $PARM | cut -f3 -d" ")
PARM4=$(echo $PARM | cut -f4 -d" ")
+# Determinamos el tipo de sistema de fichero de las imagenes segun el kernel que tenga
+
+
case "$PARM1" in
START_MULTICAST)
#1 START_MULTICAST
@@ -60,30 +86,37 @@ case "$PARM1" in
#2 nombre imagen
#3 tipo de imagen [ img | diff ]
#4 tamaño imagen
- MOUNTDIR="$REPODIR/mount/$PARM2"
+ LOOPDEVICE=$(losetup -f)
+ DIRMOUNT="$REPODIR/mount/$PARM2"
if [ "$PARM3" == "img" ] ; then
IMGEXT="img"
else
IMGEXT="img.diff"
- MOUNTDIR="$MOUNTDIR.diff"
+ DIRMOUNT="$DIRMOUNT.diff"
fi
IMGFILE="$REPODIR/$PARM2.$IMGEXT"
IMGDIR="$(dirname $IMGFILE)"
[ -d $IMGDIR ] || mkdir -p $IMGDIR
- mkdir -p "$MOUNTDIR"
+ mkdir -p "$DIRMOUNT"
SIZEREQUIRED="$PARM4"
+ # Si existe la imagen hacemos copia de seguridad y la redimesionamos
if [ -f "$IMGFILE" ]; then
- echolog "Redimensionamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
- # Copia de seguridad de la imagen
- # Si la imagen esta montada la desmonto
- if [ -r "$MOUNTDIR/ogimg.info" ]; then
- echolog "umount $MOUNTDIR"
- umount "$MOUNTDIR"
- [ $? -ne 0 ] && echolog "Error: No podemos desmontar la imagen para hacer copia de seguridad" && exit 1
+ # TODO modificar ogGetImageSize
+ IMGSIZE=$(ls -l --block-size=1024 $IMGFILE| cut -f5 -d" ")
+
+ if [ "$BACKUP" == "true" -o $IMGSIZE -lt $SIZEREQUIRED ]; then
+ # Si la imagen esta montada la desmonto
+ if [ -r "$DIRMOUNT/ogimg.info" ]; then
+ echolog "umount $DIRMOUNT"
+ umount "$DIRMOUNT"
+ [ $? -ne 0 ] && echolog "Error: No podemos desmontar la imagen para hacer copia de seguridad o redimensionar" && exit 1
+ fi
fi
+
+ # Copia de seguridad de la imagen
if [ "$BACKUP" == "true" ]; then
echolog "Copia de seguridad de la imagen anterior"
echolog "cp $IMGFILE $IMGFILE.ant"
@@ -93,41 +126,48 @@ case "$PARM1" in
fi
# Redimensionamos la imagen al tamaño necesario
- # TODO modificar ogGetImageSize
- IMGSIZE=$(ls -l --block-size=1024 $IMGFILE| cut -f5 -d" ")
if [ $IMGSIZE -lt $SIZEREQUIRED ];then
+ echolog "Redimensionamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
echolog "truncate --size=\">$SIZEREQUIRED\"k $IMGFILE"
truncate --size=">$SIZEREQUIRED"k $IMGFILE 2>&1 > $REPOLOG
# Montamos la imagen, si da error nos salimos
- mount -o compress=lzo "$IMGFILE" "$MOUNTDIR"
- echolog "btrfs filesystem resize max $MOUNTDIR"
- btrfs filesystem resize max "$MOUNTDIR" 2>&1 > $REPOLOG
-
+ if [ $IMGFS == "EXT4" ]; then
+ losetup $LOOPDEVICE "$IMGFILE"
+ echolog "resize2fs -f $LOOPDEVICE"
+ resize2fs -f $LOOPDEVICE &> $REPOLOG
+ else
+ mount -o compress=lzo "$IMGFILE" "$DIRMOUNT"
+ echolog "btrfs filesystem resize max $DIRMOUNT"
+ btrfs filesystem resize max "$DIRMOUNT" 2>&1 > $REPOLOG
+ fi
fi
-
+ # Si no existe la imagen creamos el fichero.
else
echolog "Creamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
echolog dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED
dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED
#Formateamos imagen
- LOOPDEVICE=$(losetup -f)
echo losetup $LOOPDEVICE "$IMGFILE"
losetup $LOOPDEVICE "$IMGFILE"
- echo mkfs.btrfs -L ${PARM2##*\/} $LOOPDEVICE
- mkfs.btrfs -L ${PARM2##*\/} $LOOPDEVICE #&> $OGLOGCOMMAND
-
+ if [ $IMGFS == "EXT4" ] ; then
+ echolog " mkfs.ext4 -i 4096 -b 4096 -L ${PARM2##*\/} $LOOPDEVICE"
+ mkfs.ext4 -i 4096 -b 4096 -L ${PARM2##*\/} $LOOPDEVICE
+ else
+ echolog mkfs.btrfs -L ${PARM2##*\/} $LOOPDEVICE
+ mkfs.btrfs -L ${PARM2##*\/} $LOOPDEVICE #&> $OGLOGCOMMAND
+ fi
fi
# Montamos la imagen.
- echolog "mount -o compress=lzo $IMGFILE $MOUNTDIR"
- mount -o compress=lzo "$IMGFILE" "$MOUNTDIR"
- [ "$?" == "0" -o "$?" == "32" ] || (echolog "Error al crear/redimensionar la imagen"; exit 1)
- touch "$MOUNTDIR/ogimg.info"
+ mountImage "$IMGFILE" "$DIRMOUNT"
+ [ "$?" == "0" ] || (echo salida=$?; echolog "Error al crear/redimensionar la imagen"; exit 1)
+
+ touch "$DIRMOUNT/ogimg.info"
TIME2=$[SECONDS-TIME]
echolog "Fin creación/redimension de la imagen: $[TIME2/60]m $[TIME2%60]s"
# Si existe dispositivo loop lo borramos.
- [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE
+ [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null && losetup -d $LOOPDEVICE
# TODO: comprobar que no se quede el losetup bloqueado.
;;
@@ -136,31 +176,30 @@ case "$PARM1" in
#1 MOUNT_IMAGE
#2 nombre imagen
#3 tipo de imagen [ img | diff ]
- MOUNTDIR="$REPODIR/mount/$PARM2"
+ DIRMOUNT="$REPODIR""mount/$PARM2"
if [ "$PARM3" == "img" ] ; then
IMGEXT="img"
else
IMGEXT="img.diff"
- MOUNTDIR="$MOUNTDIR.diff"
+ DIRMOUNT="$DIRMOUNT.diff"
fi
IMGFILE="$REPODIR/$PARM2.$IMGEXT"
echolog "Montamos la imagen $IMGFILE "
- mkdir -p "$MOUNTDIR"
- mount -o ro,compress=lzo "$IMGFILE" "$MOUNTDIR"
- [ "$?" == "0" ] || (echolog "Error al montar la imagen"; exit 1)
+ mkdir -p "$DIRMOUNT"
+ mountImage "$IMGFILE" "$DIRMOUNT" ro || (echolog "Error al montar la imagen"; exit 1)
;;
UMOUNT_IMAGE)
# Desmontamos el fichero imagen.
- # Si el directorio esta ocupado no se desmontará
+ # Si el directorio esta ocupado no se desmontará
#1 UMOUNT_IMAGE
#2 nombre imagen
#3 tipo de imagen [ img | diff ]
IMGTYPE="$PARM3"
- MOUNTDIR="$REPODIR/mount/$PARM2"
- [ "$IMGTYPE" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGTYPE"
+ DIRMOUNT="$REPODIR/mount/$PARM2"
+ [ "$IMGTYPE" == "diff" ] && DIRMOUNT="$DIRMOUNT.$IMGTYPE"
echolog "Desmontamos la imagen $PARM2 $PARM3 "
- umount $MOUNTDIR
- rmdir $MOUNTDIR
+ umount $DIRMOUNT
+ rmdir $DIRMOUNT
;;
REDUCE_IMAGE)
@@ -168,38 +207,58 @@ case "$PARM1" in
#1 REDUCE_IMAGE
#2 Nombre Imagen
#3 Tipo de imagen [ img |diff ]
- MOUNTDIR="$REPODIR""mount/${PARM2}"
+ DIRMOUNT="$REPODIR""mount/${PARM2}"
if [ "$PARM3" == "img" ] ; then
IMGEXT="img"
else
IMGEXT="img.diff"
- MOUNTDIR="$MOUNTDIR.diff"
+ DIRMOUNT="$DIRMOUNT.diff"
fi
IMGFILE="$REPODIR$PARM2.$IMGEXT"
[ ! -f $IMGFILE ] && echolog "Imagen $IMGFILE no existe" && exit 1
- [ -d $MOUNTDIR ] || mkdir $MOUNTDIR
- mount -o compress=lzo "$IMGFILE" "$MOUNTDIR"
- AVAILABLE=$(df -k|grep $MOUNTDIR|awk '{print $4}')
+ # Solo funciona si la imagen es ext4, si no nos salimos sin error
+ file $IMGFILE |grep -i -e " ext4 filesystem " 2>&1 > /dev/null || exit 0
+ [ -d $DIRMOUNT ] || mkdir $DIRMOUNT
+ mountImage "$IMGFILE" "$DIRMOUNT" || (echolog "Error al montar la imagen"; exit 1)
+
# Si el espacio libre menor que 500Mb desmontamos la imagen y nos salimos
- if [ $AVAILABLE -lt 500000 ]; then
+ AVAILABLE=$(df -k|grep $DIRMOUNT|awk '{print $4}')
+ if [ $AVAILABLE -lt 200000 ]; then
echolog "reducir imagen REPO $PARM2 $IMGEXT. tamaño minimo, nada que hacer"
- umount $MOUNTDIR
- rmdir $MOUNTDIR
+ umount $DIRMOUNT
+ rmdir $DIRMOUNT
exit 0
fi
- USED=$(df -k|grep $MOUNTDIR|awk '{print $3}')
- let ENDSIZE=USED+500000
+ # 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
+
echolog "reducir imagen REPO $PARM2 $IMGEXT, tamaño final: $ENDSIZE"
- echolog btrfs filesystem resize "$ENDSIZE"k $MOUNTDIR
- btrfs filesystem resize "$ENDSIZE"k $MOUNTDIR
- umount $MOUNTDIR
- echolog "truncate --size=\"$ENDSIZE\"k $IMGFILE"
- truncate --size="$ENDSIZE"k $IMGFILE
+ umount $DIRMOUNT
+ LOOPDEVICE=$(losetup -f)
+ losetup $LOOPDEVICE "$IMGFILE"
+
+ # Redimensiono sistema de ficheros
+ echolog "resize2fs -fpM $LOOPDEVICE "
+ resize2fs -fpM $LOOPDEVICE # 2>&1 > $REPOLOG
+ mountImage "$IMGFILE" "$DIRMOUNT"
+ # Calculamos el tamaño final del archivo
+ INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
+ let EXTSIZE=$INTSIZE+$EDGESIZE
+ umount $DIRMOUNT
+ # Si existe dispositivo loop lo borramos.
+ [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null && losetup -d $LOOPDEVICE
+ # Corto el archivo al tamaño del sistema de ficheros
+ echo "truncate --size=\"$EXTSIZE\"k $IMGFILE"
+ echolog "truncate --size=\"$EXTSIZE\"k $IMGFILE"
+ truncate --size="$EXTSIZE"k $IMGFILE
+
+ rmdir $DIRMOUNT
- rmdir $MOUNTDIR
;;
default)
echolog "Solicitud con parametros \"$PARM\" no realizada, no registrada o con errores"