source: client/shared/scripts/ImagenesSincronizadas.lib @ d8d86ff

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 d8d86ff was d843835, checked in by ramon <ramongomez@…>, 12 years ago

#565, Alonso: Scripts de creación y restauración de imágenes diferenciales.

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

  • Property mode set to 100755
File size: 10.6 KB
Line 
1#!/bin/bash
2#___________________________________________________________________
3#
4#@file    ImagenesSincronizadas.lib
5#@brief   Librería o clase ImagenesSincronizadas
6#@class   ImagenesSincronizadas
7#@brief   Funciones para la creación y restauración de imagenes por sincronización.
8#@version 1.0.4
9#@warning License: GNU GPLv3+
10#___________________________________________________________________
11
12                #Load engine configurator from engine.cfg file.
13                #Carga el configurador del engine desde el fichero engine.cfg
14                [ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
15               
16                # Clear temporary file used as log track by httpdlog
17                # Limpia los ficheros temporales usados como log de seguimieincludento para httpdlog
18                echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
19               
20                # Registro de inicio de ejecución
21                #echo "[START Interface ] Run this command: $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
22                echo "$MSG_INTERFACE_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
23               
24                # Solo ejecutable por OpenGnSys Client.
25                PATH=$PATH:$(dirname $0)
26                PROG=$(basename $0)
27
28                CALLER=$(ogGetCaller)
29                if [ "$CALLER" != "ogAdmClient" ]; then
30                        ogRaiseError $OG_ERR_NOTEXEC "$CALLER -> $PROG"
31                        exit $?
32                fi
33               
34                #___________________________________________________________________
35                #       
36                # Variables globales
37                #___________________________________________________________________
38
39                TIPOPARTICION="$(ogGetPartitionId $DISCO $NPART)"; # Tipo de particion 
40                if [ -z $TIPOPARTICION ]; then
41                echo "No existe la partición $NPART, debe crearla" | tee -a $OGLOGSESSION $OGLOGFILE
42                exit $OG_ERR_PARTITION
43                fi
44
45                PARTICION=$(ogMount $DISCO $NPART); # Monta partición   
46                if [ -z $PARTICION ]; then
47                echo "No existe la unidad /dev/sda$NPART o no está formateada" | tee -a $OGLOGSESSION $OGLOGFILE
48                exit $OG_ERR_PARTITION
49                fi
50
51                SISTEMAFICHERO="$(ogGetFsType $DISCO $NPART)" # Sistema de ficheros     
52                if [ -z $SISTEMAFICHERO ]; then
53                echo "No se ha definido un sistema de fichero en la unidad /dev/sda$NPART. Debe formatearla previamente." | tee -a $OGLOGSESSION $OGLOGFILE
54                exit $OG_ERR_PARTITION
55                fi
56
57                REPOSITORIO="usuog@$IPREPOSITORIO::imagenes" # Ruta de las imagenes en el repositorio
58               
59                # Borrar archivos en destino
60                OP_DELETE="--delete"
61                if [ $NOBORRACHIVOS -eq 1 ]; then
62                        OP_DELETE=""
63                fi     
64               
65                FILE_ACL="ogwinimage.acl"
66
67                # Opción de compresión
68                OP_COMPRESS="-z"
69
70                #___________________________________________________________________
71                #
72                # Crea un fichero con la clave remota del rsync y actualiza el
73                # parámetro "--password-file" para que no se pida ésta en el proceso.
74                #___________________________________________________________________
75                #
76                f="/etc/passrsync" # Lectura del archivo de claves
77                FILE_PASSWD="--password-file=$f"
78       
79       
80        #___________________________________________________________________
81        #
82        #       Función: montaCache
83        #
84        #       Descripción:
85        #
86        #               Monta la cache y devuelve la ruta hacía ella
87        #
88        #       Parámetros:
89        #       
90        #               Ninguno
91        #___________________________________________________________________
92        #
93        function montaCache()
94        {       
95                # Error si no existe caché
96                if ! $(ogFindCache >/dev/null); then
97                        echo ""
98                        return
99                fi
100                cache=$(ogMountCache)
101                echo $cache
102        }
103        #___________________________________________________________________
104        #
105        #       Función: editarLista
106        #
107        #       Descripción:
108        #
109        #               Edita lista de archivos a transferir para depurar lineas
110        #
111        #       Parámetros:
112        #       
113        #               $1 Lista de entrada
114        #               $2 Lista de salida
115        #___________________________________________________________________
116        #
117        function editarLista()
118        {       
119                # Edición:
120                #       a) Quitarle lineas que contengan './'
121                #       b) La primera linea (reporter del rsync)
122                #       c) Las dos últimas lineas del final (reporter del rsync)
123               
124                echo "Editando lista de archivos Entrada:$1 Salida:$2" | tee -a $OGLOGSESSION $OGLOGFILE
125                cat $1 | sed '/\.\//d' | sed '1d' | sed -n -e :a -e '1,2!{P;N;D;};N;ba'>$2
126                #sed -i -e s/"^sent.*.bytes\/sec"//g  -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g lista_img
127
128        }       
129       
130        #___________________________________________________________________
131        #
132        #       Función: crearImagen
133        #
134        #       Descripción:
135        #
136        #               Sincroniza archivos entre origen y destino. Al final del
137        #               proceso el contenido de destino será igual al de origen.
138        #               La creación de imagen siempre tiene lugar entre una partición
139        #               y un repositorio como origen y destino respectivamente.
140        #
141        #       Parámetros:
142        #       
143        #               $1: Origen
144        #               $2: Destino
145        #               $3: Sistema de ficheros de la partición
146        #               $4: Indica si la sincronización es local o remota
147        #                               1: El origen o el destino es remoto
148        #                               2: Tanto el origen como el destino son locales
149        #               $5: Vale
150        #                               1=Para crear la lista de archivos a transferir
151        #                               2= Cuando se quiere sincronizar usando la lista
152        #               $6: Path a la lista de archivos
153        #___________________________________________________________________
154        #
155        function crearImagen()
156        {
157                case "$3" in
158                        NTFS)
159                                OP_ARCHIVO="-aH"
160                                rm "$1pagefile.sys"
161                                #OP_EXCLUDE="--exclude 'pagefile.sys'"
162                        ;;
163                         EXT2 | EXT3 | EXT4 )
164                                OP_ARCHIVO="-alH"
165                                OP_EXCLUDE="--exclude 'tmp' --exclude 'proc' --exclude 'sys'"
166                        ;;
167                esac
168
169
170                case "$4" in
171                        1)
172                                OP_PASSWD=$FILE_PASSWD
173                        ;;
174                        2)
175                                OP_PASSWD=""
176                        ;;
177                esac
178               
179                FREG=$OGLOGCOMMAND # Por defecto se redirecciona al archivo de log de comandos 
180                case "$5" in
181                        1)
182                                OP_ARCHIVO=$OP_ARCHIVO"nv" # Simulación para crear lista
183                                FREG=$6
184                        ;;
185                        2)
186                                OP_FILELIST="--files-from=$6"
187                                OP_ARCHIVO="$OP_ARCHIVO $OP_FILELIST"
188                        ;;
189                esac
190
191                echo "rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2 " | tee -a $OGLOGSESSION $OGLOGFILE
192                rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2>$FREG;
193        }
194       
195        #___________________________________________________________________
196        #
197        #       Función: restaurarImagen
198        #
199        #       Descripción:
200        #
201        #               Sincroniza archivos entre origen y destino. Al final del
202        #               proceso el contenido de destino será igual al de origen.
203        #               La restauración de imagen siempre tiene lugar entre la caché
204        #               o un repositorio y una partición o carpeta como origen y destino
205        #               respectivamente.
206        #
207        #       Parámetros:
208        #       
209        #               $1: Origen
210        #               $2: Destino
211        #               $3: Sistema de ficheros de la partición
212        #               $4: Indica si la sincronización es local o remota
213        #                       1: El origen o el destino es remoto
214        #                       2: Tanto el origen como el destino son locales
215        #___________________________________________________________________
216        #
217        function restaurarImagen()
218        {
219                case "$3" in
220                        NTFS)
221                                OP_ARCHIVO="-aH"
222                        ;;
223                        EXT2 | EXT3 | EXT4)
224                                OP_ARCHIVO="-alH"
225                        ;;
226                esac
227               
228                case "$4" in
229                        1)
230                                OP_PASSWD=$FILE_PASSWD
231                        ;;
232                        2)
233                                OP_PASSWD=""
234                        ;;
235                esac
236               
237                echo "rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_PASSWD $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE
238                rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_PASSWD $1 $2>$OGLOGCOMMAND;
239        }
240       
241        #___________________________________________________________________
242        #
243        #       Función: crearListaAcl
244        #
245        #       Descripción:
246        #
247        #               Crea la lista de control de archivos para el sistema operativo
248        #               que ocupa la partición que se quiere clonar
249        #
250        #       Parámetros:
251        #       
252        #               $1: Origen
253        #               $2: Destino
254        #               $3: Sistema de ficheros de la partición
255        #               $4: disco
256        #               $5: partición
257        #___________________________________________________________________
258        #
259        function crearListaAcl()
260        {
261                case "$3" in
262                        NTFS)
263                                echo "Creando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
264                                echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
265                                ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE
266                                echo "Ejecutando comando ntfs-3g.secaudit -b /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE
267                                ntfs-3g.secaudit -b /dev/sda$5 / > /tmp/$FILE_ACL
268                                echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE                             
269                                ogMount $4 $5
270                                echo "Copiando archivo de listas de control (ACL) desde /tmp/$FILE_ACL a $1." | tee -a $OGLOGSESSION $OGLOGFILE                         
271                                cp /tmp/$FILE_ACL $1.
272                        ;;
273                esac
274        }       
275        #___________________________________________________________________
276        #
277        #       Función: restauraListaAcl
278        #
279        #       Descripción:
280        #
281        #               Restaura la lista de control de archivos para el sistema operativo
282        #               que ocupa la partición que se quiere restaurar
283        #
284        #       Parámetros:
285        #       
286        #               $1: Origen
287        #               $2: Destino
288        #               $3: Sistema de ficheros de la partición
289        #               $4: disco
290        #               $5: partición
291        #___________________________________________________________________
292        #
293        function restauraListaAcl()
294        {
295                case "$3" in
296                        NTFS)
297                                echo "Restaurando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE   
298                                echo "Copiando archivo de listas de control (ACL) desde $2$FILE_ACL a /tmp/." | tee -a $OGLOGSESSION $OGLOGFILE                         
299                                cp $2$FILE_ACL /tmp/.
300                                echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
301                                ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE
302                                echo "Ejecutando comando ntfs-3g.secaudit -se /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE
303                                ntfs-3g.secaudit -se /dev/sda$5 /tmp/$FILE_ACL
304                                echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE                             
305                                ogMount $4 $5
306                                echo "Borrando archivo de listas de control (ACL) de $2$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE                             
307                                rm $2$FILE_ACL
308                        ;;
309                esac
310        }       
311        #___________________________________________________________________
312        #
313        #       Función: eliminaListaAcl
314        #
315        #       Descripción:
316        #
317        #               Elimina la lista de control de archivos creada temporalmente
318        #               para el proceso de creación e imagen
319        #
320        #       Parámetros:
321        #       
322        #               $1: Origen
323        #               $2: Sistema de ficheros de la partición
324        #___________________________________________________________________
325        #
326        function eliminaListaAcl()
327        {
328                case "$2" in
329                        NTFS)
330                                echo "Borrando archivo de listas de control (ACL) de $1$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE                             
331                                rm $1$FILE_ACL
332                        ;;
333                esac
334        }       
335        #___________________________________________________________________
336        #
337        #       Función: comprimeImagen
338        #
339        #       Descripción:
340        #
341        #               Comprimer  la carpeta donde está se ha almacenado la imagen
342        #               recientemente creada
343        #
344        #       Parámetros:
345        #       
346        #               $1: Nombre de la imagen (Es el mismo que la carpeta que la alberga)
347        #___________________________________________________________________
348        #
349        function comprimeImagen()
350        {
351                TIME1=$SECONDS
352                RUTAIMG="/opt/opengnsys/images"
353                CARPETAIMAGEN=$RUTAIMG/$1
354                echo "Comprimiendo la imagen $1. Ruta de la imagen: $RUTAIMG" | tee -a $OGLOGSESSION $OGLOGFILE         
355                echo "find $CARPETAIMAGEN | cpio -H newc -oa | gzip -9c  en $CARPETAIMAGEN.IMG"  | tee -a $OGLOGSESSION $OGLOGFILE             
356                find $CARPETAIMAGEN | cpio -H newc -oa | gzip -9c > $CARPETAIMAGEN.IMG
357                TIME=$[SECONDS-TIME1]
358                echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
359        }       
Note: See TracBrowser for help on using the repository browser.