| 1 | [[TOC(heading=Índice)]] |
| 2 | = Servidor de respaldo de OpenGnsys = |
| 3 | |
| 4 | == Uso básico == |
| 5 | |
| 6 | Semanalmente se realizará una sincronización semanal del equipo de respaldo con el principal utilizando el script '''sincronizacion_opengnsys en''' /home/usuario/bin. |
| 7 | |
| 8 | Si queremos utilizar el servicio de opengnsys en la máquina de respaldo hemos de ejecutar el script '''iniciar_opengnsys''' en /home/usuario/bin, que prepara la configuración del dhcp, el cron para arrancar opengnsys si se cayera (según la configuración) y arranca los servicios opengnsys y dhcp. |
| 9 | |
| 10 | Para apagar el servicio utilizaremos '''apagar_opengnsys''', que además de apagarlo vacía la configuración del dhcp y programa en el cron la sincronización con el servidor principal. |
| 11 | |
| 12 | |
| 13 | == Proceso de sincronización la máquina de respaldo con el servidor principal == |
| 14 | |
| 15 | La máquina de respaldo estará normalmente parada. |
| 16 | |
| 17 | En el fin de semana se arrancará la máquina virtual, que lanzará un script que compruebe si el servicio está funcionando en el servidor principal y si está iniciado: |
| 18 | |
| 19 | * apaga los servicios de opengnsys y dhcpd (si están arrancados) |
| 20 | * configura el dhcp para que no responda a ningún equipo y apaga el servicio. |
| 21 | * configura /etc/defaults/opengnsys para que el cron no active los servicios si esta caído. |
| 22 | * realiza el respaldo de la configuración dhcp, de opengnsys y de la base de datos. |
| 23 | * al acabar para la máquina virtual. |
| 24 | |
| 25 | Se sincronizan: |
| 26 | |
| 27 | * /etc/dhcp/dhcpd.conf guardándolo en /etc/dhcpd/OGrespaldo |
| 28 | * /opt/opengnsys |
| 29 | * la base de datos ogAdmBD → los datos del servidor principal se guardan en /opt/opengnsys/doc/backup_ogAdmBD.sql |
| 30 | |
| 31 | == Para ver la marcha de la sincronización == |
| 32 | |
| 33 | El comando rsync al copiar los archivos crea primero un archivo temporal oculto y luago lo renombra para ver qué archivo está sincronizando tenemos dos posibilidades: |
| 34 | |
| 35 | '''lsof|grep /opt/opengnsys''' |
| 36 | {{{ |
| 37 | rsync 1516 root cwd DIR 252,1 4096 8388609 /opt/opengnsys |
| 38 | rsync 1518 root cwd DIR 252,1 4096 8388609 /opt/opengnsys |
| 39 | rsync 1518 root 3u REG 252,1 4734320640 8391702 /opt/opengnsys/images/.Win72012.img.JraISS |
| 40 | }}} |
| 41 | |
| 42 | '''find /opt/opengnsys -name "." *''' |
| 43 | {{{ |
| 44 | /opt/opengnsys/images/groups/I2.35/.iptables |
| 45 | /opt/opengnsys/images/.Win72012.img.JraISS |
| 46 | }}} |
| 47 | |
| 48 | == Instalación de la máquina == |
| 49 | Se instala desde cero: |
| 50 | |
| 51 | * Instalación del mismo sistema operativo que el servidor principal: Ubuntu 14.04 (LTS) |
| 52 | * Instalación de opengnsys 1.0.6. |
| 53 | |
| 54 | Se copian del servidor principal los archivos de configuramos que no se sincronizan: |
| 55 | |
| 56 | * /etc/default/opengnsys |
| 57 | |
| 58 | Se configura iptables y tcpwrapper siguiendo la documentación del servidor principal. |
| 59 | |
| 60 | == Eliminamos todas las posibilidades de que están los dos servicios iniciados a la vez == |
| 61 | |
| 62 | __Configuramos opengnsys y dhcp para que no arranquen al inicio__ |
| 63 | |
| 64 | {{{ |
| 65 | find rc?.d|grep S20opengnsys |
| 66 | |
| 67 | sudo mv S20opengnsys .S20opengnsys |
| 68 | sudo mv rc3.d/S20opengnsys rc3.d/.S20opengnsys |
| 69 | sudo mv rc4.d/S20opengnsys rc4.d/.S20opengnsys |
| 70 | sudo mv rc5.d/S20opengnsys rc5.d/.S20opengnsys |
| 71 | |
| 72 | find rc?.d|grep S20isc-dhcp-server |
| 73 | |
| 74 | sudo mv rc2.d/S20isc-dhcp-server rc2.d/.S20isc-dhcp-server |
| 75 | sudo mv rc3.d/S20isc-dhcp-server rc3.d/.S20isc-dhcp-server |
| 76 | sudo mv rc4.d/S20isc-dhcp-server rc4.d/.S20isc-dhcp-server |
| 77 | sudo mv rc5.d/S20isc-dhcp-server rc5.d/.S20isc-dhcp-server |
| 78 | }}} |
| 79 | |
| 80 | __La configuración del dhcp__ |
| 81 | No contiene ningún equipo |
| 82 | |
| 83 | La configuración del servidor principal se copia al directorio /etc/dhcpd/OGrespaldo |
| 84 | |
| 85 | Al realizar el respaldo borra el contenido del archivo. |
| 86 | |
| 87 | __En el cron__ |
| 88 | Se /etc/default/opengnsys se pone RUN_CRONJOB="no" es decir que no arranca el servicio está apagado. |
| 89 | |
| 90 | Se modifica el cron.d/torrentcreator para que sólo cree ficheros .torrent y .sum cuando está arrancado el servicio opengnsys. (Aunque se ejecute durante la sincronización los ficheros de imágenes no se corrompen porque mientras se copian están ocultos). |
| 91 | |
| 92 | {{{ |
| 93 | #* * * * * root [ -x /opt/opengnsys/bin/torrent-creator ] && /opt/opengnsys/bin/torrent-creator |
| 94 | * * * * * root [ "$(pgrep ogAdmRepo | wc -w)" -gt "0" ] && /opt/opengnsys/bin/torrent-creator |
| 95 | }}} |
| 96 | |
| 97 | __En iniciar_opengnsys__ |
| 98 | |
| 99 | Comprueba si el servicio está iniciado en el servidor principal, y en ese caso pregunta si queremos arrancarlo en el de respaldo. |
| 100 | |
| 101 | == Modificaciones necesarias para la restauración == |
| 102 | |
| 103 | '''Dhcp:''' |
| 104 | |
| 105 | Tendremos el archivo de configuración vacío y guardaremos el de respaldo en /etc/dhcp/OGrespaldo, creamos el directorio. |
| 106 | |
| 107 | {{ |
| 108 | cd /etc/dhcp |
| 109 | sudo mkdir OGrespaldo |
| 110 | }}} |
| 111 | |
| 112 | '''Opengnsys:''' |
| 113 | |
| 114 | Para comprobar si está iniciado el servicio opengnsys en el servidor principal usaremos nmap. Lo instalamos. |
| 115 | {{{ |
| 116 | sudo apt-get install nmap |
| 117 | }}} |
| 118 | |
| 119 | == Creación de clave pública para la autenticación del servidor principal == |
| 120 | |
| 121 | Se utiliza el usuario "usuario". |
| 122 | |
| 123 | Se genera la clave pública en el servidor de respaldo del usuario "usuario" (por defecto rsa de 2048bits : |
| 124 | |
| 125 | '''ssh-keygen''' |
| 126 | {{{ |
| 127 | Generating public/private rsa key pair. |
| 128 | Enter file in which to save the key (/home/usuario/.ssh/id_rsa): |
| 129 | Enter passphrase (empty for no passphrase): |
| 130 | Enter same passphrase again: |
| 131 | Your identification has been saved in /home/usuario/.ssh/id_rsa. |
| 132 | Your public key has been saved in /home/usuario/.ssh/id_rsa.pub. |
| 133 | The key fingerprint is: |
| 134 | f2:c1:80:40:85:f9:1f:9c:05:3d:e9:c9:2e:0e:0b:4a usuario@servidor-respaldo |
| 135 | The key's randomart image is: |
| 136 | +--[ RSA 2048]----+ |
| 137 | | .o+. .o . | |
| 138 | | o. . = | |
| 139 | | |
| 140 | |. . . | |
| 141 | | | |
| 142 | +-----------------+ |
| 143 | }}} |
| 144 | |
| 145 | En el servidor principal: |
| 146 | {{{ |
| 147 | vi /etc/hosts.allow |
| 148 | sshd: … IP_RESPALDO |
| 149 | }}} |
| 150 | |
| 151 | Se copia la clave pública al servidor principal |
| 152 | |
| 153 | '''ssh-copy-id -i /home/usurio/.ssh/id_dsa.pub usuario@principal''' |
| 154 | {{{ |
| 155 | usuario@principal's password: |
| 156 | Now try logging into the machine, with "ssh 'usuario@principal'", and check in: |
| 157 | |
| 158 | ~/.ssh/authorized_keys |
| 159 | |
| 160 | to make sure we haven't added extra keys that you weren't expecting. |
| 161 | }}} |
| 162 | |
| 163 | Comprobamos que en el servidor principal está la clave pública |
| 164 | |
| 165 | '''cat /home/usuario/.ssh/authorized_keys''' |
| 166 | {{{ |
| 167 | ssh-dss AAA... jeE usuario@respaldo |
| 168 | }}} |
| 169 | |
| 170 | Configurar el servicio ssh del servidor principal para que permita la conexión. En /etc/ssh/sshd_config (estaba por defecto). |
| 171 | {{{ |
| 172 | PubkeyAuthentication yes |
| 173 | }}} |
| 174 | |
| 175 | == Configuramos el demonio rsync en el servidor principal == |
| 176 | |
| 177 | En /etc/rsyncd.conf añadimos un recurso compartido apuntando al directorio de opengnsys. |
| 178 | |
| 179 | {{{ |
| 180 | max connections = 0 |
| 181 | log file = /var/log/rsync.log |
| 182 | timeout = 300 |
| 183 | |
| 184 | [ogimages] |
| 185 | comment = Carpeta de imagenes |
| 186 | path = /opt/opengnsys/images |
| 187 | read only = no |
| 188 | list = yes |
| 189 | uid = root |
| 190 | gid = root |
| 191 | auth users = opengnsys |
| 192 | secrets file = /etc/rsyncd.secrets |
| 193 | |
| 194 | [respaldo] |
| 195 | comment = Respaldo de Opengnsys |
| 196 | path = /opt/opengnsys |
| 197 | read only = yes |
| 198 | list = yes |
| 199 | uid = root |
| 200 | gid = root |
| 201 | auth users = usuario |
| 202 | secrets file = /etc/rsyncd.secrets |
| 203 | hosts allow = xxx.xxx.xxx.xxx # Ip servidor de respaldo |
| 204 | }}} |
| 205 | |
| 206 | /etc/rsyncd.secrets |
| 207 | {{{ |
| 208 | Opengnsys:CLAVEOG |
| 209 | usuario:CLAVE -> la clave no es la misma que la del ssh |
| 210 | }}} |
| 211 | |
| 212 | Damos permiso de lectura y escritura sólo al root (ya lo tenía): |
| 213 | {{{ |
| 214 | chmod 600 rsyncd.secrets |
| 215 | }}} |
| 216 | |
| 217 | Nota: si con el script de Opengnsys setsmbpass se cambiara la clave de samba para el usuario opengnsys, también se reescribirá este fichero y será necesario volver a incluir la línea anterior. |
| 218 | |
| 219 | Configuramos el xinetd → está bien configurado para que escuche rsync. |
| 220 | |
| 221 | Configuramos tcpwrapper para permita conectarse el servidor de respaldo al rsync (ya estaba incluido), en /etc/hosts.allow |
| 222 | {{{ |
| 223 | rsync: IPRESPALDO* |
| 224 | }}} |
| 225 | * Nota: los clientes de opengnsys también utilizan rsync, por lo que sus ip's deben estar incluidas en esta línea. |
| 226 | |
| 227 | En el servidor respaldo creamos el fichero con el contenido de la clave de rsync para que lo lea el script de sincronización, /home/usuario/.ssh/passrsync: |
| 228 | {{{ |
| 229 | CLAVE |
| 230 | }}} |
| 231 | |
| 232 | == Script de sincronización del servidor principal al de respaldo == |
| 233 | |
| 234 | Por seguridad si el servidor principal no tiene arrancado los servicios de opengnsys no se puede sincronizarse, entendiendo que en este caso puede haber un error que no queremos replicar en la máquina de respaldo. |
| 235 | |
| 236 | Permite configurar dentro del script los parámetros: IPMASTER, IPRESPALDO, USUARIORESPALDO y CAMBIOIP. Este último parámetro nos permite decidir si el servidor de respaldo utilizará la misma IP que el principal (CAMBIOIP=no) o tendrá una ip diferente (CAMBIOIP=si) |
| 237 | |
| 238 | CAMBIOIP=si: Distinta ip en el servidor principal y en el de respaldo |
| 239 | Me permite tener los dos servidores iniciados a la vez y con la configuración del dhcp repartir la carga entre ambos. |
| 240 | |
| 241 | Error conocido: Si se tiene que los clientes que inicien por grub y que además de los sistemas operativos se tenga una línea que permita arrancar OpenGnsys dará problemas. El fichero de configuración del grub en la línea de OpenGnsys tiene los parámetros que se le pasan al kernel, entre ellos la configuración de la ip del servidor de Opengnsys, como la configuración es local cuando arranquemos estos equipos seguirán buscando el servidor principal y darán error. Simplemente habría que cambiar el modo de arranque a OpenGnsys. También se puede volver a instalar el grub tomando la nueva configuración. |
| 242 | |
| 243 | CAMBIOIP=no: igual ip en el servidor principal y en el de respaldo |
| 244 | Cuando se pone en marcha el servidor de respaldo hay que cambiarle la ip por la del servidor principal y deshabilitar la tarjeta del red de este último. Los script de iniciar y apagar OpenGnsys dan un mensaje de aviso para que se realice el cambio. |
| 245 | |
| 246 | El script realiza. |
| 247 | |
| 248 | * Apaga los servicios de opengnsys y dhcp. |
| 249 | * Vacía la configuración del dhcp y configura que no arranque los servicio de opengnsys. |
| 250 | * Sincroniza el archivo de configuración de dhcp a /etc/dhcp/OGrespaldo |
| 251 | * Sincroniza los archivos del directorio /opt/opengnsys y modifica el nombre de la interfaz de red |
| 252 | * Sincroniza los archivos del directorio /var/lib/tftpboot/. |
| 253 | * Exporta la base de datos del servidor principal a un fichero, modifica la ip del servidor y la importa en el servidor de respaldo. |
| 254 | |
| 255 | Nota: el cambio de la ip del servidor se realiza en todos los ficheros de configuración si la variable CAMBIOIP tiene valor "si". |
| 256 | |
| 257 | '''/home/usuario/bin/sincronizacion_opengnsys''' |
| 258 | {{{ |
| 259 | #!/bin/bash |
| 260 | #/** |
| 261 | # sincronizacion_og |
| 262 | #@brief sincroniza con servidor principal el directorio /opt/opengnsys, la base de datos ogAdmBD, el dhcp y la configuración PXE. |
| 263 | #@param no |
| 264 | #@return |
| 265 | #@exception 1 El usuario no es root |
| 266 | #@exception 2 No hay acceso a los ficheros para obtener las claves |
| 267 | #@exception 3 Servidor principal esta apagado |
| 268 | #@version 1.1 |
| 269 | #@date 2014/09/24 |
| 270 | #@version 1.2 Se permite configurar si se realiza cambio de ip. |
| 271 | # Si no se cambia la ip al sustituir al servidor principal por el de respaldo, |
| 272 | # se baja al t. de red del principal y el servidor de respaldo se configura con esta misma ip. |
| 273 | #@date 2015/11/09 |
| 274 | #*/ ## |
| 275 | |
| 276 | # CONFIGURACION MASTER Y RESPALDO__________________________ |
| 277 | CAMBIOIP="NO" # [SI|NO] |
| 278 | IPMASTER="IP_MASTER" |
| 279 | IPRESPALDO="IP_RESPALDO" |
| 280 | USERRESPALDO="USUARIO" |
| 281 | |
| 282 | ############### _________________________________________ |
| 283 | OPENGNSYS="/opt/opengnsys" |
| 284 | RSYNCCLAVE="/home/$USERRESPALDO/.ssh/passrsync" |
| 285 | FILESAL="/var/log/respaldo_opengnsys.log" |
| 286 | FILELOG="/var/log/messages" |
| 287 | PROG="$(basename $0)" |
| 288 | |
| 289 | # Para el cambio de IP escapar los . de las ips |
| 290 | IPMASTER2=$(echo $IPMASTER |sed s/'\.'/'\\\.'/g) |
| 291 | IPRESPALDO2=$(echo $IPRESPALDO |sed s/'\.'/'\\\.'/g) |
| 292 | |
| 293 | function apaga_servicios { |
| 294 | echo " * Apagamos los servicios" | tee -a $FILESAL |
| 295 | [ $(pgrep ogAdmRepo |wc -l) == "0" ] || service opengnsys stop |
| 296 | [ $(pgrep dhcpd |wc -l) == "0" ] || service isc-dhcp-server stop |
| 297 | echo " * configuramos para que no se arranca los servicios de opengnsys" | tee -a $FILESAL |
| 298 | sed -i s/RUN_CRONJOB.*$/RUN_CRONJOB=\"no\"/g /etc/default/opengnsys |
| 299 | echo " * La configuracion del dhcp la dejamos vacia. "| tee -a $FILESAL |
| 300 | echo "" > /etc/dhcp/dhcpd.conf |
| 301 | } |
| 302 | |
| 303 | # DHCP |
| 304 | function sincronizacion_dhcp { |
| 305 | local DIRRESPALDO ERROR |
| 306 | DIRRESPALDO="/etc/dhcp/respaldoOG" |
| 307 | |
| 308 | echo " * Sincronizamos configuracion dhcpd" | tee -a $FILESAL |
| 309 | [ -r $DIRRESPALDO/dhcpd.conf ] && mv -f $DIRRESPALDO/dhcpd.conf $DIRRESPALDO/dhcpd.conf.ant |
| 310 | rsync -aHAX -e "ssh -i /home/$USERRESPALDO/.ssh/id_rsa" $USERRESPALDO@$IPMASTER:/etc/dhcp/dhcpd.conf $DIRRESPALDO 2>&1 | tee -a $FILESAL |
| 311 | ERROR=${PIPESTATUS[0]} |
| 312 | if [ $CAMBIOIP == "SI" ]; then |
| 313 | sed -i s/"$IPMASTER2;"/"$IPRESPALDO2;"/g $DIRRESPALDO/dhcpd.conf |
| 314 | fi |
| 315 | return $ERROR |
| 316 | } |
| 317 | |
| 318 | # Opengnsys |
| 319 | function sincronizacion_og { |
| 320 | local ERROR TMPDIR IMGDIR |
| 321 | TMPDIR="/tmp/ogsum" |
| 322 | IMGDIR="$OPENGNSYS/images" |
| 323 | echo " * Sincronizamos opengnsys" | tee -a $FILESAL |
| 324 | # Comprobamos si los fichero img.ant del principal que se corresponden con los .img de respaldo |
| 325 | # Creasmos directorio temporal |
| 326 | [ -x $TMPDIR ] && rm -rf $TMPDIR |
| 327 | mkdir $TMPDIR |
| 328 | # Nos traemos los ficheros .sum del backup de las imágenes del servidor principal |
| 329 | rsync -aHAX --delete --password-file=$RSYNCCLAVE $USERRESPALDO@$IPMASTER::respaldo/images/*.img.sum.ant $TMPDIR 2>&1 | tee -a $FILESAL |
| 330 | # Comparamos el .sum del backup del principal con la imagen del de respaldo |
| 331 | for IMGSUM in $(ls $TMPDIR); do |
| 332 | if [ -r "$IMGDIR/${IMGSUM%.ant}" ]; then |
| 333 | # Si los ficheros son iguales renombramos la imagen con .ant |
| 334 | if diff "$TMPDIR/$IMGSUM" "$IMGDIR/${IMGSUM%.ant}" &>/dev/null ; then |
| 335 | echo "iguales" |
| 336 | IMG=${IMGSUM%.sum.ant} |
| 337 | rm -f "$IMGDIR/$IMG"{,.sum,.full.sum,.torrent}.ant |
| 338 | mv "$IMGDIR/${IMG}" "$IMGDIR/${IMG}.ant" |
| 339 | for EXT in sum full.sum torrent; do |
| 340 | mv "$IMGDIR/$IMG.$EXT" "$IMGDIR/$IMG.$EXT.ant" |
| 341 | done |
| 342 | fi |
| 343 | fi |
| 344 | done |
| 345 | |
| 346 | rsync -aHAX --delete --password-file=$RSYNCCLAVE $USERRESPALDO@$IPMASTER::respaldo/ $OPENGNSYS 2>&1 | tee -a $FILESAL |
| 347 | ERROR=${PIPESTATUS[0]} |
| 348 | if [ $CAMBIOIP == "SI" ]; then |
| 349 | for FILE in $OPENGNSYS/etc/* $OPENGNSYS/client/etc/ogAdmClient* $OPENGNSYS/www/controlacceso.php; do |
| 350 | sed -i s/"$IPMASTER2"/"$IPRESPALDO2"/g $FILE |
| 351 | done |
| 352 | fi |
| 353 | echo " * Configuramos multicas: bond0 -> eth0" |
| 354 | sed -i 's/bond0/eth0/g' $OPENGNSYS/bin/sendFileMcast |
| 355 | return $ERROR |
| 356 | } |
| 357 | |
| 358 | # TFTP |
| 359 | function sincronizacion_tftp { |
| 360 | local ERROR |
| 361 | echo " * Sincronizamos tftp" | tee -a $FILESAL |
| 362 | rsync -aHAX --delete -e "ssh -i /home/$USERRESPALDO/.ssh/id_rsa" $USERRESPALDO@$IPMASTER:/var/lib/tftpboot/ /var/lib/tftpboot 2>&1 | tee -a $FILESAL |
| 363 | ERROR=${PIPESTATUS[0]} |
| 364 | if [ $CAMBIOIP == "SI" ]; then |
| 365 | sed -i -e s/"$IPMASTER2:"/"$IPRESPALDO2:"/g -e s/"$IPMASTER2 "/"$IPRESPALDO2 "/g /var/lib/tftpboot/menu.lst/* 2>/dev/null |
| 366 | fi |
| 367 | return $ERROR |
| 368 | } |
| 369 | |
| 370 | # MYSQL |
| 371 | function sincronizacion_mysql { |
| 372 | local MYSQLFILE USUARIO PASSWORD CATALOG ERROR |
| 373 | |
| 374 | echo " * Actualizamos la base de datos de opengnsys" | tee -a $FILESAL |
| 375 | |
| 376 | source $OPENGNSYS/etc/ogAdmServer.cfg |
| 377 | MYSQLFILE="$OPENGNSYS/doc/backup_ogAdmBD.sql" |
| 378 | [ -f $MYSQLFILE ] && mv $MYSQLFILE $MYSQLFILE.ant |
| 379 | |
| 380 | # Volcado de BD de servidor principal y cambio ip servidor. |
| 381 | echo " * Exportamos informacion mysql de servidor principal" | tee -a $FILESAL |
| 382 | ssh -i /home/$USERRESPALDO/.ssh/id_rsa $USERRESPALDO@$IPMASTER "mysqldump --opt -u $USUARIO -p$PASSWORD $CATALOG" > $MYSQLFILE |
| 383 | chmod 600 $MYSQLFILE |
| 384 | if [ $CAMBIOIP == "SI" ]; then |
| 385 | sed -i -e s/"$IPMASTER2"/"$IPRESPALDO2"/g -e s/"\/$IPMASTER2\/"/"\/$IPRESPALDO2\/"/g $MYSQLFILE |
| 386 | # para evitar problemas con los \. |
| 387 | eval $(echo sed -i -e s/"=$IPMASTER2\\"/"=$IPRESPALDO2\\"/g $MYSQLFILE) |
| 388 | fi |
| 389 | # Si el servicio esta apagado lo arranco |
| 390 | pgrep mysql &> /dev/null || service mysql start |
| 391 | |
| 392 | echo " * Importamos informacion mysql." | tee -a $FILESAL |
| 393 | mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" < $MYSQLFILE 2>&1 | tee -a $FILESAL |
| 394 | ERROR=${PIPESTATUS[0]} |
| 395 | return $ERROR |
| 396 | } |
| 397 | |
| 398 | TIME1=$SECONDS |
| 399 | |
| 400 | if [ "$USER" != "root" ]; then |
| 401 | date +"%b %d %T $PROG: Error: solo ejecutable por root" >&2 |
| 402 | exit 2 |
| 403 | fi |
| 404 | |
| 405 | # Comprobamos acceso a ficheros de donde extraemos las claves. |
| 406 | if ! [ -r $OPENGNSYS/etc/ogAdmServer.cfg -a -r $RSYNCCLAVE ]; then |
| 407 | echo "$PROG: ERROR: Sin acceso a la configuración de OpenGnSys." | tee -a $FILESAL |
| 408 | exit 3 |
| 409 | fi |
| 410 | |
| 411 | # Comprobamos que el servidor principal esta funcionando bien: si tiene el puerto de ogAdmRepo abierto |
| 412 | # Si esta bien hacemos el respaldo; si no nos salimos. |
| 413 | if ! nmap -p 2002 $IPMASTER|grep "2002/tcp open" > /dev/null; then |
| 414 | date +"%b %d %T $PROG: ERROR el servidor principal no tiene opengnsys arrancado. No realizamos la sincronizacion." | tee -a $FILESAL $FILELOG |
| 415 | exit 4 |
| 416 | fi |
| 417 | date +"%b %d %T $PROG: Comenzamos respaldo de opengnsys desde servidor principal." | tee -a $FILESAL $FILELOG |
| 418 | echo " * Configuración: CAMBIOIP: $CAMBIOIP, IPMASTER: $IPMASTER, IPRESPALDO: $IPRESPALDO y USERRESPALDO: $USERRESPALDO" |
| 419 | |
| 420 | ERRORFIN="si" |
| 421 | sincronizacion_og && ERRORFIN="no" || date +"%b %d %T $PROG: Error en sincronizacion_opengnsys" |tee -a $FILESAL $FILELOG |
| 422 | sincronizacion_dhcp && ERRORFIN="no" || date +"%b %d %T $PROG: Error en sincronizacion_dhcp" |tee -a $FILESAL $FILELOG |
| 423 | sincronizacion_tftp && ERRORFIN="no" || date +"%b %d %T $PROG: Error en sincronizacion_tftp" |tee -a $FILESAL $FILELOG |
| 424 | sincronizacion_mysql && ERRORFIN="no" || date +"%b %d %T $PROG: Error en sincronizacion_mysql" |tee -a $FILESAL $FILELOG |
| 425 | |
| 426 | TIME=$[SECONDS-TIME1] |
| 427 | if [ $ERRORFIN == "si" ]; then |
| 428 | date +"%b %d %T opengnsys $(basename $0): Respaldo de opengnsys desde servidor principal no realizado correctamente. Ha ocurrido un error." |
| 429 | else |
| 430 | date +"%b %d %T opengnsys $(basename $0): Respaldo de opengnsys desde servidor principal finalizado." | tee -a $FILESAL $FILELOG |
| 431 | date +"%b %d %T opengnsys $(basename $0): Duracion de la operacion $[TIME/60]m $[TIME%60]s." | tee -a $FILESAL $FILELOG |
| 432 | fi |
| 433 | |
| 434 | # Despues del respaldo apagamos la maquina |
| 435 | poweroff |
| 436 | }}} |
| 437 | |
| 438 | |
| 439 | == Script para iniciar opengnsys == |
| 440 | Prepara el equipo antes de iniciar el servicio de opengngsys en el servidor de respaldo y lo inicia. |
| 441 | |
| 442 | Si CAMBIOIP=no comprueba se la ip es la correcta y avisa que debe estar bajada la tarjeta de servidor principal. |
| 443 | Si CAMBIOIP=si comprueba si el servicio está arrancado en el servidor principal y en ese caso pregunta si se quiere iniciar en el de respaldo. |
| 444 | Si la variable RUN_CRONJOB=yes dentro del script, configura el archivo /etc/default/opengnsys para que en el cron que se comprueben los servicios de opengnsys. |
| 445 | Copia configuración dhcp al lugar correcto. |
| 446 | Arranca los servicios opengnsys y dhcp. |
| 447 | Borra en el cron la sincronización con el servidor principal. |
| 448 | |
| 449 | '''/home/usuario/bin/iniciar_opengnsys''' |
| 450 | {{{ |
| 451 | #!/bin/bash |
| 452 | #/** |
| 453 | # iniciar_opengnsys |
| 454 | #@brief Prepara el equipo antes de iniciar el servicio de opengngsys en el servidor de respaldo y lo inicia. |
| 455 | # * Crea en el cron que se comprueben los servicios de opengnsys. |
| 456 | # * Copia configuración dhcp |
| 457 | # * Arranca los servicios opengnsys y dhcp |
| 458 | # * Borra en el cron la sincronizacion con el servidor principal |
| 459 | #@param no |
| 460 | #@exception 1 el usuario no es root |
| 461 | #@exception 2 Servidor principal encendido |
| 462 | #@exception 3 IPs distinta a la del servidor principal |
| 463 | #@return nada |
| 464 | #@version 1.0 |
| 465 | #@date 2014/09/25 |
| 466 | #*/ ## |
| 467 | # CAMBIOIP y IPMASTER Tomo valores del script de sincronizacion |
| 468 | SCRIPT="./sincronizacion_opengnsys" |
| 469 | if [ -r "$SCRIPT" ]; then |
| 470 | eval $(grep CAMBIOIP "$SCRIPT") |
| 471 | eval $(grep -m 1 IPMASTER "$SCRIPT") |
| 472 | else |
| 473 | echo "Se necesita acceso de lectura al script de sincronizacion" |
| 474 | exit 4 |
| 475 | fi |
| 476 | FILESAL="/var/log/respaldo_opengnsys.log" |
| 477 | FILELOG="/var/log/messages" |
| 478 | FILECRON="/etc/cron.d/opengnsys_sincronizacion" |
| 479 | RUN_CRONJOB="no" |
| 480 | PROG=$(basename $0) |
| 481 | |
| 482 | # Comprobamos que lo ejecute el usuario root. |
| 483 | if [ "$USER" != "root" ]; then |
| 484 | echo "$PROG: Error: solo ejecutable por root" >&2 |
| 485 | exit 1 |
| 486 | fi |
| 487 | |
| 488 | if [ "$CAMBIOIP" == "NO" ]; then |
| 489 | echo -e "Según la configuración del script de sincronización el servidor de respaldo \n debe que tener la IP del servidor principal." |
| 490 | # Comprobamos que la ip del servidor de respaldo es la mista que el servidor principal |
| 491 | IP=$(ip -4 -o address show up dev eth0|awk '{print $4}') |
| 492 | if [ "${IP%/*}" == "$IPMASTER" ]; then |
| 493 | echo -e " * Antes de iniciar OpenGnys hay que deshabilitar las tarjetas de red del servidor principal \n ¿ya se ha realizado?." |
| 494 | read INICIAR |
| 495 | [ "${INICIAR^^}" != "SI" ] && exit 3 |
| 496 | else |
| 497 | echo -e " * El servidor de respaldo tiene una ip diferente al principal, \n antes de iniciar OpenGnsys hay que dehabilitar la tarjeta de red\n del servidor principal y configurar la del de respaldo." |
| 498 | echo " Ejemplo comando-> principal: sudo ifdown eth0 |
| 499 | respaldo: sudo ifconfig eth0 ${IPMASTER} netmask 255.255.252.0" |
| 500 | exit 3 |
| 501 | |
| 502 | fi |
| 503 | else |
| 504 | # Comprobamos que el servidor principal esta funcionando bien: si tiene el puerto de ogAdmRepo abiertos |
| 505 | if nmap -p 2002 ${IPMASTER%/*}|grep "2002/tcp open" > /dev/null; then |
| 506 | echo -n "El servidor principal esta arrancado, ¿quiere iniciar opengnsys?: [si/No] " |
| 507 | read INICIAR |
| 508 | [ "${INICIAR^^}" != "SI" ] && exit 2 |
| 509 | fi |
| 510 | fi |
| 511 | |
| 512 | echo "Segun la configuracion incluimos en el cromtab que compruebe que esten los servicios arrancados." | tee -a $FILESAL |
| 513 | [ "$RUN_CRONJOB" == "yes" ] && sed -i s/RUN_CRONJOB.*$/RUN_CRONJOB=\"yes\"/g /etc/default/opengnsys |
| 514 | |
| 515 | echo "Actualizamos configuración servicio dhcp." | tee -a $FILESAL |
| 516 | cp -f /etc/dhcp/respaldoOG/dhcpd.conf /etc/dhcp/dhcpd.conf |
| 517 | |
| 518 | echo "Arrancamos los servicios dhcp y opengnsys" | tee -a $FILESAL $FILELOG |
| 519 | [ $(pgrep dhcpd |wc -l) == "0" ] && service isc-dhcp-server start || service isc-dhcp-server restart |
| 520 | [ $(pgrep opengnsys |wc -l) == "0" ] && service opengnsys start || service opengnsys restart |
| 521 | |
| 522 | echo "Deshabilitamos la sincronización con el servidor principal" |
| 523 | [ -r $FILECRON ] && rm -rf $FILECRON |
| 524 | }}} |
| 525 | |
| 526 | == Script para apagar de opengnsys == |
| 527 | |
| 528 | Apaga el servicio de opengnsys y el dhcp |
| 529 | Configura que no se arranquen los servicios de opengnsys si están caídos. |
| 530 | Vacía la configuración del dhcp. |
| 531 | Programa la sincronización semanal con el servidor principal. |
| 532 | Si CAMBIOIP="no" comprueba si la ip del servidor de respaldo es igual a la del principal y en ese caso avisa de que hay que cambiarla |
| 533 | |
| 534 | '''/home/usuario/bin/apagar_opengnsys''' |
| 535 | {{{ |
| 536 | #!/bin/bash |
| 537 | #/** |
| 538 | # apagar_opengnsys |
| 539 | #@brief Apaga los servicios de opengnsys, vacia la configuración y programa la sincronización. |
| 540 | # * Apaga el servicio de opengnsys y el dhcp. |
| 541 | # * Configura que no se arranquen los servicios de opengnsys si están caidos. |
| 542 | # * Vacía la configuración del dhcp. |
| 543 | # * Programa la sincronización semanal con el servidor principal. |
| 544 | #@param no |
| 545 | #@exception 1 el usuario no es root |
| 546 | #@exception 2 no hay acceso al script de sincornización para obtener la variable CAMBIOIP |
| 547 | #@return nada |
| 548 | #@version 1.0 |
| 549 | #@date 2014/09/25 |
| 550 | #*/ ## |
| 551 | # CAMBIOIP y IPMASTER Tomo valores del script de sincronizacion |
| 552 | SCRIPT="./sincronizacion_opengnsys" |
| 553 | if [ -r "$SCRIPT" ]; then |
| 554 | eval $(grep CAMBIOIP "$SCRIPT") |
| 555 | eval $(grep -m 1 IPMASTER "$SCRIPT") |
| 556 | else |
| 557 | echo "Se necesita acceso de lectura al script de sincronizacion" |
| 558 | exit 4 |
| 559 | fi |
| 560 | |
| 561 | FILESAL="/var/log/respaldo_opengnsys.log" |
| 562 | FILELOG="/var/log/messages" |
| 563 | FILECRON="/etc/cron.d/opengnsys_sincronizacion" |
| 564 | PROG=$(basename $0) |
| 565 | |
| 566 | # Comprobamos que lo ejecute el usuario root. |
| 567 | if [ "$USER" != "root" ]; then |
| 568 | echo "$PROG: Error: solo ejecutable por root" >&2 |
| 569 | exit 1 |
| 570 | fi |
| 571 | |
| 572 | date +"%b %d %T opengnsys $(basename $0): Apagamos opengnsys y programamos el respaldo desde el servidor principal." | tee -a $FILESAL $FILELOG |
| 573 | echo " * Apagamos los servicios" | tee -a $FILESAL |
| 574 | [ $(pgrep ogAdmRepo |wc -l) == "0" ] || service opengnsys stop |
| 575 | [ $(pgrep dhcpd |wc -l) == "0" ] || service isc-dhcp-server stop |
| 576 | |
| 577 | echo " * Deshabilitamos el arranque de los servicios de opengnsys desde el cron." | tee -a $FILESAL |
| 578 | sed -i s/RUN_CRONJOB.*$/RUN_CRONJOB=\"no\"/g /etc/default/opengnsys |
| 579 | |
| 580 | echo " * La configuracion del dhcp la dejamos vacia. "| tee -a $FILESAL |
| 581 | echo ""> /etc/dhcp/dhcpd.conf |
| 582 | |
| 583 | echo " * Programamos la sincronización semanal con el servidor principal" | tee -a $FILESAL |
| 584 | echo "0 2 * * 6 root [ -x /home/usuario/bin/sincronizacion_opengnsys ] && /home/usuario/bin/sincronizacion_opengnsys" > $FILECRON |
| 585 | |
| 586 | if [ "$CAMBIOIP" == "no" ]; then |
| 587 | IP=$(ip -4 -o address show up dev eth0|awk '{print $4}') |
| 588 | if [ "${IP%/*}" == "$IPMASTER" ]; then |
| 589 | echo "IMPORTANTE: la máquina de respaldo tiene la misma ip que el servidor principal, cambiar ip o reiniciar la máquina" |
| 590 | fi |
| 591 | fi |
| 592 | }}} |