source: server/bin/setclientmode @ 036cb22

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 036cb22 was 9052b52, checked in by ramon <ramongomez@…>, 9 years ago

#719: Dejar resolución por defecto para clientes sin menú definido.

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

  • Property mode set to 100755
File size: 6.2 KB
Line 
1#!/bin/bash
2
3#/**
4#         setclientmode NombrePlatilla { NombrePC | NombreAula } Modo_trabajo
5#@file    setclientmode
6#@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.
7#@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.
8#@param   $1 NombrePlatilla
9#@param   $2 Ámbito { NombrePC | NombreAula }
10#@param   $3 Modo_trabajo = { 0, 1 } - 0 si es temporal y 1 si es permanente.
11#@version 1.0 - Versión inicial.
12#@author  Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010
13#@version 1.0.1 - Identificacion de la plantilla por nombre en consola = en primera linea de la plantilla
14#@author  Irina Gomez - Univ. Sevilla
15#@date    2013-05-31
16#@version 1.0.2 - Cambio en la funcionalidad del script: el cambio del archivo de arranque PXE puede hacerse de manera temporal (codigo 0) modificando solo el fichero de arranque PXE durante 60 sg. y sin tocar la base de datos o permanente (codigo 1), actualizando tanto el fichero PXE como la base de datos.
17#@author  Juan Carlos Garcia - Univ. Zaragoza
18#@date    2015-11-17
19#@version 1.1.0 - Se incluye la unidad organizativa como parametro del kernel: ogunit=directorio_unidad (ticket #678).
20#@author  Irina Gomez, ETSII Universidad de Sevilla
21#@date    2015-12-16
22#*/ ##
23
24
25# Variables.
26PROG=$(basename $0)
27OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
28SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
29PXEDIR=$OPENGNSYS/tftpboot/menu.lst
30LOGFILE=$OPENGNSYS/log/opengnsys.log
31MYCNF=/tmp/.my.cnf.$$
32
33# Control básico de errores.
34if [ $# -ne 3 ]; then
35        echo "$PROG: Error de ejecución"
36        echo "Formato: $PROG PLANTILLA [NOMBRE_PC|NOMBRE_AULA] MODO"
37        exit 1
38fi
39if [ ! -r $SERVERCONF ]; then
40        echo "$PROG: Sin acceso a fichero de configuración"
41        exit 2
42fi
43TEMPLATE=$(grep -l "^#.* $1 *$" $PXEDIR/templates/*)
44if [ -z "$TEMPLATE" ]; then
45        echo "No existe archivo platilla: $1"
46        exit
47fi
48
49if [ $3 != "0" ] && [ $3 != "1" ]; then
50        echo "$PROG: Error de ejecución"
51        echo "el modo debe ser 0 o 1 (temporal o permanente)"
52        exit 1
53fi
54
55# Obtener datos de acceso a la Base de datos.
56source $SERVERCONF
57# Sustituir caracteres ' por \' para evitar inyección SQL.
58BOOTMODE="${1//\'/\'}"
59RESOURCE="${2//\'/\'}"
60# Componer fichero con credenciales de conexión.
61touch $MYCNF
62chmod 600 $MYCNF
63cat << EOT > $MYCNF
64[client]
65user=$USUARIO
66password=$PASSWORD
67EOT
68# Borrar el fichero temporal si termina el proceso.
69trap "rm -f $MYCNF" 0 1 2 3 6 9 15
70# Buscar ordenador individual o todos los de una aula.
71ETHERNET=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
72                "SELECT mac FROM ordenadores
73                   JOIN aulas USING (idaula)
74                  WHERE aulas.nombreaula='$RESOURCE'
75                     OR nombreordenador='$RESOURCE';")
76if [ -z "$ETHERNET" ]; then
77        date +"%b %d %T $PROG: No existe aula o equipo con el nombre \"$2\"" | tee -a $LOGFILE
78        exit 1
79fi
80
81# Copiar fichero de configuración y actualizar base de datos.
82date +"%b %d %T $PROG: Configurando \"$1\" en \"$2\" en modo \"$3\"" | tee -a $LOGFILE
83NPC=0
84for MAC in $ETHERNET; do
85        date +"%b %d %T $PROG: Detectada ethernet \"$MAC\" en \"$2\"" | tee -a $LOGFILE
86        MACFILE=$(echo $MAC | tr [a-z] [A-Z])
87        PXEFILE=$PXEDIR/01-${MACFILE:0:2}-${MACFILE:2:2}-${MACFILE:4:2}-${MACFILE:6:2}-${MACFILE:8:2}-${MACFILE:10:2}
88        # Renombra el fichero PXE original
89        [ -e $PXEFILE ] && mv $PXEFILE $PXEFILE.netboot
90        if [ "$1" != "default" ]; then
91                # Si no está definida la variable LANG, usar idioma inglés por defecto.
92                [ -z "$LANG" -o "$LANG" == "C" ] && LANG="en"
93                # Obtener de la BD los parámetros de arranque asociados (separador es TAB).
94                DATOS=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
95                        "SELECT ' LANG=$LANG',
96                                ' ip=', CONCAT_WS (':', ordenadores.ip,
97                                (@repoip:=repositorios.ip), aulas.router, aulas.netmask,
98                                ordenadores.nombreordenador, ordenadores.netiface, 'none'),
99                                ' group=', REPLACE (aulas.nombreaula, ' ', '_'),
100                                ' ogrepo=', @repoip,
101                                ' oglive=', @repoip,
102                                ' oglog=', (SELECT (@serverip:=ipserveradm) FROM entornos LIMIT 1),
103                                ' ogshare=', @serverip,
104                                ' winboot=', IFNULL (perfileshard.winboot, 'reboot'),
105                                IF (aulas.ntp='', '', CONCAT (' ogntp=', aulas.ntp)),
106                                IF (aulas.dns='', '', CONCAT (' ogdns=', aulas.dns)),
107                                IF (aulas.proxy='', '', CONCAT (' ogproxy=', aulas.proxy)),
108                                IF (entidades.ogunit=1 AND NOT centros.directorio='', CONCAT (' ogunit=', centros.directorio),''),
109                                CASE
110                                    WHEN menus.resolucion IS NULL THEN ''
111                                    WHEN menus.resolucion <= '999' THEN CONCAT (' vga=', menus.resolucion)
112                                    WHEN menus.resolucion LIKE '%:%' THEN CONCAT (' video=', menus.resolucion)
113                                    ELSE menus.resolucion
114                                END
115                                FROM ordenadores
116                                JOIN aulas USING (idaula)
117                                JOIN centros USING (idcentro)
118                                JOIN entidades USING (identidad)
119                                JOIN repositorios USING (idrepositorio)
120                                LEFT JOIN perfileshard USING (idperfilhard)
121                                LEFT JOIN menus USING (idmenu)
122                                WHERE ordenadores.mac='$MAC';")
123                # Quitar tabuladores, sustituir acentos y dejar resolución por defecto.
124                DATOS=$(echo ${DATOS//  /} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
125                [[ "$DATOS" =~ (vga|video) ]] || DATOS="$DATOS vga=788"
126                # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
127                sed -e "s/vga=[0-9]*//g; s#INFOHOST#$DATOS#g" $TEMPLATE >$PXEFILE
128                # Ponemos como propietario al usuario y grupo de Apache para que se pueda cambiar desde la consola web.
129                PERMS=$(ps axho user,group,comm|awk '!/root/ && /httpd|apache/ {u=$1; g=$2} END {if (g) printf "%s:%s",u,g}')
130                [ -n "$PERMS" ] && chown $PERMS $PXEFILE
131                # Si el modo de trabajo es temporal (0) mete un retardo, restaura el fichero PXE a su estado original y no toca la base de datos
132                if [ "$3" == "0" ]; then
133                        sleep 60
134                        rm $PXEFILE     
135                        [ -e $PXEFILE.netboot ] && mv $PXEFILE.netboot $PXEFILE
136                fi
137
138                # Si el modo de trabajo es permanente (1)  borra el fichero PXE.netboot si existe y graba los datos en la base de datos
139                if [ "$3" == "1" ]; then
140                        [ -e $PXEFILE.netboot ] && rm $PXEFILE.netboot
141                        mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
142                                "UPDATE ordenadores SET arranque='$(basename $TEMPLATE)' WHERE mac='$MAC';"
143                fi
144        fi
145        let NPC=NPC+1
146done
147date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE
148
Note: See TracBrowser for help on using the repository browser.