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