source: admin/Sources/Services/ogAdmRepoAux @ c7df6bf

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since c7df6bf was d473bb92, checked in by irina <irinagomez@…>, 11 years ago

ogAdmRepoAux: cambio return por exit para salidas con error

git-svn-id: https://opengnsys.es/svn/branches/version1.0@4107 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 8.6 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
19REPOLOG=$BASEDIR/log/$REPONAME.log
[e8460d2]20MCASTLOGBASE=$BASEDIR/log/mcastlog
21MCASTLOG=$MCASTLOGBASE/ogAdmRepoMcast.`date +%Y%m%d-%H%M%S`
[cad1e1b]22REPODIR="$BASEDIR/images/"
23
[f456755]24# Para las sincronizadas
[cad1e1b]25BACKUP=$(grep BACKUP /opt/opengnsys/client/etc/engine.cfg| cut -d= -f2)
[f456755]26# FS segun kernel. ext4 para < 3.7, para >= BTRFS
27#KERNEL=$(file $BASEDIR/tftpboot/ogclient/ogvmlinuz |awk '{print $9}')
28#[[ "$KERNEL" < "3.7" ]] && IMGFS="EXT4" || IMGFS="BTRFS"
29KERNEL=$(file $BASEDIR/tftpboot/ogclient/ogvmlinuz |awk -F . '{print $2}')
30[ $KERNEL -lt 7 ] && IMGFS="EXT4" || IMGFS="BTRFS"
[aa91bf5]31
[7f7068e]32# Añade registro de incidencias.
33function echolog () {
34        date +"%Y%m%d-%H%M%S $*" >> $REPOLOG
35}
36
[f456755]37function mountImage () {
38        #@param 1 image_file
39        #@param 2 mount_dir
40        #@param 3 openciones mount
41        [ "$3" != "" ] && OPTMOUNT=" -o $3 "   
42        # Si está montado nada que hacer
43        df |grep "$2$"  2>&1 >/dev/null  && return 0
44        if [ $IMGFS == "EXT4" ]; then
45                echolog "mount $OPTMOUNT -t ext4 $1 $2"
46                mount $OPTMOUNT -t ext4 $1 $2
47        else
48                echolog "mount $OPTMOUNT -o compress=lzo  $1 $2"
49                mount $OPTMOUNT -o compress=lzo  "$1" "$2"
50        fi
51        return $?
52}
53
[e8460d2]54mkdir -p $MCASTLOGBASE
[8fc9552]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"
73                sendFileMcast $FILE $MCASTOPT &>> $MCASTLOG
[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
100
[f456755]101                mkdir -p "$DIRMOUNT"
[cad1e1b]102
103                SIZEREQUIRED="$PARM4"
104
[f456755]105                # Si existe la imagen hacemos copia de seguridad y la redimesionamos
[cad1e1b]106                if [ -f "$IMGFILE" ]; then
[f456755]107                    # TODO modificar ogGetImageSize
108                    IMGSIZE=$(ls -l --block-size=1024 $IMGFILE| cut -f5 -d" ")
109
110                    if [ "$BACKUP" == "true" -o $IMGSIZE -lt $SIZEREQUIRED ]; then
111                        # Si la imagen esta montada la desmonto
112                        if [ -r "$DIRMOUNT/ogimg.info" ]; then
113                                echolog "umount $DIRMOUNT"
114                                umount "$DIRMOUNT"
115                                [ $? -ne 0 ] && echolog "Error: No podemos desmontar la imagen para hacer copia de seguridad o redimensionar" && exit 1
116                        fi
[cad1e1b]117                    fi
[f456755]118
119                    # Copia de seguridad de la imagen
[cad1e1b]120                    if [ "$BACKUP" == "true" ]; then
121                        echolog "Copia de seguridad de la imagen anterior"
122                        echolog "cp  $IMGFILE $IMGFILE.ant"
123                        cp  "$IMGFILE" "$IMGFILE.ant"
124                        echolog mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
125                        mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
126                    fi
127
128                    # Redimensionamos la imagen al tamaño necesario
129                    if [ $IMGSIZE -lt $SIZEREQUIRED ];then
[f456755]130                        echolog "Redimensionamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
[cad1e1b]131                        echolog "truncate --size=\">$SIZEREQUIRED\"k $IMGFILE"
132                        truncate --size=">$SIZEREQUIRED"k $IMGFILE 2>&1 > $REPOLOG
133                        # Montamos la imagen, si da error nos salimos
[f456755]134                        if [ $IMGFS == "EXT4" ]; then
135                           losetup $LOOPDEVICE "$IMGFILE"
136                           echolog "resize2fs -f $LOOPDEVICE"
137                           resize2fs -f $LOOPDEVICE &> $REPOLOG
138                        else
139                           mount -o compress=lzo  "$IMGFILE" "$DIRMOUNT"
140                           echolog "btrfs filesystem resize max $DIRMOUNT"
141                           btrfs filesystem resize max "$DIRMOUNT"  2>&1 > $REPOLOG
142                        fi
[cad1e1b]143                    fi
144
145
[f456755]146                # Si no existe la imagen creamos el fichero.   
[cad1e1b]147                else
148                    echolog "Creamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
149                    echolog dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED
150                    dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED
151                    #Formateamos imagen
152                    echo losetup $LOOPDEVICE "$IMGFILE"
153                    losetup $LOOPDEVICE "$IMGFILE"
[f456755]154                    if [ $IMGFS == "EXT4" ] ; then
155                        echolog "      mkfs.ext4 -i 4096  -b 4096 -L ${PARM2##*\/} $LOOPDEVICE"
156                        mkfs.ext4 -i 4096  -b 4096 -L ${PARM2##*\/} $LOOPDEVICE
157                    else
158                        echolog mkfs.btrfs  -L ${PARM2##*\/} $LOOPDEVICE
159                        mkfs.btrfs  -L ${PARM2##*\/} $LOOPDEVICE #&> $OGLOGCOMMAND
160                    fi
[cad1e1b]161                fi
162                # Montamos la imagen.
[f456755]163                mountImage "$IMGFILE" "$DIRMOUNT"
164                [ "$?" == "0" ] || (echo salida=$?; echolog "Error al crear/redimensionar la imagen"; exit 1)
165
166                touch "$DIRMOUNT/ogimg.info"
[cad1e1b]167                TIME2=$[SECONDS-TIME]
168                echolog "Fin creación/redimension de la  imagen: $[TIME2/60]m $[TIME2%60]s"
[8361974]169                # Si existe dispositivo loop lo borramos.
[f456755]170                [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null  &&  losetup -d $LOOPDEVICE
[cad1e1b]171                # TODO: comprobar que no se quede el losetup bloqueado.
172
173        ;;
174        MOUNT_IMAGE)
175                # Montamos el fichero imagen para que se pueda
176                #1 MOUNT_IMAGE
177                #2 nombre imagen
[e24b042]178                #3 tipo de imagen [ img | diff ]
[f456755]179                DIRMOUNT="$REPODIR""mount/$PARM2"
[e24b042]180                if [ "$PARM3" == "img" ] ; then
181                        IMGEXT="img"
182                else
183                        IMGEXT="img.diff"
[f456755]184                        DIRMOUNT="$DIRMOUNT.diff"
[e24b042]185                fi
186                IMGFILE="$REPODIR/$PARM2.$IMGEXT"
[cad1e1b]187                echolog "Montamos la imagen $IMGFILE "
[f456755]188                mkdir -p "$DIRMOUNT"
189                mountImage "$IMGFILE" "$DIRMOUNT"  ro || (echolog "Error al montar la imagen"; exit 1)
[cad1e1b]190        ;;
191        UMOUNT_IMAGE)
192                # Desmontamos el fichero imagen.
[f456755]193                        # Si el directorio esta ocupado no se desmontará
[cad1e1b]194                #1 UMOUNT_IMAGE
195                #2 nombre imagen
[e24b042]196                #3 tipo de imagen [ img | diff ]
197                IMGTYPE="$PARM3"
[f456755]198                DIRMOUNT="$REPODIR/mount/$PARM2"
199                [ "$IMGTYPE" == "diff" ] && DIRMOUNT="$DIRMOUNT.$IMGTYPE"
[8361974]200                echolog "Desmontamos la imagen $PARM2 $PARM3 "
[f456755]201                umount $DIRMOUNT
202                rmdir $DIRMOUNT
[cad1e1b]203
204        ;;
[cd1f048]205        REDUCE_IMAGE)
206                # Reduce el archivo de la imagen a tamaño datos + 500M
207                #1 REDUCE_IMAGE
208                #2 Nombre Imagen
[e24b042]209                #3 Tipo de imagen [ img |diff ]
[f456755]210                DIRMOUNT="$REPODIR""mount/${PARM2}"
[e24b042]211                if [ "$PARM3" == "img" ] ; then
212                        IMGEXT="img"
213                else
214                        IMGEXT="img.diff"
[f456755]215                        DIRMOUNT="$DIRMOUNT.diff"
[e24b042]216                fi
[cd1f048]217                IMGFILE="$REPODIR$PARM2.$IMGEXT"
[8361974]218                [ ! -f $IMGFILE ] && echolog "Imagen $IMGFILE no existe" && exit 1
[cd1f048]219
[f456755]220                # Solo funciona si la imagen es ext4, si no nos salimos sin error
221                file $IMGFILE |grep -i -e " ext4 filesystem " 2>&1 > /dev/null || exit 0
[cd1f048]222
[f456755]223                [ -d $DIRMOUNT ] || mkdir $DIRMOUNT
224                mountImage "$IMGFILE" "$DIRMOUNT" || (echolog "Error al montar la imagen"; exit 1)
225               
[cd1f048]226                # Si el espacio libre menor que 500Mb desmontamos la imagen y nos salimos
[f456755]227                AVAILABLE=$(df -k|grep $DIRMOUNT|awk '{print $4}')
228                if [ $AVAILABLE -lt 200000 ]; then
[e24b042]229                     echolog "reducir imagen REPO $PARM2 $IMGEXT. tamaño minimo, nada que hacer"
[f456755]230                     umount $DIRMOUNT
231                     rmdir $DIRMOUNT
[cd1f048]232                     exit 0
233                fi
234
[f456755]235                # Calculamos la diferencia entre el tamaño interno y externo
236                EXTSIZE=$(ls -l --block-size=1024 $IMGFILE | cut -f5 -d" ")
237                INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
238                let EDGESIZE=$EXTSIZE-$INTSIZE
239
[cd1f048]240                echolog "reducir imagen REPO $PARM2 $IMGEXT, tamaño final: $ENDSIZE"
[f456755]241                umount $DIRMOUNT
242                LOOPDEVICE=$(losetup -f)
243                losetup $LOOPDEVICE "$IMGFILE"
244
245                # Redimensiono sistema de ficheros
246                echolog "resize2fs -fpM $LOOPDEVICE "
247                resize2fs -fpM $LOOPDEVICE # 2>&1 > $REPOLOG
248                mountImage "$IMGFILE" "$DIRMOUNT"
249                # Calculamos el tamaño final del archivo
250                INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
251                let EXTSIZE=$INTSIZE+$EDGESIZE
252                umount $DIRMOUNT
253                # Si existe dispositivo loop lo borramos.
254                [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null  &&  losetup -d $LOOPDEVICE
255                # Corto el archivo al tamaño del sistema de ficheros
256                echo "truncate --size=\"$EXTSIZE\"k $IMGFILE"
257                echolog "truncate --size=\"$EXTSIZE\"k $IMGFILE"
258                truncate --size="$EXTSIZE"k $IMGFILE
259
260                rmdir $DIRMOUNT
[e24b042]261
[cd1f048]262        ;;
[35a3e22]263        default)
[7f7068e]264            echolog "Solicitud con parametros  \"$PARM\"  no realizada, no registrada o con errores"
[8fc9552]265        ;;
[7f7068e]266esac
Note: See TracBrowser for help on using the repository browser.