source: server/bin/setclientmode @ 70c429f

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 70c429f was 7b3dc7a, checked in by ramon <ramongomez@…>, 8 years ago

Versión 1.0.6b #719: Usar ficheros PXE con MAC en mayúsculas (topic:288); soportar tabuladores en comparación DHCP-BD.

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

  • Property mode set to 100755
File size: 6.2 KB
RevLine 
[61dbabb]1#!/bin/bash
[ccbb493]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.
[0c86fb7]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.
[ccbb493]11#@version 1.0 - Versión inicial.
12#@author  Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010
[3dd7b5d]13#@version 1.0.1 - Identificacion de la plantilla por nombre en consola = en primera linea de la plantilla
[ccbb493]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
[0c86fb7]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
[ccbb493]22#*/ ##
[61dbabb]23
24
25# Variables.
26PROG=$(basename $0)
27OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
28SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
[75a296b]29PXEDIR=$OPENGNSYS/tftpboot/menu.lst
[61dbabb]30LOGFILE=$OPENGNSYS/log/opengnsys.log
[4ea07d1]31MYCNF=/tmp/.my.cnf.$$
[61dbabb]32
33# Control básico de errores.
[ccbb493]34if [ $# -ne 3 ]; then
[61dbabb]35        echo "$PROG: Error de ejecución"
[ccbb493]36        echo "Formato: $PROG PLANTILLA [NOMBRE_PC|NOMBRE_AULA] MODO"
[61dbabb]37        exit 1
38fi
39if [ ! -r $SERVERCONF ]; then
40        echo "$PROG: Sin acceso a fichero de configuración"
41        exit 2
42fi
[7710a99]43TEMPLATE=$(grep -l "^#.* $1 *$" $PXEDIR/templates/*)
[3dd7b5d]44if [ -z "$TEMPLATE" ]; then
45        echo "No existe archivo platilla: $1"
[61dbabb]46        exit
47fi
48
[ccbb493]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
[61dbabb]55# Obtener datos de acceso a la Base de datos.
56source $SERVERCONF
[75f9c01]57# Sustituir caracteres ' por \' para evitar inyección SQL.
58BOOTMODE="${1//\'/\'}"
59RESOURCE="${2//\'/\'}"
[4ea07d1]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.
[9d380ec]71ETHERNET=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
[4ea07d1]72                "SELECT mac FROM ordenadores
73                   JOIN aulas USING (idaula)
74                  WHERE aulas.nombreaula='$RESOURCE'
75                     OR nombreordenador='$RESOURCE';")
[61dbabb]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
[75a296b]81# Copiar fichero de configuración y actualizar base de datos.
[ccbb493]82date +"%b %d %T $PROG: Configurando \"$1\" en \"$2\" en modo \"$3\"" | tee -a $LOGFILE
[61dbabb]83NPC=0
[4ea07d1]84for MAC in $ETHERNET; do
85        date +"%b %d %T $PROG: Detectada ethernet \"$MAC\" en \"$2\"" | tee -a $LOGFILE
[7b3dc7a]86        MACFILE="${MAC^^}"
[ccbb493]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
[f80f839]90        if [ "$1" != "default" ]; then
[7fc01b9]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).
[9d380ec]94                DATOS=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
[7fc01b9]95                        "SELECT ' LANG=$LANG',
[d92da89]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,
[7fc01b9]102                                ' oglog=', (SELECT (@serverip:=ipserveradm) FROM entornos LIMIT 1),
[d92da89]103                                ' ogshare=', @serverip,
[7fc01b9]104                                ' winboot=', IFNULL (perfileshard.winboot, 'reboot'),
[0c86fb7]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),''),
[97f6020]109                                CASE
110                                    WHEN menus.resolucion IS NULL THEN ''
[c6d4ae6]111                                    WHEN menus.resolucion <= '999' THEN CONCAT (' vga=', menus.resolucion)
112                                    WHEN menus.resolucion LIKE '%:%' THEN CONCAT (' video=', menus.resolucion)
[97f6020]113                                    ELSE menus.resolucion
114                                END
[d16b7cf]115                                FROM ordenadores
[7fc01b9]116                                JOIN aulas USING (idaula)
[0c86fb7]117                                JOIN centros USING (idcentro)
118                                JOIN entidades USING (identidad)
[7fc01b9]119                                JOIN repositorios USING (idrepositorio)
120                                LEFT JOIN perfileshard USING (idperfilhard)
121                                LEFT JOIN menus USING (idmenu)
[4ea07d1]122                                WHERE ordenadores.mac='$MAC';")
[9052b52]123                # Quitar tabuladores, sustituir acentos y dejar resolución por defecto.
[d16b7cf]124                DATOS=$(echo ${DATOS//  /} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
[9052b52]125                [[ "$DATOS" =~ (vga|video) ]] || DATOS="$DATOS vga=788"
[7fc01b9]126                # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
[ce08b47]127                sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOS//,/\\,},g" $TEMPLATE >$PXEFILE
[9ea18d37]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}')
[ccbb493]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
[61dbabb]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.