source: server/bin/setclientmode @ 395c326

Last change on this file since 395c326 was 4a7356a, checked in by Ramón M. Gómez <ramongomez@…>, 4 years ago

#986: Updating help and messages from script setclientmode.

  • Property mode set to 100755
File size: 5.9 KB
Line 
1#!/bin/bash
2
3#/**
4#@file    setclientmode
5#@brief   Configures the client's PXE boot file from a template file.
6#@usage   setclientmode Config_file
7#@param   Config_file  Path to the configuration file.
8#@version 1.0 - Versión inicial.
9#@author  Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010
10#@version 1.0.1 - Identificacion de la plantilla por nombre en consola = en primera linea de la plantilla
11#@author  Irina Gomez - Univ. Sevilla
12#@date    2013-05-31
13#@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.
14#@author  Juan Carlos Garcia - Univ. Zaragoza
15#@date    2015-11-17
16#@version 1.1.0 - Se incluye la unidad organizativa como parametro del kernel: ogunit=directorio_unidad (ticket #678).
17#@author  Irina Gomez, ETSII Universidad de Sevilla
18#@date    2015-12-16
19#@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).
20#@author  Antonio J. Doblas Viso, Universidad de Malaga
21#@date    2018-07-11
22#@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)
23#@author  Irina Gomez, ETSII Universidad de Sevilla
24#@date    2019-02-13
25#@version 1.2.0 - Using configuration file instead of input parameters; english messages.
26#@author  Roberto Hueso Gómez
27#@date    2020-10-16
28#*/ ##
29
30# Variables y funciones globales.
31PROG="$(basename "$0")"
32OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
33PXEDIR[0]=$OPENGNSYS/tftpboot/menu.lst
34PXEDIR[1]=$OPENGNSYS/tftpboot/grub
35LOGFILE=$OPENGNSYS/log/opengnsys.log
36
37source $OPENGNSYS/lib/ogfunctions.sh || exit 1
38
39# Mostrar ayuda.
40[ "$*" == "help" ] && help
41[ "$*" == "version" ] && version
42# Checking errors.
43[ $# -gt 1 ] && raiseError usage
44source "$1" || exit 1
45# Comprobar si el usuario es "root" o el del servicio web.
46WEBUSER=$(ps axho user,comm|awk '!/root/ && /httpd|apache/ {print $1; exit;}')
47CALLER=$(getcaller)
48[ "$USER" != "root" -a "$USER" != "$WEBUSER" -a "$CALLER" != "ogserver" ] && raiseError access "Need to be root (or webserver user)"
49TEMPLATE[0]="${PXEDIR[0]}/templates/${MODE_FILE}"
50TEMPLATE[1]="${PXEDIR[1]}/templates/${MODE_FILE}"
51[ -z "${TEMPLATE[0]}${TEMPLATE[1]}" ] && raiseError notfound "PXE template file \"$TEMPLATE_NAME\""
52
53case "${MODE^^}" in
54        0|TEMP) MODE="TEMP" ;;
55        1|PERM) MODE="PERM" ;;
56        *)      raiseError notfound "Unknown mode \"$MODE\"" ;;
57esac
58
59# Sustituir caracteres ' por \' para evitar inyección SQL.
60BOOTMODE="${TEMPLATE_NAME//\'/\\\'}"
61ETHERNET=$MAC
62
63# Copiar fichero de configuración.
64for MAC in $ETHERNET; do
65        MACFILE="${MAC^^}"
66        PXEFILE[0]=01-${MACFILE:0:2}-${MACFILE:2:2}-${MACFILE:4:2}-${MACFILE:6:2}-${MACFILE:8:2}-${MACFILE:10:2}
67        MACFILE="${MAC,,}"
68        PXEFILE[1]=01-${MACFILE:0:2}:${MACFILE:2:2}:${MACFILE:4:2}:${MACFILE:6:2}:${MACFILE:8:2}:${MACFILE:10:2}
69        # Renombra el fichero PXE original
70        [ -e ${PXEDIR[0]}/${PXEFILE[0]} ] && mv ${PXEDIR[0]}/${PXEFILE[0]} ${PXEDIR[0]}/${PXEFILE[0]}.netboot
71        [ -e ${PXEDIR[1]}/${PXEFILE[1]} ] && mv ${PXEDIR[1]}/${PXEFILE[1]} ${PXEDIR[1]}/${PXEFILE[1]}.netboot
72
73        if [ "$TEMPLATE_NAME" != "default" ]; then
74                # Si no está definida la variable LANG, usar idioma inglés por defecto.
75                [ -z "$LANG" -o "$LANG" == "C" ] && LANG="en"
76                DATOS=$DATA
77                # Quitar tabuladores, sustituir acentos y dejar resolución por defecto.
78                DATOS=$(echo ${DATOS//  /} | tr 'áéíóúñçÁÉÍÓÚÑÇ' 'aeiouncAEIOUNC')
79                [[ "$DATOS" =~ (vga|video) ]] || DATOS="$DATOS vga=788"
80                # Obtener directorio ogLive a partir de los datos.
81                OGLIVEDIR=$(echo "$DATOS" | awk -F= 'BEGIN {RS=" "} $1=="oglivedir" {print $2}')
82
83                # Pondremos como propietario al usuario y grupo de Apache para que se pueda cambiar desde la consola web.
84                WEBGROUP=$(ps axho group,comm|awk '!/root/ && /httpd|apache/ {print $1; exit;}')
85                for BOOTTYPE in 0 1; do
86                        # Si no existe la plantilla borramos el archivo PXE anterior continuamos
87                        if [ -z "${TEMPLATE[$BOOTTYPE]}" ]; then
88                                rm ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}
89                                continue
90                        fi
91                        # Comprobar si existe "oglivedir" en la plantilla para evitar duplicados.
92                        if grep -q "oglivedir=" ${TEMPLATE[$BOOTTYPE]} 2>/dev/null; then
93                                DATOSAUX="${DATOS/oglivedir=$OGLIVEDIR/}"
94                        fi
95                        # Renombra el fichero PXE original
96                        [ -e ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} ] && mv ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}.netboot
97
98                        # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
99                        sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOSAUX//,/\\,},g; s,set ISODIR=.*,set ISODIR=$OGLIVEDIR,g" ${TEMPLATE[$BOOTTYPE]} >${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}
100                        [ -n "$WEBUSER" ] && chown $WEBUSER:$WEBGROUP ${PXEDIR[$BOOTTYPE]}/${PXEFILEE[$BOOTTYPE]}
101                done
102
103                # 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
104                if [ "$MODE" == "TEMP" ]; then
105                        sleep 60
106                        for BOOTTYPE in 0 1; do
107                                [ -e ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]} ] && rm ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}
108                                [ -e ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}.netboot ] && mv ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}.netboot ${PXEDIR[$BOOTTYPE]}/${PXEFILE[$BOOTTYPE]}
109                        done
110                fi
111
112
113                # Si el modo de trabajo es permanente (1)  borra el fichero PXE.netboot si existe y graba los datos en la base de datos
114                if [ "$MODE" == "PERM" ]; then
115                        [ -e ${PXEDIR[0]}/${PXEFILE[0]}.netboot ] && rm ${PXEDIR[0]}/${PXEFILE[0]}.netboot
116                        [ -e ${PXEDIR[1]}/${PXEFILE[1]}.netboot ] && rm ${PXEDIR[1]}/${PXEFILE[1]}.netboot
117                        # Si no existe la plantilla de tipo BIOS tomo el nombre de la UEFI
118                        [ -z "${TEMPLATE[0]}" ] && TEMPLATE[0]=${TEMPLATE[1]}
119                fi
120        fi
121        date +"%b %d %T $PROG: Configured \"$TEMPLATE_NAME\" on \"$MAC\", \"$MODE\" mode" | tee -a $LOGFILE
122done
123exit 0
Note: See TracBrowser for help on using the repository browser.