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
ändern und stellen unter Netzwerk den Typ von
NAT auf
Netzwerkbrücke 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
/etc/network/interfaces folgendermaßen:
auto eth0
iface eth0 inet static
address 192.168.euer Subnetz.Adresse der virtuellen Maschine (eine, die noch nicht vergeben ist)
netmask 255.255.255.0
network 192.168.euer Subnetz.0
gateway IP-Adresse des Routers
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
/etc/dhcp/dhcpd.conf 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.euer Subnetz.IP-Adresse des Bootservers;
filename "/pxelinux.0";
subnet 192.168.euer Subnetz.0 netmask 255.255.255.0
{
range 192.168.euer Subnetz.2 192.168.euer Subnetz.254;
option routers IP eures Routers;
option domain-name-servers IP eures DNS-Servers, mehrere durch Komma getrennt - im Zweifelsfall die IP des Routers;
}
Kurze Erklärung: Mit
next-server 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
/etc/inetd.conf 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
/etc/default/tftpd-hpa 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.c32
ALLOWOPTIONS 0
PROMPT 0
TIMEOUT 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
/var/lib/tftpboot/ kopieren und folgendes mit in die /var/lib/tftpboot/pxelinux.cfg/default hinzufügen:
MENU BACKGROUND dateiname.jpg
Die bootbaren Images sowie die Config von pxelinux kommen von nun an in
/var/lib/tftpboot
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 debiantest
cd debiantest
sudo wget http://ftp.nl.debian.org/debian/dists/sq...i386/linux
sudo wget http://ftp.nl.debian.org/debian/dists/sq.../initrd.gz
cd ..
Nun fügen wir für den Debian Installer einen Eintrag in unser Menü hinzu. Also erstmal die Datei
/var/lib/tftpboot/pxelinux.cfg wieder in einem Editor öffnen und folgendes hinzufügen:
LABEL debiantest
MENU LABEL Debian Test
KERNEL debiantest/linux
APPEND 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
/var/lib/tftpboot/Boot/ welches den Windows-Netinstaller enthält. Die Datei
/var/lib/tftpboot/pxelinux.cfg/default wird nun um folgendes erweitert:
LABEL winpe7
MENU 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.exe
sudo ln -s /var/lib/tftpboot/Boot /var/lib/tftpboot/Boot/Boot
Zu guter Letzt müssen wir dem Server auch noch eine
Rewrite-Rule 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
/var/lib/tftpboot/windows7.iso befindet.
Diese müssen wir nun mounten. Dafür brauchen wir erstmal einen Mountpoint. In diesem Falle nenne ich ihn
/mnt/win7dvd
sudo mkdir -p /mnt/win7dvd
sudo mount /var/lib/tftpboot/windows7.iso /mnt/win7dvd/ -o loop
Damit das auch bei jedem Boot geschieht, fügen wir folgende Zeile in die
/etc/fstab 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:
sudo restart smbd
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\win7dvd
y:
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.