[5d28f39] | 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 |
---|
[7c841bd] | 63 | # Actualizar ogLive asignado al aula. |
---|
| 64 | mysql --defaults-extra-file="$MYCNF" -D "$CATALOG" -e \ |
---|
| 65 | "UPDATE aulas SET oglivedir='$OGLIVEDIR' WHERE nombreaula='$RESOURCE';" |
---|
[5d28f39] | 66 | # Actualizar ogLive para todos los clientes y reasignar plantilla PXE. |
---|
| 67 | listclientmode "$RESOURCE" | awk -F\" '{print $2,$4}' | \ |
---|
[7c841bd] | 68 | while read -r PC BOOTMODE; do |
---|
[5d28f39] | 69 | date +"%b %d %T $PROG: Configurando \"$PC\" con cliente \"$OGLIVEDIR\"" | tee -a $LOGFILE |
---|
[7c841bd] | 70 | mysql --defaults-extra-file="$MYCNF" -D "$CATALOG" -e \ |
---|
[5d28f39] | 71 | "UPDATE ordenadores SET oglivedir='$OGLIVEDIR' WHERE nombreordenador='$PC';" |
---|
[7c841bd] | 72 | setclientmode "$BOOTMODE" "$PC" PERM >/dev/null |
---|
[5d28f39] | 73 | done |
---|