Da ich immer mal wieder testhalber Virtuelle Maschinen (in VirtualBox) installiere, wollte ich mir das vereinfachen: Kein Bootmedium, die VMs sollen über TFTP versorgt werden und ein Installationsimage bekommen.
Allerdings sollen normale DHCP-Clients einfach nur DHCP bekommen.
Also muß der DHCP-Server wissen, ob ein Netzboot kommt (den Client muß er dann nämlich an den TFTP-Server weiterreichen), oder eben ob der Clients nur mit DHCP zu versorgen ist.
Ich verwende den DHCP-Server vom ISC, mit dem geht das ganz einfach:
Erst einmal erlauben wir überhaupt das Booten:
allow booting; allow bootp;
Dann definieren wir eine Klasse “pxeclients”:
class "pxeclients" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.168.1.15; filename "pxelinux.0"; }
Die Klasse benötigen wir, um TFTP-Clients von reinen DHCP-Clients unterscheiden zu können.
Dann das ganz normale DHCP-Geraffel:
subnet 192.168.1.0 netmask 255.255.255.0 { [...] filename "pxelinux.0"; pool { allow unknown-clients; range 192.168.1.50 192.168.1.100; [...] } } [...] group { next-server 192.168.1.15; host tftpclient { filename "pxelinux.0"; } }
(Wahrscheinlich kann mich sich den ganzen group-Container sparen)
Damit ist der DHCP-Teil erledigt, weiter gehts mit TFTP. Bei mir läuft tftp-hpa, der ist in den Debian-Repositories entalten und wird ganz einfach über /etc/default/tftpd-hpa konfiguriert:
TFTP_USERNAME="tftp" TFTP_DIRECTORY="/usbplatte-2/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure"
Oben bei der dhcp-Konfiguration haben wir gesagt, daß pxelinux.0 verwendet werden soll.
/usbplatte‑2/tftpboot sieht deshalb so aus:
lrwxrwxrwx 1 124 root 8 Nov 28 18:44 MENU.c32 -> menu.c32 -rw-r--r-- 1 124 root 156 Nov 28 16:57 boot.txt drwxr-xr-x 3 124 root 4096 Nov 28 18:51 centos drwxr-xr-x 4 124 root 4096 Nov 28 10:44 debian -rw-r--r-- 1 124 root 61312 Nov 28 18:26 menu.c32 drwxr-xr-x 3 124 root 4096 Nov 28 16:38 opensuse -rw-r--r-- 1 124 root 26474 Oct 9 20:31 pxelinux.0 drwxrwxr-x 2 124 root 4096 Dec 29 11:36 pxelinux.cfg drwxr-xr-x 3 124 root 4096 Nov 28 11:06 ubuntu drwxr-xr-x 2 124 root 4096 Dec 2 19:07 ubuntu-diskless
Ehrlich gesagt, weiß ich gar nicht mehr, woher ich menu.c32 und pxelinux.0 habe 🙂 Wahrscheinlich aus dem SYSLINUX- oder PXELINUX-Paket.
Entscheidend ist nun die Datei default im Verzeichnis pxelinux.cfg; meine ist ziemlich groß:
DEFAULT MENU.c32 ALLOWOPTIONS 0 PROMPT 0 TIMEOUT 0 MENU TITLE Choose your weapon LABEL harddisk MENU LABEL ^0 Boot from local Harddisk TEXT HELP Boots from local hard drive ENDTEXT MENU default LOCALBOOT 0 LABEL debian_7_amd64_install MENU LABEL ^1 Debian 7 Install (64 Bit) KERNEL debian/wheezy/amd64/linux APPEND vga=normal initrd=debian/wheezy/amd64/initrd.gz -- quiet LABEL debian_6_amd64_install MENU LABEL ^2 Debian 6 Install (64 Bit) KERNEL debian/squeeze/amd64/linux APPEND priority=low vga=normal initrd=debian/squeeze/amd64/initrd.gz -- quiet LABEL ubuntu_13.10_install MENU LABEL ^3 Ubuntu 13.10 Install (64 Bit) KERNEL ubuntu/13.10/amd64/linux APPEND vga=normal initrd=ubuntu/13.10/amd64/initrd.gz -- quiet LABEL centos_6.4 MENU LABEL ^4 CentOS 6.4 Install (64 Bit) KERNEL centos/6.4/x86_64/vmlinuz APPEND initrd=/centos/6.4/x86_64/initrd.img devfs=nomount ramdisk_size=9216 method=ftp://ftp.tu-chemnitz.de/pub/linux/centos/6.4/os/x86_64/ LABEL opensuse_13.1_x86_64_install MENU LABEL ^5 OpenSUSE 13.1 Install (32 Bit) KERNEL opensuse/13.1/i386/linux APPEND initrd=opensuse/13.1/i386/initrd install=http://download.opensuse.org/distribution/13.1/repo/oss/ LABEL opensuse_13.1_i386_install MENU LABEL ^6 OpenSUSE 13.1 Install (64 Bit) KERNEL opensuse/13.1/x86_64/linux APPEND initrd=opensuse/13.1/x86_64/initrd install=http://download.opensuse.org/distribution/13.1/repo/oss/ LABEL ubuntu_diskless MENU LABEL ^7 Ubuntu diskless KERNEL ubuntu-diskless/bzImage APPEND netboot=nfs root=/dev/nfs initrd=ubuntu-diskless/vmlinuz-3.11.0-13-generic nfsroot=192.168.1.15:/usbplatte-2/nfsexports/vm/ubuntu-diskless,vers=3 ip=dhcp rw raid=noautodetect edd=on nolapic ip=192.168.1.70:192.168.1.254:255.255.255.0
Die Optionen für Ububtu diskless sind noch verbesserungsfähig.
Und wenn wir das alles zusammengeknüppert haben, sieht das total schick aus:
Wir holen uns eine DHCP-Adresse:
Haben wir die, wenden wir uns an den TFTP-Server:
Der gibt uns ein schickes Menü:
Sagen wir mal, wir wollen Ubuntu installieren, begrüßt uns der ganz normale Installer:
Und nun kann eben ganz normal installiert werden, übers Netz, ganz ohne DVD, CD, USB-Stick 🙂