source: server/bin/setclientmode @ 42fd02e

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 42fd02e was ccbb493, checked in by ramon <ramongomez@…>, 9 years ago

#723: Integrar código del ticket:723 en versión 1.1.

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

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