[4329e85] | 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 | |
---|
[5b825b50] | 24 | # Solo ejecutable por OpenGnsys Client. |
---|
[4329e85] | 25 | PATH=$PATH:$(dirname $0) |
---|
| 26 | PROG=$(basename $0) |
---|
[d843835] | 27 | |
---|
[4329e85] | 28 | #___________________________________________________________________ |
---|
| 29 | # |
---|
| 30 | # Variables globales |
---|
| 31 | #___________________________________________________________________ |
---|
| 32 | |
---|
[9204a04] | 33 | TIPOPARTICION="$(ogGetPartitionId $DISCO $NPART)"; # Tipo de particion |
---|
[d843835] | 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 | |
---|
[9204a04] | 39 | PARTICION=$(ogMount $DISCO $NPART); # Monta partición |
---|
[d843835] | 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 | |
---|
[7329020] | 51 | REPOSITORIO="opengnsys@$IPREPOSITORIO::ogimages" # Ruta de las imagenes en el repositorio |
---|
[4329e85] | 52 | |
---|
[265d452] | 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 | |
---|
[4329e85] | 62 | # Borrar archivos en destino |
---|
| 63 | OP_DELETE="--delete" |
---|
| 64 | if [ $NOBORRACHIVOS -eq 1 ]; then |
---|
| 65 | OP_DELETE="" |
---|
| 66 | fi |
---|
[265d452] | 67 | if [ $RMVFILE -eq 0 ]; then |
---|
| 68 | OP_DELETE="" |
---|
| 69 | fi |
---|
[9204a04] | 70 | |
---|
[d843835] | 71 | # Opción de compresión |
---|
| 72 | OP_COMPRESS="-z" |
---|
[265d452] | 73 | if [ $CMPFILE -eq 0 ]; then |
---|
| 74 | OP_COMPRESS="" |
---|
| 75 | fi |
---|
[d843835] | 76 | |
---|
[4329e85] | 77 | #___________________________________________________________________ |
---|
| 78 | # |
---|
[9555dd1] | 79 | # Fichero con la clave remota del rsync para el parámetro |
---|
| 80 | # "--password-file" para que no se pida ésta en el proceso. |
---|
[4329e85] | 81 | #___________________________________________________________________ |
---|
| 82 | # |
---|
[9555dd1] | 83 | FILE_PASSWD="--password-file=/scripts/passrsync" |
---|
[4329e85] | 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 |
---|
[8e2e266] | 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 |
---|
[9204a04] | 136 | |
---|
[4329e85] | 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 |
---|
[9204a04] | 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 |
---|
[4329e85] | 162 | #___________________________________________________________________ |
---|
| 163 | # |
---|
| 164 | function crearImagen() |
---|
| 165 | { |
---|
| 166 | case "$3" in |
---|
[d843835] | 167 | NTFS) |
---|
[4329e85] | 168 | OP_ARCHIVO="-aH" |
---|
[d843835] | 169 | rm "$1pagefile.sys" |
---|
| 170 | #OP_EXCLUDE="--exclude 'pagefile.sys'" |
---|
[4329e85] | 171 | ;; |
---|
[d843835] | 172 | EXT2 | EXT3 | EXT4 ) |
---|
[4329e85] | 173 | OP_ARCHIVO="-alH" |
---|
[d843835] | 174 | OP_EXCLUDE="--exclude 'tmp' --exclude 'proc' --exclude 'sys'" |
---|
[4329e85] | 175 | ;; |
---|
| 176 | esac |
---|
| 177 | |
---|
[9204a04] | 178 | |
---|
[4329e85] | 179 | case "$4" in |
---|
| 180 | 1) |
---|
[9204a04] | 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) |
---|
[4329e85] | 191 | OP_ARCHIVO=$OP_ARCHIVO"nv" # Simulación para crear lista |
---|
[9204a04] | 192 | FREG=$6 |
---|
[4329e85] | 193 | ;; |
---|
| 194 | 2) |
---|
[9204a04] | 195 | OP_FILELIST="--files-from=$6" |
---|
[4329e85] | 196 | OP_ARCHIVO="$OP_ARCHIVO $OP_FILELIST" |
---|
| 197 | ;; |
---|
| 198 | esac |
---|
| 199 | |
---|
[d843835] | 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; |
---|
[4329e85] | 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 |
---|
[d843835] | 229 | NTFS) |
---|
[4329e85] | 230 | OP_ARCHIVO="-aH" |
---|
| 231 | ;; |
---|
[d843835] | 232 | EXT2 | EXT3 | EXT4) |
---|
[4329e85] | 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 |
---|
[d843835] | 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; |
---|
[4329e85] | 248 | } |
---|
[9204a04] | 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 |
---|
[d843835] | 271 | NTFS) |
---|
[9204a04] | 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 |
---|
[d843835] | 305 | NTFS) |
---|
[9204a04] | 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 |
---|
[d843835] | 338 | NTFS) |
---|
[9204a04] | 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 | } |
---|
[d843835] | 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 | } |
---|