source: server/bin/setclientmode @ 0a735488

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since 0a735488 was 7710a99, checked in by ramon <ramongomez@…>, 11 years ago

#664: comando listclientmode muestra tanto el nombre de plantilla PXE como el de su fichero asociado; mejorar el rendimiento del script setclientmode

git-svn-id: https://opengnsys.es/svn/branches/version1.0@4389 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 4.3 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        PXEFILE=$PXEDIR/01-${MAC:0:2}-${MAC:2:2}-${MAC:4:2}-${MAC:6:2}-${MAC:8:2}-${MAC:10:2}
70        [ -e $PXEFILE ] && rm $PXEFILE
71        if [ "$1" != "default" ]; then
72                # Si no está definida la variable LANG, usar idioma inglés por defecto.
73                [ -z "$LANG" -o "$LANG" == "C" ] && LANG="en"
74                # Obtener de la BD los parámetros de arranque asociados (separador es TAB).
75                DATOS=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
76                        "SELECT ' LANG=$LANG',
77                                ' ip=', CONCAT_WS (':', ordenadores.ip,
78                                (@repoip:=repositorios.ip), aulas.router, aulas.netmask,
79                                ordenadores.nombreordenador, ordenadores.netiface, 'none'),
80                                ' group=', REPLACE (aulas.nombreaula, ' ', '_'),
81                                ' ogrepo=', @repoip,
82                                ' oglive=', @repoip,
83                                ' oglog=', (SELECT (@serverip:=ipserveradm) FROM entornos LIMIT 1),
84                                ' ogshare=', @serverip,
85                                ' winboot=', IFNULL (perfileshard.winboot, 'reboot'),
86                                IF (aulas.dns IS NULL, '', CONCAT (' ogdns=', aulas.dns)),
87                                IF (aulas.proxy IS NULL, '', CONCAT (' ogproxy=', aulas.proxy)),
88                                CASE
89                                    WHEN menus.resolucion IS NULL THEN ''
90                                    WHEN menus.resolucion <= '999' THEN CONCAT (' vga=', menus.resolucion)
91                                    WHEN menus.resolucion LIKE '%:%' THEN CONCAT (' video=', menus.resolucion)
92                                    ELSE menus.resolucion
93                                END
94                                FROM ordenadores
95                                JOIN aulas USING (idaula)
96                                JOIN repositorios USING (idrepositorio)
97                                LEFT JOIN perfileshard USING (idperfilhard)
98                                LEFT JOIN menus USING (idmenu)
99                                WHERE ordenadores.mac='$MAC';")
100                # Quitar tabuladores y sustituir caracteres quitando acentos y tildes.
101                DATOS=$(echo ${DATOS//  /} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
102                # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
103                sed -e "s/vga=[0-9]*//g; s/INFOHOST/$DATOS/g" $TEMPLATE >$PXEFILE
104                # Actualizar en la BD el modo de arranque asociada el cliente.
105                mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
106                        "UPDATE ordenadores SET arranque='$BOOTMODE' WHERE mac='$MAC';"
107        fi
108        let NPC=NPC+1
109done
110date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE
111
Note: See TracBrowser for help on using the repository browser.