Linux als SOHO-Server

für Linux- und Windows-Clients
http://linux.eusterholz.dyndns.org

Kapitel:

Home
Debian Installation
Debian Etc.
Internet-Zugang
Telnet
FTP
r-Utilities
SSH
Printing
NTP
Nameserver
NFS/NIS/Automount
Samba (SMB-Server)
Apache (WEB-Server)
Modem / ISDN
Backup
Etc.


PXE Boot

NET-CD Boot ] Floppy Boot ] [ PXE Boot ] USB-Stick Boot ] Basis-System ]


Eine sehr komfortable Art ein System zu installieren, ist eine Boot über das lokale Netzwerk mittels PXE-Boot. Dabei werden keine Boot-Medien wie CDs oder Disketten benötigt. Gerade wenn mehrere, oder oft neue Rechner installiert werden, ist diese Methode sehr praktikabel. Weiterhin ist die Art der Installation interessant für Rechner, die weder ein CD-ROM noch ein Diskettenlaufwerk besitzen, wie z.B. extrem kleine Notebooks oder Stromspar-Rechner.

Im Folgenden wird die Methode des PXE-Boots (PXE = Preboot eXecution Environment) in Kombination mit dem Boot-Loaders: PXELINUX vorgestellt. Die PXE-Technik wurde von der Firma: Intel entwickelt und spezifiziert, sie stellt eine Art intelligentes Boot-ROM dar. Der Boot-Loader: PXELINUX ist Bestandteil des Pakets: SYSLINUX.

Für den PXE-Boot ist ein Boot-Server einer der elementarsten Vorraussetzung. Im folgenden wird anhand von zwei Beispiel-Varianten vorgestellt, wie ein solcher Boot-Server realisiert werden kann. Zunächst wird ein möglicher Aufbau eines Boot-Servers unter Linux (Debian) vorgestellt, anschließend eine Variante eines Boot-Servers unter Windows (mit 'Tftpd32'). Beide Varianten verfolgen in den aufgeführten Beispielen das Ziel, ein Linux-System ('Debian 3.0 (Woody)') beim Client-Rechner zu installieren. 'Debian Woody' wurde gewählt, da bei dieser Version die Ablagestruktur der Dateien für den PXE-Boot sehr übersichtlich ist. Selbstverständlich lassen sich mit der gleichen Vorgehensweise analog auch andere Systeme installieren, wie z.B.: 'Debian 3.1 (Sarge)', 'Debian 4.0 (Etch)' oder 'IPCop 1.4.x' (Siehe Anmerkungen).

PXE-Boot-Server

PXE setzt auf Standard-Protokolle auf und ermöglicht aktuellen PCs eine problemloses Booten vom Netz. Die zwei Standard-Dienste auf die sich PXE stützt sind DHCP und TFTP.
Nachdem eine eine PXE-Anforderung von den Clients gestellt wurde, sorgt ein DHCP-Server für die Verteilung der nötigen Netzeinstellungen an die Clients, anschließend holen sich die Clients den Boot-Loader ('pxelinux.0') per TFTP und führen diesen aus. Das Ausführen der Boot-Loaders lädt/startet den Kernel und Installer für die weitere Installation. Die Boot-Datei ('pxelinux.0') kann maximal nur 32KB groß sein, das ist auch der Grund dafür, weshalb der Kernel nicht direkt geladen werden kann.

Debian PXE-Boot-Server

In folgenden wird die Realisierung eines Boot-Servers unter Debian GNU/Linux anhand eines Beispiels vorgestellt. Dabei wird zunächst auf die notwendige Installation und Konfiguration des DHCP- und TFTP-Servers eingegangen. Weiterhin wird die notwendige Ablagestruktur der relevanten Dateien für den PXE-Boot (Boot-Loader, Konfiguration, Kernel und Installer) vorgestellt.

DHCP-Server

Unter Debian installiert man am einfachsten den DHCP-Server mit: 'apt-get install dhcp3-server'. Danach muss der DHCP-Server anhand der Datei: '/etc/dhcp3/dhcpd.conf' konfiguriert werden. Eine einfache Beispiel-Konfiguration kann so aussehen:

/etc/dhcp3/dhcpd.conf

# Sample configuration file for dhcpd for PXE-boot

# network parameter
subnet 192.168.10.0 netmask 255.255.255.0 {
        default-lease-time 600;
        max-lease-time 7200;
        range 192.168.10.200 192.168.10.222;
        option domain-name-servers 192.168.10.10, 192.168.10.20;
        option domain-name "eusterholz.tld";
        option routers 192.168.10.1;
}

# client parameter
host install {
        hardware ethernet 00:0B:6A:3A:F5:3A;
        filename "pxelinux.0";
}

Die gelb markierten Bereiche sollten dem Parametern des Netzwerk angepasst werden. Der grün markierte Wert entspricht der MAC-Adresse des zu bootenden Rechners.

Nach der Bearbeitung der Konfigurationsdatei kann der DHCP-Server gestartet werden (/etc/init.d/dhcp3-server start).

TFTP-Server

Mit: 'apt-get install tftpd-hpa' kann ein TFTP-Server unter Debian installiert werden. Der TFTP-Server solle so installiert werden, dass er vom Super-Dämon: 'inetd' aus gestartet wird (Should the server be started by inetd? Y). Nach der Installation des TFTP-Servers ist gegebenenfalls die inetd.conf-Datei noch anzupassen.

Auszug aus: /etc/initd.conf (ca. Zeile: 37)

#: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

In der Datei: '/etc/inetd.conf' ist die Zeile bezüglich des Starts für den TFTP-Dämon auszukommentieren. In dieser Zeile wird auch angegeben, wo sich die Dateien für die FTP-Übertragung befinden (-s /var/lib/tftpboot).

Wurden Änderungen in der inetd.conf gemacht, so ist der Super-Dämon neu zu starten (/etc/init.d/inetd restart).

Ablagestruktur auf dem TFTP: Boot-Loader, Konfiguration, Kernel, Installer

Als Boot-Loader wird wie schon erwähnt PXELINUX genutzt, welches Bestandteil des Pakets: SYSLINUX ist. Auf einen Debian-System kann dies mit: 'apt-get-install syslinux' installiert werden. Anschließend wir die Datei: 'pxelinux.0' (das ist der Boot-Loader) aus '/usr/lib/syslinux' in das Ablageverzeichnis des TFTPs kopiert.

cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux.0

Der Boot-Loader: 'pxelinux.cfg' erwartet auf dem TFTP-Server ein Verzeichnis namens: 'pxelinux.cfg'. Im einfachsten Fall wird darin eine Konfigurationsdatei mit dem Namen: 'default' erwartet, in der die Parameter an den Linux-Kernel übergeben werden. Es sollte zunächst das Verzeichnis: 'pxeconfig.cfg' erstellt werden:

mkdir /usr/lib/tftpboot/pxelinux.cfg

/usr/lib/tftpboot/pxelinux.cfg/default

label linux
default linux
kernel linux.bin
append initrd=root.bin flavor=bf2.4
ipappend 1

Mit einen Editor ist im erzeugten Verzeichnis die Datei: 'default' mit abgebildeten Parametern (für Debian Woody) zu erstellen.

Weiterhin wird der Kernel: 'linux.bin' und ein Installer: 'root.bin' benötigt. Beide Dateien können vom Debian-Server am einfachsten mit dem Tool: 'wget' geladen werden.

wget ftp://ftp.debian.org/debian/dists/stable/main/disks-i386/current/bf2.4/linux.bin
wget ftp://ftp.debian.org/debian/dists/stable/main/disks-i386/current/images-1.44/bf2.4/root.bin

Alternativ sollten die Dateien 'linux.bin' und 'root.bin' auf den CD-Satz von 'Debian Woody' zu finden sein

Nach Bereitstellen der notwendigen vier Dateien für die Installation von 'Debian Woody' sollten in der Ablagestruktur wie folgt aussehen:

/var/lib/tftpboot/
                 +-- linux.bin
                 +-- pxelinux.0
               (aus SYSLINUX-Paket: 'http://www.kernel.org/pub/linux/utils/boot/syslinux/')
                 +-- root.bin
                 /---pxelinux.cfg/
                                 +-- default

Ein erster Test eines PXE-Boots kann nun stattfinden.

Windows PXE-Boot-Server

Auch unter Windows kann ein PXE-Boot-Server relativ einfach aufgesetzt werden. Im Prinzip ist es sogar einfacher, schneller oder praktikabler. Die einzelnen Bestandteile sind wie bei einem Linux-System: DHCP-Server, TFTP-Server und die Bereitstellung der notwendigen Dateien für den Boot.

DHCP/TFTP-Server

Das Freeware-Programm: 'Tftpd32' beinhaltet DHCP-, TFTP-, SNTP- und Syslog-Server, sowie einen TFTP-Client. Es eignet sich somit hervorragend für einen PXE-Boot-Server unter Windows. Die Installation besteht eigentlich nur aus dem Entpacken der ZIP-Datei in ein Verzeichnis (z.B.: c:\tmp\tftpd32), danach kann man tftpd32.exe sofort starten.

  

Nach dem Start des Programms sollte dieses unter: 'Settings' konfiguriert werden. Da nur DHCP- und TFTP-Server benötigt werden, können unter: 'Global Settings' alle anderen Dienste deaktiviert werden. Weiterhin muss unter: 'Base Directory' der Pfad zur Ablagestruktur (Boot-Loader, Konfiguration, Kernel) eingestellt werden.
Als nächstes müssen noch der DHCP-Server konfiguriert werden. Alle relevanten Netzwerkdaten sind anzugeben, ähnlich wie beim Linux-DHCP. Mit dem Schaltknopf: 'Save', ist die Konfiguration zu speichern.

Ablagestruktur auf dem TFTP: Boot-Loader, Konfiguration, Kernel, Installer

Für den erfolgreichen PXE-Boot ist eine korrekte Bereitstellung der notwendigen Dateien wichtig. Als Basis-Verzeichnis kann z.B. ein Ordner: 'c:\tmp\tftpboot\woody' angelegt werden. In diesem Ordner sind nun alle notwendigen Dateien, wie schon beim Linux Boot-Server beschriebenen, abzulegen. Hier die komplette Ablagestruktur:

C:\tmp\tftpboot\Debian GNULinux 3.0 (Woody)\
                                           +-- linux.bin
                                           +-- pxelinux.0
                                           +-- root.bin
                                           \---pxelinux.cfg\
                                                           +-- default

Unter Windows kann die Datei: 'pxelinux.0' aus der in ZIP-Form herunter zu ladenden Datei von SYSLINUX (z.B. 'syslinux-2.13.zip') extrahiert werden (Link siehe unten). Die Datei: 'default' kann mit einen gewöhnlichen Editor erstellt werden. Und die Kernel-Datei: 'linux.bin' und Installer-Datei: 'root.bin' können vom Debian-Server bezogen werden.

Installation eines Clients

Vorraussetzung bei der Installation via PXE-Boot ist, der zu installierende Rechner/Netzwerkkarte muss dieses unterstützen. Bei neuerer Hardware sollte dieses kein Problem sein, dazu muss das Booten vom Netzwerk im BIOS aktiviert sein.
Beim PXE-Boot sollte sich zunächst der Client eine IP-Addresse holen, und anschließend den Kernel laden und ausführen. Zum Schluss wird ein 'Installer' gestartet, mit der die Installation zu Ende gebracht werden kann. Für Debian-Sarge siehe folgendes Unterkapitel: 'Basis-System'.

Anmerkungen

DHCP-Server die in DSL- oder ISDN-Router integriert sind, sind in der Regel nicht für einen PXE-Boot geeignet. Auch sollte es nur einen DHCP-Server im Sub-Netz geben.

Ablagestruktur: Debian 3.1 (Sarge):

Möchte man eine Debian 3.1 (Sarge) via PXE-Boot installieren, so sind die relevanten Dateien hierzu bereitzustellen. Auf dem Debian-Server wird eine gepackte Datei angeboten ('netboot.tar.gz'), in der schon die komplette Ablagestruktur für einen PXE-Boot abgebildet ist. Am besten ist die Datei mit: 'wget' zu laden und anschließend mit: 'tar' zu entpacken:

cd /var/lib/tftpboot
(wget http://ftp.de.debian.org/debian/dists/sarge/main/installer-i386/current/images/netboot/netboot.tar.gz)
wget http://ftp.de.debian.org/debian/dists/Debian3.1r6/main/installer-i386/current/images/netboot/netboot.tar.gz
tar -xvvzf netboot.tar.gz

Nach dem Entpacken sollte folgende Struktur vorliegen:

drwxr-xr-x root/root         0 2007-03-10 10:54 ./
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/i386/
-rw-r--r-- root/root   4328835 2007-03-10 10:54 ./debian-installer/i386/initrd.gz
-rw-r--r-- root/root   1220145 2007-03-10 10:54 ./debian-installer/i386/linux
-rw-r--r-- root/root     13480 2007-03-10 10:54 ./debian-installer/i386/pxelinux.0
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/i386/pxelinux.cfg/
-rw-r--r-- root/root      1159 2007-03-10 10:54 ./debian-installer/i386/pxelinux.cfg/default
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/i386/pxelinux.cfg.serial-9600/
-rw-r--r-- root/root      1274 2007-03-10 10:54 ./debian-installer/i386/pxelinux.cfg.serial-9600/default
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/i386/boot-screens/
-rw-r--r-- root/root       102 2007-03-10 10:54 ./debian-installer/i386/boot-screens/boot.txt
-rw-r--r-- root/root       873 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f1.txt
-rw-r--r-- root/root       568 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f10.txt
-rw-r--r-- root/root       666 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f2.txt
-rw-r--r-- root/root       623 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f3.txt
-rw-r--r-- root/root       416 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f4.txt
-rw-r--r-- root/root       806 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f5.txt
-rw-r--r-- root/root      1139 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f6.txt
-rw-r--r-- root/root       916 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f7.txt
-rw-r--r-- root/root      1102 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f8.txt
-rw-r--r-- root/root       766 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f9.txt
-rw-r--r-- root/root      9519 2007-03-10 10:54 ./debian-installer/i386/boot-screens/splash.rle
lrwxrwxrwx root/root         0 2007-03-10 10:54 ./pxelinux.cfg -> debian-installer/i386/pxelinux.cfg
lrwxrwxrwx root/root         0 2007-03-10 10:54 ./pxelinux.0 -> debian-installer/i386/pxelinux.0

Mit der vorliegenden Struktur kann ein PXE-Boot nun stattfinden.

Unter Windows kann die Datei z.B. mit dem Internet-Explorer geladen und mit 'WinZip' entpackt werden. Da sich in der Archiv-Datei jedoch Soft-Links befinden und 'WinZip' hiermit nicht klar kommt, muss noch etwas nachgearbeitet werden. Die Dateien: 'pxelinux.0' muss auf der ersten Ebene des TFTP-Ordners kopiert werden. Auch muss noch der Ordner 'pxelinux.cfg' auf der ersten Ebene erstellt werden und die Datei: 'default' dort hin kopiert werden.

C:\tmp\tftpboot\sarge\
                     |
                     +-- pxelinux.0 
<-----------------------------------------------+
                     |                                                              
|
                     +-- debian-installer\                                          
|
                     |                   +-- i386\                               
kopieren
                     |                   |   +-- initrd.gz                          
|
                     |                   |   +-- linux                              
|
                     |                   |   +-- (pxelinux.0) 
----------------------+
                     |                   |
                     |                   +---boot-screens\
                     |                   |               +-- boot.txt
                     |                   |               +-- f1.txt
                     |                   |               +-- f10.txt
                     |                   |               +-- f2.txt
                     |                   |               +-- f3.txt
                     |                   |               +-- f4.txt
                     |                   |               +-- f5.txt
                     |                   |               +-- f6.txt
                     |                   |               +-- f7.txt
                     |                   |               +-- f8.txt
                     |                   |               +-- f9.txt
                     |                   |               +-- splash.rle
                     |                   |
                     |                   +---(pxelinux.cfg)\
------------------------+
                     |                   |                 +-- (default)
------------+
                     |                   |                                          
|
                     |                   \---pxelinux.cfg.serial-9600\           
kopieren
                     |                                               +-- default    
|
                     |                                          
                    |
                     \-- pxelinux.cfg
<--------------------------------------------+
                                     +-- default 
<----------------------------------+

Die gelb und grün markierten Dateien sind als Link verknüpft, sie müssen nach dem Entpacken unter Windows aufgelöst werden.

Ablagestruktur: Debian 4.0 (Etch):

Auch die Ablagestruktur von 'Debian 4.0 (Etch)' ist ähnlich wie bei 'Debian 3.1 (Sarge)', im Prinzip gilt hier die gleiche Vorgehensweise wie oben beschrieben. Das NetBoot-Image ist z.B. unter 'http://ftp.de.debian.org/debian/dists/Debian4.0r0/main/installer-i386/current/images/netboot/netboot.tar.gz' zu finden. Nach dem Entpacken unter Linux, sollte die Struktur wie folgt aussehen:

drwxr-xr-x root/root         0 2007-03-10 10:54 ./
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/i386/
-rw-r--r-- root/root   4328835 2007-03-10 10:54 ./debian-installer/i386/initrd.gz
-rw-r--r-- root/root   1220145 2007-03-10 10:54 ./debian-installer/i386/linux
-rw-r--r-- root/root     13480 2007-03-10 10:54 ./debian-installer/i386/pxelinux.0
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/i386/pxelinux.cfg/
-rw-r--r-- root/root      1159 2007-03-10 10:54 ./debian-installer/i386/pxelinux.cfg/default
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/i386/pxelinux.cfg.serial-9600/
-rw-r--r-- root/root      1274 2007-03-10 10:54 ./debian-installer/i386/pxelinux.cfg.serial-9600/default
drwxr-xr-x root/root         0 2007-03-10 10:54 ./debian-installer/i386/boot-screens/
-rw-r--r-- root/root       102 2007-03-10 10:54 ./debian-installer/i386/boot-screens/boot.txt
-rw-r--r-- root/root       873 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f1.txt
-rw-r--r-- root/root       568 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f10.txt
-rw-r--r-- root/root       666 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f2.txt
-rw-r--r-- root/root       623 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f3.txt
-rw-r--r-- root/root       416 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f4.txt
-rw-r--r-- root/root       806 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f5.txt
-rw-r--r-- root/root      1139 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f6.txt
-rw-r--r-- root/root       916 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f7.txt
-rw-r--r-- root/root      1102 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f8.txt
-rw-r--r-- root/root       766 2007-03-10 10:54 ./debian-installer/i386/boot-screens/f9.txt
-rw-r--r-- root/root      9519 2007-03-10 10:54 ./debian-installer/i386/boot-screens/splash.rle
lrwxrwxrwx root/root         0 2007-03-10 10:54 ./pxelinux.cfg -> debian-installer/i386/pxelinux.cfg
lrwxrwxrwx root/root         0 2007-03-10 10:54 ./pxelinux.0 -> debian-installer/i386/pxelinux.0

Ablagestruktur: IPCop 1.4.10

Zum Schluss noch ein weiteres Beispiel einer Ablagestruktur für das Firewall-System: 'IPCop'. Zunächst ist ein ISO-Images von IPCop herunter zu laden. Die im Image enthaltenen Dateien müssen extrahiert werden. Zum extrahieren der Image-Datei kann z.B.: 'WinISO' genutzt werden oder im trivialsten Fall ist eine CD im ISO-Format zu erstellen.
Aus dem Image werden folgende Dateien benötigt, die wie folgt abgelegt werden (siehe Struktur):

C:\tmp\tftpboot\ipcop\                                   (bzw. unter Linux: '/var/lib/tftpboot')
                     +-- boot.catalog               
    (aus IPCop-Image z.B.: 'CD:\boot\isolinux\')
                     +-- instroot.gz                
    (aus IPCop-Image z.B.: 'CD:\boot\isolinux\')
                     +-- isolinux.bin        
           (aus IPCop-Image z.B.: 'CD:\boot\isolinux\')
                     +-- (isolinux.cfg)
-------------+   (aus IPCop-Image z.B.: 'CD:\boot\isolinux\')
                     +-- message                    
|   (aus IPCop-Image z.B.: 'CD:\boot\isolinux\)
                     +-- pxelinux.0       
          |   (aus SYSLINUX-Paket: 'http://www.kernel.org/pub/linux/utils/boot/syslinux/')
                     +-- vmlinuz           
         |   (aus IPCop-Image z.B.: 'CD:\boot\isolinux\')
                     +-- (ipcop-1.4.10.tgz)  
       |   (aus IPCop-Image z.B.: 'CD:\'; wird für weitere Installation benötigt)
                     |                       
   kopieren
                     \---pxelinux.cfg\              
|
                                     +-- default 
<--+   (von IPCop-Image z.B. 'CD:\boot\isolinux\isolinux.cfg' verschieben bzw.
                                                          kopieren nach 'default')

Wichtig ist die Datei: 'isolinux.cfg', sie muss als Datei: 'default' im Verzeichnis: 'pxelinux.cfg' vorhanden sein (einfach kopieren oder umbenennen). Die Datei 'pxelinux.0' kann aus dem SYSLINUX-Paket entnommen werden (entpacken der Datei). Die Datei 'ipcop-1.4.10.tgz' wird für die weitere Installation nachdem der PXE-Boot schon abgeschlossen ist benötigt. Ein WEB-Server (z.B. 'TinyWeb') muss diese Datei zu Verfügung stellen.

Weitere Infos

Homepage: Debian http://www.debian.org/
Installation von Sarge mit dem Debian-Installer http://www.debian.org/devel/debian-installer/
Debian Sarge Installations-Handbuch http://d-i.alioth.debian.org/manual/
PXE Spezifikation von Intel ftp://download.intel.com/labs/manage/wfm/download/pxespec.pdf
SYSLINUX (by H. Peter Anvin) http://syslinux.zytor.com/
Debian-Installer: Boot via PXE http://wiki.debian.net/index.cgi?DebianInstallerNetbootPXE
Debian-Installer: boot via TFTP http://wiki.debian.net/index.cgi?DebianInstallerBootpTFTP
RFC, TFTP: TFT-Protokoll, ISI ftp://ftp.isi.edu/in-notes/std/std33.txt
RFC, DHCP Options and BOOTP Vendor Extensions http://www.faqs.org/rfcs/rfc2132.html
Tftpd32 http://tftpd32.jounin.net/

Home ] Nach oben ] NET-CD Boot ] Floppy Boot ] [ PXE Boot ] USB-Stick Boot ] Basis-System ]

letzte Änderung: 06. Mai 2007

 

Copyright © 2004 Norbert Eusterholz