opengnsys-1.1.1 (#16) - Sugerencia para nuevas versiones de ogLive (#495) - Message List

Sugerencia para nuevas versiones de ogLive
 unsolved

Hola,

Nos ha llegado una partida de equipos con el siguiente problema, desde W10 se apagan bien, pero desde cualquier Linux en lugar de apagarse se reinician. Hemos podido solventar el problema siguiendo lo indicado en https://wiki.archlinux.org/title/Wake-on-LAN#Wake-up_after_shutdown que consiste en pasarle al kernel durante el arranque el parámetro xhci_hcd.quirks=270336.

Al tratar de hacer lo mismo con el ogLive poniendo en el fichero de plantilla tftpboot pxe el citado parámetro, nos ha dado un Kernel Panic y no nos arrancaba.

El problema es que el servidor pasa al cliente las variables de entorno como parámetros del kernel, de manera que durante el arranque se ejecuta la función ogExportKernelParameters que detecta todos aquellos parámetros que incluyan un igual en el nombre y los exporta como variables. El parámetro para activar los quirks es tomado como una variable de entorno al tener un igual en el nombre y al tratar de exportarlo da error de bad variable name pues la orden export no permite variables con un punto en el nombre, generándose un kernel panic y deteniéndose el proceso de arranque.

Para solucionarlo, hemos descomprimido el fichero oginitrd.img del ogLive, modificado la función como sigue y hemos vuelto a generar el fichero y su checksum:

#/**
  #         ogExportKernelParameters
  #@brief   Exporta los parametros pasados al kernel
  #@exception OG_ERR_FORMAT    Formato incorrecto.
  #@version 0.7 - Primera versión de la función.
  #@author  Antonio J. Doblas. Universidad de Malaga.
  #@date    2010/05/24
  #@version 1.1.0 - Sustituir índice de interfaz de red por su dispositivo.
  #@author  Ramón Gómez, ETSII Universidad de Sevilla
  #@date    2016/04/20
  #*/ ##
  ogExportKernelParameters ()
  {
          GLOBAL="cat /proc/cmdline"
          for i in `${GLOBAL}`
          do
                  echo $i | grep "." > /dev/null && continue #mi parche acodoner
                  echo $i | grep "=" > /dev/null && export $i
          done
          # Sustituir índice de interfaz de red por su dispositivo.
          DEVIND=$(echo "$ip" | cut -f6 -d:)
          if [ -n "$DEVIND" ]; then
                  PRE=$(echo "$ip" | cut -f1-5 -d:)
                  POST=$(echo "$ip" | cut -f7- -d:)
                  DEVICE=$(ogGetNetworkDevice $DEVIND)
                  [ -n "$DEVICE" ] && export ip="$PRE:$DEVICE:${POST:-none}"
          fi
          return 0
  }

En el fichero ogclient.sqfs también está la misma función, pero parece no afectar al arranque, de todas formas no estaría de más modificarla también.

También ha habido que editar el fichero /opt/opengnsys/client/etc/preinit/loadenviron.sh y aplicar la misma modificación:

.
.
.
export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN
# Exportar parámetros del kernel.
for i in $(cat /proc/cmdline); do
     echo $i | grep -q "." && continue #mi parche acodoner
     echo $i | grep -q "=" && export $i
done
# Cargar fichero de idioma.
.
.
.

Para prevenir que se produzca el mismo error con otros parámetros del kernel que se quieran utilizar y que tengan un punto en el nombre, sugeriría que se realizasen las modificaciones que he indicado para futuras versiones de ogLive.

Gracias de antemando

Abelardo

Attachments

No attachments created.