Loading…
Reference in New Issue
There is no content yet.
Delete Branch "ipxe-study"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
Introducción
Esta PR cierra los tickets #222 #243 #244 #245. El objetivo general es hacer un estudio de nuevas tecnologías para el arranque de máquinas. Se ha estudiado el uso de ipxe como motor de arranque en el nuevo componente ogboot. Además se ha probado el motor de ipxe sobre clientes montados por opengnsys, cargando el oglive sobre ellos. Las pruebas se han llevado a cabo tanto para clientes con sistemas BIOS y UEFI como en servidores dhcp isc-dhcp y kea dhcp. El objetivo de esta PR es testear cada prueba que se ha llevado a cabo y confirmar que se abarca cualquier casuística posible para su posterior integración con ogboot. Mientras se lleva a cabo el desarrollo del componente ogboot, utilizaremos el tftpboot de opengnsys para servir los scripts de ipxe.
Script embebido en ipxe
En una carga inicial del ipxe por dhcp se produce un bucle infinito debido a que la carga del ipxe vuelve a llamar al dhcp solicitando un boot-file, enviando este otra vez el mismo ipxe y este volviendo a solicitar boot-file. Para corregir el problema ipxe ofrece dos soluciones: la primera es añadir un nuevo condicional en la configuración dhcp para controlar la segunda llamada al dhcp, ofreciendo el siguiente script ipxe con la lógica a seguir con el arranque:
La segunda opción sería modificar los ficheros de arranque
undionly.kpxe
yipxe.efi
, generandolos de nuevo y embebiendo un script que contendría la lógica de los siguientes pasos en el arranque. Para generar estos archivos se requiere descargar el siguientes repositorio: https://github.com/ipxe/ipxeUna vez descargado ejecutar
make
para montar los componentes necesarios. Por último generar los ficheros de arranque necesarios de la siguiente forma:make bin/undionly.kpxe EMBED=/opt/opengnsys/tftpboot/ipxe_scripts/dhcp_boot.ipxe
make bin-x86_64-efi/ipxe.efi EMBED=/opt/opengnsys/tftpboot/ipxe_scripts/dhcp_boot.ipxe
Hemos optado por esta segunda opción ya que de esta forma no requeriría de una segunda llamada al DHCP, ahorrandonos alrededor de 30 segundos en entornos reales que es lo que suele durar una consulta DHCP en las aulas al llevar a cabo el arranque.
Scripts de arranque
Actualmente estamos embebiendo el script
dhcp_boot.ipxe
que será el siguiente paso que ejecutará el cliente al arrancar por el boot-file. Este script tiene como objetivo emular la forma de arranque que tenemos a día de hoy en opengnsys:Estos ficheros de configuración contienen los siguientes pasos en el arranque que es la carga del kernel, carga de imagen de inicialización y por último arranque de la máquina. Hemos documentado los tiempos al usar protocolos HTTP o TFTP, se pueden ver en el ticket
https://ognproject.evlt.uma.es/redmine/issues/222
Por ahora default.ipxe y los scripts con MAC son iguales, en el futuro se pensará mejor que lógica tendrán cada uno.
DHCP
Se ha probado con dos servidores de DHCP: isc-dhcp y kea dhcp. Se han llevado a cabo pruebas con ambas tecnologías pero para esta PR nos centraremos únicamente en kea-dhcp. De todos modos queda documentado en esta PR como sería la configuración de ipxe para isc-dhcp Lo único que cabe destacar es que para ambos servicios hay que implementar una lógica condicional de modo que ejecute undionly.kpxe para sistemas BIOS o ipxe.efi para sistemas UEFI en sus ficheros de configuración.
Para isc-dhcp la configuración sería la siguiente:
Para kea-dhcp es un poco mas complicado, debemos definir perfiles de configuración que use dependiendo de la arquitectura del cliente:
Nota: no procederá pero en caso de que quisiesemos resolver el problema del bucle infinito por dhcp en kea habria que añadir:
Pruebas en Jenkins
Se ha desarrollado dos ramas para poder probar la PR de forma óptima. A continuación listaremos los principales cambios que llevan a cabo:
Repositorio Opengnsys, rama ogboot-installer-jenkins:
installer/opengnsys_installer_devel_esxi.sh
installer/vagrant/Vagrantfile-esxi
Repositorio Ogboot, rama ipxe-study:
ogboot/installer/ogboot_installer.sh
Nota: Se hará otra PR para la rama ogboot-installer-jenkins de Opengnsys que tendrá como objetivo incluir los cambios de la instalación de Kea DHCP y la instalación del componente ogboot si lo precisa.
Pruebas a Realizar
Para probarlo crear trabajo en Jenkins con los siguientes parámetros:
Al terminar buscar la IP para acceder a la máquina más adelante
Ir al Vmware ESXI y buscar las máquinas creadas
Desde el Vmware ESXI encender un cliente creado
Confirmar que se ha levantado el cliente correctamente
Modificar el cliente para que levante por EFI, para ello, desde Vmware ESXI selecciona uno de los clientes creados, click derecho:
Pasos a seguir:
Investigar tambien si se puede cargar por WIFI
Tenemos un bug que hace que hace que le estamos pasando al kernel los mismos parámetros independientemente de los atributos del cliente. Por ejemplo los parámetros de kernel del PC12 son los mismos que el PC11 (ip incluida) y oglives muestra los datos iguales.
Una solución es pasar como parámetro de entrada desde el Vagrant un array tal que así
declare -a clientes=(
"pc11:00:00:00:00:11:192.168.1.11"
"pc12:00:00:00:00:12:192.168.1.12"
)
Y luego setear los parametros del kernel
Se ha corregido unos errores al generar la plantilla del script ipxe para cada cliente donde se le debía pasarle al kernel la ip y el nombre del PC como parámetro de entrada.
Después de seguir estos pasos:
el cliente no levanta, ver captura adjunta. Trabajo de jenkins http://ognproject.evlt.uma.es:8080/jenkins/job/Deploy-devel-environment/270/console
otra cosa, la rama que hay que usar en jenkins es "ogboot-installer-jenkins" pero la rama de este PR es "ipxe-study"? ¿cómo se come eso?
Me falto incluir la rama de OGBOOT_BRANCH: "ipxe_study". Ya lo he añadido, fallo mío. Vuelve a probar
El motivo es que en la rama de Opengnsys usamos ogboot-installer-jenkins que incluye los cambios en el Vagrant para poder instalar el ogboot. Pero los cambios que hay que validar estan en la rama ipxe_study del repositorio ogboot.
y el PR de los cambios del Vagrantfile es... este? opengnsys/opengnsys#12
esos cambios tengo que revisar unos conflictos con el vagrant, por ahora dejo cerrada la PR. Utiliza esa rama "ogboot-installer-jenkins" de opengnsys para validar la rama "ipxe-study" de ogboot que es la que estamos revisando en esta PR
Bueno, tiene que haber dos PRs en tandem, uno en cada repo. Trabajar con varios repos, es lo que tiene.
Por favor, pruébalo primero y cuando lo tengas funcionando avísame.
http://ognproject.evlt.uma.es:8080/jenkins/job/Deploy-devel-environment/271/console
Se ha probado con la siguiente configuración:
Y funciona correctamente, levantando el ordenador por ipxe e iniciando ogbrowser
En el jenkins job aparece muchas veces "echoAndLog: command not found".
En
etc/mac_script.ipxe.tmpl
hayset kernelargs ip=IP_ADDRESS:192.168.2.1:192.168.2.1:255.255.255.0:HOSTNAME:eth0:none ogrepo=192.168.2.1 oglive=192.168.2.1 oglog=192.168.2.1 ogshare=192.168.2.1
. Esas direcciones IP no pueden estar puestas a capón. Dependen del entorno de cada universidad.En las plantillas, en general, es buena costumbre poner
__IP_ADDRESS__
y__HOSTNAME__
con un par de subrayados antes y después del texto a reemplazar. O con porcentajes%HOSTNAME%
. Pero sin nada, despista y queda frágil.En
installer/ogboot_installer.sh
, ¿por qué comprobar cada dependencia una por una y llamar a apt dentro de un bucle? ¿por qué no instalar todo de golpe?El propio instalador ¿debe ejecutarse como root o como usuario? Veo llamadas a sudo…
Algunas líneas tienen tabuladores y otras tienen espacios. Por favor revísalo todo y que sea consistente.
Veo que se hace
mount -t nfs ognartefactos.evlt.uma.es:/ /mnt
. Esto, ¿cuándo se desmonta? ¿queda montado? ¿y al reiniciar qué ocurre? Pero no importa, porque nadie en el mundo puede montar ognartefactos. No se puede hacer así.Considera la alternativa de usar
set -e
en lugar de andar comprobando$?
en cada paso. De hecho se suele recomendarset -euo pipefail
.En la función
generate_ipxe_script()
hay una llamada aeval
. Por favor intenta no usar eval en código nuevo.¿Qué es el archivo
tftpboot/ipxe_scripts/01-00:50:56:22:11:11
con esa MAC específica?En
tftpboot/ipxe_scripts/default.ipxe
hayset kernelargs ip=192.168.2.11:192.168.2.1:192.168.2.1:255.255.255.0:pc11:eth0:none ogrepo=192.168.2.1 oglive=192.168.2.1 oglog=192.168.2.1 ogshare=192.168.2.1
. Lo mismo que antes, esas IP no pueden estar puestas así.Los archivos binarios
tftpboot/ipxe.efi
ytftpboot/undionly.kpxe
¿hacen falta? No es buena práctica subir binarios a los repositorios de código.En el servidor veo que existe
/tmp/ipxe
. Esto ¿no habría que borrarlo al terminar de instalar ogboot?Y el ogboot propiamente dicho, ¿dónde queda instalado? No existe
/opt/ogboot
o similar.Pull request closed