source: server/bin/setclientmode @ d063c01

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 d063c01 was 2da1991, checked in by ramon <ramongomez@…>, 8 years ago

#723: Script setclientmode: usar también TEMP y PERM como valores para el modo de cambio (temporal o permantente).

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

  • Property mode set to 100755
File size: 6.5 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, TEMP, 1, PERM } - 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
48case "$3" in
49        0|TEMP) MODE="TEMP" ;;
50        1|PERM) MODE="PERM" ;;
51        *)      echo "$PROG: Modo desconodido: 0, TEMP (temporal), 1, PERM (permanente)"
52                exit 1 ;;
53esac
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 \"$MODE\"" | 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="${MAC^^}"
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                                ' oglivedir=', ordenadores.oglivedir,
105                                ' winboot=', IFNULL (perfileshard.winboot, 'reboot'),
106                                IF (aulas.ntp='', '', CONCAT (' ogntp=', aulas.ntp)),
107                                IF (aulas.dns='', '', CONCAT (' ogdns=', aulas.dns)),
108                                IF (aulas.proxy='', '', CONCAT (' ogproxy=', aulas.proxy)),
109                                IF (entidades.ogunit=1 AND NOT centros.directorio='', CONCAT (' ogunit=', centros.directorio),''),
110                                CASE
111                                    WHEN menus.resolucion IS NULL THEN ''
112                                    WHEN menus.resolucion <= '999' THEN CONCAT (' vga=', menus.resolucion)
113                                    WHEN menus.resolucion LIKE '%:%' THEN CONCAT (' video=', menus.resolucion)
114                                    ELSE menus.resolucion
115                                END
116                                FROM ordenadores
117                                JOIN aulas USING (idaula)
118                                JOIN centros USING (idcentro)
119                                JOIN entidades USING (identidad)
120                                JOIN repositorios USING (idrepositorio)
121                                LEFT JOIN perfileshard USING (idperfilhard)
122                                LEFT JOIN menus USING (idmenu)
123                                WHERE ordenadores.mac='$MAC';")
124                # Quitar tabuladores, sustituir acentos y dejar resolución por defecto.
125                DATOS=$(echo ${DATOS//  /} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
126                [[ "$DATOS" =~ (vga|video) ]] || DATOS="$DATOS vga=788"
127                # Obtener directorio ogLive a partir de los datos.
128                OGLIVEDIR=$(echo "$DATOS" | awk -F= 'BEGIN {RS=" "} $1=="oglivedir" {print $2}')
129                # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
130                sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOS//,/\\,},g; s,set ISODIR=.*,set ISODIR=$OGLIVEDIR,g" $TEMPLATE >$PXEFILE
131                # Ponemos como propietario al usuario y grupo de Apache para que se pueda cambiar desde la consola web.
132                PERMS=$(ps axho user,group,comm|awk '!/root/ && /httpd|apache/ {u=$1; g=$2} END {if (g) printf "%s:%s",u,g}')
133                [ -n "$PERMS" ] && chown $PERMS $PXEFILE
134                # 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
135                if [ "$MODE" == "TEMP" ]; then
136                        sleep 60
137                        rm $PXEFILE     
138                        [ -e $PXEFILE.netboot ] && mv $PXEFILE.netboot $PXEFILE
139                fi
140
141                # Si el modo de trabajo es permanente (1)  borra el fichero PXE.netboot si existe y graba los datos en la base de datos
142                if [ "$MODE" == "PERM" ]; then
143                        [ -e $PXEFILE.netboot ] && rm $PXEFILE.netboot
144                        mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
145                                "UPDATE ordenadores SET arranque='$(basename $TEMPLATE)' WHERE mac='$MAC';"
146                fi
147        fi
148        let NPC=NPC+1
149done
150date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE
151
Note: See TracBrowser for help on using the repository browser.