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 | CALLER=$(ogGetCaller) |
---|
28 | if [ "$CALLER" != "ogAdmClient" ]; then |
---|
29 | ogRaiseError $OG_ERR_NOTEXEC "$CALLER -> $PROG" |
---|
30 | exit $? |
---|
31 | fi |
---|
32 | |
---|
33 | #___________________________________________________________________ |
---|
34 | # |
---|
35 | # Variables globales |
---|
36 | #___________________________________________________________________ |
---|
37 | |
---|
38 | TIPOPARTICION="$(ogGetPartitionId $DISCO $NPART)"; # Tipo de particion |
---|
39 | SISTEMAFICHERO="$(ogGetOsType $DISCO $NPART)" # Sistema de ficheros |
---|
40 | PARTICION=$(ogMount $DISCO $NPART); # Monta partición |
---|
41 | REPOSITORIO="usuog@$IPREPOSITORIO::imagenes" # Ruta de las imagenes en el repositorio |
---|
42 | |
---|
43 | # Borrar archivos en destino |
---|
44 | OP_DELETE="--delete" |
---|
45 | if [ $NOBORRACHIVOS -eq 1 ]; then |
---|
46 | OP_DELETE="" |
---|
47 | fi |
---|
48 | |
---|
49 | FILE_ACL="ogwinimage.acl" |
---|
50 | |
---|
51 | #___________________________________________________________________ |
---|
52 | # |
---|
53 | # Crea un fichero con la clave remota del rsync y actualiza el |
---|
54 | # parámetro "--password-file" para que no se pida ésta en el proceso. |
---|
55 | #___________________________________________________________________ |
---|
56 | # |
---|
57 | f="/tmp/passrsync" # Creación del archivo de claves |
---|
58 | echo "passusuog">$f # Escribe dentro la clave remota |
---|
59 | chmod 400 $f # Es obligatorio que el archivo de claves tenga estos permisos |
---|
60 | FILE_PASSWD="--password-file=$f" |
---|
61 | |
---|
62 | |
---|
63 | #___________________________________________________________________ |
---|
64 | # |
---|
65 | # Función: montaCache |
---|
66 | # |
---|
67 | # Descripción: |
---|
68 | # |
---|
69 | # Monta la cache y devuelve la ruta hacía ella |
---|
70 | # |
---|
71 | # Parámetros: |
---|
72 | # |
---|
73 | # Ninguno |
---|
74 | #___________________________________________________________________ |
---|
75 | # |
---|
76 | function montaCache() |
---|
77 | { |
---|
78 | # Error si no existe caché |
---|
79 | if ! $(ogFindCache >/dev/null); then |
---|
80 | echo "" |
---|
81 | return |
---|
82 | fi |
---|
83 | cache=$(ogMountCache) |
---|
84 | echo $cache |
---|
85 | } |
---|
86 | #___________________________________________________________________ |
---|
87 | # |
---|
88 | # Función: editarLista |
---|
89 | # |
---|
90 | # Descripción: |
---|
91 | # |
---|
92 | # Edita lista de archivos a transferir para depurar lineas |
---|
93 | # |
---|
94 | # Parámetros: |
---|
95 | # |
---|
96 | # $1 Lista de entrada |
---|
97 | # $2 Lista de salida |
---|
98 | #___________________________________________________________________ |
---|
99 | # |
---|
100 | function editarLista() |
---|
101 | { |
---|
102 | # Edición: |
---|
103 | # a) Quitarle lineas que contengan './' |
---|
104 | # b) La primera linea (reporter del rsync) |
---|
105 | # c) Las dos últimas lineas del final (reporter del rsync) |
---|
106 | |
---|
107 | echo "Editando lista de archivos Entrada:$1 Salida:$2" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
108 | cat $1 | sed '/\.\//d' | sed '1d' | sed -n -e :a -e '1,2!{P;N;D;};N;ba'>$2 |
---|
109 | #sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g lista_img |
---|
110 | |
---|
111 | } |
---|
112 | |
---|
113 | #___________________________________________________________________ |
---|
114 | # |
---|
115 | # Función: crearImagen |
---|
116 | # |
---|
117 | # Descripción: |
---|
118 | # |
---|
119 | # Sincroniza archivos entre origen y destino. Al final del |
---|
120 | # proceso el contenido de destino será igual al de origen. |
---|
121 | # La creación de imagen siempre tiene lugar entre una partición |
---|
122 | # y un repositorio como origen y destino respectivamente. |
---|
123 | # |
---|
124 | # Parámetros: |
---|
125 | # |
---|
126 | # $1: Origen |
---|
127 | # $2: Destino |
---|
128 | # $3: Sistema de ficheros de la partición |
---|
129 | # $4: Indica si la sincronización es local o remota |
---|
130 | # 1: El origen o el destino es remoto |
---|
131 | # 2: Tanto el origen como el destino son locales |
---|
132 | # $5: Vale |
---|
133 | # 1=Para crear la lista de archivos a transferir |
---|
134 | # 2= Cuando se quiere sincronizar usando la lista |
---|
135 | # $6: Path a la lista de archivos |
---|
136 | #___________________________________________________________________ |
---|
137 | # |
---|
138 | function crearImagen() |
---|
139 | { |
---|
140 | case "$3" in |
---|
141 | Windows) |
---|
142 | OP_ARCHIVO="-aH" |
---|
143 | OP_EXCLUDE="--exclude '$1pagefile.sys'" |
---|
144 | ;; |
---|
145 | Linux) |
---|
146 | OP_ARCHIVO="-alH" |
---|
147 | OP_EXCLUDE="--exclude '/tmp ..exclude '/proc' --exclude='/sys'" |
---|
148 | ;; |
---|
149 | esac |
---|
150 | |
---|
151 | |
---|
152 | case "$4" in |
---|
153 | 1) |
---|
154 | OP_PASSWD=$FILE_PASSWD |
---|
155 | ;; |
---|
156 | 2) |
---|
157 | OP_PASSWD="" |
---|
158 | ;; |
---|
159 | esac |
---|
160 | |
---|
161 | FREG=$OGLOGCOMMAND # Por defecto se redirecciona al archivo de log de comandos |
---|
162 | case "$5" in |
---|
163 | 1) |
---|
164 | OP_ARCHIVO=$OP_ARCHIVO"nv" # Simulación para crear lista |
---|
165 | FREG=$6 |
---|
166 | ;; |
---|
167 | 2) |
---|
168 | OP_FILELIST="--files-from=$6" |
---|
169 | OP_ARCHIVO="$OP_ARCHIVO $OP_FILELIST" |
---|
170 | ;; |
---|
171 | esac |
---|
172 | |
---|
173 | |
---|
174 | echo "rsync $OP_ARCHIVO $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2 " | tee -a $OGLOGSESSION $OGLOGFILE |
---|
175 | rsync $OP_ARCHIVO $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2>$FREG; |
---|
176 | } |
---|
177 | |
---|
178 | #___________________________________________________________________ |
---|
179 | # |
---|
180 | # Función: restaurarImagen |
---|
181 | # |
---|
182 | # Descripción: |
---|
183 | # |
---|
184 | # Sincroniza archivos entre origen y destino. Al final del |
---|
185 | # proceso el contenido de destino será igual al de origen. |
---|
186 | # La restauración de imagen siempre tiene lugar entre la caché |
---|
187 | # o un repositorio y una partición o carpeta como origen y destino |
---|
188 | # respectivamente. |
---|
189 | # |
---|
190 | # Parámetros: |
---|
191 | # |
---|
192 | # $1: Origen |
---|
193 | # $2: Destino |
---|
194 | # $3: Sistema de ficheros de la partición |
---|
195 | # $4: Indica si la sincronización es local o remota |
---|
196 | # 1: El origen o el destino es remoto |
---|
197 | # 2: Tanto el origen como el destino son locales |
---|
198 | #___________________________________________________________________ |
---|
199 | # |
---|
200 | function restaurarImagen() |
---|
201 | { |
---|
202 | case "$3" in |
---|
203 | Windows) |
---|
204 | OP_ARCHIVO="-aH" |
---|
205 | ;; |
---|
206 | Linux) |
---|
207 | OP_ARCHIVO="-alH" |
---|
208 | ;; |
---|
209 | esac |
---|
210 | |
---|
211 | case "$4" in |
---|
212 | 1) |
---|
213 | OP_PASSWD=$FILE_PASSWD |
---|
214 | ;; |
---|
215 | 2) |
---|
216 | OP_PASSWD="" |
---|
217 | ;; |
---|
218 | esac |
---|
219 | echo "rsync $OP_ARCHIVO $OP_DELETE $OP_PASSWD $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
220 | rsync $OP_ARCHIVO $OP_DELETE $OP_PASSWD $1 $2>$OGLOGCOMMAND; |
---|
221 | } |
---|
222 | |
---|
223 | #___________________________________________________________________ |
---|
224 | # |
---|
225 | # Función: crearListaAcl |
---|
226 | # |
---|
227 | # Descripción: |
---|
228 | # |
---|
229 | # Crea la lista de control de archivos para el sistema operativo |
---|
230 | # que ocupa la partición que se quiere clonar |
---|
231 | # |
---|
232 | # Parámetros: |
---|
233 | # |
---|
234 | # $1: Origen |
---|
235 | # $2: Destino |
---|
236 | # $3: Sistema de ficheros de la partición |
---|
237 | # $4: disco |
---|
238 | # $5: partición |
---|
239 | #___________________________________________________________________ |
---|
240 | # |
---|
241 | function crearListaAcl() |
---|
242 | { |
---|
243 | case "$3" in |
---|
244 | Windows) |
---|
245 | echo "Creando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
246 | echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
247 | ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE |
---|
248 | echo "Ejecutando comando ntfs-3g.secaudit -b /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
249 | ntfs-3g.secaudit -b /dev/sda$5 / > /tmp/$FILE_ACL |
---|
250 | echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
251 | ogMount $4 $5 |
---|
252 | echo "Copiando archivo de listas de control (ACL) desde /tmp/$FILE_ACL a $1." | tee -a $OGLOGSESSION $OGLOGFILE |
---|
253 | cp /tmp/$FILE_ACL $1. |
---|
254 | ;; |
---|
255 | Linux) |
---|
256 | |
---|
257 | ;; |
---|
258 | esac |
---|
259 | } |
---|
260 | #___________________________________________________________________ |
---|
261 | # |
---|
262 | # Función: restauraListaAcl |
---|
263 | # |
---|
264 | # Descripción: |
---|
265 | # |
---|
266 | # Restaura la lista de control de archivos para el sistema operativo |
---|
267 | # que ocupa la partición que se quiere restaurar |
---|
268 | # |
---|
269 | # Parámetros: |
---|
270 | # |
---|
271 | # $1: Origen |
---|
272 | # $2: Destino |
---|
273 | # $3: Sistema de ficheros de la partición |
---|
274 | # $4: disco |
---|
275 | # $5: partición |
---|
276 | #___________________________________________________________________ |
---|
277 | # |
---|
278 | function restauraListaAcl() |
---|
279 | { |
---|
280 | case "$3" in |
---|
281 | Windows) |
---|
282 | |
---|
283 | echo "Restaurando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
284 | echo "Copiando archivo de listas de control (ACL) desde $2$FILE_ACL a /tmp/." | tee -a $OGLOGSESSION $OGLOGFILE |
---|
285 | cp $2$FILE_ACL /tmp/. |
---|
286 | echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
287 | ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE |
---|
288 | echo "Ejecutando comando ntfs-3g.secaudit -se /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
289 | ntfs-3g.secaudit -se /dev/sda$5 /tmp/$FILE_ACL |
---|
290 | echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
291 | ogMount $4 $5 |
---|
292 | echo "Borrando archivo de listas de control (ACL) de $2$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
293 | rm $2$FILE_ACL |
---|
294 | ;; |
---|
295 | Linux) |
---|
296 | |
---|
297 | ;; |
---|
298 | esac |
---|
299 | } |
---|
300 | #___________________________________________________________________ |
---|
301 | # |
---|
302 | # Función: eliminaListaAcl |
---|
303 | # |
---|
304 | # Descripción: |
---|
305 | # |
---|
306 | # Elimina la lista de control de archivos creada temporalmente |
---|
307 | # para el proceso de creación e imagen |
---|
308 | # |
---|
309 | # Parámetros: |
---|
310 | # |
---|
311 | # $1: Origen |
---|
312 | # $2: Sistema de ficheros de la partición |
---|
313 | #___________________________________________________________________ |
---|
314 | # |
---|
315 | function eliminaListaAcl() |
---|
316 | { |
---|
317 | case "$2" in |
---|
318 | Windows) |
---|
319 | echo "Borrando archivo de listas de control (ACL) de $1$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE |
---|
320 | rm $1$FILE_ACL |
---|
321 | ;; |
---|
322 | Linux) |
---|
323 | |
---|
324 | ;; |
---|
325 | esac |
---|
326 | } |
---|