source: admin/Sources/Services/ogAdmRepoAux @ b32f902

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 b32f902 was e24b042, checked in by irina <irinagomez@…>, 12 years ago

#565 #564 cambio de extension las imagenes diferenciales a img.diff

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

  • Property mode set to 100755
File size: 6.3 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
24BACKUP=$(grep BACKUP /opt/opengnsys/client/etc/engine.cfg| cut -d= -f2)
25
26# Añade registro de incidencias.
27function echolog () {
28        date +"%Y%m%d-%H%M%S $*" >> $REPOLOG
29}
30
31mkdir -p $MCASTLOGBASE
32
33
34PARM1=$(echo $PARM | cut -f1 -d" ")
35PARM2=$(echo $PARM | cut -f2 -d" ")
36PARM3=$(echo $PARM | cut -f3 -d" ")
37PARM4=$(echo $PARM | cut -f4 -d" ")
38
39case "$PARM1" in
40        START_MULTICAST)
41                #1 START_MULTICAST
42                #2 fichero a enviar
43                #3 opciones de multicast
44                FILE="$PARM2"
45                MCASTOPT="$PARM3"
46                echolog "Ejecutar $(which sendFileMcast) $FILE $MCASTOPT"
47                sendFileMcast $FILE $MCASTOPT &>> $MCASTLOG
48                case $? in
49                        1)  echolog "Parametros insuficientes"
50                            return 1 ;;
51                        2)  echolog "Fichero no accesible"
52                            return 2 ;;
53                        3)  echolog "Sesion multicast no valida"
54                            return 3 ;;
55                esac
56        ;;
57        CREATE_IMAGE)
58                # Creamos/Redimensionamos el fichero de imagen y lo montamos para que se pueda escribir sobre el
59                #1 CREATE_IMAGE
60                #2 nombre imagen
61                #3 tipo de imagen [ img | diff ]
62                #4 tamaño imagen
63                MOUNTDIR="$REPODIR/mount/$PARM2"
64                if [ "$PARM3" == "img" ] ; then
65                        IMGEXT="img"
66                else
67                        IMGEXT="img.diff"
68                        MOUNTDIR="$MOUNTDIR.diff"
69                fi
70                IMGFILE="$REPODIR/$PARM2.$IMGEXT"
71                IMGDIR="$(dirname $IMGFILE)"
72                [ -d  $IMGDIR ] || mkdir -p $IMGDIR
73
74                mkdir -p "$MOUNTDIR"
75
76                SIZEREQUIRED="$PARM4"
77
78                if [ -f "$IMGFILE" ]; then
79                    echolog "Redimensionamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
80                    # Copia de seguridad de la imagen
81                    # Si la imagen esta montada la desmonto
82                    if [ -r "$MOUNTDIR/ogimg.info" ]; then
83                        echolog "umount $MOUNTDIR"
84                        umount "$MOUNTDIR"
85                        [ $? -ne 0 ] && echolog "Error: No podemos desmontar la imagen para hacer copia de seguridad" && exit 1
86                    fi
87                    if [ "$BACKUP" == "true" ]; then
88                        echolog "Copia de seguridad de la imagen anterior"
89                        echolog "cp  $IMGFILE $IMGFILE.ant"
90                        cp  "$IMGFILE" "$IMGFILE.ant"
91                        echolog mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
92                        mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
93                    fi
94
95                    # Redimensionamos la imagen al tamaño necesario
96                    # TODO modificar ogGetImageSize
97                    IMGSIZE=$(ls -l --block-size=1024 $IMGFILE| cut -f5 -d" ")
98                    if [ $IMGSIZE -lt $SIZEREQUIRED ];then
99                        echolog "truncate --size=\">$SIZEREQUIRED\"k $IMGFILE"
100                        truncate --size=">$SIZEREQUIRED"k $IMGFILE 2>&1 > $REPOLOG
101                        # Montamos la imagen, si da error nos salimos
102                        mount -o compress=lzo  "$IMGFILE" "$MOUNTDIR"
103                        echolog "btrfs filesystem resize max $MOUNTDIR"
104                        btrfs filesystem resize max "$MOUNTDIR"  2>&1 > $REPOLOG
105                       
106                    fi
107
108
109       
110                else
111                    echolog "Creamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
112                    echolog dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED
113                    dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED
114                    #Formateamos imagen
115                    LOOPDEVICE=$(losetup -f)
116                    echo losetup $LOOPDEVICE "$IMGFILE"
117                    losetup $LOOPDEVICE "$IMGFILE"
118                    echo mkfs.btrfs  -L ${PARM2##*\/} $LOOPDEVICE
119                    mkfs.btrfs  -L ${PARM2##*\/} $LOOPDEVICE #&> $OGLOGCOMMAND
120       
121                fi
122                # Montamos la imagen.
123                echolog "mount -o compress=lzo  $IMGFILE $MOUNTDIR"
124                mount -o compress=lzo  "$IMGFILE" "$MOUNTDIR"
125                [ "$?" == "0" -o "$?" == "32" ] || (echolog "Error al crear/redimensionar la imagen"; exit 1)
126                touch "$MOUNTDIR/ogimg.info"
127                TIME2=$[SECONDS-TIME]
128                echolog "Fin creación/redimension de la  imagen: $[TIME2/60]m $[TIME2%60]s"
129                # Si existe dispositivo loop lo borramos.
130                [ $LOOPDEVICE ] &&  losetup -d $LOOPDEVICE
131                # TODO: comprobar que no se quede el losetup bloqueado.
132
133        ;;
134        MOUNT_IMAGE)
135                # Montamos el fichero imagen para que se pueda
136                #1 MOUNT_IMAGE
137                #2 nombre imagen
138                #3 tipo de imagen [ img | diff ]
139                MOUNTDIR="$REPODIR/mount/$PARM2"
140                if [ "$PARM3" == "img" ] ; then
141                        IMGEXT="img"
142                else
143                        IMGEXT="img.diff"
144                        MOUNTDIR="$MOUNTDIR.diff"
145                fi
146                IMGFILE="$REPODIR/$PARM2.$IMGEXT"
147                echolog "Montamos la imagen $IMGFILE "
148                mkdir -p "$MOUNTDIR"
149                mount -o ro,compress=lzo  "$IMGFILE" "$MOUNTDIR"
150                [ "$?" == "0" ] || (echolog "Error al montar la imagen"; exit 1)
151        ;;
152        UMOUNT_IMAGE)
153                # Desmontamos el fichero imagen.
154                # Si el directorio esta ocupado no se desmontará
155                #1 UMOUNT_IMAGE
156                #2 nombre imagen
157                #3 tipo de imagen [ img | diff ]
158                IMGTYPE="$PARM3"
159                MOUNTDIR="$REPODIR/mount/$PARM2"
160                [ "$IMGTYPE" == "diff" ] && MOUNTDIR="$MOUNTDIR.$IMGTYPE"
161                echolog "Desmontamos la imagen $PARM2 $PARM3 "
162                umount $MOUNTDIR
163                rmdir $MOUNTDIR
164
165        ;;
166        REDUCE_IMAGE)
167                # Reduce el archivo de la imagen a tamaño datos + 500M
168                #1 REDUCE_IMAGE
169                #2 Nombre Imagen
170                #3 Tipo de imagen [ img |diff ]
171                MOUNTDIR="$REPODIR""mount/${PARM2}"
172                if [ "$PARM3" == "img" ] ; then
173                        IMGEXT="img"
174                else
175                        IMGEXT="img.diff"
176                        MOUNTDIR="$MOUNTDIR.diff"
177                fi
178                IMGFILE="$REPODIR$PARM2.$IMGEXT"
179                [ ! -f $IMGFILE ] && echolog "Imagen $IMGFILE no existe" && exit 1
180
181                [ -d $MOUNTDIR ] || mkdir $MOUNTDIR
182                mount -o compress=lzo  "$IMGFILE" "$MOUNTDIR"   
183                AVAILABLE=$(df -k|grep $MOUNTDIR|awk '{print $4}')
184
185                # Si el espacio libre menor que 500Mb desmontamos la imagen y nos salimos
186                if [ $AVAILABLE -lt 500000 ]; then
187                     echolog "reducir imagen REPO $PARM2 $IMGEXT. tamaño minimo, nada que hacer"
188                     umount $MOUNTDIR
189                     rmdir $MOUNTDIR
190                     exit 0
191                fi
192
193                USED=$(df -k|grep $MOUNTDIR|awk '{print $3}')
194                let ENDSIZE=USED+500000
195                echolog "reducir imagen REPO $PARM2 $IMGEXT, tamaño final: $ENDSIZE"
196                echolog btrfs filesystem resize "$ENDSIZE"k $MOUNTDIR
197                btrfs filesystem resize "$ENDSIZE"k $MOUNTDIR
198                umount $MOUNTDIR
199                echolog "truncate --size=\"$ENDSIZE\"k $IMGFILE"
200                truncate --size="$ENDSIZE"k $IMGFILE
201
202                rmdir $MOUNTDIR
203        ;;
204        default)
205            echolog "Solicitud con parametros  \"$PARM\"  no realizada, no registrada o con errores"
206        ;;
207esac
Note: See TracBrowser for help on using the repository browser.