summaryrefslogtreecommitdiffstats
path: root/server/bin/setclientmode
blob: ecacf247eb6a6c823ecf4a9156341c4a149c4b23 (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
#!/bin/bash
# setclientmode: 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 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/menu.lst
TEMPLATE="$PXEDIR/templates/$1"
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 $TEMPLATE ]; then
	echo "No existe archivo platilla: $TEMPLATE"
	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

# Copiar fichero de configuración y actualizar base de datos.
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="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
		cp -a $TEMPLATE $PXEDIR/$AUX
		DATOS=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
			"SELECT ordenadores.ip, ':', repositorios.ip, ':',
				aulas.router, ':', aulas.netmask, ':',
				ordenadores.netiface, ':none group=',
				REPLACE (aulas.nombreaula, ' ', '_')
				FROM ordenadores 
				JOIN aulas ON ordenadores.idaula=aulas.idaula 
				JOIN repositorios ON ordenadores.idrepositorio=repositorios.idrepositorio 
				WHERE ordenadores.mac=\"$ETHERNET\";")
		DATOS=$(echo ${DATOS//	/} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
		perl -pi -e "s/INFOHOST/$DATOS/g" $PXEDIR/$AUX
		mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
			"UPDATE ordenadores SET arranque=\"$1\" WHERE mac=\"$ETHERNET\";"
	fi
	let NPC=NPC+1
done
date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE