summaryrefslogtreecommitdiffstats
path: root/installer/opengnsys_export.sh
blob: 6f45ea1727f5d9705b4ea142da425909578815e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/bash
#         exportclient str_backupfile
#@file    exportclient
#@brief   Exporta los clientes de un archivo de backup: dhcp, pxe, páginas de inicio y configuración de la consola.
#@param 1 str_backupfile fichero de backup (creado con exportclient)
#@exception 1 Error de formato.
#@exception 2 Sólo ejecutable por usuario root.
#@exception 3 Sin acceso a la configuración de OpenGnsys.
#@exception 4 No existe el directorio de backup.
#@exception 5 Es necesario instalar el comando realpath.
#@warning This script uses "realpath" command.
#@version 1.1.0 - Versión inicial.
#@author  Irina Gómez - ETSII Univ. Sevilla
#@date    2016-10-18
#@version 1.1.0 - Cambia cómo se exporta la base de datos para permitir importar en versiones posteriores.
#@note    Incompatible con versiones de opengnsys_import.sh anteriores a esta fecha.
#@date    2018-02-14
#@version 1.1.1 - Incluye scripts personalizados (*Custom)
#@date    2019-07-25
#@version 1.2.0 - mysqldump no exporta los tablespaces por compatibilidad con mysql 5.7.31 (no los usamos).
#@date    2020-08-10
#*/ ##

# Variables globales.
PROG="$(basename $0)"

OPENGNSYS="/opt/opengnsys"
TMPDIR=/tmp
MYSQLFILE="$TMPDIR/ogAdmBD.sql"
BACKUPPREFIX="opengnsys_export"

# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    echo -e "$PROG: Exporta los datos de OpenGnsys desde un archivo de backup:" \
           " dhcp, pxe, páginas de inicio y configuración de la consola.\n" \
           "    Formato: $PROG backup_file\n" \
           "    Ejemplo: $PROG backup.tgz"
    exit
fi

# Comprobar parámetros.
# Comprobamos número de parámetros
if [ $# -ne 1 ]; then
    echo "$PROG: ERROR: Error de formato: $PROG backup_file"
    exit 1
fi

if [ "$USER" != "root" ]; then
    echo "$PROG: Error: solo ejecutable por root." >&2
    exit 2
fi

# Comprobamos que esté instalado el comando realpath
if ! which realpath &>/dev/null ; then
    echo "Need to install \"realpath\"."
    exit 5
fi


# Comprobamos que exista el directorio para el archivo de backup
BACKUPDIR=$(realpath $(dirname $1) 2>/dev/null)
[ $? -ne 0 ] && echo "$PROG: Error: No existe el directorio para el archivo de backup" && exit 4
BACKUPFILE="$BACKUPDIR/$(basename $1)"

# DHCP
for DIR in /etc/dhcp /etc/dhcp3; do
    [ -r $DIR/dhcpd.conf ] && DHCPDIR=$DIR
done

# Exportar la base de datos
echo "Exportamos la información de la base de datos."
source $OPENGNSYS/lib/ogfunctions.sh || exit 1
# Comprobamos  acceso a ficheros de configuración

if [ -r $OPENGNSYS/etc/ogserver.json ]; then
    source_json_config $OPENGNSYS/etc/ogserver.json
elif [ -r $OPENGNSYS/etc/ogAdmServer.cfg ]; then
    source $OPENGNSYS/etc/ogAdmServer.cfg
else
    echo "$PROG: ERROR: Sin acceso a la configuración de OpenGnsys." | tee -a $FILESAL
    exit 3
fi

# Crear fichero temporal de acceso a la BD
MYCNF=$(mktemp /tmp/.my.cnf.XXXXX)
chmod 600 $MYCNF
trap "rm -f $MYCNF $MYSQLFILE $TMPDIR/IPSERVER.txt" 1 2 3 6 9 15
cat << EOT > $MYCNF
[client]
user=$USUARIO
password=$PASSWORD
EOT

mysqldump --defaults-extra-file=$MYCNF --opt --no-tablespaces $CATALOG > $MYSQLFILE
chmod 400 $MYSQLFILE

# Borrar fichero temporal
rm -f $MYCNF

# IP SERVIDOR
echo $ServidorAdm > $TMPDIR/IPSERVER.txt

# Si existe ya archivo de backup lo renombramos
[ -r $BACKUPFILE ] && mv $BACKUPFILE $BACKUPFILE-$(date +%Y%M%d)

# Empaquetamos los ficheros
echo "Creamos un archivo comprimido con los datos: $BACKUPFILE."
CUSTOMFILES=$(find $OPENGNSYS/client/scripts -name "*Custom" -exec basename {} \;)
tar -cvzf $BACKUPFILE --transform="s!^!$BACKUPPREFIX/!" \
          --exclude "log/opengnsys_installer.log" \
          -C $(dirname $MYSQLFILE) $(basename $MYSQLFILE) \
          -C $TMPDIR IPSERVER.txt \
          -C $DHCPDIR dhcpd.conf \
          -C $OPENGNSYS/client/etc engine.cfg engine.json \
          -C $OPENGNSYS/client/scripts $CUSTOMFILES \
          -C $OPENGNSYS/doc VERSION.txt VERSION.json \
          -C $OPENGNSYS/etc ogliveinfo.json \
          -C $OPENGNSYS log \
          -C $OPENGNSYS/tftpboot menu.lst grub \
          -C $OPENGNSYS/www menus \
          -C /etc default/opengnsys &>/dev/null

# Cambio permisos: sólo puede leerlo el root
chmod 600 $BACKUPFILE

# Borrar ficheros temporales
rm -f $MYSQLFILE $TMPDIR/IPSERVER.txt

echo -e "\nNo conveniente situar el fichero de backup dentro de /opt/opengnsys" \
        "\n    ya que se borrará si desinstala OpenGnsys."