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
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 }
[2da1991]10#@param   $3 Modo_trabajo = { 0, TEMP, 1, PERM } - 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
[2da1991]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
[ccbb493]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.
[2da1991]82date +"%b %d %T $PROG: Configurando \"$1\" en \"$2\" en modo \"$MODE\"" | 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,
[ccda415]104                                ' oglivedir=', ordenadores.oglivedir,
[7fc01b9]105                                ' winboot=', IFNULL (perfileshard.winboot, 'reboot'),
[0c86fb7]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),''),
[97f6020]110                                CASE
111                                    WHEN menus.resolucion IS NULL THEN ''
[c6d4ae6]112                                    WHEN menus.resolucion <= '999' THEN CONCAT (' vga=', menus.resolucion)
113                                    WHEN menus.resolucion LIKE '%:%' THEN CONCAT (' video=', menus.resolucion)
[97f6020]114                                    ELSE menus.resolucion
115                                END
[d16b7cf]116                                FROM ordenadores
[7fc01b9]117                                JOIN aulas USING (idaula)
[0c86fb7]118                                JOIN centros USING (idcentro)
119                                JOIN entidades USING (identidad)
[7fc01b9]120                                JOIN repositorios USING (idrepositorio)
121                                LEFT JOIN perfileshard USING (idperfilhard)
122                                LEFT JOIN menus USING (idmenu)
[4ea07d1]123                                WHERE ordenadores.mac='$MAC';")
[9052b52]124                # Quitar tabuladores, sustituir acentos y dejar resolución por defecto.
[d16b7cf]125                DATOS=$(echo ${DATOS//  /} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
[9052b52]126                [[ "$DATOS" =~ (vga|video) ]] || DATOS="$DATOS vga=788"
[ccda415]127                # Obtener directorio ogLive a partir de los datos.
128                OGLIVEDIR=$(echo "$DATOS" | awk -F= 'BEGIN {RS=" "} $1=="oglivedir" {print $2}')
[7fc01b9]129                # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
[ccda415]130                sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOS//,/\\,},g; s,set ISODIR=.*,set ISODIR=$OGLIVEDIR,g" $TEMPLATE >$PXEFILE
[9ea18d37]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}')
[ccbb493]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
[2da1991]135                if [ "$MODE" == "TEMP" ]; then
[ccbb493]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
[2da1991]142                if [ "$MODE" == "PERM" ]; then
[ccbb493]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
[61dbabb]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.