source: server/bin/setclientmode @ 5854ddb

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 5854ddb was ccbb493, checked in by ramon <ramongomez@…>, 10 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
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.
8#@note    Modo_trabajo = { 0, 1 }
9#@version 1.0 - Versión inicial.
10#@author  Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010
[3dd7b5d]11#@version 1.0.1 - Identificacion de la plantilla por nombre en consola = en primera linea de la plantilla
[ccbb493]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#*/ ##
[61dbabb]18
19
20# Variables.
21PROG=$(basename $0)
22OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
23SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
[75a296b]24PXEDIR=$OPENGNSYS/tftpboot/menu.lst
[61dbabb]25LOGFILE=$OPENGNSYS/log/opengnsys.log
[4ea07d1]26MYCNF=/tmp/.my.cnf.$$
[61dbabb]27
28# Control básico de errores.
[ccbb493]29if [ $# -ne 3 ]; then
[61dbabb]30        echo "$PROG: Error de ejecución"
[ccbb493]31        echo "Formato: $PROG PLANTILLA [NOMBRE_PC|NOMBRE_AULA] MODO"
[61dbabb]32        exit 1
33fi
34if [ ! -r $SERVERCONF ]; then
35        echo "$PROG: Sin acceso a fichero de configuración"
36        exit 2
37fi
[7710a99]38TEMPLATE=$(grep -l "^#.* $1 *$" $PXEDIR/templates/*)
[3dd7b5d]39if [ -z "$TEMPLATE" ]; then
40        echo "No existe archivo platilla: $1"
[61dbabb]41        exit
42fi
43
[ccbb493]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
[61dbabb]50# Obtener datos de acceso a la Base de datos.
51source $SERVERCONF
[75f9c01]52# Sustituir caracteres ' por \' para evitar inyección SQL.
53BOOTMODE="${1//\'/\'}"
54RESOURCE="${2//\'/\'}"
[4ea07d1]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.
[9d380ec]66ETHERNET=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
[4ea07d1]67                "SELECT mac FROM ordenadores
68                   JOIN aulas USING (idaula)
69                  WHERE aulas.nombreaula='$RESOURCE'
70                     OR nombreordenador='$RESOURCE';")
[61dbabb]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
[75a296b]76# Copiar fichero de configuración y actualizar base de datos.
[ccbb493]77date +"%b %d %T $PROG: Configurando \"$1\" en \"$2\" en modo \"$3\"" | tee -a $LOGFILE
[61dbabb]78NPC=0
[4ea07d1]79for MAC in $ETHERNET; do
80        date +"%b %d %T $PROG: Detectada ethernet \"$MAC\" en \"$2\"" | tee -a $LOGFILE
[ccbb493]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
[f80f839]85        if [ "$1" != "default" ]; then
[7fc01b9]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).
[9d380ec]89                DATOS=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
[7fc01b9]90                        "SELECT ' LANG=$LANG',
[d92da89]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,
[7fc01b9]97                                ' oglog=', (SELECT (@serverip:=ipserveradm) FROM entornos LIMIT 1),
[d92da89]98                                ' ogshare=', @serverip,
[7fc01b9]99                                ' winboot=', IFNULL (perfileshard.winboot, 'reboot'),
[ccbb493]100                                IF (aulas.ntp IS NULL, '', CONCAT (' ogntp=', aulas.ntp)),
[7629e91]101                                IF (aulas.dns IS NULL, '', CONCAT (' ogdns=', aulas.dns)),
102                                IF (aulas.proxy IS NULL, '', CONCAT (' ogproxy=', aulas.proxy)),
[97f6020]103                                CASE
104                                    WHEN menus.resolucion IS NULL THEN ''
[c6d4ae6]105                                    WHEN menus.resolucion <= '999' THEN CONCAT (' vga=', menus.resolucion)
106                                    WHEN menus.resolucion LIKE '%:%' THEN CONCAT (' video=', menus.resolucion)
[97f6020]107                                    ELSE menus.resolucion
108                                END
[d16b7cf]109                                FROM ordenadores
[7fc01b9]110                                JOIN aulas USING (idaula)
111                                JOIN repositorios USING (idrepositorio)
112                                LEFT JOIN perfileshard USING (idperfilhard)
113                                LEFT JOIN menus USING (idmenu)
[4ea07d1]114                                WHERE ordenadores.mac='$MAC';")
[7fc01b9]115                # Quitar tabuladores y sustituir caracteres quitando acentos y tildes.
[d16b7cf]116                DATOS=$(echo ${DATOS//  /} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
[7fc01b9]117                # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
[4ea07d1]118                sed -e "s/vga=[0-9]*//g; s/INFOHOST/$DATOS/g" $TEMPLATE >$PXEFILE
[9ea18d37]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}')
[ccbb493]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
[61dbabb]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.