#!/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