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

Das könnte dich auch interessieren …