Anleitung für Bootserver-VM

  • Hier nun endlich eine fertige Version der Anleitung, die auch funktioniert. Vielen Dank an winfreak für die Verbesserungen sowie den anschließenden Test!

    Moin,
    hier wie versprochen nun eine Anleitung, wie man eine VM für einen PXE-Bootserver einrichtet. Ziel soll es sein, häufig genutzte Betriebssysteminstaller, Livesysteme und Diagnosetools direkt über das Netzwerk starten zu können, ohne dafür bootbare CDs brennen zu müssen. In diesem Beispiel werden wir für die Installationen ein eigenes Netz nutzen, damit das ganze nicht mit anderen Netzen in die Quere kommt.

    Dies ist nun schon Version 2.0 dieser Anleitung. Als ich gestern mit winfreak die Anleitung durchgearbeitet habe, sind uns einige grundlegende Fehler aufgefallen. Deshalb wird hier auch nicht mehr mit zwei Netzen gearbeitet, dies verursacht nur Probleme. Solltet ihr einen Router haben, der DHCP austeilt, so müsst ihr ihn entweder so konfigurieren, dass alle PXE-Anfragen an den Bootserver weitergeleitet werden, oder dieses einfach kurzzeitig abstellen, um zu booten.

    Benötigte Software - Was brauchen wir im Vorfeld?

    • Einen Virtualisierer (ich verwende hier das kostenlose VirtualBox)
    • Ubuntu Server Edition (Gibt es hier: http://www.ubuntu.com/download/server - einfach die ISO runterladen) - natürlich gehen auch andere Distributionen, dann heißt eventuell das eine oder andere Paket anders

    Was müssen wir später im Linux installieren?

    • dhcp3-server
    • tftpd-hpa
    • syslinux
    • samba (für die Windows-Installation)
    • nfs-kernel-server (für das Rootfs des GRML-Systems) [wenn wir kein GRML wollen, können wir das weglassen]

    Was bedeuten die Variablen?
    euer Subnetz = 192.168.1.254 <- das fettgedruckte, hier ist ein Beispiel.


    Einrichten der VM
    Als erstes richten wir uns eine VM in VirtualBox ein. Als Betriebssystem kann hier einfach Ubuntu gewählt werden. Bei der Frage nach der Größe des Festplattenimages sollte man die verschiedenen Systeme berücksichtigen, von denen man später Images hinterlegen will.
    Nachdem die VM angelegt ist, wählen wir [b]ändern[/b] und stellen unter Netzwerk den Typ von [b]NAT[/b] auf [b]Netzwerkbrücke[/b] um. Dieser Schritt ist sehr wichtig.
    Nun installieren wir Ubuntu Server in der VM, dabei können wir wie gewohnt vorgehen. Wenn wir nach den zu verwendenden Serverdiensten gefragt werden, wählen wir nichts aus.


    Konfiguration der Netzwerkkarten unter Ubuntu
    Jetzt richten wir die IP-Adressen für die Netzwerkkarte ein.
    Dazu editieren wir die Datei [b]/etc/network/interfaces[/b] folgendermaßen:
    auto eth0iface eth0 inet static address 192.168.[b][i]euer Subnetz[/i][/b].[b][i]Adresse der virtuellen Maschine (eine, die noch nicht vergeben ist)[/i][/b] netmask 255.255.255.0 network 192.168.[b][i]euer Subnetz[/i][/b].0 gateway [b][i]IP-Adresse des Routers[/i][/b]
    Nachdem die Config angepasst wurde, laden wir sie mit sudo /etc/init.d/networking restart neu.


    Installation der benötigten Pakete im Ubuntu
    Nun müssen die Pakete installiert werden:
    sudo apt-get install dhcp3-server tftpd-hpa syslinux samba nfs-kernel-server


    Einrichten von dhcp3-Server:
    Jetzt editieren wir die Datei [b]/etc/dhcp/dhcpd.conf[/b] folgendermaßen (der alte Inhalt kann komplett raus):
    ddns-update-style none;default-lease-time 315360000;max-lease-time 315360000;authoritative;log-facility local7;allow booting;allow bootp;

    next-server 192.168.[b][i]euer Subnetz[/i][/b].[b][i]IP-Adresse des Bootservers[/i][/b];filename "/pxelinux.0";

    subnet 192.168.[b][i]euer Subnetz[/i][/b].0 netmask 255.255.255.0{ range 192.168.[b][i]euer Subnetz[/b][/i].2 192.168.[b][i]euer Subnetz[/b][/i].254; option routers [b][i]IP eures Routers[/b][/i]; option domain-name-servers [b][i]IP eures DNS-Servers, mehrere durch Komma getrennt - im Zweifelsfall die IP des Routers[/b][/i];}

    Kurze Erklärung: Mit [b]next-server[/b] wird angegeben, auf welchem TFTP-Server die Clients ihr Boot-Image suchen sollen. Mit filename kann ein Name für dieses Image spezifiziert werden.
    Anschließend dhcp3-server neu starten: sudo /etc/init.d/isc-dhcp-server restart


    Einrichtung von tftpd-hpa
    Zunächst bearbeiten wir die Datei [b]/etc/inetd.conf[/b] und ändern dort die Zeile
    tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
    in
    tftp dgram udp4 wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
    Damit wird ein Bug behoben, der sich bei Ubuntu in das Paket eingeschlichen hat.

    Anschließend editieren wir die Datei [b]/etc/default/tftpd-hpa[/b] folgendermaßen:
    RUN_DAEMON="yes"

    TFTP_USERNAME="tftp"TFTP_DIRECTORY="/var/lib/tftpboot"TFTP_ADDRESS="0.0.0.0:69"TFTP_OPTIONS="-l -s -m /etc/tftp_remap.conf"

    Damit die Änderungen wirklich übernommen werden, müssen wir einen Systemneustart machen. Wir geben also sudo reboot ein, und warten bis unsere VM wieder hochgefahren ist.


    Einrichten von pxelinux
    sudo mkdir -p /var/lib/tftpboot/sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg/sudo cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/sudo cp /usr/lib/syslinux/vesamenu.c32 /var/lib/tftpboot/

    Nun schreiben wir uns eine rudimentäre Config. Die müssen wir erstmal anlegen.
    sudo touch /var/lib/tftpboot/pxelinux.cfg/default

    Nun schreiben wir folgendes in die gerade angelegte Datei:
    DEFAULT vesamenu.c32ALLOWOPTIONS 0PROMPT 0TIMEOUT 0

    MENU TITLE Unser erster Bootserver

    Wenn ein Hintergrundbild rein soll, ist das kein großes Problem. Wir brauchen nur ein Bild mit einer Auflösung von 640x480, idealerweise im JPG-Format. Dazu dann das Bild nach [b]/var/lib/tftpboot/[/b] kopieren und folgendes mit in die /var/lib/tftpboot/pxelinux.cfg/default hinzufügen:
    [b]MENU BACKGROUND dateiname.jpg[/b]

    Die bootbaren Images sowie die Config von pxelinux kommen von nun an in [b]/var/lib/tftpboot[/b]


    Einbinden von Linux-Installern
    Als erstes System zum Testen nehmen wir jetzt mal den Installer von Debian, der ist schön klein. Bei Linuxsystemen braucht man nur den Kernel und eine angepasste initrd mit dem Installer.

    Erstmal runterladen und ein extra Verzeichnis für ihn machen:
    cd /var/lib/tftpboot/mkdir debiantestcd debiantestsudo wget http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/linuxsudo wget http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gzcd ..

    Nun fügen wir für den Debian Installer einen Eintrag in unser Menü hinzu. Also erstmal die Datei [b]/var/lib/tftpboot/pxelinux.cfg[/b] wieder in einem Editor öffnen und folgendes hinzufügen:
    LABEL debiantestMENU LABEL Debian TestKERNEL debiantest/linuxAPPEND initrd=debiantest/initrd.gz

    Genauso funktioniert es auch bei Ubuntu, Fedora und co. Man braucht nur ein Kernel-Image und ein Initrd-Image.


    Windows 7
    (Die Schritte 1 bis 3 müssen nur beim ersten Mal ausgeführt werden. Schritt 4 bei jedem Windows-Netboot)
    1. PE-Image
    Für Windows 7 gibt es keinen fertigen Netzwerk-Installer zum herunterladen. Den kann man mit dem Windows Automated Installation Kit (WAIK) aber schnell selber bauen (Anleitung gibt es unter http://www.rrzn.uni-hannover.de/anl-waikpxe.html)
    Wenn alle Schritte aus diesem Link befolgt wurden, haben wir ein Verzeichnis [b]/var/lib/tftpboot/Boot/[/b] welches den Windows-Netinstaller enthält. Die Datei [b]/var/lib/tftpboot/pxelinux.cfg/default[/b] wird nun um folgendes erweitert:
    LABEL winpe7MENU LABEL Windows 7 (x86 und amd64)KERNEL Boot/pxeboot.0

    Außerdem müssen wir noch zwei Symlinks anlegen:
    sudo ln -s /var/lib/tftpboot/Boot/bootmgr.exe /var/lib/tftpboot/bootmgr.exesudo ln -s /var/lib/tftpboot/Boot /var/lib/tftpboot/Boot/Boot

    Zu guter Letzt müssen wir dem Server auch noch eine [b]Rewrite-Rule[/b] verpassen, sodass das System hoch kommt. Bei Windows wir nämlich, wie ihr sicherlich wisst, ein Backslash statt wie bei Unixoiden-System üblich, ein Slash verwendet.
    Hierzu legen wir die Datei /etc/tftp_remap.conf mit sudo touch /etc/tftp_remap.conf an. In diese Datei fügen wir nun folgendes ein:
    rg \\ /
    Wir speichern die Datei ab und starten den Server wie oben beschrieben neu.
    Nun haben wir ein minimales Windows PE Livesystem. Das wird später verwendet, um den eigentlichen Installer zu starten.


    2. Mounten der ISO
    Nun brauchen wir eine ISO-Datei von der Windows 7-DVD. Ich gehe mal davon aus, dass sich diese unter [b]/var/lib/tftpboot/windows7.iso[/b] befindet.
    Diese müssen wir nun mounten. Dafür brauchen wir erstmal einen Mountpoint. In diesem Falle nenne ich ihn [b]/mnt/win7dvd[/b]
    sudo mkdir -p /mnt/win7dvdsudo mount /var/lib/tftpboot/windows7.iso /mnt/win7dvd/ -o loop
    Damit das auch bei jedem Boot geschieht, fügen wir folgende Zeile in die [b]/etc/fstab[/b] ein:
    /var/lib/tftpboot/windows7.iso /mnt/win7dvd iso9660 loop 0 0


    3. Freigeben der ISO per Samba
    Wir editieren die Datei /etc/samba.smb.conf und fügen folgende Zeilen hinzu:
    [win7dvd] comment = Windows Install path = /mnt/win7dvd guest ok = Yes read only = Yes browseable = Yes available = Yes
    Anschließend Samba neu starten: [b]sudo restart smbd[/b]
    Diese Freigabe können wir später in der Windows-Umgebung einfach als Netzlaufwerk mounten, um den Installer zu starten.


    4. Nutzung des Windows-Installers
    Wenn wir nun einen Client mit Windows 7 einrichten möchten, ist folgendes zu tun. Zunächst booten wir den Client per Netzwerk und wählen Windows 7 im Menü aus. Nach einiger Ladezeit sollte uns ein Minimalwindows mit CMD-Fenster begrüßen. Hier mounten wir jetzt die Windows-ISO und starten den Installer:
    net use y: \\192.168.42.1\win7dvdy:setup.exe
    Ab jetzt kann man Windows 7 wie gewohnt installieren.

    ACHTUNG: Dieser Schritt wird weder in VMWare noch in VirtualBox funktionieren, da hier der LAN-Adapter nicht erkannt wird. Also einfach einen echten Client zum booten nehmen ;)

    Als nächstes kommt noch etwas zum GRML-Livesystem dazu.

  • Mit Sicherheit, habe ich aber noch nie gemacht. Vermutlich reicht es (wie bei FreeDOS), einfach die ISO per Netz zu booten. Muss ich morgen mal testen.

  • Doch, ich werde eine VM zum herunterladen bauen morgen :)

    Die wird allerdings nicht das Windows PE enthalten (will rechtliche Probleme ausschließen)
    Ist aber nicht wirklich schwer, selbiges zu erstellen.


  • Doch, ich werde eine VM zum herunterladen bauen morgen :)

    Die wird allerdings nicht das Windows PE enthalten (will rechtliche Probleme ausschließen)
    Ist aber nicht wirklich schwer, selbiges zu erstellen.

    Kannst du nicht einfach die VM die du da jetzt hast auf deinen Server schieben? Also Win PE vorher raus nehmen :)

  • Hier im Produktiveinsatz läuft es nicht in einer VM, sondern nativ auf dem Server. Kann dir aber gerne mal mein /var/lib/tftpboot mit Ausnahme von Windows PE tarren. Dann hast du auch alle Untermenüs und jede Menge Diagnosetools für Hardwarekram. Aber wenn dann mache ich das alles morgen, bin für heute zu müde.

  • Das Ubuntu Server kannst du ja schon mal installieren. Statt dnsmasq werde ich aber nun doch eine Kombination aus dhcp3-server und dnsmasq einsetzen. Sprich: Da ändert sich noch was bei den ersten Schritten.

  • Ich habe die Anleitung mal wieder erweitert. Wer Lust hat, kann es ja mal ausprobieren, da bin ich bisher noch nicht zu gekommen.

  • Jo, gute Idee! Sobald sie Final ist, pack ich sie da rein.

    Mit ExoComp müssen wir eh bald mal weiter machen, bisher hat sich ja nichts mehr getan.

  • Was ich btw machen würde: Das Teil auf GitHub Gist stellen. Da haste serious Backup :D

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

  • In VMware erstellt man am Besten ein sogenanntes Team und verbindet den Server und den Client untereinander und den Server (so will man es in aller Regel) nach außen TO SE INTERNETZ

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“


  • In VMware erstellt man am Besten ein sogenanntes Team und verbindet den Server und den Client untereinander und den Server (so will man es in aller Regel) nach außen TO SE INTERNETZ

    In VMware Workstation8 fehlt die Team Funktion aber.. Oder ich finde sie nicht :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!