source: server/bin/setclientmode @ 5d05b06

Last change on this file since 5d05b06 was 627a82c, checked in by OpenGnSys Support Team <soporte-og@…>, 5 years ago

#988 remove reference to ogserver.cfg setclientmode

Not used, and now there is a configuration ogserver.json

  • Property mode set to 100755
File size: 6.2 KB
RevLine 
[61dbabb]1#!/bin/bash
[ccbb493]2
3#/**
[940b1c7f]4#@file    setclientmode
[81b2ea1]5#@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.
[940b1c7f]6#@usage   setclientmode Plantilla Ambito Modo
[ccbb493]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.
[4221a82]8#@param   Config file  Path to the configuration file.
[ccbb493]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
[0c86fb7]17#@version 1.1.0 - Se incluye la unidad organizativa como parametro del kernel: ogunit=directorio_unidad (ticket #678).
18#@author  Irina Gomez, ETSII Universidad de Sevilla
19#@date    2015-12-16
[e528cb6]20#@version 1.1.0a - El server siempre es el servidor PXE. El segundo parámetro de la IP es el SERVER. La asignación del ogLive siempre es el server. (ticket #859).
[38fb4a8]21#@author  Antonio J. Doblas Viso, Universidad de Malaga
22#@date    2018-07-11
[25d4404]23#@version 1.1.1 - Crea configuración PXE para BIOS y UEFI. Permite pasar los datos acceso a la base de datos por variables de entorno. (ticket #802)
[178c3f6]24#@author  Irina Gomez, ETSII Universidad de Sevilla
25#@date    2019-02-13
[ccbb493]26#*/ ##
[61dbabb]27
[81b2ea1]28# Variables y funciones globales.
29PROG="$(basename "$0")"
[61dbabb]30OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
[178c3f6]31PXEDIR[0]=$OPENGNSYS/tftpboot/menu.lst
32PXEDIR[1]=$OPENGNSYS/tftpboot/grub
[61dbabb]33LOGFILE=$OPENGNSYS/log/opengnsys.log
34
[995b512]35source $OPENGNSYS/lib/ogfunctions.sh || exit 1
[4221a82]36source $1 || exit 1
[292982d]37
[940b1c7f]38# Mostrar ayuda.
39[ "$*" == "help" ] && help
[81b2ea1]40[ "$*" == "version" ] && version
[e371a87]41# Comprobar si el usuario es "root" o el del servicio web.
[953594a3]42WEBUSER=$(ps axho user,comm|awk '!/root/ && /httpd|apache/ {print $1; exit;}')
[1a76afa]43CALLER=$(getcaller)
[4221a82]44[ "$USER" != "root" -a "$USER" != "$WEBUSER" -a "$CALLER" != "ogserver" ] && raiseError access "Need to be root (or webserver user)"
45TEMPLATE[0]="${PXEDIR[0]}/templates/${MODE_FILE}"
46TEMPLATE[1]="${PXEDIR[1]}/templates/${MODE_FILE}"
47[ -z "${TEMPLATE[0]}${TEMPLATE[1]}" ] && raiseError notfound "PXE template file \"$TEMPLATE_NAME\""
[178c3f6]48
[4221a82]49case "${MODE^^}" in
[2da1991]50        0|TEMP) MODE="TEMP" ;;
51        1|PERM) MODE="PERM" ;;
[4221a82]52        *)      raiseError notfound "Unknown mode \"$MODE\"" ;;
[2da1991]53esac
[ccbb493]54
[75f9c01]55# Sustituir caracteres ' por \' para evitar inyección SQL.
[4221a82]56BOOTMODE="${TEMPLATE_NAME//\'/\\\'}"
57ETHERNET=$MAC
[61dbabb]58
[75a296b]59# Copiar fichero de configuración y actualizar base de datos.
[4221a82]60date +"%b %d %T $PROG: Configurando \"$TEMPLATE_NAME\" en \"$2\" en modo \"$MODE\"" | tee -a $LOGFILE
[61dbabb]61NPC=0
[4ea07d1]62for MAC in $ETHERNET; do
63        date +"%b %d %T $PROG: Detectada ethernet \"$MAC\" en \"$2\"" | tee -a $LOGFILE
[7b3dc7a]64        MACFILE="${MAC^^}"
[292982d]65        PXEFILE[0]=01-${MACFILE:0:2}-${MACFILE:2:2}-${MACFILE:4:2}-${MACFILE:6:2}-${MACFILE:8:2}-${MACFILE:10:2}
66        MACFILE="${MAC,,}"
67        PXEFILE[1]=01-${MACFILE:0:2}:${MACFILE:2:2}:${MACFILE:4:2}:${MACFILE:6:2}:${MACFILE:8:2}:${MACFILE:10:2}
[541ddee]68        # Renombra el fichero PXE original
69        [ -e ${PXEDIR[0]}/${PXEFILE[0]} ] && mv ${PXEDIR[0]}/${PXEFILE[0]} ${PXEDIR[0]}/${PXEFILE[0]}.netboot
70        [ -e ${PXEDIR[1]}/${PXEFILE[1]} ] && mv ${PXEDIR[1]}/${PXEFILE[1]} ${PXEDIR[1]}/${PXEFILE[1]}.netboot
71
[4221a82]72        if [ "$TEMPLATE_NAME" != "default" ]; then
[7fc01b9]73                # Si no está definida la variable LANG, usar idioma inglés por defecto.
74                [ -z "$LANG" -o "$LANG" == "C" ] && LANG="en"
[4221a82]75                DATOS=$DATA
[9052b52]76                # Quitar tabuladores, sustituir acentos y dejar resolución por defecto.
[f7f7a21]77                DATOS=$(echo ${DATOS//  /} | tr 'áéíóúñçÁÉÍÓÚÑÇ' 'aeiouncAEIOUNC')
[9052b52]78                [[ "$DATOS" =~ (vga|video) ]] || DATOS="$DATOS vga=788"
[ccda415]79                # Obtener directorio ogLive a partir de los datos.
[953594a3]80                OGLIVEDIR=$(echo "$DATOS" | awk -F= 'BEGIN {RS=" "} $1=="oglivedir" {print $2}')
[178c3f6]81
82                # Pondremos como propietario al usuario y grupo de Apache para que se pueda cambiar desde la consola web.
[953594a3]83                WEBGROUP=$(ps axho group,comm|awk '!/root/ && /httpd|apache/ {print $1; exit;}')
[178c3f6]84                for BOOTTYPE in 0 1; do
85                        # Si no existe la plantilla borramos el archivo PXE anterior continuamos
86                        if [ -z "${TEMPLATE[$BOOTTYPE]}" ]; then
[292982d]87                                rm ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}
[178c3f6]88                                continue
89                        fi
90                        # Comprobar si existe "oglivedir" en la plantilla para evitar duplicados.
91                        if grep -q "oglivedir=" ${TEMPLATE[$BOOTTYPE]} 2>/dev/null; then
92                                DATOSAUX="${DATOS/oglivedir=$OGLIVEDIR/}"
93                        fi
94                        # Renombra el fichero PXE original
[292982d]95                        [ -e ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} ] && mv ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}.netboot
[178c3f6]96
97                        # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
[292982d]98                        sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOSAUX//,/\\,},g; s,set ISODIR=.*,set ISODIR=$OGLIVEDIR,g" ${TEMPLATE[$BOOTTYPE]} >${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}
[e371a87]99                        [ -n "$WEBUSER" ] && chown $WEBUSER:$WEBGROUP ${PXEDIR[$BOOTTYPE]}/${PXEFILEE[$BOOTTYPE]}
[178c3f6]100                done
101
[ccbb493]102                # 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]103                if [ "$MODE" == "TEMP" ]; then
[ccbb493]104                        sleep 60
[178c3f6]105                        for BOOTTYPE in 0 1; do
[292982d]106                                [ -e ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} ] && rm ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}
107                                [ -e ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}.netboot ] && mv ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}.netboot ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}
[178c3f6]108                        done
[ccbb493]109                fi
110
[178c3f6]111
[ccbb493]112                # 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]113                if [ "$MODE" == "PERM" ]; then
[292982d]114                        [ -e ${PXEDIR[0]}/${PXEFILE[0]}.netboot ] && rm ${PXEDIR[0]}/${PXEFILE[0]}.netboot
115                        [ -e ${PXEDIR[1]}/${PXEFILE[1]}.netboot ] && rm ${PXEDIR[1]}/${PXEFILE[1]}.netboot
[178c3f6]116                        # Si no existe la plantilla de tipo BIOS tomo el nombre de la UEFI
117                        [ -z "${TEMPLATE[0]}" ] && TEMPLATE[0]=${TEMPLATE[1]}
[ccbb493]118                fi
[61dbabb]119        fi
120        let NPC=NPC+1
121done
122date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE
[4221a82]123exit 0
Note: See TracBrowser for help on using the repository browser.