wiki:PXEMenuGenerator

Generació per PHP del Menú de PXE

Requeriments

La generació del menú d'arrencada per a iPXE es genera amb un fitxer PHP que busca les diferents imatges de client disponibles i afig una entrada en el menú PXE per cadascuna d'elles. Aquest mateix script, fins la versió 1.3.11 de lmd-server inclou les entrades per arrencar des del disc dur o habilitar la instal·lació per xarxa.

Donat que es requereixen nous mètodes d'arranc (p. ex. arrencar una ISO), cal algun mecanisme que possibilite la inclusió de noves entrades al menú de PXE de manera independent al paquet lmd-server.

Solució proposada

La solució consistirà en disposar d'un nou directori a www-boot (pxemenu.d) que continga diferents scripts ordenats (a l'estil de runparts), i que aquests siguen inclosos dins del menu.php. Amb el mateix que hi havia a la versió 1.3.11 del lmd-server, aquesta estructura quedaria així:

.
├── bootcfg.php
├── boot.php
├── menu.c32
├── menu.ipxe
├── menu.php
├── pxemenu.d
│   ├── 80-bootfromharddisk.php
│   └── 90-netinstall.php
└── vesamenu.c32

I els canvis realitzats al menú.php consisteixen en eliminar la generació de les línies per arrencar des del disc dur i habilitar la instal·lació per xarxa, i afegir el següent codi:

// Include all files in pxemenu.d menu

foreach (glob("pxemenu.d/*.php") as $filename)
{
    include $filename;
}

Com veiem, dins aquest directori hi ha dos fitxers php (80-bootfromharddisk.php i 90-netinstall.php) que fan la funcionalitat corresponent.

Estat de l'art

La versió 1.3.12 de lmd-server per a Platinum (disponible a https://launchpad.net/~llxdev/+archive/ubuntu/test-ltsp) inclou aquests canvis.

A partir de Trusty, se separarà la funcionalitat de lmd-server i del generador del menú de PXE en paquets diferents, per facilitar la seua escalabilitat.

Com afegir noves entrades al menú?

Haurem de generar nous fitxers .php dins el directori pxemenu.d, amb el nom <prioritat>-<nom_del_script>.php, sent la prioritat un número entre 1 i 100. Els scripts s'escriuran en PHP i escriuran les entrades al menú amb echos. Com a exemple podem agafar qualsevol dels dos scripts que ja hi ha dins d'aquets directori, per exemple, el pxemenu.d/80-bootfromharddisk.php:

<?php
     
// Checking Boot from disk

echo "LABEL HD\n";
echo "MENU LABEL Arranca des del disc dur\n";
if ($default_boot=="boot-from-hd") echo "MENU default\n";
echo "KERNEL chain.c32\n";
echo "APPEND hd0 0\n";

?>

Fase de pruebas

  • Angel lo prueba y funciona en:
    • Colegio y Maquinas virtuales.

Anotacions addicionals: Seqüència per a la generació del menú

Quan un client arranca, realitza una petició DHCP que és resposta per DNSMASQ des del servidor. El LlxBootManager? té una configuració per a DNSMASQ al fitxer /etc/dnsmasq.d/llxbootmanager.conf:

En ressum, la seqüència és la següent:

     Client                            Servidor
       |                                  |
   DHCP Request ------------------------> |
       |                                  |
       |                      DHCP Response (IP) [DNSMASQ]
       | <--------------------Boot File: /llxbootmanager/bootstrap.ipxe
       |                                 (/var/www/ipxeboot/pxe/boot/bootstrap.ipxe)
       |                      TFTP ROOT: /var/lib/tftpboot
       |                                  |           
       |                                  |
request boot.php {+params} -------------->|
       |                                  |
       |                               boot.php
       |                                  |--> bootcfg.php (+params)
       |                                             |--> menu.php (+params)
       |                                             |    (include boots in pxemenu.d)
       |                                             |
       |<--------------------------------------- PXE MENU
Last modified 22 months ago Last modified on Oct 30, 2015, 10:08:57 AM