Aufsetzen eines PXE Install Servers für mehrere Linux Distributionen mit Ubuntu Edgy Eft
Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>
Diese Anleitung veranschaulicht, wie man einen PXE (kurz für Preboot Execution Environment) Install Server mit Ubuntu 6.10 (Edgy Eft) aufsetzt. Ein PXE Install Server erlaubt Deinen Client Computern eine Linux Distribution über das Netzwerk zu starten und zu installieren, ohne dass man Linux Iso Images auf eine CD/DVD brennen oder Floppy Images etc. starten müsste. Das ist ganz praktisch, wenn Deine Client Computer keine CD oder Floppy Laufwerke haben, oder wenn Du mehrere Computer gleichzeitig aufsetzen möchtest (z.B. in einem großen Unternehmen), oder einfach weil Du Dir das Geld für die CDs/DVDs sparen möchtest. In dieser Anleitung zeige ich, wie man einen PXE Server konfiguriert, so dass Du mehrere Distributionen starten kannst: Ubuntu Edgy/Dapper, Debian Etch/Sarge, Fedora Core 6, CentOS 4.4, OpenSuSE 10.2 und Mandriva 2007.
Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen – dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!
1 Vorbemerkung
Es ist wichtig, dass Du eine gute Internetverbindung hast, da Deine Client Computer alle benötigten Pakete aus den Paketdatenbanken im Internet beziehen werden (ich habe dies mit einer 16MBit ADSL2+ Verbindung getestet, was schnell genug war ;-)). Man kann alle Pakete auch auf dem PXE Server ablegen, Du brauchst dann keine Internetverbindung (nur die LAN Verbindung zum PXE Server), allerdings brauchst Du dann auf dem PXE Server viel Speicherplatz (denk daran, er wird mehrere Distributionen bedienen), also werde ich das hier nicht behandeln.
Und das wichtigste ist, das Deine Client Computer den Start über das Netzwerk unterstützen. Du solltest deshalb den BIOS jedes einzelnen Computers überprüfen.
Auf unserem System, das als PXE Server fungieren soll, solltest Du bereits ein Ubuntu 6.10 Server Basissystem eingerichtet haben, wie zum Beispiel hier gezeigt wird (Seiten 1 – 3): https://www.howtoforge.com/perfect_setup_ubuntu_6.10
Ich ziehe es vor, alle Schritte als root Benutzer durchzuführen. Wenn Du also noch kein Root Login eingerichtet hast, solltest Du es jetzt tun:
sudo passwd root
Melde Dich danach als Root an:
su
Wenn Du lieber als normaler Benutzer anstatt als Root Benutzer arbeiten möchtest, denke daran, sudo vor alle Befehle in dieser Anleitung zu setzen. Wenn ich also dies ausführe
apt-get update
solltest Du stattdessen dies ausführen, etc.
sudo apt-get update
2 Installation aller benötigter Pakete
Zuerst aktualisieren wir unsere Paketdatenbank indem wir dies ausführen
apt-get update
Wir müssen die Pakete netkit-inetd, tftpd-hpa, dhcp3-server und lftp installieren, also führen wir dies aus
apt-get install netkit-inetd tftpd-hpa dhcp3-server lftp
Führe danach Folgendes aus
netstat -uap
und überprüfe, ob Du etwas in der Art siehst:
root@server1:~# netstat -uap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 *:tftp
Wenn Du keine tftp Zeile siehst, öffne bitte /etc/inetd.conf und stelle sicher, dass Du Folgendes darin findest:
vi /etc/inetd.conf
[...] #:BOOT: Tftp service is provided primarily for booting. Most sites # run this only on machines acting as "boot servers." tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot [...] |
Starte inetd dann neu:
/etc/init.d/inetd restart
3 Konfiguration des DHCP Servers
Wir benötigen einen DHCP Server in unserem lokalen Netzwerk. Wenn sich kein DHCP Server in Deinem lokalen Netzwerk befindet, dann konfiguriere und nutze einfach den auf Deinem zukünftigen PXE Server. Bearbeite einfach /etc/dhcp3/dhcpd.conf:
cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf_orig
cat /dev/null > /etc/dhcp3/dhcpd.conf
vi /etc/dhcp3/dhcpd.conf
option domain-name-servers 145.253.2.75, 193.174.32.18; default-lease-time 86400; max-lease-time 604800; authoritative; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.10 192.168.0.49; filename "pxelinux.0"; option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.1; } |
Damit werden IP Adressen dynamisch den Client Computern aus dem Bereich 192.168.0.10 bis 192.168.0.49 zugewiesen; das Gateway ist 192.168.0.1. Natürlich musst Du diese Konfiguration an Deine eigene Umgebung anpassen!
Es ist wichtig, dass Du die Zeile
filename „pxelinux.0“;
in Deiner Konfiguration stehen hast!
Starte dann Deinen DHCP Server neu:
/etc/init.d/dhcp3-server restart
Wenn Du in Deinem Netzwerk bereits einen DHCP Server hast, musst Du dessen Konfiguration modifizieren. Gehen wir davon aus, Du hast etwas in der Art
subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.10 192.168.0.49; option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.1; } |
in der Konfiguration. Du musst
filename „pxelinux.0“;
next-server 192.168.0.100;
hinzufügen (192.168.0.100 ist die IP Adresse unseres Ubuntu PXE Servers), so dass es wie folgt aussieht:
subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.10 192.168.0.49; option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.1; filename "pxelinux.0"; next-server 192.168.0.100; } |
Starte Deinen DHCP Server dann neu.
4 Aufsetzen von Ubuntu Edgy Eft Netboot
Nun können wir schon den Netboot für unsere erste Distribution, Ubuntu Edgy Eft (i386), aufsetzen. Die notwendigen Dateien für den Netboot findest Du auf http://archive.ubuntu.com/ubuntu/dists/edgy/main/installer-i386/current/images/netboot/. Wir laden die Dateien jetzt runter und kopieren sie ins /var/lib/tftpboot Verzeichnis. Das ist das Verzeichnis, aus dem unser PXE Server die Installations-Images bedienen wird:
cd /tmp
lftp -c „open http://archive.ubuntu.com/ubuntu/dists/edgy/main/installer-i386/current/images/; mirror netboot/“
mv netboot/* /var/lib/tftpboot
rm -fr netboot
(Du kannst die Dateien auch von jedem anderen Ubuntu Spiegel laden. Verwende einen, der sich in Deiner Nähe befindet.)
Das war es schon. Sieh Dir nun die Datei /var/lib/tftpboot/pxelinux.cfg/default an, um Dich mit ihrem Aufbau vertraut zu machen:
vi /var/lib/tftpboot/pxelinux.cfg/default
DISPLAY ubuntu-installer/i386/boot-screens/boot.txt F1 ubuntu-installer/i386/boot-screens/f1.txt F2 ubuntu-installer/i386/boot-screens/f2.txt F3 ubuntu-installer/i386/boot-screens/f3.txt F4 ubuntu-installer/i386/boot-screens/f4.txt F5 ubuntu-installer/i386/boot-screens/f5.txt F6 ubuntu-installer/i386/boot-screens/f6.txt F7 ubuntu-installer/i386/boot-screens/f7.txt F8 ubuntu-installer/i386/boot-screens/f8.txt F9 ubuntu-installer/i386/boot-screens/f9.txt F0 ubuntu-installer/i386/boot-screens/f10.txt DEFAULT install LABEL install kernel ubuntu-installer/i386/linux append vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL linux kernel ubuntu-installer/i386/linux append vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL server kernel ubuntu-installer/i386/linux append base-installer/kernel/linux/extra-packages-2.6= pkgsel/install-pattern=~t^ubuntu-standard$ pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL expert kernel ubuntu-installer/i386/linux append priority=low vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL server-expert kernel ubuntu-installer/i386/linux append base-installer/kernel/linux/extra-packages-2.6= pkgsel/install-pattern=~t^ubuntu-standard$ pkgsel/language-pack-patterns= pkgsel/install-language-support=false priority=low vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL rescue kernel ubuntu-installer/i386/linux append vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw rescue/enable=true -- PROMPT 1 TIMEOUT 0 |
Wie Du siehst beinhaltet diese Datei alle gültigen Installationsoptionen (linux, server, expert, etc.) für Ubuntu Edgy Eft, jede in ihrer eigenen LABEL Zeile. Diese Pfade sind relativ zu /var/lib/tftpboot, so dass ubuntu-installer/i386/initrd.gz dem Pfad /var/lib/tftpboot/ubuntu-installer/i386/initrd.gz entspricht. Die Ausgabe von
ls -la /var/lib/tftpboot
sollte nun wie folgt aussehen:
root@server1:~# ls -la /var/lib/tftpboot/
total 25052
drwxr-xr-x 9 root root 4096 2006-12-14 19:25 .
drwxr-xr-x 21 root root 4096 2006-12-14 15:01 ..
-rw-r–r– 1 root root 8315725 2006-10-21 02:42 boot.img.gz
-rw-r–r– 1 root root 8849408 2006-10-21 02:42 mini.iso
-rw-r–r– 1 root root 8381337 2006-10-21 02:42 netboot.tar.gz
-rw-r–r– 1 root root 13156 2006-10-21 02:44 pxelinux.0
drwxr-xr-x 2 root root 4096 2006-12-14 19:39 pxelinux.cfg
drwxr-xr-x 4 root root 4096 2006-12-14 16:15 ubuntu-installer
Wenn ein Client Computer über dem Netzwerk startet, sucht er nach der Datei /var/lib/tftpboot/pxelinux.cfg/default und läd sie. Also ist das die Datei, die wir später modifizieren müssen, wenn wir unserem PXE Server weitere Linux Distributionen hinzufügen.
5 Unser erster Test
(Bitte beachte, dass die Computer, die Du nicht neu installieren möchtest, die Netzwerk Start-Opti0n in ihren BIOS Einstellungen aktiviert haben, da es sonst sein kann, dass Du oder jemand anderes versehentlich Ubuntu über das vorhandene Betriebssystem installiert!)
Nun kannst Du Deinen ersten Client Computer starten. Pass auf, dass in seinem BIOS eingestellt ist, dass er das Netzwerk als sein erstes Boot Device verwenden soll. Wenn alles klappt, solltest Du den gewöhnlichen Ubuntu Installationsscreen sehen. Du kannst eine Installationsoption aus der /var/lib/tftpboot/pxelinux.cfg/default Datei auswählen, z.B. linux für einen normalen Ubuntu Desktop, server, etc..
Vergiss nicht die Reihenfolge der Boot Devices nach der erfolgreichen Installation zu ändern (deaktiviere z.B. den Start über das Netzwerk und stelle die Festplatte als erstes Boot Device ein), sonst startest Du eine weitere Installation!
6 Ubuntu Dapper Drake Netboot hinzufügen
Lass uns unserem PXE Server nun weitere Distributionen hinzufügen (Du möchtest doch keinen PXE Server pro Distribution haben, oder?). Der Aufbau unseres Verzeichnisses sieht momentan wie folgt aus:
/var/lib/tftpboot
|
+ubuntu-installer
|
+i386
Ich möchte stattdessen das, da es besser angeordnet ist:
/var/lib/tftpboot
|
+centos
| |
| +4.4
| |
| +i386
|
+debian
| |
| +etch
| | |
| | +i386
| |
| +sarge
| |
| +i386
|
+fedora
| |
| +6
| |
| +i386
|
+mandriva
| |
| +2007.0
| |
| +i386
|
+suse
| |
| +10.2
| |
| +i386
|
+ubuntu
|
+dapper
| |
| +i386
|
+edgy
|
+i386
Wir bewegen zuerst das derzeitige ubuntu-installer Verzeichnis (das Ubuntu Edgy beinhaltet) nach ubuntu/edgy/:
mv /var/lib/tftpboot/ubuntu-installer /var/lib/tftpboot/edgy
mkdir /var/lib/tftpboot/ubuntu
mv /var/lib/tftpboot/edgy /var/lib/tftpboot/ubuntu/
Dann laden wir die Netboot Dateien für unser Ubuntu Dapper Drake runter und verschieben sie wie folgt nach /var/lib/tftpboot/ubuntu/dapper/:
cd /tmp
lftp -c „open http://archive.ubuntu.com/ubuntu/dists/dapper/main/installer-i386/current/images/; mirror netboot/“
cd netboot/
mv ubuntu-installer /var/lib/tftpboot/ubuntu/dapper
(Du kannst die Dateien auch von jedem anderen Ubuntu Spiegel runter laden. Verwende einen Spiegel, der sich in Deiner Nähe befindet.)
Sieh Dir immer noch im netboot Verzeichnis, die Ubuntu Dapper Drake’s pxelinux.cfg/default Datei an. Sie sieht wie folgt aus:
vi pxelinux.cfg/default
DISPLAY ubuntu-installer/i386/boot-screens/boot.txt F1 ubuntu-installer/i386/boot-screens/f1.txt F2 ubuntu-installer/i386/boot-screens/f2.txt F3 ubuntu-installer/i386/boot-screens/f3.txt F4 ubuntu-installer/i386/boot-screens/f4.txt F5 ubuntu-installer/i386/boot-screens/f5.txt F6 ubuntu-installer/i386/boot-screens/f6.txt F7 ubuntu-installer/i386/boot-screens/f7.txt F8 ubuntu-installer/i386/boot-screens/f8.txt F9 ubuntu-installer/i386/boot-screens/f9.txt F0 ubuntu-installer/i386/boot-screens/f10.txt DEFAULT install LABEL install kernel ubuntu-installer/i386/linux append vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL linux kernel ubuntu-installer/i386/linux append vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL server kernel ubuntu-installer/i386/linux append base-installer/kernel/linux/extra-packages-2.6= pkgsel/install-pattern=~t^ubuntu-standard$ pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL expert kernel ubuntu-installer/i386/linux append DEBCONF_PRIORITY=low vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL server-expert kernel ubuntu-installer/i386/linux append base-installer/kernel/linux/extra-packages-2.6= pkgsel/install-pattern=~t^ubuntu-standard$ pkgsel/language-pack-patterns= pkgsel/install-language-support=false DEBCONF_PRIORITY=low vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL rescue kernel ubuntu-installer/i386/linux append vga=normal initrd=ubuntu-installer/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw rescue/enable=true -- PROMPT 1 TIMEOUT 0 |
Kopiere alle LABEL Zeilen in einen Text Editor Deiner Wahl und ersetze ubuntu-installer/ mit ubuntu/dapper/. Benenne die LABEL Namen um, z.B. linux zu dapper_i386_linux, etc. Öffne dann /var/lib/tftpboot/pxelinux.cfg/default und hänge die neuen LABEL Zeilen an die für Ubuntu Edgy Eft an. Ändere die Edgy Eft LABEL Namen so, dass sie erklärender sind, z.B. von linux zu edgy_i386_linux und ersetze ubuntu-installer/ mit ubuntu/edgy/. Entferne die F1 – F10 Zeilen und ersetze die DISPLAY Zeile mit DISPLAY boot.txt so dass die neue Datei wie folgt aussieht:
vi /var/lib/tftpboot/pxelinux.cfg/default
DISPLAY boot.txt DEFAULT edgy_i386_install LABEL edgy_i386_install kernel ubuntu/edgy/i386/linux append vga=normal initrd=ubuntu/edgy/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL edgy_i386_linux kernel ubuntu/edgy/i386/linux append vga=normal initrd=ubuntu/edgy/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL edgy_i386_server kernel ubuntu/edgy/i386/linux append base-installer/kernel/linux/extra-packages-2.6= pkgsel/install-pattern=~t^ubuntu-standard$ pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=normal initrd=ubuntu/edgy/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL edgy_i386_expert kernel ubuntu/edgy/i386/linux append priority=low vga=normal initrd=ubuntu/edgy/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL edgy_i386_server-expert kernel ubuntu/edgy/i386/linux append base-installer/kernel/linux/extra-packages-2.6= pkgsel/install-pattern=~t^ubuntu-standard$ pkgsel/language-pack-patterns= pkgsel/install-language-support=false priority=low vga=normal initrd=ubuntu/edgy/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw -- LABEL edgy_i386_rescue kernel ubuntu/edgy/i386/linux append vga=normal initrd=ubuntu/edgy/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw rescue/enable=true -- LABEL dapper_i386_install kernel ubuntu/dapper/i386/linux append vga=normal initrd=ubuntu/dapper/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL dapper_i386_linux kernel ubuntu/dapper/i386/linux append vga=normal initrd=ubuntu/dapper/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL dapper_i386_server kernel ubuntu/dapper/i386/linux append base-installer/kernel/linux/extra-packages-2.6= pkgsel/install-pattern=~t^ubuntu-standard$ pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=normal initrd=ubuntu/dapper/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL dapper_i386_expert kernel ubuntu/dapper/i386/linux append DEBCONF_PRIORITY=low vga=normal initrd=ubuntu/dapper/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL dapper_i386_server-expert kernel ubuntu/dapper/i386/linux append base-installer/kernel/linux/extra-packages-2.6= pkgsel/install-pattern=~t^ubuntu-standard$ pkgsel/language-pack-patterns= pkgsel/install-language-support=false DEBCONF_PRIORITY=low vga=normal initrd=ubuntu/dapper/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw -- LABEL dapper_i386_rescue kernel ubuntu/dapper/i386/linux append vga=normal initrd=ubuntu/dapper/i386/initrd.gz ramdisk_size=14332 root=/dev/rd/0 rw rescue/enable=true -- PROMPT 1 TIMEOUT 0 |