source: admin/Sources/Services/ogAdmRepoAux @ 4f70c64

configure-oglivelgromero-new-oglivemainmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineoglive-ipv6test-python-scriptsticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacion
Last change on this file since 4f70c64 was c28eefa, checked in by Natalia Serrano <natalia.serrano@…>, 21 months ago

Log to syslog in a number of shell scripts

  • Property mode set to 100755
File size: 9.7 KB
RevLine 
[8fc9552]1#!/bin/bash
2PARM=`cat`
[cad1e1b]3#PARM=$@
4
[8fc9552]5
[e8460d2]6#TODO:  ticket 379
7#buscar parametro de identificador de operacion.
8#usar parametro de identificacion para anexarlo al nombre de log
9#Comprobar si la variable está seteas.
10#Si no lo está setearla.
11#Si esta seteada (en progreso) salir.
12
13
[cad1e1b]14TIME=$SECONDS
[e8460d2]15
[aa91bf5]16BASEDIR=/opt/opengnsys
[7f7068e]17PATH=$PATH:$BASEDIR/bin
[aa91bf5]18REPONAME=ogAdmRepo
[cad1e1b]19REPODIR="$BASEDIR/images/"
20
[87a78ad6]21# Para las sincronizadas
22# BACKUP: Define si se realiza copia de seguridad al crear una imagen (true|false).
[d72ef09]23# IMGFS: Sistema de ficheros al crear las sincronizadas tipo archivo (EXT4|BTRFS).
24[ -z $OGENGINECONFIGURATE ] && source $BASEDIR/client/etc/engine.cfg
25# FS segun la configuracion y la version del kernel. ext4 para < 3.7, para >= BTRFS
[332bbb1]26KERNEL=$(file -bkr /opt/opengnsys/tftpboot/ogclient/ogvmlinuz |awk '/Linux/ {for(i=1;i<=NF;i++) if($i~/version/) {v=$(i+1);printf("%d",v);sub(/[0-9]*\./,"",v);printf(".%02d",v)}}')
[81ae95c]27[ $KERNEL \< 3.07 ] &&  IMGFS="EXT4"  || IMGFS=${IMGFS:-"BTRFS"}
[aa91bf5]28
[7f7068e]29# Añade registro de incidencias.
30function echolog () {
[c28eefa]31        logger --tag $0 --priority local0.info "$*"
32        echo "$*"
[7f7068e]33}
34
[f456755]35function mountImage () {
36        #@param 1 image_file
37        #@param 2 mount_dir
38        #@param 3 openciones mount
39        [ "$3" != "" ] && OPTMOUNT=" -o $3 "   
40        # Si está montado nada que hacer
41        df |grep "$2$"  2>&1 >/dev/null  && return 0
[e1b9340]42        # FS de la imagen segun el contenido del archivo .img
43        if file "$1" |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then
[f456755]44                echolog "mount $OPTMOUNT -t ext4 $1 $2"
45                mount $OPTMOUNT -t ext4 $1 $2
46        else
47                echolog "mount $OPTMOUNT -o compress=lzo  $1 $2"
48                mount $OPTMOUNT -o compress=lzo  "$1" "$2"
49        fi
[81ae95c]50        # Si esta montado da error 32, lo damos como bueno
51        RETVAL=$?
52        [ $RETVAL -eq 32 ] && RETVAL=0
53        return $RETVAL
[f456755]54}
55
[cad1e1b]56
[8fc9552]57PARM1=$(echo $PARM | cut -f1 -d" ")
58PARM2=$(echo $PARM | cut -f2 -d" ")
59PARM3=$(echo $PARM | cut -f3 -d" ")
60PARM4=$(echo $PARM | cut -f4 -d" ")
61
[f456755]62# Determinamos el tipo de sistema de fichero de las imagenes segun el kernel que tenga
63
64
[7f7068e]65case "$PARM1" in
[8fc9552]66        START_MULTICAST)
[aa91bf5]67                #1 START_MULTICAST
68                #2 fichero a enviar
69                #3 opciones de multicast
[7f7068e]70                FILE="$PARM2"
71                MCASTOPT="$PARM3"
72                echolog "Ejecutar $(which sendFileMcast) $FILE $MCASTOPT"
[c28eefa]73                sendFileMcast $FILE $MCASTOPT |logger --tag $0 --priority local0.info
[e8460d2]74                case $? in
[7f7068e]75                        1)  echolog "Parametros insuficientes"
[d473bb92]76                            exit 1 ;;
[7f7068e]77                        2)  echolog "Fichero no accesible"
[d473bb92]78                            exit 2 ;;
[7f7068e]79                        3)  echolog "Sesion multicast no valida"
[d473bb92]80                            exit 3 ;;
[e8460d2]81                esac
[35a3e22]82        ;;
[cad1e1b]83        CREATE_IMAGE)
84                # Creamos/Redimensionamos el fichero de imagen y lo montamos para que se pueda escribir sobre el
85                #1 CREATE_IMAGE
86                #2 nombre imagen
[e24b042]87                #3 tipo de imagen [ img | diff ]
[cad1e1b]88                #4 tamaño imagen
[f456755]89                LOOPDEVICE=$(losetup -f)
90                DIRMOUNT="$REPODIR/mount/$PARM2"
[e24b042]91                if [ "$PARM3" == "img" ] ; then
92                        IMGEXT="img"
93                else
94                        IMGEXT="img.diff"
[f456755]95                        DIRMOUNT="$DIRMOUNT.diff"
[e24b042]96                fi
[cad1e1b]97                IMGFILE="$REPODIR/$PARM2.$IMGEXT"
98                IMGDIR="$(dirname $IMGFILE)"
99                [ -d  $IMGDIR ] || mkdir -p $IMGDIR
[f456755]100                mkdir -p "$DIRMOUNT"
[cad1e1b]101
[c8bbcdc]102                LOCKFILE="$IMGFILE.lock"
103
[cad1e1b]104                SIZEREQUIRED="$PARM4"
105
[f456755]106                # Si existe la imagen hacemos copia de seguridad y la redimesionamos
[cad1e1b]107                if [ -f "$IMGFILE" ]; then
[0109c07]108                    echolog "La imagen $IMGFILE ya existe."
[f456755]109                    # TODO modificar ogGetImageSize
110                    IMGSIZE=$(ls -l --block-size=1024 $IMGFILE| cut -f5 -d" ")
111
[87a78ad6]112                    if [ "$BACKUP" == "true" -o "$BACKUP" == "TRUE"  -o $IMGSIZE -lt $SIZEREQUIRED ]; then
[f456755]113                        # Si la imagen esta montada la desmonto
114                        if [ -r "$DIRMOUNT/ogimg.info" ]; then
115                                echolog "umount $DIRMOUNT"
116                                umount "$DIRMOUNT"
117                                [ $? -ne 0 ] && echolog "Error: No podemos desmontar la imagen para hacer copia de seguridad o redimensionar" && exit 1
118                        fi
[cad1e1b]119                    fi
[f456755]120
121                    # Copia de seguridad de la imagen
[87a78ad6]122                    if [ "$BACKUP" == "true" -o "$BACKUP" == "TRUE" ]; then
[cad1e1b]123                        echolog "Copia de seguridad de la imagen anterior"
124                        echolog "cp  $IMGFILE $IMGFILE.ant"
125                        cp  "$IMGFILE" "$IMGFILE.ant"
126                        echolog mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
127                        mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
128                    fi
129
130                    # Redimensionamos la imagen al tamaño necesario
131                    if [ $IMGSIZE -lt $SIZEREQUIRED ];then
[f456755]132                        echolog "Redimensionamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
[cad1e1b]133                        echolog "truncate --size=\">$SIZEREQUIRED\"k $IMGFILE"
[c28eefa]134                        truncate --size=">$SIZEREQUIRED"k $IMGFILE 2>&1 |logger --tag $0 --priority local0.info
[e1b9340]135                        # FS de la imagen segun el contenido del archivo .img
136                        if file "$IMGFILE" |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then
[f456755]137                           losetup $LOOPDEVICE "$IMGFILE"
138                           echolog "resize2fs -f $LOOPDEVICE"
[c28eefa]139                           resize2fs -f $LOOPDEVICE |logger --tag $0 --priority local0.info
[f456755]140                        else
141                           mount -o compress=lzo  "$IMGFILE" "$DIRMOUNT"
142                           echolog "btrfs filesystem resize max $DIRMOUNT"
[c28eefa]143                           btrfs filesystem resize max "$DIRMOUNT"  2>&1 |logger --tag $0 --priority local0.info
[f456755]144                        fi
[cad1e1b]145                    fi
146
147
[f456755]148                # Si no existe la imagen creamos el fichero.   
[cad1e1b]149                else
150                    echolog "Creamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
[b8969db]151                    touch "$IMGFILE"
152                    echolog "truncate --size=\">$SIZEREQUIRED\"k $IMGFILE"
[c28eefa]153                    truncate --size=">$SIZEREQUIRED"k $IMGFILE 2>&1 |logger --tag $0 --priority local0.info
[cad1e1b]154                    #Formateamos imagen
155                    echo losetup $LOOPDEVICE "$IMGFILE"
156                    losetup $LOOPDEVICE "$IMGFILE"
[f456755]157                    if [ $IMGFS == "EXT4" ] ; then
158                        echolog "      mkfs.ext4 -i 4096  -b 4096 -L ${PARM2##*\/} $LOOPDEVICE"
159                        mkfs.ext4 -i 4096  -b 4096 -L ${PARM2##*\/} $LOOPDEVICE
160                    else
161                        echolog mkfs.btrfs  -L ${PARM2##*\/} $LOOPDEVICE
162                        mkfs.btrfs  -L ${PARM2##*\/} $LOOPDEVICE #&> $OGLOGCOMMAND
163                    fi
[cad1e1b]164                fi
165                # Montamos la imagen.
[f456755]166                mountImage "$IMGFILE" "$DIRMOUNT"
[81ae95c]167                if [ $? -ne 0 ]; then
[0109c07]168                        rmdir "$DIRMOUNT"
[c28eefa]169                        echolog "Error al crear/redimensionar la imagen"
[81ae95c]170                        exit 1
[0109c07]171                fi
[f456755]172
[c8bbcdc]173                #touch "$DIRMOUNT/ogimg.info"
174                echo "mounted"> "$LOCKFILE"
[cad1e1b]175                TIME2=$[SECONDS-TIME]
176                echolog "Fin creación/redimension de la  imagen: $[TIME2/60]m $[TIME2%60]s"
[8361974]177                # Si existe dispositivo loop lo borramos.
[f456755]178                [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null  &&  losetup -d $LOOPDEVICE
[cad1e1b]179                # TODO: comprobar que no se quede el losetup bloqueado.
180
181        ;;
182        MOUNT_IMAGE)
183                # Montamos el fichero imagen para que se pueda
184                #1 MOUNT_IMAGE
185                #2 nombre imagen
[e24b042]186                #3 tipo de imagen [ img | diff ]
[f456755]187                DIRMOUNT="$REPODIR""mount/$PARM2"
[e24b042]188                if [ "$PARM3" == "img" ] ; then
189                        IMGEXT="img"
190                else
191                        IMGEXT="img.diff"
[f456755]192                        DIRMOUNT="$DIRMOUNT.diff"
[e24b042]193                fi
194                IMGFILE="$REPODIR/$PARM2.$IMGEXT"
[cad1e1b]195                echolog "Montamos la imagen $IMGFILE "
[f456755]196                mkdir -p "$DIRMOUNT"
197                mountImage "$IMGFILE" "$DIRMOUNT"  ro || (echolog "Error al montar la imagen"; exit 1)
[cad1e1b]198        ;;
199        UMOUNT_IMAGE)
200                # Desmontamos el fichero imagen.
[c8bbcdc]201                # Si el directorio esta ocupado no se desmontará
[cad1e1b]202                #1 UMOUNT_IMAGE
203                #2 nombre imagen
[e24b042]204                #3 tipo de imagen [ img | diff ]
205                IMGTYPE="$PARM3"
[f456755]206                DIRMOUNT="$REPODIR/mount/$PARM2"
[c8bbcdc]207                if [ "$IMGTYPE" == "img" ]; then
208                        IMGEXT="img"
209                else
210                        DIRMOUNT="$DIRMOUNT.$IMGTYPE"
211                        IMGEXT="img.diff"
212                fi
213                LOCKFILE="$REPODIR/$PARM2.$IMGEXT.lock"
[8361974]214                echolog "Desmontamos la imagen $PARM2 $PARM3 "
[f456755]215                umount $DIRMOUNT
216                rmdir $DIRMOUNT
[c8bbcdc]217                [ -f $LOCKFILE ] && sed -i s/mounted//g $LOCKFILE
[cad1e1b]218
219        ;;
[cd1f048]220        REDUCE_IMAGE)
221                # Reduce el archivo de la imagen a tamaño datos + 500M
222                #1 REDUCE_IMAGE
223                #2 Nombre Imagen
[e24b042]224                #3 Tipo de imagen [ img |diff ]
[c8bbcdc]225                DIRMOUNT="${REPODIR}mount/${PARM2}"
[e24b042]226                if [ "$PARM3" == "img" ] ; then
227                        IMGEXT="img"
228                else
229                        IMGEXT="img.diff"
[f456755]230                        DIRMOUNT="$DIRMOUNT.diff"
[e24b042]231                fi
[cd1f048]232                IMGFILE="$REPODIR$PARM2.$IMGEXT"
[c8bbcdc]233                LOCKFILE="$IMGFILE.lock"
[8361974]234                [ ! -f $IMGFILE ] && echolog "Imagen $IMGFILE no existe" && exit 1
[cd1f048]235
[d34255f]236                # Para imagenes EXT4 reduzco, para BTRFS solo desmonto.
237                if file $IMGFILE |grep -i -e " ext4 filesystem " 2>&1 > /dev/null ; then
[cd1f048]238
[d34255f]239                    [ -d $DIRMOUNT ] || mkdir $DIRMOUNT
240                    mountImage "$IMGFILE" "$DIRMOUNT" || (echolog "Error al montar la imagen $IMGFILE"; exit 1)
[81ae95c]241
[f456755]242               
[d34255f]243                    # Si el espacio libre menor que 200Mb desmontamos la imagen y nos salimos
[81ae95c]244                    AVAILABLE=$(df -k|grep $DIRMOUNT|awk '{print $4}')
[d34255f]245                    if [ $AVAILABLE -lt 200000 ]; then
[e24b042]246                     echolog "reducir imagen REPO $PARM2 $IMGEXT. tamaño minimo, nada que hacer"
[81ae95c]247                     umount $DIRMOUNT || (echolog "Error al desmontar la imagen $IMGFILE"; exit 1)
248                    else
[f456755]249
[81ae95c]250                     # Calculamos la diferencia entre el tamaño interno y externo
251                     EXTSIZE=$(ls -l --block-size=1024 $IMGFILE | cut -f5 -d" ")
252                     INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
253                     let EDGESIZE=$EXTSIZE-$INTSIZE
254
255                     echolog "reducir imagen REPO $PARM2 $IMGEXT, tamaño final: $ENDSIZE"
256                     umount $DIRMOUNT
257                     LOOPDEVICE=$(losetup -f)
258                     losetup $LOOPDEVICE "$IMGFILE"
259
260                     # Redimensiono sistema de ficheros
261                     echolog "resize2fs -fpM $LOOPDEVICE "
[c28eefa]262                     resize2fs -fpM $LOOPDEVICE # 2>&1 |logger --tag $0 --priority local0.info
[81ae95c]263                     mountImage "$IMGFILE" "$DIRMOUNT"
264                     # Calculamos el tamaño final del archivo
265                     INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
266                     let EXTSIZE=$INTSIZE+$EDGESIZE
267                     umount $DIRMOUNT  || (echolog "Error al desmontar la imagen $IMGFILE"; exit 1)
268                     # Si existe dispositivo loop lo borramos.
269                     [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null  &&  losetup -d $LOOPDEVICE
270                     # Corto el archivo al tamaño del sistema de ficheros
271                     echo "truncate --size=\"$EXTSIZE\"k $IMGFILE"
272                     echolog "truncate --size=\"$EXTSIZE\"k $IMGFILE"
273                     truncate --size="$EXTSIZE"k $IMGFILE
274                    fi
[d34255f]275                else
276                    umount $DIRMOUNT  || (echolog "Error al desmontar la imagen $IMGFILE"; exit 1)
277                fi
[f456755]278                rmdir $DIRMOUNT
[c8bbcdc]279                echo "reduced" >$LOCKFILE
[e24b042]280
[cd1f048]281        ;;
[35a3e22]282        default)
[7f7068e]283            echolog "Solicitud con parametros  \"$PARM\"  no realizada, no registrada o con errores"
[8fc9552]284        ;;
[7f7068e]285esac
Note: See TracBrowser for help on using the repository browser.