wiki:AdminPxe
close Warning: Can't synchronize with repository "keplertools" (/srv/svn/keplertools does not appear to be a Subversion repository.). Look in the Trac log for more information.

Version 9 (modified by bau, 11 years ago) ( diff )

--

PXE - Boot

Grundlagen: Vorgehensweise der Musterlösung

Die Musterlösung sieht die Vergabe der IP vom ISC-DHCP-Server auf dem zentralen Server vor. In der Datei /etc/linuxmuster/workstations stehen Zeilen der Form

 Raum;Rechnername;Imagegruppe;MAC;IP;Subnetzmaske;NB;NB;NB;NB;[0|22]

Steht am Ende eine 0, so wird der Rechner aufgenommen aber nicht mit einem Bootimage versehen (z.B. Laptops), bei 22 erhält er zusätzlich ein Linbo-Image. Ab sofort erhält der Host per DHCP Daten des paedml (DNS: paedml. Gateway: ipcop) und kann die Dienste des paedml verwenden, da er in der Firewall aufgenommen wurde.

Erweiterung am KG

Durch Anpassung des scripts /usr/sbin/import_workstations (siehe ​http://paedml.kg-fds.de/trac/wiki/PaedmlAnpassungen) kann an der letzten Stelle auch R (Rembo) stehen, dann wird der Rechner aufgenommen und als Rembo-Host verwendet (bootet dann von rembo).

Die dynamsiche Vergabe von IP-Leases haben wir ausgelagert in die dnsmasq auf den ltspX und auf dem rembo. Diese sind in der Lage, PXE-Bootmenus auszugeben. Auf dem paedml wurden dafür der isc-dhcp durch den dnsmasq ersetzt. Dieser vergibt nun wie die ltspX die vorgesehene IP, die in der Datei /etc/linuxmuster/clients/clients vorgesehen ist.

Boot-Menu mit dnsmasq

dnsmasq läuft auf allen ltsp-Servern und präsentiert den Clients ein Bootmenu (je nach ltsp unterschiedlich), nach 5 Sekunden wird der erste Eintrag gestartet:

pxe-prompt="Bitte waehlen ([F8] druecken):",5
pxe-service=x86PC,PXE von ltsp1,/ltsp/i386/pxelinux,10.32.2.1
pxe-service=x86PC,PXE von ltsp2,/ltsp/i386/pxelinux,10.32.2.2
pxe-service=x86PC,PXE von ltsp3,/ltsp/i386/pxelinux,10.32.2.3
pxe-service=x86PC,PXE von ltsp4,/ltsp/i386/pxelinux,10.32.2.4
pxe-service=x86PC,PXE von ltsp5,/ltsp/i386/pxelinux,10.32.2.5
pxe-service=x86PC,PXE von ltsp6,/ltsp/i386/pxelinux,10.32.2.6
pxe-service=x86PC,PXE von ltsp7,/ltsp/i386/pxelinux,10.32.2.7


pxe-service=x86PC,"Booten von Platte (wenn vorhanden)"
pxe-service=x86PC,"Linbo",pxelinux,10.32.1.1
pxe-service=x86PC,"Rembo",15,10.32.1.252

Weiterleitung an TFTBoot / pxelinux

Nach Auswahl der Bootoption wird der Client an den TFTP des ausgewählten Servers weitergeleitet und sucht dort die Datei /ltsp/i386/pxelinux.0, die in der Lage ist, einen Kernel zu booten. Auf den LTSP liegt dieses unter /var/lib/tftpboot/ltsp/i386/, auf dem paedml unter /etc/linuxmuster/. pxelinux liest nun die Konfiguration aus dem pxelinux.cfg-Verzeichnis nach einem Schema (siehe ​http://www.syslinux.org/wiki/index.php/PXELINUX). Auf den ltsp-Servern gibt es unter /var/lib/tftpboot/ltsp/i386/pxelinux.cfg für jeden ltsp eine eigene Config-Datei, die entsprechend dem Server nach default gelinkt ist. Das war nötig, da der dnsmasq zwar dem Client den Bootserver mitteilt, dieser auch korrekt vom Server bootet, anschließend aber nicht vom angesprochenen Server, sondern von dem Server, von dem er seine IP bekommen hat. In der Config 0A (wegen der IP der Clients, diese fängt mit 10. an / default wird vom Clientumgebungserzeugungsscript jedesmal geändert) muss die APPEND-Zeile den zu bootenden Server beinhalten:

append ro initrd=initrd.img nbdroot=10.32.2.6:/opt/ltsp/i386 root=/dev/nbd0 init=/sbin/init-ltsp quiet splash plymouth:force-splash vt.handoff=7

Damit bootet der Client vom ausgewählten Boot-ITEM korrekt.

Scripte

Die Musterlösung sammelt alle Clients (aufgenommene Laptops [0], LinboClients [22], RemboClients [R]) in der Datei /etc/linuxmuster/workstations, für die LTSP-Clients habe ich unter /etc/dhcp3/ltsp_config die Datei ltspclients angelegt, dort werden die Clients wie folgt abgelegt:

  LTSP-Server;MAC;Name;Bemerkung

Das Script /etc/dhcp3/ltsp_config/make_config.php (Aufruf: php make_config.php) macht daraus die Konfiguration für die dnsmasq-Server auf ltspX, paedml und rembo:

  • Im Unterverzeichnis clients
  • In den Unterverzeichnissen ltspX
    • ltspX.conf
      • hier wird vom Script eine für den ltsp-dnsmasq angpasste Config erzeugt
  • Im Unterverzeichnis paedml
    • paedml.conf (diese wird nicht vom Script bearbeitet)

Das Script vergibt bei der Erstellung der Config aufsteigende IP:

  • ltsp1 - 10.32.201.1-255
  • ltsp2 - 10.32.202.1-255
  • ltsp3 - 10.32.203.1-255
  • ltsp4 - 10.32.204.1-255
  • ltsp5 - 10.32.205.1-255
  • ltsp6 - 10.32.206.1-255
  • ltsp7 - 10.32.207.1-255
  • ltsp7 - 10.32.208.1-255
  • paedml - vergibt keine leases
  • proxys - vergibt keine leases / macht nur DNS

Die nicht statisch verwendeten IP werden dynamisch an unbekannte Clients vergeben. Dabei erhält der Client von allen Servern Angebote, der Client wird das schnellste Angebot verwenden. Bei Ausfall eines DHCP-Servers würden so die Clients immernoch ihre IP bekommen. Alle aufgenommenen Clients bekommen von allen dnsmasq-Servern das jeweils gleiche Angebot - fällt ein dnsmasq aus übernehmen die anderen.

Das Script /usr/local/sbin/make_ltsp_config erzeugt die Configs neu, überträgt die Dateien auf die Server und startet dort jeweils die dnsmasq-Dienste neu.

PXE-Boot eines Mini-Linux

Anleitung für Live-CD/DVD: ​http://www.gtkdb.de/index_7.html

Anleitung unter ​http://www.pcwelt.de/ratgeber/So_geht_s__Linux_ueber_das_Netzwerk_booten_-Anleitung-8199381.html

Auch interessant: ​https://www.plop.at/de/ploplinux/live/index.html

  • Installiert sein müssen die Pakete
    • syslinux
    • nfs-kernel-server
  • das Filesystem per NFS zur Verfügung stellen (/etc/exports)
       /nfsexports/minilinux/ 10.32.0.0/255.240.0.0(rw,no_root_ squash,async,no_subtree_check) 
    
    • exportfs -rv
    • service nfs-kernel-server restart
  • Auf einem Client ein Betriebssystem installieren
    • bei uns: Debian Jessie minimal
    • nsf einrichten:
      • aptitude install nfs-common
    • ramdisk für boot vorbereiten
      • WARUM SOLL DER KERNEL NACH ~ KOPIERT WERDEN ?
      • /etc/initramfs-tools/initramfs.conf editieren: BOOT=nfs MODULES=netboot
      • mkinitramfs -o ~/initrd.img-uname -r
    • Client-Installation auf Server kopieren
      • /var/linbo/minilinux (bei uns liegt der TFTP-ROOT unter /var/linbo)
      • /nfsexports/minilinux
      • mkdir /mnt/nfs
      • mount -t nfs -o nolock 10.32.1.1:/minilinux /mnt/nfs
      • mkdir /mnt/nfs/
      • cp -ax /. /mnt/nfs/. ( RSYNC benutzen? )
      • cp -ax /dev/. /mnt/nfs/dev/. ( RSYNC benutzen? )
  • PXE-Boot auf Server vorbereiten
    • mkdir /var/lib/tftpboot/meinpc
    • cp /nfsexports/minilinux/home/User/vmlinuz-Versiongeneric /var/linbo/minilinux/
    • cp /nfsroot/meinpc/home/User/initrd.img-Versiongeneric /var/linbo/minilinux/
  • Schritt 5 ist unklar, denn der Client soll doch eine DHCP-Adresse vom Server bekommen - oder?
  • /nfsexport/minilinux/etc/fstab editieren Alle Filesysteme auskommentieren (wegen Netzboot)
  • Menüeintrag für Boot des Minilinux vorbereiten (TODO)

PXE-Boot einer Live-CD/DVD

Sehr gut beschrieben unter ​http://www.gtkdb.de/index_7.html, es lassen sich diverse Live-Systeme per TFTP booten.

  • Live-CD/DVD-ISO-Image herunterladen
  • mounten (mount -o loop ISO MountPoint]
  • unter /MountPuint/boot/grub.cfg die Kernel-Appends nachsehen
  • Kopieren einiger Dateien nach /var/lib/tftpboot/utils/[Verzeichnis]
    • vmlinuz
    • initrd.img
    • filesystem.squasfs
  • Eintragen der Bootoptionen in /var/lib/tftpboot/utils/pxelinux.cfg
Note: See TracWiki for help on using the wiki.