summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2010-11-26 13:13:36 +0000
committerramon <ramongomez@us.es>2010-11-26 13:13:36 +0000
commit61dbabb5f8b58224f847aa01a94da17be21eef70 (patch)
tree3aa7fd5bffdfeb2363965544f0bfeb819233d0e9 /server
parent7af582efc7aebae04a842b72197a3001a56fac83 (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-xserver/bin/listclientmode.sh61
-rwxr-xr-xserver/bin/setclientmode.sh68
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
+