Booten vom Netzwerk

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

Related Downloads

One thought on “Booten vom Netzwerk”

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert