wiki:DocumentacionUsuario1.0.6/Respaldo
Last modified 18 months ago Last modified on 11/17/15 13:56:08

Servidor de respaldo de OpenGnsys

Introducción

Se hace una propuesta de servidor de respaldo en el caso más sencillo posible: tenemos un servidor de respaldo sincronizado de forma programada con el servidor principal, pero cuando el de respaldo ha de tomar el papel del principal se realiza de forma manual.

  • El servidor OpenGnsys principal tiene instalados tanto la parte de repositorio como de servidor de administración.
  • El servidor de respaldo está configurado con otra ip para realizar la sincronización. Al reemplazar al principal puede mantener la ip diferente o tomar la del principal, esto debe estar reflejado en la configuración de los script de sincronización y realizarse de forma manual.

No se contemplan mecanismos de alta disponibilidad como una ip virtual que compartan ambos servidores, ni heartbeat.

Uso básico

Se realizará una sincronización semanal del equipo de respaldo con el principal utilizando el script sincronizacion_opengnsys.

Si queremos utilizar el servicio de opengnsys en la máquina de respaldo hemos de ejecutar el script iniciar_opengnsys, 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.

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.

Proceso de sincronización la máquina de respaldo con el servidor principal

La máquina de respaldo estará normalmente parada.

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:

  • apaga los servicios de opengnsys y dhcpd (si están arrancados)
  • configura el dhcp para que no responda a ningún equipo y apaga el servicio.
  • configura /etc/defaults/opengnsys para que el cron no active los servicios si esta caído.
  • realiza el respaldo de la configuración dhcp, tftp, de opengnsys y de la base de datos.
  • al acabar para la máquina virtual.

Se sincronizan:

  • /etc/dhcp/dhcpd.conf guardándolo en /etc/dhcpd/OGrespaldo
  • /var/lib/tftpboot
  • /opt/opengnsys
  • la base de datos ogAdmBD → los datos del servidor principal se guardan en /opt/opengnsys/doc/backup_ogAdmBD.sql

Para ver la marcha de la sincronización

El comando rsync al copiar los archivos crea primero un archivo temporal oculto y luego lo renombra para ver qué archivo está sincronizando tenemos dos posibilidades:

lsof|grep /opt/opengnsys

rsync     1516        root  cwd       DIR              252,1       4096    8388609 /opt/opengnsys 
rsync     1518        root  cwd       DIR              252,1       4096    8388609 /opt/opengnsys 
rsync     1518        root    3u      REG              252,1 4734320640    8391702 /opt/opengnsys/images/.Win72012.img.JraISS

find /opt/opengnsys -name ".*"

/opt/opengnsys/images/groups/I2.35/.iptables
/opt/opengnsys/images/.Win72012.img.JraISS

Instalación de la máquina

Se instala desde cero:

  • Instalación del mismo sistema operativo que el servidor principal: Ubuntu 14.04 (LTS)
  • Instalación de opengnsys 1.0.6.

Se copian del servidor principal los archivos de configuramos que no se sincronizan:

  • /etc/default/opengnsys

Se configura iptables y tcpwrapper siguiendo la documentación del servidor principal.

Eliminamos todas las posibilidades de que están los dos servicios iniciados a la vez

Configuramos opengnsys y dhcp para que no arranquen al inicio

find rc?.d|grep S20opengnsys

sudo mv rc2.d/S20opengnsys rc2.d/.S20opengnsys 
sudo mv rc3.d/S20opengnsys rc3.d/.S20opengnsys 
sudo mv rc4.d/S20opengnsys rc4.d/.S20opengnsys 
sudo mv rc5.d/S20opengnsys rc5.d/.S20opengnsys

find rc?.d|grep S20isc-dhcp-server

sudo mv rc2.d/S20isc-dhcp-server rc2.d/.S20isc-dhcp-server 
sudo mv rc3.d/S20isc-dhcp-server rc3.d/.S20isc-dhcp-server 
sudo mv rc4.d/S20isc-dhcp-server rc4.d/.S20isc-dhcp-server 
sudo mv rc5.d/S20isc-dhcp-server rc5.d/.S20isc-dhcp-server

La configuración del dhcp No contiene ningún equipo

La configuración del servidor principal se copia al directorio /etc/dhcpd/OGrespaldo

Al realizar el respaldo borra el contenido del archivo.

En el cron Se /etc/default/opengnsys se pone RUN_CRONJOB="no" es decir que no arranca el servicio si está apagado.

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).

#* * * * *   root   [ -x /opt/opengnsys/bin/torrent-creator ] && /opt/opengnsys/bin/torrent-creator 
* * * * *  root   [ "$(pgrep ogAdmRepo | wc -w)" -gt "0"  ]  && /opt/opengnsys/bin/torrent-creator

En iniciar_opengnsys

Comprueba si el servicio está iniciado en el servidor principal, y en ese caso pregunta si queremos arrancarlo en el de respaldo.

Modificaciones necesarias para la restauración

Dhcp:

Tendremos el archivo de configuración vacío y guardaremos el de respaldo en /etc/dhcp/OGrespaldo, creamos el directorio.

cd /etc/dhcp
sudo mkdir OGrespaldo

Opengnsys:

Para comprobar si está iniciado el servicio opengnsys en el servidor principal usaremos nmap. Lo instalamos.

sudo apt-get install nmap

Creación de clave pública para la autenticación del servidor principal

Se utiliza el usuario "usuario".

En el servidor de respaldo:

Se genera la clave pública en el servidor de respaldo del usuario "usuario" (por defecto rsa de 2048bits) :

ssh-keygen

Generating public/private rsa key pair. 
Enter file in which to save the key (/home/usuario/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/usuario/.ssh/id_rsa. 
Your public key has been saved in /home/usuario/.ssh/id_rsa.pub. 
The key fingerprint is: 
f2:c1:80:40:85:f9:1f:9c:05:3d:e9:c9:2e:0e:0b:4a usuario@servidor-respaldo 
The key's randomart image is: 
+--[ RSA 2048]----+ 
| .o+. .o .       | 
|  o. .  =        | 
      |     
|.   . .          | 
|                 | 
+-----------------+

En el servidor principal:

Se da permiso para entrar por ssh desde el servidor de respaldo.

vi /etc/hosts.allow
sshd: … IP_RESPALDO

Se copia la clave pública al servidor principal.

ssh-copy-id -i /home/usurio/.ssh/id_dsa.pub usuario@principal

usuario@principal's password: 
Now try logging into the machine, with "ssh 'usuario@principal'", and check in: 

  ~/.ssh/authorized_keys 

to make sure we haven't added extra keys that you weren't expecting. 

Comprobamos que en el servidor principal está la clave pública

cat /home/usuario/.ssh/authorized_keys

ssh-dss AAA... jeE usuario@respaldo

Configurar el servicio ssh del servidor principal para que permita la conexión. En /etc/ssh/sshd_config (estaba por defecto).

PubkeyAuthentication yes

Configuramos el demonio rsync en el servidor principal

En /etc/rsyncd.conf añadimos un recurso compartido apuntando al directorio de opengnsys.

max connections = 0 
log file = /var/log/rsync.log 
timeout = 300 

    [ogimages] 
    comment = Carpeta de imagenes 
    path = /opt/opengnsys/images 
    read only = no 
    list = yes 
    uid = root 
    gid = root 
    auth users = opengnsys
    secrets file = /etc/rsyncd.secrets 

    [respaldo] 
    comment = Respaldo de Opengnsys 
    path = /opt/opengnsys 
    read only = yes 
    list = yes 
    uid = root 
    gid = root 
    auth users = usuario 
    secrets file = /etc/rsyncd.secrets 
    hosts allow = xxx.xxx.xxx.xxx  # Ip servidor de respaldo

/etc/rsyncd.secrets

Opengnsys:CLAVEOG
usuario:CLAVE  -> la clave no es la misma que la del ssh

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.

Damos permiso de lectura y escritura sólo al root (ya lo tenía):

chmod 600 rsyncd.secrets

Configuramos el xinetd → está bien configurado para que escuche rsync.

Configuramos tcpwrapper para permita conectarse el servidor de respaldo al rsync (ya estaba incluido), en /etc/hosts.allow

rsync: IPRESPALDO*

*Nota: los clientes de opengnsys también utilizan rsync, por lo que sus ip's deben estar incluidas en esta línea.

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:

CLAVE

Script de sincronización del servidor principal al de respaldo

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.

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)

CAMBIOIP=si. Distinta ip en el servidor principal y en el de respaldo.
Me permite tener los dos servidores iniciados a la vez y con la configuración del dhcp repartir la carga entre ambos.

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.

CAMBIOIP=no. Igual ip en el servidor principal y en el de respaldo.
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.

El script realiza.

  • Apaga los servicios de opengnsys y dhcp.
  • Vacía la configuración del dhcp y configura que no arranque los servicios de opengnsys.
  • Sincroniza el archivo de configuración de dhcp a /etc/dhcp/OGrespaldo.
  • Sincroniza los archivos del directorio /opt/opengnsys y modifica el nombre de la interfaz de red (caso específico, comentado es script).
  • Sincroniza los archivos del directorio /var/lib/tftpboot/.
  • Exporta la base de datos del servidor principal a un fichero, modifica la ip del servidor y la importa en el servidor de respaldo.

Nota: el cambio de la ip del servidor se realiza en todos los ficheros de configuración si la variable CAMBIOIP tiene valor "si".

/home/usuario/bin/sincronizacion_opengnsys

#!/bin/bash
#/**
#       sincronizacion_opengnsys
#@brief sincroniza con servidor principal el directorio /opt/opengnsys, la base de datos ogAdmBD, el dhcp y la configuración PXE.
#@param no
#@return
#@exception 1 El usuario no es root
#@exception 2 No hay acceso a los ficheros para obtener las claves
#@exception 3 Servidor principal esta apagado
#@version 1.1 
#@date 2014/09/24 
#@version 1.2 Se permite configurar si se realiza cambio de ip. 
#       Si no se cambia la ip al sustituir al servidor principal por el de respaldo,
#       se baja al t. de red del principal y el servidor de respaldo se configura con esta misma ip.
#@date 2015/11/09
#*/ ##

# CONFIGURACION MASTER Y RESPALDO__________________________
CAMBIOIP="NO"  # [SI|NO]
IPMASTER="IP_MASTER" 
IPRESPALDO="IP_RESPALDO" 
USERRESPALDO="USUARIO" 

############### _________________________________________
OPENGNSYS="/opt/opengnsys" 
RSYNCCLAVE="/home/$USERRESPALDO/.ssh/passrsync" 
FILESAL="/var/log/respaldo_opengnsys.log" 
FILELOG="/var/log/messages" 
PROG="$(basename $0)" 

# Para el cambio de IP escapar los . de las ips
IPMASTER2=$(echo $IPMASTER |sed s/'\.'/'\\\.'/g)
IPRESPALDO2=$(echo $IPRESPALDO |sed s/'\.'/'\\\.'/g)

function apaga_servicios {
        echo " * Apagamos los servicios" | tee -a  $FILESAL
        [ $(pgrep ogAdmRepo |wc -l) == "0" ] || service opengnsys stop
        [ $(pgrep dhcpd |wc -l) == "0" ] || service isc-dhcp-server stop
        echo " * configuramos para que no se arranca los servicios de opengnsys" | tee -a  $FILESAL
        sed -i s/RUN_CRONJOB.*$/RUN_CRONJOB=\"no\"/g  /etc/default/opengnsys
        echo " * La configuracion del dhcp la dejamos vacia. "| tee -a  $FILESAL
        echo "" > /etc/dhcp/dhcpd.conf
}

# DHCP
function sincronizacion_dhcp {
        local DIRRESPALDO ERROR
        DIRRESPALDO="/etc/dhcp/respaldoOG" 

        echo " * Sincronizamos configuracion dhcpd" | tee -a  $FILESAL
        [ -r $DIRRESPALDO/dhcpd.conf ] && mv -f $DIRRESPALDO/dhcpd.conf $DIRRESPALDO/dhcpd.conf.ant
        rsync -aHAX -e "ssh -i /home/$USERRESPALDO/.ssh/id_rsa"  $USERRESPALDO@$IPMASTER:/etc/dhcp/dhcpd.conf $DIRRESPALDO 2>&1 | tee -a $FILESAL
        ERROR=${PIPESTATUS[0]}
        if [ $CAMBIOIP == "SI" ]; then
                sed -i s/"$IPMASTER2;"/"$IPRESPALDO2;"/g $DIRRESPALDO/dhcpd.conf
        fi
        return $ERROR
}

# Opengnsys 
function sincronizacion_og {
        local ERROR TMPDIR IMGDIR
        TMPDIR="/tmp/ogsum" 
        IMGDIR="$OPENGNSYS/images" 
        echo " * Sincronizamos opengnsys" | tee -a  $FILESAL
        # Comprobamos si los fichero img.ant del principal que se corresponden con los .img de respaldo
        # Creasmos directorio temporal
        [ -x $TMPDIR ] && rm -rf $TMPDIR
        mkdir $TMPDIR
        # Nos traemos los ficheros .sum del backup de las imágenes del servidor principal
        rsync -aHAX --delete --password-file=$RSYNCCLAVE $USERRESPALDO@$IPMASTER::respaldo/images/*.img.sum.ant $TMPDIR 2>&1 | tee -a $FILESAL
        # Comparamos el .sum del backup del principal con la imagen del de respaldo
        for IMGSUM in $(ls $TMPDIR); do
           if [ -r "$IMGDIR/${IMGSUM%.ant}" ]; then
              # Si los ficheros son iguales renombramos la imagen con .ant
              if  diff "$TMPDIR/$IMGSUM" "$IMGDIR/${IMGSUM%.ant}" &>/dev/null ; then
                echo "iguales" 
                 IMG=${IMGSUM%.sum.ant}
                 rm -f "$IMGDIR/$IMG"{,.sum,.full.sum,.torrent}.ant
                 mv "$IMGDIR/${IMG}" "$IMGDIR/${IMG}.ant" 
                 for EXT in sum full.sum torrent; do
                     mv "$IMGDIR/$IMG.$EXT" "$IMGDIR/$IMG.$EXT.ant" 
                 done
              fi
           fi
        done

        rsync -aHAX --delete --password-file=$RSYNCCLAVE $USERRESPALDO@$IPMASTER::respaldo/ $OPENGNSYS 2>&1 | tee -a $FILESAL
        ERROR=${PIPESTATUS[0]}
        if [ $CAMBIOIP == "SI" ]; then
                for FILE in $OPENGNSYS/etc/* $OPENGNSYS/client/etc/ogAdmClient* $OPENGNSYS/www/controlacceso.php; do
                        sed -i s/"$IPMASTER2"/"$IPRESPALDO2"/g $FILE
                done
        fi
        #echo " * Configuramos multicast: bond0 -> eth0" 
        #sed -i  's/bond0/eth0/g' $OPENGNSYS/bin/sendFileMcast
        return $ERROR
}

# TFTP
function sincronizacion_tftp {
        local ERROR
        echo " * Sincronizamos tftp" | tee -a  $FILESAL
        rsync -aHAX --delete -e "ssh -i /home/$USERRESPALDO/.ssh/id_rsa" $USERRESPALDO@$IPMASTER:/var/lib/tftpboot/ /var/lib/tftpboot 2>&1 | tee -a $FILESAL
        ERROR=${PIPESTATUS[0]}
        if [ $CAMBIOIP == "SI" ]; then
                sed -i -e s/"$IPMASTER2:"/"$IPRESPALDO2:"/g -e s/"$IPMASTER2 "/"$IPRESPALDO2 "/g /var/lib/tftpboot/menu.lst/*  2>/dev/null
        fi
        return $ERROR
}

# MYSQL
function sincronizacion_mysql {
        local MYSQLFILE USUARIO PASSWORD CATALOG ERROR

        echo " * Actualizamos la base de datos de opengnsys" | tee -a $FILESAL

        source $OPENGNSYS/etc/ogAdmServer.cfg
        MYSQLFILE="$OPENGNSYS/doc/backup_ogAdmBD.sql" 
        [ -f $MYSQLFILE ] && mv $MYSQLFILE  $MYSQLFILE.ant

        # Volcado de BD de servidor principal y cambio ip servidor.
        echo "   * Exportamos informacion mysql de servidor principal" | tee -a $FILESAL
        ssh  -i /home/$USERRESPALDO/.ssh/id_rsa $USERRESPALDO@$IPMASTER "mysqldump --opt -u $USUARIO -p$PASSWORD $CATALOG" > $MYSQLFILE
        chmod 600 $MYSQLFILE
        if [ $CAMBIOIP == "SI" ]; then
                sed -i -e s/"$IPMASTER2"/"$IPRESPALDO2"/g -e s/"\/$IPMASTER2\/"/"\/$IPRESPALDO2\/"/g $MYSQLFILE
                # para evitar problemas con los \.
                eval $(echo sed -i -e s/"=$IPMASTER2\\"/"=$IPRESPALDO2\\"/g $MYSQLFILE)
        fi
        # Si el servicio esta apagado lo arranco
        pgrep mysql &> /dev/null || service mysql start

        echo "   * Importamos informacion mysql." | tee -a $FILESAL
        mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" < $MYSQLFILE  2>&1 | tee -a $FILESAL
        ERROR=${PIPESTATUS[0]}
        return $ERROR
}

TIME1=$SECONDS

if [ "$(whoami)" != "root" ]; then
    date +"%b %d %T $PROG: Error: solo ejecutable por root" | tee -a $FILESAL
    exit 2
fi

# Comprobamos  acceso a ficheros de donde extraemos las claves. 
if ! [ -r $OPENGNSYS/etc/ogAdmServer.cfg -a -r $RSYNCCLAVE ]; then
    echo "$PROG: ERROR: Sin acceso a la configuración de OpenGnSys." | tee -a $FILESAL
    exit 3
fi

# Comprobamos que el servidor principal esta funcionando bien: si tiene el puerto de ogAdmRepo abierto
# Si esta bien hacemos el respaldo; si no nos salimos.
if  ! nmap -p 2002 $IPMASTER|grep "2002/tcp open" > /dev/null; then
        date +"%b %d %T $PROG: ERROR  el servidor principal no tiene opengnsys arrancado. No realizamos la sincronizacion." | tee -a $FILESAL $FILELOG
        exit 4
fi
date +"%b %d %T $PROG: Comenzamos respaldo de opengnsys desde servidor principal." | tee -a  $FILESAL $FILELOG
echo " * Configuración:  CAMBIOIP: $CAMBIOIP, IPMASTER: $IPMASTER, IPRESPALDO: $IPRESPALDO y USERRESPALDO: $USERRESPALDO" 

CORRECTO=""
sincronizacion_og && CORRECTO="og" || date +"%b %d %T $PROG: Error en sincronizacion_opengnsys" |tee -a  $FILESAL
sincronizacion_dhcp && CORRECTO="$CORRECTO dhcp" || date +"%b %d %T $PROG: Error en sincronizacion_dhcp" |tee -a  $FILESAL
sincronizacion_tftp && CORRECTO="$CORRECTO tftp" || date +"%b %d %T $PROG: Error en sincronizacion_tftp" |tee -a  $FILESAL
sincronizacion_mysql && CORRECTO="$CORRECTO mysql" || date +"%b %d %T $PROG: Error en sincronizacion_mysql" |tee -a  $FILESAL

TIME=$[SECONDS-TIME1]
if [ $CORRECTO == "og dhcp tftp mysql" ]; then
        date +"%b %d %T opengnsys $(basename $0): Respaldo de opengnsys desde servidor principal finalizado." | tee -a $FILESAL
        date +"%b %d %T opengnsys $(basename $0): Duracion de la operacion $[TIME/60]m $[TIME%60]s." | tee -a $FILESAL
else
        date +"%b %d %T opengnsys $(basename $0):  Respaldo de opengnsys desde servidor principal no realizado correctamente. Ha ocurrido un error." | tee -a $FILESAL
        date +"%b %d %T opengnsys $(basename $0): Sí ha ido bien el respaldo de $CORRECTO." | tee -a $FILESAL
fi



# Despues del respaldo apagamos la maquina
poweroff

Script para iniciar opengnsys

Prepara el equipo antes de iniciar el servicio de opengngsys en el servidor de respaldo y lo inicia.

  • Si CAMBIOIP=no comprueba se la ip es la correcta y avisa que debe estar bajada la tarjeta de servidor principal.
  • 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.
  • 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.
  • Copia configuración dhcp al lugar correcto.
  • Arranca los servicios opengnsys y dhcp.
  • Borra en el cron la sincronización con el servidor principal.

/home/usuario/bin/iniciar_opengnsys

#!/bin/bash
#/**
#       iniciar_opengnsys
#@brief Prepara el equipo antes de iniciar el servicio de opengngsys en el servidor de respaldo y lo inicia.
#               * Crea en el cron que se comprueben los servicios de opengnsys.
#               * Copia configuración dhcp
#               * Arranca los servicios opengnsys  y dhcp
#               * Borra en el cron la sincronizacion con el servidor principal
#@param no
#@exception 1 el usuario no es root
#@exception 2 Servidor principal encendido
#@exception 3 IPs distinta a la del servidor principal
#@return nada
#@version 1.0
#@date 2014/09/25
#*/ ##
# CAMBIOIP y IPMASTER Tomo valores del script de sincronizacion
SCRIPT="./sincronizacion_opengnsys" 
if [ -r "$SCRIPT" ]; then
   eval $(grep CAMBIOIP "$SCRIPT")
   eval  $(grep -m 1 IPMASTER "$SCRIPT")
else
   echo "Se necesita acceso de lectura al script de sincronizacion" 
   exit 4
fi
FILESAL="/var/log/respaldo_opengnsys.log" 
FILELOG="/var/log/messages" 
FILECRON="/etc/cron.d/opengnsys_sincronizacion" 
RUN_CRONJOB="no" 
PROG=$(basename $0)

# Comprobamos que lo ejecute el usuario root.
if [ "$(whoami)" != "root" ]; then
    echo "$PROG: Error: solo ejecutable por root" | tee -a $FILESAL
    exit 1
fi

if [ "$CAMBIOIP" == "NO" ]; then
   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." 
   # Comprobamos que la ip del servidor de respaldo es la mista que el servidor principal
   IP=$(ip -4 -o address show up dev eth0|awk '{print $4}')
   if [ "${IP%/*}" == "$IPMASTER" ]; then
      echo -e " * Antes de iniciar OpenGnys hay que deshabilitar las tarjetas de red del servidor principal \n   ¿ya se ha realizado?." 
      read INICIAR
      [ "${INICIAR^^}" != "SI" ] && exit 3
   else
      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." 
      echo "   Ejemplo comando-> principal: sudo ifdown eth0
                     respaldo: sudo ifconfig eth0 ${IPMASTER} netmask 255.255.252.0" 
      exit 3

   fi
else
   # Comprobamos que el servidor principal esta funcionando bien: si tiene el puerto de ogAdmRepo abiertos
   if  nmap -p 2002 ${IPMASTER%/*}|grep "2002/tcp open" > /dev/null; then
      echo -n  "El servidor principal esta arrancado, ¿quiere iniciar opengnsys?: [si/No] " 
      read INICIAR
      [ "${INICIAR^^}" != "SI" ] && exit 2
   fi
fi

echo "Segun la configuracion incluimos en el cromtab que compruebe que esten los servicios arrancados." | tee -a $FILESAL
[ "$RUN_CRONJOB" == "yes" ] && sed -i s/RUN_CRONJOB.*$/RUN_CRONJOB=\"yes\"/g  /etc/default/opengnsys

echo "Actualizamos configuración servicio dhcp."  | tee -a $FILESAL
cp -f /etc/dhcp/respaldoOG/dhcpd.conf /etc/dhcp/dhcpd.conf

echo "Arrancamos los servicios dhcp y opengnsys" | tee -a $FILESAL $FILELOG
[ $(pgrep dhcpd |wc -l) == "0" ] &&  service isc-dhcp-server start || service isc-dhcp-server restart
[ $(pgrep opengnsys |wc -l) == "0" ] && service opengnsys start || service opengnsys restart

echo "Deshabilitamos la sincronización con el servidor principal" 
[ -r $FILECRON ] &&  rm -rf $FILECRON

Script para apagar de opengnsys

  • Apaga el servicio de opengnsys y el dhcp
  • Configura que no se arranquen los servicios de opengnsys si están caídos.
  • Vacía la configuración del dhcp.
  • Programa la sincronización semanal con el servidor principal.
  • 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

/home/usuario/bin/apagar_opengnsys

#!/bin/bash
#/**
#       apagar_opengnsys
#@brief Apaga los servicios de opengnsys, vacia la configuración y programa la sincronización.
#               * Apaga el servicio de opengnsys y el dhcp.
#               * Configura que no se arranquen los servicios de opengnsys si están caidos.
#               * Vacía la configuración del dhcp.
#               * Programa la sincronización semanal con el servidor principal.
#@param no
#@exception 1 el usuario no es root
#@exception 2 no hay acceso al script de sincornización para obtener la variable CAMBIOIP
#@return nada
#@version 1.0
#@date 2014/09/25
#*/ ##
# CAMBIOIP y IPMASTER Tomo valores del script de sincronizacion
SCRIPT="./sincronizacion_opengnsys" 
if [ -r "$SCRIPT" ]; then
   eval $(grep CAMBIOIP "$SCRIPT")
   eval  $(grep -m 1 IPMASTER "$SCRIPT")
else
   echo "Se necesita acceso de lectura al script de sincronizacion" 
   exit 4
fi

FILESAL="/var/log/respaldo_opengnsys.log" 
FILELOG="/var/log/messages" 
FILECRON="/etc/cron.d/opengnsys_sincronizacion" 
PROG=$(basename $0)

# Comprobamos que lo ejecute el usuario root.
if [ "$USER" != "root" ]; then
    echo "$PROG: Error: solo ejecutable por root" >&2
    exit 1
fi

date +"%b %d %T opengnsys $(basename $0): Apagamos opengnsys y programamos el respaldo desde el servidor principal." | tee -a  $FILESAL $FILELOG
echo " * Apagamos los servicios" | tee -a  $FILESAL
[ $(pgrep ogAdmRepo |wc -l) == "0" ] || service opengnsys stop
[ $(pgrep dhcpd |wc -l) == "0" ] || service isc-dhcp-server stop

echo " * Deshabilitamos el arranque de los servicios de opengnsys desde el cron." | tee -a  $FILESAL
sed -i s/RUN_CRONJOB.*$/RUN_CRONJOB=\"no\"/g  /etc/default/opengnsys

echo " * La configuracion del dhcp la dejamos vacia. "| tee -a  $FILESAL
echo ""> /etc/dhcp/dhcpd.conf

echo " * Programamos la sincronización semanal con el servidor principal" | tee -a  $FILESAL
echo "0 2 * * 6   root   [ -x /home/usuario/bin/sincronizacion_opengnsys ] && /home/usuario/bin/sincronizacion_opengnsys" > $FILECRON

if [ "$CAMBIOIP" == "no" ]; then
   IP=$(ip -4 -o address show up dev eth0|awk '{print $4}')
   if [ "${IP%/*}" == "$IPMASTER" ]; then
        echo "IMPORTANTE: la máquina de respaldo tiene la misma ip que el servidor principal, cambiar ip o reiniciar la máquina" 
   fi
fi