HowTo: PXE-Boot (grub2) -- Ergänzungen sind möglich!

Hallo.
Eine Frage zum Wochenende, über die ich schon länger nachdenke:

Unter v6.1 war es relativ einfach möglich, den PXE-Bootvorgang so aufzubohren, dass man neben LINBO auch andere Images via PXE booten konnte. Wir hatten das immer so eingestellt, dass man damit ganz bequem über’s Netz auch diverse andere Images lokal booten konnte (z.B. auch ISOs zur Reparatur von Dateisystemen usw.). Als Anleitung hatte ich auf dem v6.1-Server immer diese Seite https://www.gtkdb.de/index_7.html verwendet. Das lief immer super und völlig unkompliziert …

Nun wurde der PXE-Bootprozess seit LINBO 2.3 ja komplett auf grub2 umgestellt. (>> „Vereinfachte Boot-Konfiguration in nur noch einer Grub-Konfigurationsdatei für lokalen und Netzwerkboot!“). Ich wüsste gerne, ob man auch mit grub2 relativ einfach den o.g. Zustand herstellen und neben LINBO auch andere Images via PXE-Boot anbieten kann? Hat das evtl. schon mal jemand ausprobiert?

Nicht falsch verstehen: Wenn es (zu) kompliziert wird, will auf keinen Fall das laufende System „gefährden“ – aber kann ja sein, dass es ähnlich einfach läuft wie zuvor?

Viele Grüße,
Michael

[Edit:]
Natürlich sollte eine Anpassung, die man möglicherweise unter /srv/linbo/boot/grub/meine-hwk.cfg machen kann, nicht vom nächsten linuxmuster-import-devices wieder überschrieben werden…!?

→ Oh, die letzte Frage ist schnell beantwortet! Das scheint einfach zu sein und so zu gehen wie immer (da sollte mittlerweile allerdings linuxmuster-import-devices und nicht mehr import_workstations stehen):

# if you don't want this file being overwritten by import_workstations remove the following line:
# ### managed by linuxmuster.net ###

Ich ergänze mal kurz selbst:

https://help.ubuntu.com/community/Grub2/ISOBoot/Examples

Hat das schon mal jemand versucht?

… und noch einen Nachtrag hinterher: Wenn man z.B. auch ein Win10 ISO über PXE-Boot anbieten könnte, wäre das im Falle einer Notfallreparatur natürlich auch super.

Nach dem, was hier steht, scheint das relativ einfach zu gehen??

Da hat sich nichts im Vergleich zu LMN6.2 geändert.

Über den Grub Loader kannst du beliebige Images booten, das sollte an und für sich funktionieren. Ausprobiert habe ich das selber aber noch nie, ist eher eine Bastelei und steht nicht im Aufwand Nutzen Verhältnis. Mit einem USB Stick ist man da wesentlich schneller.

Allerdings ist es eine nette Bastelei. Persönlich ausprobiert habe ich das Booten der Windows CD via PXE auch noch nicht. Denkbar wäre auch nicht die gesamte CD sondern nur die Windows PE Umgebung zu booten.

Hallo Andreas,
na ja – das hängt sehr davon, welche Images man da anbietet. Wenn man immer 5-6 USB-Sticks passend in der Tasche hat, mag es ja stimmen, dass man mit einem Stick schneller ist. Nicht aber, wenn man zu irgendeinem Rechner gerufen wird und dort am besten innerhalb von 10 Sekunden irgendein Problem lösen soll. Da sind diverse ISOs, die über PXE booten, uU schon mal die Rettung in der Not.

Wir sind ja direkt von v6.1 auf v7 gesprungen – und dazwischen gab es die o.g. Änderung, denke ich. Wenn man die Liste der „Good to Know DB“ durchblättert, stellt man ja schnell fest, dass es da so einige Perlen gibt, die einem das Leben erleichtern können – und sei es nur die SuperGrub2Disk …

Viele Grüße,
Michael

Hi.
Ich habe mich der Sache heute nochmal angenommen … und siehe da: Es funktioniert! Jetzt kann ich über ein GRUB2-Menu diese drei Distributionen via PXE booten:

  • Clonezilla
  • GRML
  • GParted

Vorgehensweise:
1.) neue VM erzeugt und in eine neue HWK gepackt. Dadurch wurde eine leere start.conf.none erzeugt, die ich problemlos kaputt editieren konnte :slight_smile:. Also konkret: cd /srv/linbo und dort ein Eintrag wie dieser in die devices.csv:
serverraum;LINBO-ISO;none;<MAC-Adresse>;<IP-Adresse>;---;---;;iponly;---;1;;;;LINBO-ISO-BOOT;;

1b.) linuxmuster-import-devices laufen lassen!

2.) cd /srv/linbo/boot/grub/ und neue HWK aus dem linuxmuster-Management herausgenommen, indem man wie üblich setzt:
# ### NOT managed by linuxmuster.net -- TEST ISO BOOT ###

und direkt darunter:

# edit to your needs  
set default=1
set timeout=2
set fallback=1

3.) Verzeichnis angelegt:
cd /srv/linbo/ und dort: mkdir pxeboot

4.) aktuelle ISO-Files dorthin kopiert und vollständig entpackt (das Mounten des (loop) hat hier nicht funktioniert!):

drwxr-xr-x  9 root root      4096 Jun 25 14:45 clonezilla-live/
drwxr-xr-x  8 root root      4096 Jun 25 16:12 gparted-live/
drwxr-xr-x  7 root root      4096 Jun 25 15:42 grml-live/
drwxr-xr-x  2 root root      4096 Jun 25 16:14 iso/  (nur zum Download -- hinterher wieder gelöscht)

5.) neue Menu-Einträge angelegt so wie hier:
cd /srv/linbo/boot/grubmcedit none.cfg:

menuentry 'GParted (PXE-Boot)' {
 if [ -e "$linbo_kernel" -a -e "$linbo_initrd" ]; then
  set bootflag=localboot
 elif [ -n "$pxe_default_server" ]; then
  set root="(tftp)"
  set bootflag=netboot
  set path=(tftp)/pxeboot/gparted-live/live
 fi
 if [ -n "$bootflag" ]; then
  echo
  echo -n "Loading GParted via PXE..."
  linux $path/vmlinuz boot=live config components union=overlay username=user noswap noeject gfxpayload=1024x768x32,1024x768 fetch=tftp://10.16.1.1/pxeboot/gparted-live/live/filesystem.squashfs
  initrd $path/initrd.img
  boot
fi
}

menuentry 'Clonezilla (PXE-Boot)' --class os {
 if [ -e "$linbo_kernel" -a -e "$linbo_initrd" ]; then
  set bootflag=localboot
 elif [ -n "$pxe_default_server" ]; then
  set root="(tftp)"
  set bootflag=netboot
  set path=(tftp)/pxeboot/clonezilla-live/live
 fi
 if [ -n "$bootflag" ]; then
  echo
  echo -n "Loading Clonezilla via PXE..."
  linux $path/vmlinuz boot=live config locales=de_DE.UTF-8 keyboard-layouts=de ocs_prerun="dhclient" noswap edd=on nomodeset noprompt nosplash ocs_live_run="/usr/sbin/ocs-sr -um beginner -q2 -j2 -z1p -sc -p poweroff ask_user" ocs_live_extra_param="" ocs_live_batch=no ocs_netlink_timeout=5 fetch=tftp://10.16.1.1/pxeboot/clonezilla-live/live/filesystem.squashfs
  initrd $path/initrd.img
  boot
 fi
}

menuentry 'GRML (PXE-Boot)' --class os {
 if [ -e "$linbo_kernel" -a -e "$linbo_initrd" ]; then
  set bootflag=localboot
 elif [ -n "$pxe_default_server" ]; then
  set root="(tftp)"
  set bootflag=netboot
  set path=(tftp)/pxeboot/grml-live/boot/grml64full
 fi
 if [ -n "$bootflag" ]; then
  echo
  echo -n "Loading GRML via PXE..."
  linux $path/vmlinuz live-media-path=(tftp)/pxeboot/grml-live/live/grml64-full/ boot=live apm=power-off nomce noswap noprompt noeject fetch=tftp://10.16.1.1/pxeboot/grml-live/live/grml64-full/grml64-full.squashfs
  initrd $path/initrd.img
  boot
fi
}

6.) VM einschalten – grub2-Menu erscheint und die Auswahl ermöglicht das Booten der drei genannten Distributionen direkt über PXE. Da das ganze nun funktioniert, wäre der nächste Schritt, auch ein Win10.iso auf diese Weise zur Verfügung zu stellen… aber für heute ist’s genug.

7.) Vielleicht kann das ja jemand gebrauchen?

Viele Grüße,
Michael

2 „Gefällt mir“

Zur Feier des Tages folgt hier noch der Eintrag für den Win10-Boot-Loader.

Es hat mich zwar zig Versuche gekostet – aber jetzt bootet auch der Boot-Loader von Win10 über PXE. Das ist enorm hilfreich, wenn man einen abgeschossenen Rechner reparieren muss … neuere Modelle haben uU ja noch nicht mal mehr ein DVD-Laufwerk.

Also zur Vorgehensweise:
1.) Von einer Win10-DVD diese Dateien auf den Server in das oben angelegte Verzeichnis pxeboot --> win10-loader kopieren:

bcd --> boot/bcd
boot.sdi --> boot/bcd
boot.wim --> sources/boot.wim

2.) Von der Seite iPXE - open source boot firmware [wimboot] eine aktuelle Version von wimboot besorgen und ebenfalls auf den Server packen:
/srv/linbo/pxeboot/win10-loader/wimboot

3.) Die Struktur auf dem Server sieht dann so aus:


win10-loader/
├── boot
│   ├── bcd
│   └── boot.sdi
├── sources
│   └── boot.wim
└── wimboot

2 directories, 4 files

4.) Die o.g. Datei none.cfg unter linbo/boot/grub/none.cfg editieren und diesen neuen Menüeintrag ergänzen:

menuentry 'Win10 Boot Loader (PXE-Boot)' --class os {
 if [ -e "$linbo_kernel" -a -e "$linbo_initrd" ]; then
  set bootflag=localboot
 elif [ -n "$pxe_default_server" ]; then
  set root="(tftp)"
  set bootflag=netboot
  set path=(tftp)/pxeboot/win10-loader
 fi
 if [ -n "$bootflag" ]; then
  echo
  echo -n "Loading Win10 via PXE..."
  linux16 $path/wimboot gui
  initrd16 newc:bcd:$path/boot/bcd newc:boot.sdi:$path/boot/boot.sdi newc:boot.wim:$path/sources/boot.wim
  boot
fi
}

5.) Die Win10-Reparaturkonsole startet nun in unter 30 Sekunden! :star_struck:

6.) Ergänzung und Einschränkung: Diese Methode funktioniert nur, wenn der Rechner „legacy“ booten kann! Bei UEFI-Boot muss man etwas anders vorgehen. Soll angeblich aber auch machbar sein…

7.) Wer das gebrauchen kann: :heart: hier lassen und :slight_smile:

Viele Grüße,
Michael

4 „Gefällt mir“

Hallo Michael,

auch wenn ich es erst mal nicht brauche :heart: und :slightly_smiling_face: und Danke!

Gruß

Alois

Brainstorming – nach dem gleichen Schema funktionieren auch:

  • memtest86+
menuentry 'Memtest86+ (PXE-Boot)' --class os {
 if [ -e "$linbo_kernel" -a -e "$linbo_initrd" ]; then
  set bootflag=localboot
 elif [ -n "$pxe_default_server" ]; then
  set root="(tftp)"
  set bootflag=netboot
  set path=(tftp)/pxeboot/memtest
 fi
 if [ -n "$bootflag" ]; then
  echo
  echo -n "Loading Memtest86+ via PXE..."
  linux16 $path/memtest86+.bin
  boot
fi
}

und

menuentry 'Rescatux (PXE-Boot)' --class os {
 if [ -e "$linbo_kernel" -a -e "$linbo_initrd" ]; then
  set bootflag=localboot
 elif [ -n "$pxe_default_server" ]; then
  set root="(tftp)"
  set bootflag=netboot
  set path=(tftp)/pxeboot/rescatux/live
 fi
 if [ -n "$bootflag" ]; then
  echo
  echo -n "Loading Rescatux via PXE..."
  linux16 $path/vmlinuz1 live-media-path=(tftp)/pxeboot/rescatux/live/ boot=live apm=power-off nomce noswap noprompt noeject fetch=tftp://10.16.1.1/pxeboot/rescatux/live/filesystem.squashfs
  initrd16 $path/initrd1.img
  boot
fi
}

Damit hat man einen schönen Werkzeugkasten in der Hinterhand, wenn es irgendwo klemmt … es gibt auch diese Rettungs-CD für Win10 von der c’t. Da wird eine WinPE-Umgebung gebootet. Das wäre als Sahnehäubchen per PXE auch noch ganz schick…