source: client/shared/scripts/ImagenesSincronizadas.lib

qndtest
Last change on this file was 5b825b50, checked in by ramon <ramongomez@…>, 7 years ago

#730: Sustitución del nombre del proyecto en los scripts del cliente.

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

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