PXElinux und Client-Konfiguration

Der Startvorgang eines Clients bis zu und in Stage3 ist stark mit TFTP verknüpft. Die Initialdaten (PXE-Linux und das Menüsystem) sowie die Client-Konfiguration werden mittels dieses Protokolls geholt.

Allgemeines zu PXElinux

Die wichtigsten Dateien von PXElinux (Teilprojekt von HPAs Syslinux) sind pxelinux.0 (ein ausführbares Binary) und das Unterverzeichnis pxelinux.cfg (die Lage dieses Verzeichnisses kann mit slxsettings festgelegt werden). Die Dateien bzw. Verzeichnisse sollten vom TFTP-Server erreicht werden können. pxelinux.0 sollte in den meisten Fällen als Boot-File in der dhcpd.conf definiert sein. Um das Menü darstellen zu können benötigt man dann noch die Datei menu.c32 soll es graphisch sein dann vesamenu.c32.

Eine pxelinux.cfg/default könnte beispielsweise so aussehen:

DEFAULT menu.c32
PROMPT 0
NOESCAPE 1
TIMEOUT 100
TOTALTIMEOUT 3000
ONTIMEOUT shutdown

#MENU MASTER PASSWD secret
MENU PASSPROMPT Gesicherter Bereich, bitte Passwort eingeben:
MENU AUTOBOOT Auswahl startet in # Sekunden

MENU TITLE OpenSLX - Hauptmenü

#####
LABEL shutdown
    MENU HIDE     # verstecke Eintrag
    KERNEL kernel-shutdown
    APPEND initrd=initramfs-shutdown quiet
LABEL -
    MENU LABEL Bitte wählen Sie über die Pfeiltasten aus:
    MENU DISABLE
LABEL +
    MENU LABEL ++++++++++++++++++++++++++++
    MENU DISABLE  # deaktiviere Eintrag
MENU SEPARATOR    # Leerzeile
#####

LABEL openslx-suse-10.2-main:nfs
    MENU DEFAULT
    MENU LABEL ^SUSE-10.2-main nfs
    KERNEL suse-10.2-main/vmlinuz-2.6.18.8-0.5-default
    APPEND initrd=suse-10.2-main/initramfs-1 vga=791 quiet
    IPAPPEND 3    # IPAPPEND 3 schreibt die MAC-Adresse der
                  # bootenden Netzwerkkarte in die Kernel Commandline

LABEL openslx-suse-10.2-main:sqfs-nbd
    MENU LABEL SUSE-10.2-main           sqfs-^nbd
    TEXT HELP # Bereich benutzen: Reihe 10 - 69
         Hier kann ein Hilfeintrag stehen welcher z.B. die Besonder-
         heit einer Umgebung beschreibt. Es sind mehrere Zeilen
         moeglich (6). Bitte Bereich Reihe 10 - 69 verwenden.
         Zeilen:
         5                                                Zeilenende>
         6
    ENDTEXT
    KERNEL suse-10.2-main/vmlinuz-2.6.18.8-0.5-default
    APPEND initrd=suse-10.2-main/initramfs-2 vga=791 debug=3
    IPAPPEND 3

LABEL hauptmenu
    MENU LABEL SLX ^Hauptmenü
    KERNEL vesamenu.c32
    APPEND pxelinux.cfg/someotherconf

PXElinux und OpenSLX

Die PXE-Menüstruktur wird durch den slxconfig-demuxer erzeugt. Der Admin kann über slxsettings das Aussehen und Verhalten des Menüs steuern.

...
        pxe-passwd='secret'
        pxe-timeout='100'
        pxe-title='Welcome to OpenSLX'
        pxe-totaltimeout='600'
        syslinux-theme='openslx'

Weitere Möglichkeiten der Manipulation des Menüs bestehen durch Änderung der Dateien /etc/opt/openslx/boot-env/syslinux/pxemenu-include und pxemenu-bottom. Erste wird direkt nach MENU TITLE und vor den durch Demuxer eingetragenen Systemen eingefügt. Zweite wird an das Ende des Menüs angehängt. Während die Erste sich auch für PXElinux-Konfigurationen eignet, sollten in der Zweiten nur noch Systeme und weiterführende Menüs eingetragen werden. Diese können natürlich auch in die Erste eingetragen werden. Zur Struktur des Menüs siehe source:/openslx/trunk/boot-env/syslinux/README.pxe. Beispiele für pxemenu-include: source:/openslx/trunk/boot-env/syslinux/pxemenu-include.example pxemenu-bottom: source:/openslx/trunk/boot-env/syslinux/pxemenu-bottom.example.

Über slxconfig change-system <system-name> kann das Attribut kernel_params angepasst werden, welches Einträge, wie quiet vga=0x317 für Bootsplash enthalten kann.

Reihenfolge und Aussehen der Bootmenüeinträge

Per Default trägt ist für den Menü-Namen im PXE der Systemname angegeben (beispielsweise "suse-11.0-clone::nfs"). Dieser Eintrag kann durch ein Verändern des Attributs label umgestellt werden. Eine Beschreibung des gerade angewählten Boot-Images (die unterhalb des Menü-Fensters eingeblendet wird), kann man mit:

slxconfig change-system suse-11.0-clone::nfs label="OpenSuSE 11.0 - Stateless / NFS -" 
slxconfig change-system suse-11.0-clone::nfs description="Boots the OpenSuSE 11.0 distro over the net" 

eintragen.

Anmerkungen zur Boot-Reihenfolge fehlen noch ...

Theming

Mit slxsettings kann ein Theme definiert werden. Das Theme sollte dabei unterhalb von /etc/opt/openslx/boot-env/syslinux/themes liegen. Standardmäßig wird openslx verwendet. Das Theme Besteht aus einer Datei theme.conf und optional einem Bild. In der Datei theme.conf sollte nur das aussehen definiert werden. Für andere Definitionen existiert slxsettings und pxemenu-include s.o. Beispiel theme.conf: source:/openslx/trunk/boot-env/syslinux/themes/openslx/theme.conf
Aussehen siehe Anhänge unten.

Shutdown-Eintrag

Ein Rechner kann auf 3 Arten über das PXE-Menü herunter gefahren werden:

  • Sichtbar im Menü und über Auswahl (PC fährt über auswahl des Labels herunter):
LABEL shutdown
    MENU LABEL Rechner ^ausschalten
    KERNEL kernel-shutdown
    APPEND initrd=initramfs-shutdown quiet
  • Unsichtbar im Menü über ONTIMEOUT (Rechner fährt nach angegebener Zeit und keiner Auswahl herunter):
TIMEOUT 100
TOTALTIMEOUT 3000
ONTIMEOUT shutdown

LABEL shutdown
    MENU HIDE     # verstecke Eintrag
    KERNEL kernel-shutdown
    APPEND initrd=initramfs-shutdown quiet

Diese beiden Versionen verwenden eine spezielle (kleine) InitRD und einen speziellen (kleinen) Kernel. Diese befinden sich im SVN. Ein PC kann jedoch auch mit jedem anderen Kernel und einer Standard-SLX-InitRD ausgeschaltet werden. Der einzige Nachteil hierbei ist, dass das herunterfahren ein paar Sekunden dauert (ca. 3), und die Benutzer noch den Anfang des Boots sehen:

  • Nach ONTIMEOUT über zusätzliche APPEND-Option (shutdown):
TIMEOUT 100
TOTALTIMEOUT 3000
ONTIMEOUT sopenslx-suse-10.2-main:nfs shutdown # zusätzliche Option shutdown fährt Rechner herunter

LABEL openslx-suse-10.2-main:nfs
    MENU DEFAULT
    MENU LABEL ^SUSE-10.2-main nfs
    KERNEL suse-10.2-main/vmlinuz-2.6.18.8-0.5-default
    APPEND initrd=suse-10.2-main/initramfs-1 vga=791 quiet
    IPAPPEND 3

TFTP-Einstellung

Dem Beispiel liegt die folgende TFTP-Konfiguration zugrunde: Als TFTP-Root, das ist das Verzeichnis, welches der TFTP-Server als oberste Ebene (aus Sicherheitsgründen, damit man nicht einfach auf das Dateisystem des Servers unbeschränkt zugreifen kann) annimmt, sei (/srv/openslx)/tftpboot festgelegt. Dieses ist der Default bei den meisten TFT-Konfigurationen. Da der in.tftpd üblicherweise mittels xinetd gestartet wird, erfolgt seine Konfiguration in dessen Zusammenhang (je nach Distribution, bei SuSE beispielsweise in /etc/xinetd.d/tftp):

service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s (/srv/openslx)/tftpboot
        disable                 = yes
}

Mit dieser Festlegung des TFTP-Roots beziehen sich alle Pfadangaben aus Clientsicht auf die Ebene unterhalb von /tftpboot. Die vorgenommenen Einstellungen für das Verzeichnis müssen dabei zu den Einstellungen des DHCP-Servers passen. Die DHCP-Server-Variable filename sollte dann auf (/tftpboot/)pxe/pxelinux.0 lauten. Das Prefix /tftpboot kann man mit angeben, ist aber wegen der TFTP-Root-Einstellung nicht notwendig. So sieht in einer typischen SLX-Installation dieses Verzeichnis aus:

tftpboot/client-config
tftpboot/client-config/suse-11.0-x60:sqfs-nbd
tftpboot/client-config/suse-11.0-x60:sqfs-nbd/01-<MAC>.tgz
tftpboot/client-config/suse-11.0-x60:sqfs-nbd/default.tgz
tftpboot/client-config/<system>/...
tftpboot/
tftpboot/vesamenu.c32
tftpboot/pxelinux.0
tftpboot/suse-11.0-clone
tftpboot/suse-11.0-clone/initramfs-1
tftpboot/suse-11.0-clone/vmlinuz
tftpboot/<vendor-os>/...
tftpboot/...

Alle Dateien müssen vom TFTP-Server erreicht werden können, so dass eine Ablage unterhalb eines gemeinsamen TFTP-Roots, beispielsweise /tftpboot notwendig ist. Zusätzliche Dateien (die von pxelinux.0 beschafft werden), wie vesamenu.32 etc. müssen auf derselben Ebene liegen, wie pxelinux.0 selbst, wenn nicht explizit ein anderer Pfad angegeben wurde. Wichtig ist, dass kein Kernel mit *.0 endet, da er sonst als PXE-Binary erkannt und behandelt werden würde.

Für den Gesamtüberblick der SLX-Verzeichnisstruktur, siehe BootRootVerzeichnisse.

snapshot-pxe1.png - So könnte das PXElinux-Menü aussehen (s. Beispiel: /pxelinux.cfg/default) (26.2 kB) mj0, 09/11/2007 10:59 pm

snapshot-pxe2.png - Der Text der innerhalb von ' TEXT HELP' steht (s. Beispiel: /pxelinux.cfg/default) (28 kB) mj0, 09/11/2007 11:00 pm

snapshot-pxe3.png - Passwortfeld (s. Beispiel: /pxelinux.cfg/default) (27 kB) mj0, 09/11/2007 11:01 pm