opengnsys-1.1.1 (#16) - Sugerencia para nuevas versiones de ogLive (#495) - Message List
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