PreBootLoader

Die erstellte PreBoot-Umgebung muss dann via geeignetem Boot-Loader/Device gestartet werden können. Hierzu kommt der Einbau in bestehende Boot-Loader (ntldr, bootmgr, grub, ...) in Frage, die Erstellung von Boot-ISOs oder der Start vom USB-Stick in verschiedenen Konfigurationen.

Einbau in bestehende Boot-Loader (ntldr, bootmgr, grub, ...)

In einigen Fällen wird man kein Boot-ISO erstellen wollen, sondern die Dateien auf anderem Wege booten.

  • Via Windows XP ntldr mittels grub4dos booten oder den Bootsektor mit
    dd if=/dev/sda1 of=/mnt/windowspartition/bootsect.lin bs=512 count=1
    in eine Datei schreiben. Im ersten Fall erweitert man die boot.ini um eine Zeile
    c:\grldr="Starte grub4dos"
    , im zweiten um eine Zeile
    c:\bootsect.lin="Linux"
  • Via Windows Vista bootmgr kann auch grub4dos verwendet werden:
       bcdedit /create /d "Starte grub4dos" /application bootsector
       bcdedit /set {id} device boot
       bcdedit /set {id} path \grldr.mbr
       bcdedit /displayorder {id} /addlast
    
  • Via Linux GRUB ...

Erzeugen eines boot-fähigen USB-Sticks

Es gibt die Variante bestehende FAT-Formatierungen beizubehalten oder einzurichten oder alternativ auch mit Ext2/3 zu arbeiten. Im Fall eines FAT-USB-Sticks müssen eigentlich keine Repartitionierungen und Neuerstellungen des MBR erfolgen. Hier ist lediglich dafür Sorge zu tragen, dass der Syslinux-MBR installiert und die Partition "bootbar" markiert wurde ...

Als Device geeignet sind klassische USB-Sticks oder USB-Adapter. Wobei je nach Alter in letzteren nur SD- und CF-Cards funktionieren. Auf neueren Maschinen, wie dem ASUS Pundit oder der Eee-Box funktioniert sogar der Boot von einem Memory-Stick.

FAT USB-Stick

Generell liegen die Syslinux-Komponenten unterhalb von boot-env/syslinux im OpenSLX-Paket. Andernfalls benötigte Pakete:

  • syslinux
  • mtools
  • mbr (braucht man nicht unbedingt, da bei Syslinux einer dabei ist ...)

Erstellen des USB's:

  • Vorsichtshalber mal den alten MBR Löschen:
    dd if=/dev/zero of=/dev/sdX bs=1M count=1

Danach vorgehen wie folgt (jeweils immer mit return bestätigen):
D (löscht bestehende Partitionen)
N (erstellt eine Partition)
p (erstellt eine primäre Partition)
1 (legt diese als erste Partition fest)
return um die Eingaben zu bestätigen
Danach muss die Partitionsgröße festlegt werden (return - benutzt kompletten freien Speicher)
A (setzt das Bootflag der Partition)
1 (erste Partion auswählen)
T (ändert Standardeinstellung des Dateisystems)
6 (FAT16)
W (schreibt Änderungen auf den USB-Stick und beendet die Partitionierung)

  • Auf FAT 16 formatieren ("PreBootUSB" ist der Name des USB-Sticks und kann somit frei gewählt werden):
    sudo mkfs.vfat -F 16 -n PreBootUSB /dev/sdX1
  • Neuen Bootsektor installieren:
     install-mbr /dev/sdX
     # alternativ ohne das mbr Paket
     dd if=mbr/mbr.bin of=/dev/sdX # cat mbr/mbr.bin > /dev/sdX
     
  • Syslinux installieren (Die s-Option sollte man wirklich nur verwenden, wenn es sonst nicht geht - da sonst ziemlich langsam wegen Kompatibilitätsmode.):
    syslinux [-o directory/on-sdXN] -f[s] /dev/sdX1
  • Zur Sicherheit: sync
  • Mounten
  • vmlinuz, initramfs, menu.c32 darauf kopieren (sind alles einzelne Dateien)
  • Speziell angepasstes syslinux.cfg darauf kopieren:
    TIMEOUT 100
    PROMPT 0
    DEFAULT menu.c32
    
    MENU TITLE Welcome to OpenSLX PreBoot USB FAT (Mini Linux/Kexec)
    LABEL SLXSTDBOOT
      MENU LABEL OpenSLX PreBoot - Stateless Netboot Linux ...
      KERNEL vmlinuz
      APPEND initrd=initramfs vga=0x317
      TEXT HELP
             Use this (default) entry if you have configured your client.
             You have chance to edit the kernel commandline by hitting the
             TAB key (e.g. for adding debug=3 to it for bug hunting) ...
      ENDTEXT
    
    LABEL LOCALBOOT
      MENU LABEL LOCALBOOT
      LOCALBOOT -1
      TEXT HELP
             Gets you out of here by booting from next device in BIOS boot
             order.
      ENDTEXT
    
  • Jedes "LABEL" muss ein "MENU LABEL" besitzen
  • Fehler in syslinux.cfg führen zu unlesbarer Anzeige beim Booten
  • Unmounten und fertig
  • Bei Problemen: Den Vorgang wiederholen. Darauf achten, dass die erste Partition vorne beginnt (Sektor 1). Ebenso überprüfen, ob sie als bootbar markiert ist. Leider funktionieren insbesondere Multi-Card-Reader nicht an allen Geräten.

Partitionierter USB-Stick

Eine Alternative könnte ein partitionierter/reiner Ext2/3 USB darstellen, wo die OpenSLX-Boot-Funktionalität auf einer eigenen Linux-Partition untergebracht wird. Dazu (re)partitioniert man das Teil mit den entsprechenden Partitionen. Dabei spielt es keine Rolle, ob die Ext2/3 Partition die erste ist. Dieses liesse sich mit dem Gedanken des User-Homes auf USB-Stick kombinieren. Ebenso könnte in der Ext2/3 Partition die Konfiguration des Clients abgelegt sein.

  • Schreiben des MBR (ins Haupt-Device - unkritisch, der Stick ist danach noch in jedem Fall nutzbar!)
     cat mbr/mbr.bin > /dev/sdX
     
  • Formatieren der Ext2/3 Partition
     mkfs.ext3 /dev/sdXN
     
  • Mounten der Ext2/3 Partition, z.B. nach /mnt, Unterverzeichnis für Boot-Geraffel anlegen bei Bedarf (z.B. boot/)
  • Extlinux installieren:
    extlinux -i /mnt/boot
    (-z für ZIP-Geometrie, -U für Update)
  • Die Dateien vmlinuz, initramfs menu.c32 drauf kopieren (nach boot/)
  • Speziell angepasstes extlinux.conf drauf kopieren:
    TIMEOUT 100
    PROMPT 0
    DEFAULT menu.c32
    
    MENU TITLE Welcome to OpenSLX PreBoot USB Ext2/3 (Mini Linux/Kexec)
    LABEL SLXSTDBOOT
      MENU LABEL OpenSLX PreBoot - Stateless Netboot Linux ...
      KERNEL vmlinuz
      APPEND initrd=initramfs vga=0x317
      TEXT HELP
             Use this (default) entry if you have configured your client.
             You have chance to edit the kernel commandline by hitting the
             TAB key (e.g. for adding debug=3 to it for bug hunting) ...
      ENDTEXT
    
    LABEL LOCALBOOT
      MENU LABEL LOCALBOOT
      LOCALBOOT -1
      TEXT HELP
             Gets you out of here by booting from next device in BIOS boot
             order.
      ENDTEXT