source: installer/opengnsys_import.sh @ 01aef8db

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 01aef8db was e1e05de, checked in by irina <irinagomez@…>, 8 years ago

#755 opengnsys_import.sh: si es necesario importar los trigger de la BD se solicita la clave de root. El propietario de los menús PXE es www-data,para poder actualizarlos desde la consola.

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

  • Property mode set to 100755
File size: 6.4 KB
Line 
1#!/bin/bash
2#         importclient str_backupfile
3#@file    importclient
4#@brief   Importa los datos de OpenGnsys de un archivo de backup: dhcp, pxe, páginas de inicio y configuración de la consola.
5#@param 1 str_backupfile fichero de backup (creado con exportclient)
6#@exception 1 Error de formato
7#@exception 2 Sólo ejecutable por usuario root
8#@exception 3 Sin acceso al fichero de backup
9#@exception 4 Sin acceso a la configuración de OpenGnsys
10#@version 1.1.0 - Versión inicial.
11#@author  Irina Gómez - ETSII Univ. Sevilla
12#@date    2016-10-18
13#*/ ##
14
15# Variables globales.
16PROG="$(basename $0)"
17
18DATE=$(date +%Y%m%d)
19BACKUPFILE=$1
20TMPDIR=/tmp/opengnsys_export
21OPENGNSYS="/opt/opengnsys"
22MYSQLFILE="$TMPDIR/ogAdmBD.sql"
23MYSQLFILE2="$TMPDIR/usuarios.sql"
24MYSQLBCK="$OPENGNSYS/doc/ogAdmBD.sql-$DATE"
25CATALOG="ogAdmBD"
26
27DEFAULT_MYSQL_ROOT_PASSWORD="passwordroot"      # Clave por defecto root de MySQL
28
29# Si se solicita, mostrar ayuda.
30if [ "$*" == "help" ]; then
31    echo -e "$PROG: Importa los datos de OpenGnsys desde un archivo de backup:" \
32           " dhcp, pxe, páginas de inicio y configuración de la consola.\n" \
33           "    Formato: $PROG backup_file\n" \
34           "    Ejemplo: $PROG backup.tgz"
35    exit
36fi
37
38# Comprobamos número de parámetros
39if [ $# -ne 1 ]; then
40    echo "$PROG: ERROR: Error de formato: $PROG backup_file"
41    exit 1
42fi
43
44# Comprobar parámetros.
45if [ "$USER" != "root" ]; then
46        echo "$PROG: Error: solo ejecutable por root." >&2
47        exit 2
48fi
49
50# Comprobamos acceso al fichero de backup
51if ! [ -r $BACKUPFILE ]; then
52    echo "$PROG: ERROR: Sin acceso al fichero de backup." | tee -a $FILESAL
53    exit 3
54fi
55
56# Comprobamos  acceso a ficheros de configuración
57if ! [ -r $OPENGNSYS/etc/ogAdmServer.cfg ]; then
58    echo "$PROG: ERROR: Sin acceso a la configuración de OpenGnsys." | tee -a $FILESAL
59    exit 4
60fi
61
62# Si existe el directorio auxiliar lo borramos
63[ -d $TMPDIR ] && rm -rf $TMPDIR
64
65# Descomprimimos backup
66tar -xvzf $BACKUPFILE --directory /tmp &>/dev/null
67
68# Comprobamos si es la misma versión
69if ! diff $OPENGNSYS/doc/VERSION.txt $TMPDIR/VERSION.txt > /dev/null ; then
70    echo "La versión del servidor no coincide con la del backup."
71    cat $OPENGNSYS/doc/VERSION.txt $TMPDIR/VERSION.txt
72    read -p "¿Quiere continuar? (y/n): " ANSWER
73    if [ "${ANSWER^^}" != "Y" ]; then
74        echo "Operación cancelada."
75        exit 0
76    fi
77fi
78
79# Copiamos los archivo a su sitio correcto
80# DHCP
81echo "   * Componemos la configuración del dhcp."
82for DHCPCFGDIR in /etc/dhcp /etc/dhcp3; do
83    if [ -r $DHCPCFGDIR/dhcpd.conf ]; then
84        # Tomamos las variables globales de la configuración actual y las declaraciones host del backup
85        # Inicio declaraciones host
86        OLDHOSTINI=$(grep -n -m1 -e "^[[:blank:]]*host" -e "^#[[:blank:]]*host" $TMPDIR/dhcpd.conf|cut -d: -f1)
87        let BEFOREHOST=$(grep -n -m1 -e "^[[:blank:]]*host" -e "^#[[:blank:]]*host" $DHCPCFGDIR/dhcpd.conf| cut -d: -f1)-1
88        # Copia de seguridad de la configuración anterior
89        cp $DHCPCFGDIR/dhcpd.conf $DHCPCFGDIR/dhcpd.conf-LAST
90        mv $DHCPCFGDIR/dhcpd.conf $DHCPCFGDIR/dhcpd.conf-$DATE
91        # Nuevo fichero
92        sed ${BEFOREHOST}q $DHCPCFGDIR/dhcpd.conf-LAST > $DHCPCFGDIR/dhcpd.conf
93        sed -n -e "$OLDHOSTINI,\$p" $TMPDIR/dhcpd.conf >> $DHCPCFGDIR/dhcpd.conf
94        break
95    fi
96done
97
98# TFTP
99echo "   * Guardamos los ficheros PXE de los clientes."
100mv $OPENGNSYS/tftpboot/menu.lst $OPENGNSYS/tftpboot/menu.lst-$DATE
101cp -r $TMPDIR/menu.lst  $OPENGNSYS/tftpboot
102chown -R www-data:www-data $OPENGNSYS/tftpboot/menu.lst
103
104# Configuración de los clientes
105echo "   * Guardamos la configuración de los clientes."
106mv $OPENGNSYS/client/etc/engine.cfg $OPENGNSYS/client/etc/engine.cfg-$DATE
107cp $TMPDIR/engine.cfg $OPENGNSYS/client/etc/engine.cfg
108
109# Páginas de inicio
110echo "   * Guardamos las páginas de inicio."
111mv $OPENGNSYS/www/menus $OPENGNSYS/www/menus-$DATE
112cp -r $TMPDIR/menus $OPENGNSYS/www
113
114# MYSQL
115echo "   * Importamos informacion mysql."
116source $OPENGNSYS/etc/ogAdmServer.cfg
117# Crear fichero temporal de acceso a la BD
118MYCNF=$(mktemp /tmp/.my.cnf.XXXXX)
119chmod 600 $MYCNF
120trap "rm -f $MYCNF" 1 2 3 6 9 15
121cat << EOT > $MYCNF
122[client]
123user=$USUARIO
124password=$PASSWORD
125EOT
126
127# Si la BD tiene no definido el trigger necesitamos permisos de root
128mysql --defaults-extra-file=$MYCNF -e "SHOW TRIGGERS FROM ogAdmBD;" |grep "Trigger" &>/dev/null
129if [ $? -eq 0 ]; then
130    # Existe el trigger: eliminamos líneas del trigger en ogAdmBD.sql
131    read INI END <<< $(grep -n -e TRIGGER -e "END.*;;" $MYSQLFILE |cut -d: -f1)
132    sed -i "$INI,${END}d" $MYSQLFILE
133else
134    # No existe: necesitamos privilegios de root
135    # Clave root de MySQL
136    while : ; do
137        echo -n -e "\\nEnter root password for MySQL (${DEFAULT_MYSQL_ROOT_PASSWORD}): ";
138        read -r MYSQL_ROOT_PASSWORD
139        if [ -n "${MYSQL_ROOT_PASSWORD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico
140                echo -e "\\aERROR: Must be alphanumeric, try again..."
141        else
142                # Si esta vacio ponemos el valor por defecto
143                MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-$DEFAULT_MYSQL_ROOT_PASSWORD}"
144                break
145        fi
146    done
147    cat << EOT > $MYCNF
148[client]
149user=root
150password=$MYSQL_ROOT_PASSWORD
151EOT
152
153fi
154
155# Copia de seguridad del estado de la base de datos
156mysqldump --defaults-extra-file=$MYCNF --opt $CATALOG > $MYSQLBCK
157# Importamos los datos nuevos
158mysql --defaults-extra-file=$MYCNF -D "$CATALOG" < $MYSQLFILE &>/dev/null
159[ $? -ne 0 ] && echo "ERROR: Error al importar la información de la base de datos."
160# Importamos datos tabla usuario, ignoramos los repetidos
161sed -i -e s/IGNORE//g -e s/INSERT/"\nALTER TABLE usuarios  ADD UNIQUE (usuario);\n\nINSERT IGNORE"/g $MYSQLFILE2
162mysql --defaults-extra-file=$MYCNF -D "$CATALOG" < $MYSQLFILE2 &>/dev/null
163[ $? -ne 0 ] && echo "ERROR: Error al importar la información de los usuarios de la consola"
164# Borrar fichero temporal
165rm -f $MYCNF
166
167echo -e "Se ha terminado de importar los datos del backup. \n\nSe han realizado copias de seguridad de los archivos antiguos:"
168echo    "  - $DHCPCFGDIR/dhcpd.conf-$DATE"
169echo    "  - $OPENGNSYS/tftpboot/menu.lst-$DATE"
170echo    "  - $OPENGNSYS/client/etc/engine.cfg-$DATE"
171echo    "  - $OPENGNSYS/www/menus-$DATE"
172echo -e "  - $MYSQLBCK \n"
173
174echo "Hay que revisar la configuración del dhcp. En la consola es necesario configurar los valores de las ips de repositorios, servidores ntp, etc y lanzar el \"netBoot Avanzado\" a todas las aulas"
Note: See TracBrowser for help on using the repository browser.