1 | #!/bin/bash |
---|
2 | |
---|
3 | #/** |
---|
4 | # setclientlive DirOGLive | IndiceOGLive { NombrePC | NombreAula } Modo_trabajo |
---|
5 | #@file setclientlive |
---|
6 | #@brief Configura el archivo de arranque de PXE para asignar el cliente ogLive, ya sea a un equipo o a un aula |
---|
7 | #@param $1 DirOGLive, IndiceOGLive o "default" (según script "oglivecli") |
---|
8 | #@param $2 Ámbito { NombrePC | NombreAula } |
---|
9 | #warning No se admiten cambios temporales. |
---|
10 | #@version 1.1.0 - Versión inicial basada en script "setclientmode". |
---|
11 | #@author Ramón M. Gómez - Univ. Sevilla, junio 2017 |
---|
12 | #*/ ## |
---|
13 | |
---|
14 | |
---|
15 | # Variables. |
---|
16 | PROG=$(basename "$0") |
---|
17 | PATH=$PATH:$(dirname $(realpath "$0")) |
---|
18 | OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} |
---|
19 | SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg |
---|
20 | TFTPDIR=$OPENGNSYS/tftpboot |
---|
21 | LOGFILE=$OPENGNSYS/log/opengnsys.log |
---|
22 | MYCNF=/tmp/.my.cnf.$$ |
---|
23 | |
---|
24 | # Control básico de errores. |
---|
25 | if [ $# -ne 2 ]; then |
---|
26 | echo "$PROG: Error de ejecución" >&2 |
---|
27 | echo "Formato: $PROG {DIR_OGLIVE|INDICE_OGLIVE|default} {NOMBRE_PC|NOMBRE_AULA}" >&2 |
---|
28 | exit 1 |
---|
29 | fi |
---|
30 | if [ ! -r $SERVERCONF ]; then |
---|
31 | echo "$PROG: Sin acceso a fichero de configuración" >&2 |
---|
32 | exit 2 |
---|
33 | fi |
---|
34 | case "$1" in |
---|
35 | [0-9]*) DIR=$(oglivecli search $1 2>/dev/null) ;; |
---|
36 | "default") DIR="ogLive" ;; |
---|
37 | *) if oglivecli search "$1" 2>/dev/null; then DIR="$1"; fi ;; |
---|
38 | esac |
---|
39 | if [ -z "$DIR" ]; then |
---|
40 | echo "$PROG: ogLive no ecncontrado, listar ejecutando \"oglivecli list\"" >&2 |
---|
41 | exit 1 |
---|
42 | fi |
---|
43 | if [ ! -e "$TFTPDIR/$DIR" ]; then |
---|
44 | echo "$PROG: directorio de ogLive no ecncontrado: \"DIR\"" >&2 |
---|
45 | exit 1 |
---|
46 | fi |
---|
47 | |
---|
48 | # Obtener datos de acceso a la Base de datos. |
---|
49 | source $SERVERCONF |
---|
50 | # Sustituir caracteres ' por \' para evitar inyección SQL. |
---|
51 | OGLIVEDIR="${DIR//\'/\'}" |
---|
52 | RESOURCE="${2//\'/\'}" |
---|
53 | # Componer fichero con credenciales de conexión. |
---|
54 | touch $MYCNF |
---|
55 | chmod 600 $MYCNF |
---|
56 | cat << EOT > $MYCNF |
---|
57 | [client] |
---|
58 | user=$USUARIO |
---|
59 | password=$PASSWORD |
---|
60 | EOT |
---|
61 | # Borrar el fichero temporal si termina el proceso. |
---|
62 | trap "rm -f $MYCNF" 0 1 2 3 6 9 15 |
---|
63 | # Actualizar ogLive para todos los clientes y reasignar plantilla PXE. |
---|
64 | listclientmode "$RESOURCE" | awk -F\" '{print $2,$4}' | \ |
---|
65 | while read PC BOOTMODE; do |
---|
66 | date +"%b %d %T $PROG: Configurando \"$PC\" con cliente \"$OGLIVEDIR\"" | tee -a $LOGFILE |
---|
67 | mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \ |
---|
68 | "UPDATE ordenadores SET oglivedir='$OGLIVEDIR' WHERE nombreordenador='$PC';" |
---|
69 | setclientmode $BOOTMODE $PC PERM >/dev/null |
---|
70 | done |
---|