source: admin/Sources/Services/ogAdmRepoAux @ 5a0e8ec

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 5a0e8ec was 2847ede, checked in by irina <irinagomez@…>, 11 years ago

#565 Correccion errata en la nomenclatura de la version del kernel

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

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