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

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 ca0f67c6 was 8e2e266, checked in by alonso <alonso@…>, 12 years ago

Modificaciones para optimazación de la sincronización

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

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