summaryrefslogtreecommitdiffstats
path: root/server/bin/setclientmode
diff options
context:
space:
mode:
Diffstat (limited to 'server/bin/setclientmode')
-rwxr-xr-xserver/bin/setclientmode62
1 files changed, 27 insertions, 35 deletions
diff --git a/server/bin/setclientmode b/server/bin/setclientmode
index 4004e932..4a37f9cc 100755
--- a/server/bin/setclientmode
+++ b/server/bin/setclientmode
@@ -1,13 +1,13 @@
#!/bin/bash
#/**
-# setclientmode NombrePlatilla { NombrePC | NombreAula } Modo_trabajo
-#@file setclientmode
+#@file setclientmode
#@brief Configura el archivo de arranque de PXE para los clientes, ya sea un equipo o un aula, generando enlaces a archivos usados como plantilla.
+#@usage setclientmode Plantilla Ambito Modo
#@warning 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.
-#@param $1 NombrePlatilla
-#@param $2 Ámbito { NombrePC | NombreAula }
-#@param $3 Modo_trabajo = { 0, TEMP, 1, PERM } - 0 si es temporal y 1 si es permanente.
+#@param Plantilla: nombre de plantilla PXE
+#@param Ambito: nombre de cliente o aula
+#@param Modo: "TEMP" (temporal) o "PERM" (permanente)
#@version 1.0 - Versión inicial.
#@author Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010
#@version 1.0.1 - Identificacion de la plantilla por nombre en consola = en primera linea de la plantilla
@@ -36,42 +36,29 @@ PXEDIR[1]=$OPENGNSYS/tftpboot/grub
LOGFILE=$OPENGNSYS/log/opengnsys.log
MYCNF=/tmp/.my.cnf.$$
+source $OPENGNSYS/lib/ogfunctions.sh
+# Mostrar ayuda.
+[ "$*" == "help" ] && help
# Control básico de errores.
-if [ $# -ne 3 ]; then
- echo "$PROG: Error de ejecución"
- echo "Formato: $PROG PLANTILLA [NOMBRE_PC|NOMBRE_AULA] MODO"
- exit 1
-fi
-
+[ $# -ne 3 ] && raiseError usage
# Comprobar si el usuario es "root" o el del servicio web.
WEBUSER=$(ps axho user,comm|awk '!/root/ && /httpd|apache/ {print $1; exit;}')
-if [ "$USER" != "root" -a "$USER" != "$WEBUSER" ]; then
- echo "$PROG: Need to be root. (The console can also call the script)." >&2
- exit 1
-fi
-
+CALLER=$(getCaller)
+[ "$USER" != "root" -a "$USER" != "$WEBUSER" -a "$CALLER" != "ogAdmServerAux" ] && raiseError access "Need to be root (or webserver user)"
# El acceso a mysql por las variables pasadas o por el fichero de configuarción.
if [ -z "$USUARIO" ] || [ -z "$PASSWORD" ] || [ -z "$CATALOG" ]; then
- if [ -r "$SERVERCONF" ]; then
- source $SERVERCONF
- else
- echo "$PROG: Sin acceso a fichero de configuración"
- exit 2
- fi
-fi
-TEMPLATE[0]=$(grep -l "^#.* $1 *$" ${PXEDIR[0]}/templates/*)
-TEMPLATE[1]=$(grep -l "^#.* $1 *$" ${PXEDIR[1]}/templates/*)
-if [ -z "${TEMPLATE[0]}" -a -z "${TEMPLATE[1]}" ]; then
- echo "No existe archivo platilla: $1"
- exit
+ [ ! -r "$SERVERCONF" ] && raiseError access "Cannot read access configuration file"
+ source $SERVERCONF
fi
+TEMPLATE[0]=$(grep -l "^#.* $1 *$" ${PXEDIR[0]}/templates/* 2>/dev/null)
+TEMPLATE[1]=$(grep -l "^#.* $1 *$" ${PXEDIR[1]}/templates/* 2>/dev/null)
+[ -z "${TEMPLATE[0]}${TEMPLATE[1]}" ] && raiseError notfound "PXE template file \"$1\""
case "${3^^}" in
0|TEMP) MODE="TEMP" ;;
1|PERM) MODE="PERM" ;;
- *) echo "$PROG: Modo desconodido: 0, TEMP (temporal), 1, PERM (permanente)"
- exit 1 ;;
+ *) raiseError notfound "Unknown mode \"$3\"" ;;
esac
# Sustituir caracteres ' por \' para evitar inyección SQL.
@@ -94,8 +81,8 @@ ETHERNET=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
WHERE aulas.nombreaula='$RESOURCE'
OR nombreordenador='$RESOURCE';")
if [ -z "$ETHERNET" ]; then
- date +"%b %d %T $PROG: No existe aula o equipo con el nombre \"$2\"" | tee -a $LOGFILE
- exit 1
+ date +"%b %d %T $PROG: No existe aula o equipo con el nombre \"$2\"" >> $LOGFILE
+ raiseError notfound "Client or lab name \"$2\""
fi
# Copiar fichero de configuración y actualizar base de datos.
@@ -107,6 +94,10 @@ for MAC in $ETHERNET; do
PXEFILE[0]=01-${MACFILE:0:2}-${MACFILE:2:2}-${MACFILE:4:2}-${MACFILE:6:2}-${MACFILE:8:2}-${MACFILE:10:2}
MACFILE="${MAC,,}"
PXEFILE[1]=01-${MACFILE:0:2}:${MACFILE:2:2}:${MACFILE:4:2}:${MACFILE:6:2}:${MACFILE:8:2}:${MACFILE:10:2}
+ # Renombra el fichero PXE original
+ [ -e ${PXEDIR[0]}/${PXEFILE[0]} ] && mv ${PXEDIR[0]}/${PXEFILE[0]} ${PXEDIR[0]}/${PXEFILE[0]}.netboot
+ [ -e ${PXEDIR[1]}/${PXEFILE[1]} ] && mv ${PXEDIR[1]}/${PXEFILE[1]} ${PXEDIR[1]}/${PXEFILE[1]}.netboot
+
if [ "$1" != "default" ]; then
# Si no está definida la variable LANG, usar idioma inglés por defecto.
[ -z "$LANG" -o "$LANG" == "C" ] && LANG="en"
@@ -114,15 +105,16 @@ for MAC in $ETHERNET; do
DATOS=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
"SELECT ' LANG=$LANG',
' ip=', CONCAT_WS(':', ordenadores.ip,
- (SELECT (@serverip:=ipserveradm) FROM entornos LIMIT 1),
- aulas.router, aulas.netmask,
- ordenadores.nombreordenador, ordenadores.netiface, 'none'),
+ (SELECT (@serverip:=ipserveradm) FROM entornos LIMIT 1),
+ aulas.router, aulas.netmask,
+ ordenadores.nombreordenador, ordenadores.netiface, 'none'),
' group=', REPLACE(TRIM(aulas.nombreaula), ' ', '_'),
' ogrepo=', (@repoip:=IFNULL(repositorios.ip, '')),
' oglive=', @serverip,
' oglog=', @serverip,
' ogshare=', @serverip,
' oglivedir=', ordenadores.oglivedir,
+ ' ogprof=', IF(ordenadores.idordenador=aulas.idordprofesor, 'true', 'false'),
IF(perfileshard.descripcion<>'', CONCAT(' hardprofile=', REPLACE(TRIM(perfileshard.descripcion), ' ', '_')), ''),
IF(aulas.ntp<>'', CONCAT(' ogntp=', aulas.ntp), ''),
IF(aulas.dns<>'', CONCAT(' ogdns=', aulas.dns), ''),