summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rwxr-xr-xserver/bin/setclientmode71
-rw-r--r--server/tftpboot/grub/default64
-rw-r--r--server/tftpboot/grub/grub.cfg13
-rw-r--r--server/tftpboot/grub/templates/00unknown30
-rw-r--r--server/tftpboot/grub/templates/1020
-rw-r--r--server/tftpboot/grub/templates/114
-rw-r--r--server/tftpboot/grub/templates/124
-rw-r--r--server/tftpboot/grub/templates/19pxeADMIN37
-rw-r--r--server/tftpboot/grub/templates/21UEFIpxe7
-rw-r--r--server/tftpboot/grub/templates/pxe37
-rw-r--r--server/tftpboot/menu.lst/templates/10 (renamed from server/tftpboot/menu.lst/templates/01)2
-rw-r--r--server/tftpboot/menu.lst/templates/114
-rw-r--r--server/tftpboot/menu.lst/templates/124
13 files changed, 261 insertions, 36 deletions
diff --git a/server/bin/setclientmode b/server/bin/setclientmode
index 855ae4a6..e44684f3 100755
--- a/server/bin/setclientmode
+++ b/server/bin/setclientmode
@@ -8,6 +8,7 @@
#@param $1 NombrePlatilla
#@param $2 Ámbito { NombrePC | NombreAula }
#@param $3 Modo_trabajo = { 0, TEMP, 1, PERM } - 0 si es temporal y 1 si es permanente.
+#@param $4 Fichero con los datos de acceso a la base de datos (USUARIO, PASSWORD, datasource y CATALOG).
#@version 1.0 - Versión inicial.
#@author Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010
#@version 1.0.1 - Identificacion de la plantilla por nombre en consola = en primera linea de la plantilla
@@ -22,32 +23,38 @@
#@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).
#@author Antonio J. Doblas Viso, Universidad de Malaga
#@date 2018-07-11
+#@version 1.1.1 - Crea configuración PXE para BIOS y UEFI. Permite pasar datos de acceso a la base de datos en un fichero. (ticket #802)
+#@author Irina Gomez, ETSII Universidad de Sevilla
+#@date 2019-02-13
#*/ ##
-
# Variables.
PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
-SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
-PXEDIR=$OPENGNSYS/tftpboot/menu.lst
+SERVERCONF="$4"
+SERVERCONF=${SERVERCONF:-$OPENGNSYS/etc/ogAdmServer.cfg}
+PXEDIR[0]=$OPENGNSYS/tftpboot/menu.lst
+PXEDIR[1]=$OPENGNSYS/tftpboot/grub
LOGFILE=$OPENGNSYS/log/opengnsys.log
MYCNF=/tmp/.my.cnf.$$
# Control básico de errores.
-if [ $# -ne 3 ]; then
+if [ $# -ne 3 -a $# -ne 4 ]; then
echo "$PROG: Error de ejecución"
- echo "Formato: $PROG PLANTILLA [NOMBRE_PC|NOMBRE_AULA] MODO"
+ echo "Formato: $PROG PLANTILLA [NOMBRE_PC|NOMBRE_AULA] MODO [ BD_CONF ]"
exit 1
fi
if [ ! -r $SERVERCONF ]; then
echo "$PROG: Sin acceso a fichero de configuración"
exit 2
fi
-TEMPLATE=$(grep -l "^#.* $1 *$" $PXEDIR/templates/*)
-if [ -z "$TEMPLATE" ]; then
+TEMPLATE[0]=$(grep -l "^#.* $1 *$" ${PXEDIR[0]}/templates/*)
+TEMPLATE[1]=$(grep -l "^#.* $1 *$" ${PXEDIR[1]}/templates/*)
+if [ -z "${TEMPLATE[0]}" -a -z "${TEMPLATE[1]}" ]; then
echo "No existe archivo platilla: $1"
exit
fi
+
case "$3" in
0|TEMP) MODE="TEMP" ;;
1|PERM) MODE="PERM" ;;
@@ -87,9 +94,7 @@ NPC=0
for MAC in $ETHERNET; do
date +"%b %d %T $PROG: Detectada ethernet \"$MAC\" en \"$2\"" | tee -a $LOGFILE
MACFILE="${MAC^^}"
- PXEFILE=$PXEDIR/01-${MACFILE:0:2}-${MACFILE:2:2}-${MACFILE:4:2}-${MACFILE:6:2}-${MACFILE:8:2}-${MACFILE:10:2}
- # Renombra el fichero PXE original
- [ -e $PXEFILE ] && mv $PXEFILE $PXEFILE.netboot
+ PXEFILE=01-${MACFILE:0:2}-${MACFILE:2:2}-${MACFILE:4:2}-${MACFILE:6:2}-${MACFILE:8:2}-${MACFILE:10:2}
if [ "$1" != "default" ]; then
# Si no está definida la variable LANG, usar idioma inglés por defecto.
[ -z "$LANG" -o "$LANG" == "C" ] && LANG="en"
@@ -130,30 +135,50 @@ for MAC in $ETHERNET; do
[[ "$DATOS" =~ (vga|video) ]] || DATOS="$DATOS vga=788"
# Obtener directorio ogLive a partir de los datos.
OGLIVEDIR=$(echo "$DATOS" | awk -F= 'BEGIN {RS=" "} $1=="oglivedir" {print $2}')
- # Comprobar si existe "oglivedir" en la plantilla para evitar duplicados.
- if grep -q "oglivedir=" $TEMPLATE 2>/dev/null; then
- DATOS="${DATOS/oglivedir=$OGLIVEDIR/}"
- fi
- # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
- sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOS//,/\\,},g; s,set ISODIR=.*,set ISODIR=$OGLIVEDIR,g" $TEMPLATE >$PXEFILE
- # Ponemos como propietario al usuario y grupo de Apache para que se pueda cambiar desde la consola web.
+
+ # Pondremos como propietario al usuario y grupo de Apache para que se pueda cambiar desde la consola web.
PERMS=$(ps axho user,group,comm|awk '!/root/ && /httpd|apache/ {u=$1; g=$2} END {if (g) printf "%s:%s",u,g}')
- [ -n "$PERMS" ] && chown $PERMS $PXEFILE
+
+ for BOOTTYPE in 0 1; do
+ # Si no existe la plantilla borramos el archivo PXE anterior continuamos
+ if [ -z "${TEMPLATE[$BOOTTYPE]}" ]; then
+ rm ${PXEDIR[$BOOTTYPE]}/$PXEFILE
+ continue
+ fi
+ # Comprobar si existe "oglivedir" en la plantilla para evitar duplicados.
+ if grep -q "oglivedir=" ${TEMPLATE[$BOOTTYPE]} 2>/dev/null; then
+ DATOSAUX="${DATOS/oglivedir=$OGLIVEDIR/}"
+ fi
+ # Renombra el fichero PXE original
+ [ -e ${PXEDIR[$BOOTTYPE]}/$PXEFILE ] && mv ${PXEDIR[$BOOTTYPE]}/$PXEFILE ${PXEDIR[$BOOTTYPE]}/$PXEFILE.netboot
+
+ # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
+ sed -e "s,vga=[0-9]*,,g; s,INFOHOST,${DATOSAUX//,/\\,},g; s,set ISODIR=.*,set ISODIR=$OGLIVEDIR,g" ${TEMPLATE[$BOOTTYPE]} >${PXEDIR[$BOOTTYPE]}/$PXEFILE
+ [ -n "$PERMS" ] && chown $PERMS ${PXEDIR[$BOOTTYPE]}/$PXEFILE
+ done
+
+
# 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
if [ "$MODE" == "TEMP" ]; then
sleep 60
- rm $PXEFILE
- [ -e $PXEFILE.netboot ] && mv $PXEFILE.netboot $PXEFILE
+ for BOOTTYPE in 0 1; do
+ [ -e ${PXEDIR[$BOOTTYPE]}/$PXEFILE ] && rm ${PXEDIR[$BOOTTYPE]}/$PXEFILE
+ [ -e ${PXEDIR[$BOOTTYPE]}/$PXEFILE.netboot ] && mv ${PXEDIR[$BOOTTYPE]}/$PXEFILE.netboot ${PXEDIR[$BOOTTYPE]}/$PXEFILE
+ done
fi
+
# Si el modo de trabajo es permanente (1) borra el fichero PXE.netboot si existe y graba los datos en la base de datos
if [ "$MODE" == "PERM" ]; then
- [ -e $PXEFILE.netboot ] && rm $PXEFILE.netboot
+ [ -e ${PXEDIR[0]}/$PXEFILE.netboot ] && rm ${PXEDIR[0]}/$PXEFILE.netboot
+ [ -e ${PXEDIR[1]}/$PXEFILE.netboot ] && rm ${PXEDIR[1]}/$PXEFILE.netboot
+ # Si no existe la plantilla de tipo BIOS tomo el nombre de la UEFI
+ [ -z "${TEMPLATE[0]}" ] && TEMPLATE[0]=${TEMPLATE[1]}
+
mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
- "UPDATE ordenadores SET arranque='$(basename $TEMPLATE)' WHERE mac='$MAC';"
+ "UPDATE ordenadores SET arranque='$(basename ${TEMPLATE[0]})' WHERE mac='$MAC';"
fi
fi
let NPC=NPC+1
done
date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE
-
diff --git a/server/tftpboot/grub/default b/server/tftpboot/grub/default
new file mode 100644
index 00000000..85342b49
--- /dev/null
+++ b/server/tftpboot/grub/default
@@ -0,0 +1,64 @@
+# Busca cargadores existentes por orden de prioridad e
+# inicia el primero que encuentra.
+# Si no existe ningún cargador de arranque muestre mensaje de error.
+set timeout=0
+
+# Valor si no detecto ningún sistema
+set label="OpenGnsys: Ningún cargador de arranque detectado."
+set chain=""
+
+# Compruebo si existen distintos cargadores.
+set root=''
+echo "Searching rEFInd"
+search --file --set root /EFI/refind/grubx64.efi
+if [ "$root" != "" ]; then
+ set label="rEFInd"
+ set chain="chainloader /EFI/refind/grubx64.efi"
+fi
+
+if [ "$root" == "" ]; then
+ echo "Searching Part-01-02"
+ search --file --set root /EFI/Part-01-02/Boot/ogloader.efi
+ if [ "$root" != "" ]; then
+ set label="Part-01-02"
+ set chain="chainloader /EFI/Part-01-02/Boot/ogloader.efi"
+ fi
+fi
+
+if [ "$root" == "" ]; then
+ echo "Searching Part-01-03"
+ search --file --set root /EFI/Part-01-03/Boot/ogloader.efi
+ if [ "$root" != "" ]; then
+ set label="Part-01-03"
+ set chain="chainloader /EFI/Part-01-03/Boot/ogloader.efi"
+ fi
+fi
+
+if [ "$root" == "" ]; then
+ echo "Searching Microsoft"
+ search --file --set root /EFI/Microsoft/Boot/bootmgfw.efi
+ if [ "$root" != "" ]; then
+ set label="Microsoft"
+ set chain="chainloader /EFI/Microsoft/Boot/bootmgfw.efi"
+ fi
+fi
+
+if [ "$root" == "" ]; then
+ echo "Searching Ubuntu"
+ search --file --set root /EFI/ubuntu/grubx64.efi
+ if [ "$root" != "" ]; then
+ set label="Ubuntu"
+ set chain="chainloader /EFI/ubuntu/grubx64.efi"
+ fi
+fi
+
+if [ "$root" != "" ]; then
+ set label="OpenGnsys ha detectado: $label"
+else
+ # para evitar mensajes de error.
+ set root="(hd0,gpt1)"
+fi
+
+menuentry "$label" {
+ eval "$chain"
+}
diff --git a/server/tftpboot/grub/grub.cfg b/server/tftpboot/grub/grub.cfg
index 53db4d84..10340de6 100644
--- a/server/tftpboot/grub/grub.cfg
+++ b/server/tftpboot/grub/grub.cfg
@@ -1,2 +1,13 @@
-source "$prefix/$net_default_mac"
+insmod tr
+tr -s mac : - $net_default_mac
+tr -U -s MAC $mac
+# Cargo configuración PC
+configfile=$prefix/01-$MAC
+source "$configfile"
+
+# Si no existe anterior cargo configuracion por defecto
+# Lo compruebo buscando variables más usuales
+if [ "$timeout" == "" -a "$default" == "" ]; then
+ source "$prefix/default"
+fi
diff --git a/server/tftpboot/grub/templates/00unknown b/server/tftpboot/grub/templates/00unknown
new file mode 100644
index 00000000..3352a965
--- /dev/null
+++ b/server/tftpboot/grub/templates/00unknown
@@ -0,0 +1,30 @@
+##NO-TOCAR-ESTA-LINEA Sin-designar
+set default="0"
+set timeout="30"
+
+menuentry 'ogLive' {
+set ISODIR=ogLive
+linux (tftp)/$ISODIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogtmpfs=15 oglivedir=$ISODIR INFOHOST
+initrd (tftp)/$ISODIR/oginitrd.img
+boot
+}
+menuentry 'ReFind' {
+ root='hd0,gpt1'
+ chainloader /EFI/refind/shimx64.efi
+ boot
+}
+menuentry 'Part-01-02' {
+ root='hd0,gpt1'
+ chainloader /EFI/Part-01-02/Boot/ogloader.efi
+ boot
+}
+menuentry 'Windows' {
+ root='hd0,gpt1'
+ chainloader /EFI/Microsoft/Boot/bootmgfw.efi
+ boot
+}
+menuentry 'Ubuntu' {
+ root='hd0,gpt1'
+ chainloader /EFI/ubuntu/grubx64.efi
+ boot
+}
diff --git a/server/tftpboot/grub/templates/10 b/server/tftpboot/grub/templates/10
new file mode 100644
index 00000000..4271840e
--- /dev/null
+++ b/server/tftpboot/grub/templates/10
@@ -0,0 +1,20 @@
+##NO-TOCAR-ESTA-LINEA 1hd
+set timeout=0
+
+# Compruebo si existe rEFInd
+set root=''
+echo "rEFInd"
+search --file --set root /EFI/refind/grubx64.efi
+if [ "$root" == "" ]; then
+ set label="rEFInd no está instalado"
+ set chain=""
+else
+ set label="rEFInd"
+ set chain="chainloader /EFI/refind/grubx64.efi"
+fi
+
+menuentry "$label" {
+ root='hd0,gpt1'
+ eval "$chain"
+ boot
+}
diff --git a/server/tftpboot/grub/templates/11 b/server/tftpboot/grub/templates/11
new file mode 100644
index 00000000..06b34088
--- /dev/null
+++ b/server/tftpboot/grub/templates/11
@@ -0,0 +1,4 @@
+##NO-TOCAR-ESTA-LINEA 1hd-1os
+root='hd0,gpt1'
+chainloader /EFI/Part-01-02/Boot/ogloader.efi
+boot
diff --git a/server/tftpboot/grub/templates/12 b/server/tftpboot/grub/templates/12
new file mode 100644
index 00000000..6f22fc30
--- /dev/null
+++ b/server/tftpboot/grub/templates/12
@@ -0,0 +1,4 @@
+##NO-TOCAR-ESTA-LINEA 1hd-2os
+root='hd0,gpt1'
+chainloader /EFI/Part-01-03/Boot/ogloader.efi
+boot
diff --git a/server/tftpboot/grub/templates/19pxeADMIN b/server/tftpboot/grub/templates/19pxeADMIN
new file mode 100644
index 00000000..494ba87d
--- /dev/null
+++ b/server/tftpboot/grub/templates/19pxeADMIN
@@ -0,0 +1,37 @@
+##NO-TOCAR-ESTA-LINEA ogLiveAdmin
+set timeout=0
+set timeout_style=hidden
+
+set ISODIR=ogLive
+
+# Si existe ogLive en CACHE lo inicio, si no el de la red
+set root=''
+echo "OgLive CACHE"
+search --file --set root /boot/$ISODIR/ogvmlinuz
+if [ "$root" == "" ]; then
+ echo "OgLive $ISODIR"
+ set default=1;
+else
+ set default=0;
+fi
+
+menuentry "OgLive CACHE" {
+ linux /boot/$ISODIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogupdateinitrd=true ogtmpfs=15 oglivedir=$ISODIR INFOHOST
+ initrd /boot/$ISODIR/oginitrd.img
+ boot
+}
+
+menuentry "OgLive $ISODIR" {
+ # Si no existe el ogLive de ISODIR en la red, inicio ogLive por defecto
+ for DIR in $ISODIR ogLive; do
+ if linux (tftp)/$DIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogtmpfs=15 oglivedir=$ISODIR INFOHOST ; then
+ set DIR=$DIR
+ break
+ else
+ echo "OgLive default"
+ fi
+ done
+
+ initrd (tftp)/$DIR/oginitrd.img
+ boot
+}
diff --git a/server/tftpboot/grub/templates/21UEFIpxe b/server/tftpboot/grub/templates/21UEFIpxe
deleted file mode 100644
index 7892a495..00000000
--- a/server/tftpboot/grub/templates/21UEFIpxe
+++ /dev/null
@@ -1,7 +0,0 @@
-##NO-TOCAR-ESTA-LINEA UEFI-pxe
-set ISODIR=ogLive
-linux (tftp)/$ISODIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogtmpfs=15 oglivedir=$ISODIR INFOHOST
-initrd (tftp)/$OGLIVE/oginitrd.img
-boot
-
-
diff --git a/server/tftpboot/grub/templates/pxe b/server/tftpboot/grub/templates/pxe
new file mode 100644
index 00000000..1a67fc25
--- /dev/null
+++ b/server/tftpboot/grub/templates/pxe
@@ -0,0 +1,37 @@
+##NO-TOCAR-ESTA-LINEA ogLive
+set timeout=0
+set timeout_style=hidden
+
+set ISODIR=ogLive
+
+# Si existe ogLive en CACHE lo inicio, si no el de la red
+set root=''
+echo "OgLive CACHE"
+search --file --set root /boot/$ISODIR/ogvmlinuz
+if [ "$root" == "" ]; then
+ echo "OgLive $ISODIR"
+ set default=1;
+else
+ set default=0;
+fi
+
+menuentry "OgLive CACHE" {
+ linux /boot/$ISODIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogupdateinitrd=true ogtmpfs=15 oglivedir=$ISODIR INFOHOST
+ initrd /boot/$ISODIR/oginitrd.img
+ boot
+}
+
+menuentry "OgLive $ISODIR" {
+ # Si no existe el ogLive de ISODIR en la red, inicio ogLive por defecto
+ for DIR in $ISODIR ogLive; do
+ if linux (tftp)/$DIR/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false ogtmpfs=15 oglivedir=$ISODIR INFOHOST ; then
+ set DIR=$DIR
+ break
+ else
+ echo "OgLive default"
+ fi
+ done
+
+ initrd (tftp)/$DIR/oginitrd.img
+ boot
+}
diff --git a/server/tftpboot/menu.lst/templates/01 b/server/tftpboot/menu.lst/templates/10
index db7a3ee7..96d0f500 100644
--- a/server/tftpboot/menu.lst/templates/01
+++ b/server/tftpboot/menu.lst/templates/10
@@ -1,4 +1,4 @@
-##NO-TOCAR-ESTA-LINEA MBR
+##NO-TOCAR-ESTA-LINEA 1hd
timeout 1
title MBR
chainloader (hd0)+1
diff --git a/server/tftpboot/menu.lst/templates/11 b/server/tftpboot/menu.lst/templates/11
index 6ff6b10b..c1492b57 100644
--- a/server/tftpboot/menu.lst/templates/11
+++ b/server/tftpboot/menu.lst/templates/11
@@ -1,6 +1,6 @@
-##NO-TOCAR-ESTA-LINEA 1hd-1partition
+##NO-TOCAR-ESTA-LINEA 1hd-1os
timeout 1
-title FirstHardDisk-FirstPartition
+title FirstDisk-FirstOperatingSystem
root (hd0,0)
chainloader (hd0,0)+1
boot
diff --git a/server/tftpboot/menu.lst/templates/12 b/server/tftpboot/menu.lst/templates/12
index 0843c3b1..0db966b7 100644
--- a/server/tftpboot/menu.lst/templates/12
+++ b/server/tftpboot/menu.lst/templates/12
@@ -1,6 +1,6 @@
-##NO-TOCAR-ESTA-LINEA 1hd-2partition
+##NO-TOCAR-ESTA-LINEA 1hd-2os
timeout 1
-title FirstHardDisk-SecondPartition
+title FirstHardDisk-SecondOperatingSystem
root (hd0,1)
chainloader (hd0,1)+1
boot