source: client/shared/scripts/ImagenesSincronizadas.lib @ 790d8bc

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

#565, Alonso: Corregir errata en toma de datos de Rsync en la librería de funciones para sincronizar imágenes.

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

  • Property mode set to 100755
File size: 10.4 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                #sed -i -e s/"^sent.*.bytes\/sec"//g  -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g lista_img
120
121        }       
122       
123        #___________________________________________________________________
124        #
125        #       Función: crearImagen
126        #
127        #       Descripción:
128        #
129        #               Sincroniza archivos entre origen y destino. Al final del
130        #               proceso el contenido de destino será igual al de origen.
131        #               La creación de imagen siempre tiene lugar entre una partición
132        #               y un repositorio como origen y destino respectivamente.
133        #
134        #       Parámetros:
135        #       
136        #               $1: Origen
137        #               $2: Destino
138        #               $3: Sistema de ficheros de la partición
139        #               $4: Indica si la sincronización es local o remota
140        #                               1: El origen o el destino es remoto
141        #                               2: Tanto el origen como el destino son locales
142        #               $5: Vale
143        #                               1=Para crear la lista de archivos a transferir
144        #                               2= Cuando se quiere sincronizar usando la lista
145        #               $6: Path a la lista de archivos
146        #___________________________________________________________________
147        #
148        function crearImagen()
149        {
150                case "$3" in
151                        NTFS)
152                                OP_ARCHIVO="-aH"
153                                rm "$1pagefile.sys"
154                                #OP_EXCLUDE="--exclude 'pagefile.sys'"
155                        ;;
156                         EXT2 | EXT3 | EXT4 )
157                                OP_ARCHIVO="-alH"
158                                OP_EXCLUDE="--exclude 'tmp' --exclude 'proc' --exclude 'sys'"
159                        ;;
160                esac
161
162
163                case "$4" in
164                        1)
165                                OP_PASSWD=$FILE_PASSWD
166                        ;;
167                        2)
168                                OP_PASSWD=""
169                        ;;
170                esac
171               
172                FREG=$OGLOGCOMMAND # Por defecto se redirecciona al archivo de log de comandos 
173                case "$5" in
174                        1)
175                                OP_ARCHIVO=$OP_ARCHIVO"nv" # Simulación para crear lista
176                                FREG=$6
177                        ;;
178                        2)
179                                OP_FILELIST="--files-from=$6"
180                                OP_ARCHIVO="$OP_ARCHIVO $OP_FILELIST"
181                        ;;
182                esac
183
184                echo "rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2 " | tee -a $OGLOGSESSION $OGLOGFILE
185                rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2>$FREG;
186        }
187       
188        #___________________________________________________________________
189        #
190        #       Función: restaurarImagen
191        #
192        #       Descripción:
193        #
194        #               Sincroniza archivos entre origen y destino. Al final del
195        #               proceso el contenido de destino será igual al de origen.
196        #               La restauración de imagen siempre tiene lugar entre la caché
197        #               o un repositorio y una partición o carpeta como origen y destino
198        #               respectivamente.
199        #
200        #       Parámetros:
201        #       
202        #               $1: Origen
203        #               $2: Destino
204        #               $3: Sistema de ficheros de la partición
205        #               $4: Indica si la sincronización es local o remota
206        #                       1: El origen o el destino es remoto
207        #                       2: Tanto el origen como el destino son locales
208        #___________________________________________________________________
209        #
210        function restaurarImagen()
211        {
212                case "$3" in
213                        NTFS)
214                                OP_ARCHIVO="-aH"
215                        ;;
216                        EXT2 | EXT3 | EXT4)
217                                OP_ARCHIVO="-alH"
218                        ;;
219                esac
220               
221                case "$4" in
222                        1)
223                                OP_PASSWD=$FILE_PASSWD
224                        ;;
225                        2)
226                                OP_PASSWD=""
227                        ;;
228                esac
229               
230                echo "rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_PASSWD $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE
231                rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_PASSWD $1 $2>$OGLOGCOMMAND;
232        }
233       
234        #___________________________________________________________________
235        #
236        #       Función: crearListaAcl
237        #
238        #       Descripción:
239        #
240        #               Crea la lista de control de archivos para el sistema operativo
241        #               que ocupa la partición que se quiere clonar
242        #
243        #       Parámetros:
244        #       
245        #               $1: Origen
246        #               $2: Destino
247        #               $3: Sistema de ficheros de la partición
248        #               $4: disco
249        #               $5: partición
250        #___________________________________________________________________
251        #
252        function crearListaAcl()
253        {
254                case "$3" in
255                        NTFS)
256                                echo "Creando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
257                                echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
258                                ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE
259                                echo "Ejecutando comando ntfs-3g.secaudit -b /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE
260                                ntfs-3g.secaudit -b /dev/sda$5 / > /tmp/$FILE_ACL
261                                echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE                             
262                                ogMount $4 $5
263                                echo "Copiando archivo de listas de control (ACL) desde /tmp/$FILE_ACL a $1." | tee -a $OGLOGSESSION $OGLOGFILE                         
264                                cp /tmp/$FILE_ACL $1.
265                        ;;
266                esac
267        }       
268        #___________________________________________________________________
269        #
270        #       Función: restauraListaAcl
271        #
272        #       Descripción:
273        #
274        #               Restaura la lista de control de archivos para el sistema operativo
275        #               que ocupa la partición que se quiere restaurar
276        #
277        #       Parámetros:
278        #       
279        #               $1: Origen
280        #               $2: Destino
281        #               $3: Sistema de ficheros de la partición
282        #               $4: disco
283        #               $5: partición
284        #___________________________________________________________________
285        #
286        function restauraListaAcl()
287        {
288                case "$3" in
289                        NTFS)
290                                echo "Restaurando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE   
291                                echo "Copiando archivo de listas de control (ACL) desde $2$FILE_ACL a /tmp/." | tee -a $OGLOGSESSION $OGLOGFILE                         
292                                cp $2$FILE_ACL /tmp/.
293                                echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
294                                ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE
295                                echo "Ejecutando comando ntfs-3g.secaudit -se /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE
296                                ntfs-3g.secaudit -se /dev/sda$5 /tmp/$FILE_ACL
297                                echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE                             
298                                ogMount $4 $5
299                                echo "Borrando archivo de listas de control (ACL) de $2$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE                             
300                                rm $2$FILE_ACL
301                        ;;
302                esac
303        }       
304        #___________________________________________________________________
305        #
306        #       Función: eliminaListaAcl
307        #
308        #       Descripción:
309        #
310        #               Elimina la lista de control de archivos creada temporalmente
311        #               para el proceso de creación e imagen
312        #
313        #       Parámetros:
314        #       
315        #               $1: Origen
316        #               $2: Sistema de ficheros de la partición
317        #___________________________________________________________________
318        #
319        function eliminaListaAcl()
320        {
321                case "$2" in
322                        NTFS)
323                                echo "Borrando archivo de listas de control (ACL) de $1$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE                             
324                                rm $1$FILE_ACL
325                        ;;
326                esac
327        }       
328        #___________________________________________________________________
329        #
330        #       Función: comprimeImagen
331        #
332        #       Descripción:
333        #
334        #               Comprimer  la carpeta donde está se ha almacenado la imagen
335        #               recientemente creada
336        #
337        #       Parámetros:
338        #       
339        #               $1: Nombre de la imagen (Es el mismo que la carpeta que la alberga)
340        #___________________________________________________________________
341        #
342        function comprimeImagen()
343        {
344                TIME1=$SECONDS
345                RUTAIMG="/opt/opengnsys/images"
346                CARPETAIMAGEN=$RUTAIMG/$1
347                echo "Comprimiendo la imagen $1. Ruta de la imagen: $RUTAIMG" | tee -a $OGLOGSESSION $OGLOGFILE         
348                echo "find $CARPETAIMAGEN | cpio -H newc -oa | gzip -9c  en $CARPETAIMAGEN.IMG"  | tee -a $OGLOGSESSION $OGLOGFILE             
349                find $CARPETAIMAGEN | cpio -H newc -oa | gzip -9c > $CARPETAIMAGEN.IMG
350                TIME=$[SECONDS-TIME1]
351                echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
352        }       
Note: See TracBrowser for help on using the repository browser.