source: server/bin/setclientmode @ fac0b87

Last change on this file since fac0b87 was fac0b87, checked in by ramon <ramongomez@…>, 8 years ago

#754: Integrar los cambios de la versión de mantenimiento OpenGnSys 1.0.6b a la rama principal.

git-svn-id: https://opengnsys.es/svn/trunk@5143 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 4.7 KB
Line 
1#!/bin/bash
2# setclientmode: Configura el archivo de arranque de PXE para los clientes,
3#       ya sea un equipo o un aula, generando enlaces a archivos usados como plantilla.
4# Nota: El archivo PXE por defecto "default" se deja en modo de ejecución "user"
5#       y se eliminan los enlaces para equipos con la plantilla por defecto.
6# Uso:  clienmode NombrePlatilla { NombrePC | NombreAula }
7# Autores: Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010
8#@version 1.0.1 - Identificacion de la plantilla por nombre en consola = en primera linea de la plantilla
9#@author Irina Gomez - Univ. Sevilla
10#@date 2013-05-31
11
12
13# Variables.
14PROG=$(basename $0)
15OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
16SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
17PXEDIR=$OPENGNSYS/tftpboot/menu.lst
18LOGFILE=$OPENGNSYS/log/opengnsys.log
19MYCNF=/tmp/.my.cnf.$$
20
21# Control básico de errores.
22if [ $# -ne 2 ]; then
23        echo "$PROG: Error de ejecución"
24        echo "Formato: $PROG PLANTILLA [NOMBRE_PC|NOMBRE_AULA]"
25        exit 1
26fi
27if [ ! -r $SERVERCONF ]; then
28        echo "$PROG: Sin acceso a fichero de configuración"
29        exit 2
30fi
31TEMPLATE=$(grep -l "^#.* $1 *$" $PXEDIR/templates/*)
32if [ -z "$TEMPLATE" ]; then
33        echo "No existe archivo platilla: $1"
34        exit
35fi
36
37# Obtener datos de acceso a la Base de datos.
38source $SERVERCONF
39# Sustituir caracteres ' por \' para evitar inyección SQL.
40BOOTMODE="${1//\'/\'}"
41RESOURCE="${2//\'/\'}"
42# Componer fichero con credenciales de conexión.
43touch $MYCNF
44chmod 600 $MYCNF
45cat << EOT > $MYCNF
46[client]
47user=$USUARIO
48password=$PASSWORD
49EOT
50# Borrar el fichero temporal si termina el proceso.
51trap "rm -f $MYCNF" 0 1 2 3 6 9 15
52# Buscar ordenador individual o todos los de una aula.
53ETHERNET=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
54                "SELECT mac FROM ordenadores
55                   JOIN aulas USING (idaula)
56                  WHERE aulas.nombreaula='$RESOURCE'
57                     OR nombreordenador='$RESOURCE';")
58if [ -z "$ETHERNET" ]; then
59        date +"%b %d %T $PROG: No existe aula o equipo con el nombre \"$2\"" | tee -a $LOGFILE
60        exit 1
61fi
62
63# Copiar fichero de configuración y actualizar base de datos.
64date +"%b %d %T $PROG: Configurando \"$1\" en \"$2\"" | tee -a $LOGFILE
65NPC=0
66for MAC in $ETHERNET; do
67        date +"%b %d %T $PROG: Detectada ethernet \"$MAC\" en \"$2\"" | tee -a $LOGFILE
68        # Si existe anteriormente el fichero PXE, lo borra
69        MACFILE="${MAC^^}"
70        PXEFILE=$PXEDIR/01-${MACFILE:0:2}-${MACFILE:2:2}-${MACFILE:4:2}-${MACFILE:6:2}-${MACFILE:8:2}-${MACFILE:10:2}
71        rm -f $PXEFILE ${PXEFILE,,}
72        if [ "$1" != "default" ]; then
73                # Si no está definida la variable LANG, usar idioma inglés por defecto.
74                [ -z "$LANG" -o "$LANG" == "C" ] && LANG="en"
75                # Obtener de la BD los parámetros de arranque asociados (separador es TAB).
76                DATOS=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
77                        "SELECT ' LANG=$LANG',
78                                ' ip=', CONCAT_WS (':', ordenadores.ip,
79                                (@repoip:=repositorios.ip), aulas.router, aulas.netmask,
80                                ordenadores.nombreordenador, ordenadores.netiface, 'none'),
81                                ' group=', REPLACE (aulas.nombreaula, ' ', '_'),
82                                ' ogrepo=', @repoip,
83                                ' oglive=', @repoip,
84                                ' oglog=', (SELECT (@serverip:=ipserveradm) FROM entornos LIMIT 1),
85                                ' ogshare=', @serverip,
86                                ' winboot=', IFNULL (perfileshard.winboot, 'reboot'),
87                                IF (aulas.dns IS NULL, '', CONCAT (' ogdns=', aulas.dns)),
88                                IF (aulas.proxy IS NULL, '', CONCAT (' ogproxy=', aulas.proxy)),
89                                CASE
90                                    WHEN menus.resolucion IS NULL THEN ''
91                                    WHEN menus.resolucion <= '999' THEN CONCAT (' vga=', menus.resolucion)
92                                    WHEN menus.resolucion LIKE '%:%' THEN CONCAT (' video=', menus.resolucion)
93                                    ELSE menus.resolucion
94                                END
95                                FROM ordenadores
96                                JOIN aulas USING (idaula)
97                                JOIN repositorios USING (idrepositorio)
98                                LEFT JOIN perfileshard USING (idperfilhard)
99                                LEFT JOIN menus USING (idmenu)
100                                WHERE ordenadores.mac='$MAC';")
101                # Quitar tabuladores, sustituir acentos y dejar resolución por defecto.
102                DATOS=$(echo ${DATOS//  /} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
103                [[ "$DATOS" =~ (vga|video) ]] || DATOS="$DATOS vga=788"
104                # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
105                sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOS//,/\\,},g" $TEMPLATE >$PXEFILE
106                # Ponemos como propietario al usuario y grupo de Apache para que se pueda cambiar desde la consola web.
107                PERMS=$(ps axho user,group,comm|awk '!/root/ && /httpd|apache/ {u=$1; g=$2} END {if (g) printf "%s:%s",u,g}')
108                [ -n "$PERMS" ] && chown $PERMS $PXEFILE
109                # Actualizar en la BD la plantilla de arranque asociada el cliente.
110                mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
111                        "UPDATE ordenadores SET arranque='$(basename $TEMPLATE)' WHERE mac='$MAC';"
112        fi
113        let NPC=NPC+1
114done
115date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE
116
Note: See TracBrowser for help on using the repository browser.