Das booten eines Betriebssystems oder Installation eines Betriebssystems über einen so genannten „Netzwerk-Boot“ wäre eine praktische Sache: So könnte man die Server installieren ohne ein CD-ROM Laufwerk einzubauen, oder man könnte eine „Notfall-Konsole“ vom Netzwerk aus starten wenn das Betriebssystem mal kaputt ist um es zu reparieren und seine Daten zu Retten.
Mit einem zusätzlichen Webserver lassen sich dann auch komplexe automatisierte Installationen machen.
Hier wollen wir mal Schritt für Schritt beschreiben wie man einen Netzwerkboot einrichtet.
Inhalt
Übersicht
Für unseren Netzwerkboot braucht es einige Anforderungen, die jedoch in den meisten Fällen nicht sonderlich kompliziert sind. Wie auch immer, durchschnittliche Linux Kenntnisse sollten vorhanden sein, was jedoch kein Problem darstellen sollte, da Leute die sich einen Netzwerkboot einrichten wollen, zumeist sowieso ein Netzwerk mit Linux als Server haben.
Was wir brauchen für unseren Netzwerkboot:
- Ein Linux (Wir nehmen und empfehlen hier CentOS Linux)
- DHCP Server
- TFTP (Trivial FTP)-, bzw. Booting Server
- Ein, übers Netzwerk bootbarer bootloader (meistens syslinux)
- ggf. ein Webserver um Konfigurationen und grössere boot-images zu laden
- Ein PC, der von der Netzwerkkarte Booten kann 😉
Falls der DHCP Server in einer gesicherten Umgebung liegt, bzw. nicht direkt am Internet angeschlossen ist, kann man den TFTP-Server auch auf der gleichen Maschine wie der DHCP installieren und von diesem aus booten.
Falls nicht, sollte man den TFTP Server nach Möglichkeit auf eine andere Maschine legen. Da TFTP keinerlei Sicherheitsmassnahmen implementiert hat ist dieses Protokoll sehr unsicher.
Der Webserver selbst kann vollständig losgelöst sein, es reicht, wenn man auf diesen Dateien hoch- und über eine HTTP-Adresse die Dateien wieder runter laden kann.
[stextbox id=“tip“ caption=“Tip“]Da man den „Booting-Server“ in der Regel nicht immer braucht, reicht es hier auch mit VMWARE eine Virtuelle Maschine zu erstellen und darauf Linux mit einem TFTP Server und dem Bootimage zu installieren. – Dies haben wir so gemacht bei unseren Tests und hat übrigens prima geklappt! ;-)[/stextbox]
[stextbox id=“note“ caption=“Hinweis“]Im Nachfolgenden werden wir, soweit möglich auf beide Varianten eingehen: Entweder alles auf einer Maschine, oder ein DHCP-Server und ein TFTP-Server auf getrennten Rechnern, da es sich nur minimal unterscheidet.[/stextbox]
Der Vorgang ist dabei relativ simpel: Zuerst holt der Client sich vom DHCP-Server eine IP-Adresse. Dieser gibt dem client die IP und dazu gleich auch noch den Namen der bootloader-Datei: pxelinux.0 (dies ist der SYSLINUX bootloader).
Der Client holt sich dann über tftp diesen bootloader und lädt ihn.
Der bootloader zeigt dann ganz normal einen Boot prompt an; standardmässig ist dessen Konfiguration in der Datei: ./pxelinux.cfg/default
Diese default-datei sieht ähnlich aus wie eine ganz normale bootloader-Konfiguration:
SAY Initialisiere Netzwerk-Boot... PROMPT 1 TIMEOUT 100 DEFAULT local UI menu.c32 MENU TITLE Mein Netzwerk Bootloader F1 f1.txt F2 f2.txt F3 usw.txt LABEL local MENU LABEL Von ^Festplatte booten (standard) localboot 0 |
Diese gibt folgendes an:
SAY | Gibt eine Meldung am Bildschirm aus, kurz bevor der Booloader startet |
PROMT | Damit wird der „boot:“ promt angezeigt oder unterdrückt |
TIMEOUT | Gibt die Zeit in 1/10 Sekunden an, nach dieser automatisch der default-kernel gestartet wird; 0 deaktiviert das timeout |
DEFAULT | Gibt den Eintrag an, welcher automatisch gestartet wird (wenn ein timeout gesetzt ist) |
UI | Definiert eine Datei, die das boot menu anzeigt |
F1-F9 | Diese Textdateien werden angezeigt, wenn man F1, F2, usw. drückt; so kann man zusätzliche „Hilfeseiten“ einbauen |
LABEL | Kennwort des Eintrages |
MENU LABEL | Titel im Menu (mit dem ^-Zeichen kann man den Buchstaben auswählen welchen man drücken kann um zum Eintrag zu springen) |
Hinweis: Auf der SYSLINUX Seite finden sich noch erweiterte Konfigurationsoptionen dieser Datei.
Vorbereitung: Eine einfache Netzwerkboot-Umgebung einrichten
[stextbox id=“comment“ caption=“Zur Veranschaulichung“]Hier installieren wir alles, inkl. Webserver auf dem selben Rechner mit der IP 10.0.0.1[/stextbox]
Bevor wir beginnen, sollte noch die firewall (temporär) abgeschaltet werden, um Probleme zu verhindern. – Klappt alles, kann man diese wieder aktivieren und ggf. entsprechend konfigurieren:
/etc/init.d/iptables stop |
TFTP-Server
Nun geht es darum einen TFTP-Server einzurichten.
TFTP steht für (T)rivial (F)ile (T)ransfer (P)rotocol und ist so was wie eine extrem abgespeckte Variante des FTP Protokolls.
Den tftp-client installieren wir auch gleich dazu, weil man damit gut die Verbindung zum tftp-server testen kann:
yum install tftp tftp-server |
Nun erstellen wir noch einen tftp Benutzer:
useradd -c 'TFTP User' -d /home/tftpboot -r tftp |
Danach muss man den TFTP-Server konfigurieren, bei CentOS z.B. in der Datei: /etc/xinetd.d/tftp
service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /home/tftpboot -u tftp disable = no per_source = 11 cps = 100 2 flags = IPv4 } |
[stextbox id=“note“ caption=“Hinweis“]Der tftp-server MUSS zuerst als root starten! – Erst dann, kann man ihn mit -u tftp anweisen den tftp user zu nehmen.[/stextbox]
Es muss einfach konfiguriert werden dass der tftp-server automatisch startet und welches Verzeichnis (hier: /home/tftpboot) als „home-Verzeichnis“ gebraucht wird.
Bootloader
BIOS
Als nächstes installieren wir den bootloader:
yum install syslinux |
Als letztes muss nun noch ein Benutzer erstellt- der bootloader kopiert und das Konfigurations-Verzeichnis (pxelinux.cfg) mit den Berechtigungen erstellt werden:
useradd -d /home/tftpboot tftp chmod -v 755 /home/tftpboot su - tftp cp -v /usr/share/syslinux/pxelinux.0 /home/tftpboot/ cp -v /usr/share/syslinux/menu.c32 /home/tftpboot/ mkdir -pv /home/tftpboot/pxelinux.cfg mkdir -pv /home/tftpboot/systems/ find /home/tftpboot/ -type d |xargs chmod -v 755 find /home/tftpboot/ -type f |xargs chmod -v 644 |
[stextbox id=“note“ caption=“Hinweis“]Damit der tftp-server funktioniert müssen alle files für JEDEN lesbar sein (chmod 644; für Verzeichnisse: chmod 755)[/stextbox]
[stextbox id=“note“ caption=“Hinweis: Als Benutzer arbeiten“]Ab diesem Schritt sollte man nicht mehr als root arbeiten und sich stattdessen immer als Benutzer „tftp“ anmelden, z.B. mit:
su - tftp |
[/stextbox]
Damit man nun auch was sieht erstellen wir ein einfache Bootloader-Konfiguration, mit der man dann von der lokalen Festplatte starten kann.
Dazu legen wir das file /home/tftpboot/pxelinux.cfg/default an:
SAY Initialisiere Network-Boot... PROMPT 1 UI menu.c32 TIMEOUT 120 DEFAULT local LABEL local MENU LABEL Von ^Festplatte booten (standard) localboot 0 |
[stextbox id=“tip“ caption=“Tip“]
Anstelle vom file: default kann man auch ein file mit entweder der MAC-Adresse oder dem HEX-Code der IP-Adresse, des bootenden hosts erstellen und so pro host ein individuelles boot menu anzeigen.
Den HEX-Code der IP-Adresse findet man mit dem Befehl: „gethostip“ raus, z.B.:
# gethostip 10.0.0.70 |
- 10.0.0.70 10.0.0.70 0A000046
Am besten verlinkt man diesen noch mit dem Namen des Hosts um nicht den Überblick zu verlieren:
cp -pv /home/tftpboot/pxelinux.cfg/default /home/tftpboot/pxelinux.cfg/0A000046 ln -sv /home/tftpboot/pxelinux.cfg/0A000046 /home/tftpboot/pxelinux.cfg/host1 |
[/stextbox]
Das wars schon. Nun sollte man testen, ob alles klappt:
cd /root/ chkconfig xinetd on /etc/init.d/xinetd start tftp localhost get /pxelinux.0 quit ls |
Sehen wir nun ein ‚pxelinux.0‘ File und bekommen keine Fehlermeldung hat alles geklappt!
(U)EFI
Obwohl Linus Torvalds selbst EFI als „Intels Hirnschaden“ bezeichnet, will man auch (U)EFI Systeme vom Netzwerk booten können. Leider ist der UEFI Netzwerkboot unter Linux nicht besonders ausgereift und es dauert z.B. länger um ein EFI System zu booten als beim BIOS.
Zuerst wird ein separates Verzeichnis für den EFI-Bootloader erstellt:
mkdir -v /home/tftpboot/EFI/ |
Da EFI nur mit „signierten“ Bootloadern arbeitet, braucht man zuerst einen solchen.
Diesen kann man Beispielsweise von CentOS nehmen.
Deshalb werden zuerst die Dateien BOOTX64.EFI, MokManager.efi und grubx64.efi von: http://mirror.centos.org/centos/7/os/x86_64/EFI/BOOT/ heruntergeladen und ins Verzeichnis: /home/tftpboot/EFI/ kopiert.
Nun wird die Bootloader Konfigurationsdatei in: /home/tftpboot/EFI/grub.cfg erstellt:
menuentry "Install CentOS 7" { linuxefi systems/centos/7/vmlinuz initrdefi systems/centos/7/initrd.img method=http://10.0.0.1/pxe/repos/centos/7/os/x86_64/ devfs=nomount } menuentry "centos-upgrade" { linuxefi /systems/centos/7/vmlinuz initrdefi /systems/centos/7/upgrade.img method=http://10.0.0.1/pxe/repos/centos/7/os/x86_64/ devfs=nomount } |
Damit wäre auch der EFI-Bootloader eingerichtet.
DHCP-Server
Im zweiten Schritt muss nun ein funktionierender Linux DHCP-Server eingerichtet werden. Wie das geht, steht im Beitrag: ((DHCP)).
Um nun zwischen BIOS und EFI clients unterscheiden zu können, müssen in der Datei /etc/dhcp/dhcpd.conf zuoberst die Zeilen:
option pxe-system-type code 93 = unsigned integer 16; set pxetype = option pxe-system-type; |
hinzugefügt werden.
Nun im subnet-Block noch diese Zeilen hinzufügen:
subnet 10.0.0.0 netmask 255.255.255.0 { # [...] next-server 10.0.0.1; if pxetype = 00:06 { filename = "/EFI/bootia32.efi"; } else if pxetype = 00:07 { filename = "/EFI/BOOTX64.EFI"; } else { filename "/pxelinux.0"; } } |
Diese Zeilen bedeuten:
filename: Dies ist die bootloader Datei, die dem Client übergeben wird.
next-server: Dies der Name oder IP Adresse des Servers auf dem das Bootimage liegt; wenn…
- TFTP auf dem gleichen Rechner läuft ist diese Zeile nicht notwendig, bzw. es sollte die IP Adresse des boot-servers da stehen
- TFTP auf einem separaten ‚booting-server‘ liegt, muss man hier der Name, bzw. IP Adresse dieses Servers geben, von diesem wird dann das Bootimage über TFTP geladen
Dies ist eigentlich auch schon der einzige unterschied zwischen einem und zwei Servern… 😉
Nun kann man die Datei speichern und den dhcpd mit:
/etc/init.d/dhcpd restart |
Neustarten.
Nun den Netzwerk-bootfähigen PC starten; es sollte nach dem initialisieren der Netzwerkkarte das Boot-Menu erscheinen. – Man kann nun, durch Eingabe von: hd1 von der ersten lokalen Festplatte booten! 😉
Zugegebenermassen ist dies noch nicht wirklich berauschend, deshalb werden wir den Server gleich so Einrichten, dass auch Betriebssysteme und installer vom Bootserver gestartet werden können.
Nach Gruppen sortieren
Das ganze lässt sich jetzt noch etwas optimieren; vielleicht will man ja nur einigen PCs das booten per Netzwerk erlauben, oder für verschiedene PCs andere Systeme ab Netzwerk booten?
Deswegen ist es am besten man legt einen neuen group{} Block an:
# NET BOOT group { filename "/debian/pxelinux.0"; server-name "gateway"; next-server 10.0.0.3; host netboottest { hardware ethernet 00:10:DC:1D:D5:32; fixed-address 10.0.0.70; } } |
In diesem Beispiel darf nur der PC ’netboottest‘ mit der MAC-Adresse: ’00:10:DC:1D:D5:32′ vom Netzwerk starten; er bekommt eine statische IP (10.0.0.70) und als Bootimage: ‚pxelinux.0‘ zugewiesen.
Nun kann man die im oberen Teil angegebenen Werte auch überschreiben; es wird so möglich pro host auch einen individuellen bootloader anzugeben.
Die folgende Erweiterung des obigen Beispiels illustriert das:
# NET BOOT group { filename "/pxelinux.0"; server-name "gateway"; next-server 10.0.0.3; host netboottest { hardware ethernet 00:10:DC:1D:D5:32; fixed-address 10.0.0.70; } host debianhost { hardware ethernet 00:10:DC:1D:D5:33; filename "/debian/pxelinux.0"; } } |
Hier lädt der Host netboottest normal den bootloader /pxelinux.0, während der neue Host debianhost stattdessen den bootloader /debian/pxelinux.0 lädt.
Und da diesmal keine fixe IP angegeben ist, holt er sich einfach eine aus dem DHCP-Pool.
Webserver
Ein zusätzlicher Webserver auf dem boot-server erlaubt es später Konfigurations-Scripts nachzuladen oder ganze repositories lokal zu führen.
Dieser braucht keine besonderen Anforderungen, es reicht wenn man einfach Files über HTTP von diesem runter laden kann.
Wir installieren hier lokal einen apache:
yum install httpd chkconfig httpd on /etc/init.d/httpd start |
[stextbox id=“note“ caption=“Hinweis“]Denen die lieber einen anderen, externen Webserver verwenden sei gesagt, dass alles was sich hier im Verzeichnis: /var/www/html/ befindet, dann entsprechend auf dem externen Webserver sein muss.[/stextbox]
Betriebssysteme übers Netzwerk starten
Nachfolgend werden wir verschiedene Systeme einrichten, die dann übers Netzwerk gestartet werden können.
[stextbox id=“note“ caption=“Hinweis“]Es gibt für fast jedes (Linux-) Betriebssystem die Möglichkeit dieses übers Netzwerk zu starten, ABER es braucht einen speziellen „PXE-Bootfähigen“ Kernel.
Deshalb am besten jeweils nach: „<BETRIEBSSYSTEM> +PXE boot“ suchen.[/stextbox]
Lokale Festplatte booten
Falls man den Netzwerk-Boot Server grundsätzlich immer starten will, jedoch Standardmässig nach einem kurzen timeout von der lokalen Festplatte booten will erweist sich folgendes in der default bootloader Konfiguration (pxelinux.cfg/default) als ganz nützlich:
UI menu.c32 TIMEOUT 120 DEFAULT local MENU Netzwerk-Bootloader LABEL local MENU LABEL Von ^Festplatte booten (standard) localboot 0 |
Notfallkonsole vom Netzwerk booten
systemrescuecd eignet sich herrovorangend für eine Notfallkonsole, die vom Netzwerk bootet.
Also richten wir systemrescuecd entsprechend ein:
mkdir -pv /home/tftpboot/systems/sysrescuecd mkdir -pv /mnt/SystemRescueCd wget <a href="https://sourceforge.net/projects/systemrescuecd/files/sysresccd-x86/2.4.0/systemrescuecd-x86-2.4.0.iso/download" target="blank" rel="noopener noreferrer">https://sourceforge.net/projects/systemrescuecd/files/sysresccd-x86/2.4.0/systemrescuecd-x86-2.4.0.iso/download</a> mount -o loop systemrescuecd-x86-2.4.0.iso /mnt/SystemRescueCd/ cd /mnt/SystemRescueCd/ cp -v bootdisk/* /home/tftpboot/systems/sysrescuecd/ cp -v isolinux/* /home/tftpboot/systems/sysrescuecd/ |
Jetzt kopieren wir das ca. 150MB grosse Systemimage ins Verzeichnis des webservers – Dies, weil tftp nicht für grosse Dateien gemacht wurde und diese auch nicht laden kann.
mkdir -pv /var/www/html/pxe/systemrescuecd/ cp -v /mnt/SystemRescueCd/sysrcd.dat /var/www/html/pxe/systemrescuecd/ cp -v /mnt/SystemRescueCd/sysrcd.md5 /var/www/html/pxe/systemrescuecd/ cd ~ umount /mnt/SystemRescueCd/ rm -v systemrescuecd-x86-2.4.0.iso |
Dann editieren wir die Datei: /home/tftpboot/pxelinux.cfg/default und hängen an den Schluss folgendes an:
LABEL rescue MENU LABEL Boot a linux ^rescue system KERNEL systems/sysrescuecd/rescuecd APPEND initrd=systems/sysrescuecd/initram.igz setkmap=sg boothttp=http://WEBSERVER-IP/pxe/systemrescuecd/sysrcd.dat ar_source=http://WEBSERVER-IP/pxe/systemrescuecd/ ar_nowait |
(„keymap=“ regelt das Tastaturlayout. sg steht hier für Schweizer deutsche Tastatur. Dieser Wert nach belieben anpassen)
Gibt man nun beim Netzwerk-Boot „rescue“ ein, startet sysrescuecd vom Netzwerk, cool nicht? 😉
CentOS installer
Nun richten wir den CentOS 6 pxe-installer ein:
mkdir -pv /home/tftpboot/systems/centos/6/ cd /home/tftpboot/systems/centos/6/ wget http://mirror.switch.ch/ftp/mirror/centos/6/os/x86_64/images/pxeboot/vmlinuz wget http://mirror.switch.ch/ftp/mirror/centos/6/os/x86_64/images/pxeboot/initrd.img |
Nun müssen wir dies noch im PXE-bootloader eintragen.
Dazu hängen wir folgende Zeilen an das Ende von: /home/tftpboot/pxelinux.cfg/default an:
LABEL centos6 MENU LABEL CentOS 6 ^Installieren KERNEL systems/centos/6/vmlinuz APPEND ksdevice=eth0 local_ramdisk=1 prompt_ramdisk=0 ramdisk_size=16384 initrd=systems/centos/6/initrd.img network |
Für CentOS 7 lädt man sich auch wieder die bootloader Dateien:
mkdir -pv /home/tftpboot/systems/centos/7/ cd /home/tftpboot/systems/centos/7/ wget http://mirror.switch.ch/ftp/mirror/centos/7/os/x86_64/images/pxeboot/vmlinuz wget http://mirror.switch.ch/ftp/mirror/centos/7/os/x86_64/images/pxeboot/initrd.img |
Der Bootloader-Eintrag sieht dann geringfügig anders aus:
LABEL centos7 MENU LABEL CentOS 7 ^Installieren KERNEL systems/centos/7/vmlinuz APPEND initrd=systems/centos/7/initrd.img inst.repo=http://mirror.switch.ch/ftp/mirror/centos/7/os/x86_64/ |
[stextbox id=“note“ caption=“Hinweis“]Mit method= (bzw. inst.repo= bei CentOS7) gibt man die Quelle an, von der die Pakete installiert werden. Direkt ab Internet zu installieren (wie im Beispiel oben) ist nicht empfehlensert und man sollte sich das repository auf einem lokalen Webserver kopieren.[/stextbox]
Debian installer
Bei debian reicht es, dass netboot package herunter zu laden und zu entpacken:
mkdir -pv /home/tftpboot/systems/debian/8/ cd /home/tftpboot/systems/debian/8/ wget 'http://ftp.debian.org/debian/dists/jessie/main/installer-amd64/current/images/netboot/netboot.tar.gz' tar -xvzf netboot.tar.gz rm -fv netboot.tar.gz |
Der Bootmenü-Eintrag sieht wie folgt aus:
LABEL debian MENU LABEL Install ^Debian KERNEL systems/debian/x64/debian-installer/amd64/linux APPEND initrd=systems/debian/x64/debian-installer/amd64/initrd.gz -- |
ESXi installer
Im Zeitalter der Virtualisierung möchte man natürlich auch den ESXi installer übers netzwerk booten können. 😉
[stextbox id=“tip“ caption=“Übrigens“]Zum testen kann man den ESXi Server auch gut innerhalb einer VM installieren![/stextbox]
Dazu lädt man sich einfach das aktuelle ESXi ISO (VMware-VMvisor-Installer-5.5.0-######.x86_64.is) auf den bootserver und führt folgednes aus:
mkdir -pv /home/tftpboot/systems/esxi/5.5.0/install cd /home/tftpboot/systems/esxi/ ln -sv 5.5.0/ 55 mkdir -pv /media/VMware-VMvisor-Installer-5.5.0.x86_64.iso mount -o loop VMware-VMvisor-Installer-5.5.0-######.x86_64.iso /media/VMware-VMvisor-Installer-5.5.0.x86_64.iso rsync -ahv /media/VMware-VMvisor-Installer-5.5.0.x86_64.iso/ /home/tftpboot/systems/esxi/55/install/ |
Nun editiert man noch das file: /home/tftpboot/systems/esxi/55/install/boot.cfg und entfernt die slashes (/). Im vi fürt man dazu folgendes Kommando aus:
:%s#/##g |
Nun fügt man in /home/tftpboot/pxelinux.cfg/default noch den folgenden Eintrag hinzu:
LABEL esxi55-install MENU LABEL ^ESX 5.5 Installieren KERNEL /systems/esxi/55/install/mboot.c32 APPEND -c /systems/esxi/55/install/boot.cfg |
[stextbox id=“tip“ caption=“ESXi automatisiert installieren“]Der ESXi installer unterstützt ähnlich wei bei CentOS sogenannte „kickstart-files“ für eine automatische Installation!
Dazu fügt man in der APPEND-Linie einfach die folgende Option hinzu:
kernelopt=ks=<a href="http://<WEBSERVER-IP>/pxe/esxi/kickstart/default.ks" target="blank" rel="noopener noreferrer">http://<WEBSERVER-IP>/pxe/esxi/kickstart/default.ks</a> |
Der ganze Eintrag sieht dann etwa so aus:
LABEL esxi55-kickstart MENU LABEL ESX 5.5 Installieren (^kickstart) KERNEL /systems/esxi/55/install/mboot.c32 APPEND -c /systems/esxi/55/install/boot.cfg kernelopt=ks=<a href="http://WEBSERVER-IP/pxe/esxi/kickstart/default.ks" target="blank" rel="noopener noreferrer">http://WEBSERVER-IP/pxe/esxi/kickstart/default.ks</a> |
Auf dem webserver legt man dann noch das file: /pxe/esxi/kickstart/default.ks an:
# # Sample scripted installation file # # Accept the VMware End User License Agreement vmaccepteula # Set the root password for the DCUI and Tech Support Mode rootpw mypassword # Install on the first local disk available on machine install --firstdisk --overwritevmfs # Set the network to DHCP on the first network adapter network --bootproto=dhcp --device=vmnic0 # A sample post-install script %post --interpreter=python --ignorefailure=true import time stampFile = open('/finished.stamp', mode='w') stampFile.write( time.asctime() ) |
Weitere Informationen zu den Intsallationsmöglichkeiten findet man im [https://pubs.vmware.com/vsphere-50/index.jsp#com.vmware.vsphere.install.doc_50/GUID-341A83E4-2A6C-4FB9-BE30-F1E19D12947F.html|vmware-manual].[/stextbox]
FreeDOS
Um firmware updates und ähnlciehs machen zu können braucht es manchmal auch eine DOS-Umgebung.
Kein Problem, denn auch FreeDOS lässt sich vom Netzwerk starten:
cd /home/tftpboot/ cp -v /usr/share/syslinux/memdisk . mkdir -pv systems/freedos/ cd systems/freedos/ wget 'http://ftp.gwdg.de/pub/misc/freedos/files/distributions/1.0/fdboot.img' |
Danach in: pxelinux.cfg/default folgendes eintragen:
LABEL dos MENU LABEL Free^DOS live system linux memdisk initrd systems/freedos/fdboot.img |
DBAN
DBAN ist ein tool um sicher Festpllatten zu löschen. Auch das kann nützlich sein vom netzwerk zu starten:
TODO
Der Bootloader-Eintrag sieht so aus:
LABEL dban MENU LABEL Run d^ban disk wiper KERNEL systems/dban/dban.bzi |
Weitere Anwendungsbeispiele
RedHat / CentOS automatisiert installieren
http://www.itespresso.de/2007/08/20/server-installationen-automatisieren-pcpro/“ target=“_blank“>Server-Installationen automatisieren][/stextbox
Mit „kickstart“ bieten RedHat und CentOS eine einzigartige Möglichkeit Systeme übers Netzwerk zu installieren.
[stextbox id=“note“ caption=“Hinweis“]Für dieses Beispiel solltest du bereits einen webserver (z.B apache) auf deinem boots-server installiert- und so konfiguriert haben,
dass: http://dein-server/ auf: /var/www/html zeigt (Standard beim apache).[/stextbox]
Hierzu definieren wir zuerst eine IP-Adresse die das System während der Installation haben wird; dies kann, muss aber nicht die selbe IP-Adresse sein, die das System nach der Installation erhält.
Wir nehmen hier als Beispiel 10.0.0.90
Nun muss die MAC-Adresse des neuen Hosts herausgefunden werden; diese wird meist während dem Netzwerk-Boot angezeigt; wir nehmen hier als Beispiel einfach: 08:00:20:ae:fd:7e
Im DHCP-Server definieren wir nun, das der Host mit der MAC-Adresse: 08:00:20:ae:fd:7e die IP: 10.0.0.90 bekommt und den pxe bootloader lädt:
host testsystem { hardware ethernet 08:00:20:ae:fd:7e; fixed-address 10.0.0.90; filename "/pxelinux.0"; } |
Nun legen wir für diesen Host noch eine Konfigurationsdatei an. Dazu müssen wir die IP-Adresse in der hexadezimalen Form haben, welche wir mit „gethostip“ raus kriegen:
# gethostip 10.0.0.90 |
Ausgabe: 10.0.0.90 10.0.0.90 0A00005A
Nun wird das Konfigurationsfile mit dem hex-wert als namen angelegt und gleich verlinkt:
touch /home/tftpboot/pxelinux.cfg/0A00005A ln -sv /home/tftpboot/pxelinux.cfg/0A00005A /home/tftpboot/pxelinux.cfg/testsystem |
[stextbox id=“note“ caption=“Hinweis“]Das verlinken ist nicht zwingend nötig, gewöhne dir aber am besten gleich an, das für jeden host zu machen,
da es die Überischtlichkeit (vor allem bei mehreren Systemen) enorm vereinfacht.[/stextbox]
In die Datei /home/tftpboot/pxelinux.cfg/0A00005A schreiben wir nun:
default kickstart label kickstart kernel systems/centos/vmlinuz32 append ksdevice=eth0 local_ramdisk=1 prompt_ramdisk=0 ramdisk_size=16384 initrd=systems/centos/initrd32.img network ks=<a href="http://<WEBSERVER-IP>/pxe/centos/kickstart/testsystem.ks" target="blank" rel="noopener noreferrer">http://<WEBSERVER-IP>/pxe/centos/kickstart/testsystem.ks</a> |
Auf dem webserver Nun muss noch das kickstart file und die dazugehörigen Verzeichnisse erstellt werden:
mkdir -pv /var/www/html/pxe/centos/kickstart/ |
In die Datei /var/www/html/pxe/centos/kickstart/testsystem.ks kommt nun:
install url --url <a href="http://mirror.switch.ch/ftp/mirror/centos/5.5/os/i386" target="blank" rel="noopener noreferrer">http://mirror.switch.ch/ftp/mirror/centos/5.5/os/i386</a> lang en_US.UTF-8 keyboard sg network --device eth0 --bootproto dhcp rootpw --iscrypted $1$jiosajd98sas9d3 firewall --enabled --port=22:tcp authconfig --enableshadow --enablemd5 selinux --permissive timezone --utc Europe/Zurich %packages @core @editors |
[stextbox id=“tip“ caption=“Tip“]Über die pxelinux.cfg kann für jeden Host eine Datei erstellt werden; darin kann man dann auch für jeden Host eine eigene kickstart.ks angeben.[/stextbox]
Die sog. „kickstart-installationen“ von RHEL/CentOS sind noch einiges mächtiger als hier beschrieben; so hat man z.B. die Möglichkeit vor- und nach der Installation beliebige scripts auszuführen, womit man dann perfekt vollautomatisch vorkonfigurierte Systeme erstellen kann.
Das Kapitel: [http://www.centos.org/docs/5/html/5.2/Installation_Guide/ch-kickstart2.html|Kickstart Installations] im CentOS Handbuch beschreibt genau die Möglichkeiten.
Windows (unattended) install booten
Beschreibt wie man die Windows-Installation (ggf. vollautomatisch) booten vom Netzwerk booten kann.
Alternativen
Vor allem beim automatischen aufsetzen mehrere System kann der „manuelle“ Weg etwas mühsam sein.
Hierfür gibt es die Software cobbler welche unter anderem ein Web-GUI und zahlreiche Optionen des automatischen deployments für mehrere Systeme bereit stellt.
Related Links
- EFI-Konfiguration für RHEL/CentOS – Beschreibt die EFI-Konfiguration für RedHat Systeme
- Preparing for a Network Installation – PXE im RedHat 7 manual
- UEFI-Rechner via PXE booten – Artikel zum theme EFI Netzwerkboot unter Linux
- Dealing with Secure Boot – Secure Boot von EFI ausführlich erklärt
- Debian Handbuch: Netzwerkboot – Das Debian Handbuch beschreibt in seinem Netzwerkboot Kapitel alles was man wissen muss um ein Debian übers Netzwerk zu booten
- Man-page zur dhcpd.conf – Beschreibt die Einstellungen des DHCPD-Servers, falls man mal genauer wissen möchte was einzelne statements in der Konfigurationsdatei des DHCP-Servers bedeuten
- Damn small Linux – Ein komplettes Linux auf 50 MB grösse
- sysLinux – Der sysLinux bootloader; sehr gut geignet für Netzwerk-boots
- Internet-proffessionell: Server-Installationen automatisieren – Ein sehr gutes tutorial der Zeitschrift „Internet Professionell“
- thegibson.org: More pxelinux tricks – Einige nützliche tips&tricks zum PXE-Boot
- CentOS-Doku: Kickstart Installations – Hier erfährt man, was man genau alles mit kickstart machen kann; sehr lesenswert um die Installationen zu optimieren
- How to make SystemRescueCD PXE bootable – Beschreibung wie man die sysrescuecd per pxe booten kann.
- dodhcp workaround – Workaround für den dodhcp-bug ab neueren sysrescuecd Versionen
- VMware ESXi 5 Interactive PXE Installation Improvements – Installationsanweisungen zum ESXi net install
Related Downloads
- Debian NETBOOT Images – Hier findet man die image Dateien um das Debian Linux installationsprogramm vom Netzwerk aus zu starten
- Gentoo install images – Das Gentoo installations image, dass im Beitrag gebraucht wird
- CentOS install images – Das CentOS installations image, dass im Beitrag gebraucht wird
- sysrescuecd – Eine exzellente Linux-Konsole die sich gut zum booten per pxe eignet
- CentOS EFI bootloader – Der EFI bootloader für CentOS
One thought on “Booten vom Netzwerk”