source: admin/Sources/Services/ogAdmRepoAux @ 062ea34

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-instalacion
Last change on this file since 062ea34 was b8969db, checked in by ramon <ramongomez@…>, 10 years ago

#673: Actualizar código incluido en OepnGnSys?? 1.0.6 sobre la rama version1.1.

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

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