diff options
author | ramon <ramongomez@us.es> | 2010-11-26 13:13:36 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2010-11-26 13:13:36 +0000 |
commit | 61dbabb5f8b58224f847aa01a94da17be21eef70 (patch) | |
tree | 3aa7fd5bffdfeb2363965544f0bfeb819233d0e9 /server | |
parent | 7af582efc7aebae04a842b72197a3001a56fac83 (diff) |
Creados scripts para gestión de plantillas PXE en el servidor de arranque:
* {{{listclientmode.sh PC | AULA}}} - lista la plantilla PXE de un PC o de todos los de AULA.
* {{{setclientmode.sh PLANTILLA PC | AULA}}} - asocia PLANTILLA de arranque al PC o a los de AULA.
Refs #260.
git-svn-id: https://opengnsys.es/svn/trunk@1351 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'server')
-rwxr-xr-x | server/bin/listclientmode.sh | 61 | ||||
-rwxr-xr-x | server/bin/setclientmode.sh | 68 |
2 files changed, 129 insertions, 0 deletions
diff --git a/server/bin/listclientmode.sh b/server/bin/listclientmode.sh new file mode 100755 index 00000000..b62cab68 --- /dev/null +++ b/server/bin/listclientmode.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# listclientmode.sh: Lista la plantilla de arranque PXE para los clientes, +# ya sea un equipo o un aula. +# Nota: Si no existe un enlace entre el fichero PXE con la Ethernet del equipo y su +# archivo plantilla, se considera que la plantilla por omisión es "default". +# Uso: listclienmode.sh NombrePC | NombreAula +# Autores: Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010 + + +# Variables. +PROG=$(basename $0) +OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} +SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg +PXEDIR=$OPENGNSYS/tftpboot/pxelinux.cfg + +# Control básico de errores. +if [ $# -ne 1 ]; then + echo "$PROG: Error de ejecución" + echo "Formato: $PROG [NOMBRE_PC|NOMBRE_AULA]" + exit 1 +fi +if [ ! -r $SERVERCONF ]; then + echo "$PROG: Sin acceso a fichero de configuración" + exit 2 +fi + +# Obtener datos de acceso a la Base de datos. +source $SERVERCONF +# Comprobar si se recibe nombre de aula o de equipo. +IDAULA=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \ + "SELECT idaula FROM aulas WHERE nombreaula='$1';") + +if [ -n "$IDAULA" ]; then + # Aula encontrada + ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \ + "SELECT mac FROM ordenadores WHERE idaula='$IDAULA';") +else + # Buscar ordenador + ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \ + "SELECT mac FROM ordenadores WHERE nombreordenador='$1';") +fi +if [ -z "$ETHERNET" ]; then + echo "$PROG: No existe ningun aula o equipo con el nombre \"$1\"" + exit 1 +fi + +for ETH in $ETHERNET; do + AUX=$(echo $ETH | awk '{print tolower($0)}') + AUX="01-${AUX:0:2}-${AUX:2:2}-${AUX:4:2}-${AUX:6:2}-${AUX:8:2}-${AUX:10:2}" + PCNAME=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \ + "SELECT nombreordenador FROM ordenadores WHERE mac='$ETH';") + if [ -f $PXEDIR/$AUX ]; then + INODE=$(ls -i $PXEDIR/$AUX | cut -f1 -d" ") + TMPL=$(ls -i $PXEDIR | grep $INODE | grep -v "01-" | cut -f2 -d" ") + [ -z "$TMPL" ] && TMPL="default" + else + TMPL="default" + fi + echo "Equipo $PCNAME ($ETH) asociado a plantilla \"$TMPL\"" +done + diff --git a/server/bin/setclientmode.sh b/server/bin/setclientmode.sh new file mode 100755 index 00000000..2d8bc1ae --- /dev/null +++ b/server/bin/setclientmode.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# setclientmode.sh: Configura el archivo de arranque de PXE para los clientes, +# ya sea un equipo o un aula, generando enlaces a archivos usados como plantilla. +# Nota: El archivo PXE por defecto "default" se deja en modo de ejecución "user" +# y se eliminan los enlaces para equipos con la plantilla por defecto. +# Uso: clienmode.sh NombrePlatilla { NombrePC | NombreAula } +# Autores: Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010 + + +# Variables. +PROG=$(basename $0) +OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} +SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg +PXEDIR=$OPENGNSYS/tftpboot/pxelinux.cfg +LOGFILE=$OPENGNSYS/log/opengnsys.log + +# Control básico de errores. +if [ $# -ne 2 ]; then + echo "$PROG: Error de ejecución" + echo "Formato: $PROG Archivo_platilla [NOMBRE_PC|NOMBRE_AULA]" + exit 1 +fi +if [ ! -r $SERVERCONF ]; then + echo "$PROG: Sin acceso a fichero de configuración" + exit 2 +fi +if [ ! -e $PXEDIR/"$1" ]; then + echo "No existe archivo platilla: $PXEDIR/$1" + exit +fi + +# Obtener datos de acceso a la Base de datos. +source $SERVERCONF +# Comprobar si se recibe nombre de aula o de equipo. +IDAULA=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \ + "SELECT idaula FROM aulas WHERE nombreaula=\"$2\";") + +if [ -n "$IDAULA" ]; then + # Aula encontrada + ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \ + "SELECT mac FROM ordenadores WHERE idaula=\"$IDAULA\";") +else + # Buscar ordenador + ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \ + "SELECT mac FROM ordenadores WHERE nombreordenador=\"$2\";") +fi +if [ -z "$ETHERNET" ]; then + date +"%b %d %T $PROG: No existe aula o equipo con el nombre \"$2\"" | tee -a $LOGFILE + exit 1 +fi + +# Creamos los enlaces +# PXE no permite enlaces simbolicos y las letras han de ir en minuscula +date +"%b %d %T $PROG: Configurando \"$1\" en \"$2\"" | tee -a $LOGFILE +NPC=0 +for AUX in $ETHERNET; do + date +"%b %d %T $PROG: Detectada ethernet \"$AUX\" en \"$2\"" | tee -a $LOGFILE + AUX=$(echo $AUX | awk '{print tolower($0)}') + AUX="01-${AUX:0:2}-${AUX:2:2}-${AUX:4:2}-${AUX:6:2}-${AUX:8:2}-${AUX:10:2}" + # Si existe anteriormente lo borra + [ -e $PXEDIR/$AUX ] && rm $PXEDIR/$AUX + if [ "$1" != "default" ]; then + ln $PXEDIR/"$1" $PXEDIR/$AUX + fi + let NPC=NPC+1 +done +date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE + |