Nachdem ich selber einen Raspberry PI als PXE Server nutzen wollte und mich durch diverse Probleme und Artikel gekämpfen hatte, beschloss ich dazu ein Tutorial zu erstellen.
Grundsätzlich orientieren sich die Informationen an der Anleitung für Bootserver-VM
Thread von
mrshadowtux . Dennoch sind für Raspbian einige Configs anders.
Getestet am 26.4.2014 mit Rasbian
Linux RPI-PXE 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l GNU/Linux
SD Karte: 8GB
Vorgängige Info
Als Editor wird nano verwendet. In allen Befehlen wo
nano vorkommt kann das Wort durch den jeweiligen Editor Namen verwenden.
Um Schwierigkeiten zu vermeiden wird hier mit nur einem Netz gearbeitet.
Hier 192.168.
1.xx. Bei anderen Netzen ist die Zahl mit der
roten Farbe jeweils anzupassen.
Mit
grüner Farbe werden die Anpassungen angezeigt.
Vor Beginn sollten noch alle Pakete auf den neusten Stand gebracht werden_
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
Statische IP Adresse
Es wird eine fixe IP Adresse benötigt. Als IP Adresse kommt eure IP hinein. Hier lege ich die IP meines RPI als 192.168.
1.4 fest. Dafür wird die Datei
/etc/network/interfaces editiert.
sudo nano /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.1.4 #IP des Raspberry
netmask 255.255.255.0
gateway 192.168.1.1 #IP eures Rauters, häufig 1
network 192.168.1.0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
Einrichtung des DHCP-Server
Der DHCP Server wird folgendermassen installiert:
sudo apt-get install isc-dhcp-server
Während der Installation wird versucht den DHCP-Server zu starten. Wegen der Standart-Konfiguration erscheint aber eine Fehlermeldung. Darum muss jetzt
die Konfigurationsdatei
/etc/default/isc-dhcp-server angepasst werden:
sudo nano /etc/default/isc-dhcp-server
Darin wird folgende Zeile verändert:
INTERFACES="
eth0"
eth0 ist die Netzwerkschnitstelle des DHCP Servers.
Jetzt folgt die eigentliche DHCP Konfiguration. Die originale Konfigurationsdatei wird gesichern und eine neue erstellt.
sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orginial
sudo nano /etc/dhcp/dhcpd.conf
folgenden Zeilen werden eingefügt:
Code:
#Generelle Einstellungen
# Rogue-DHCP-Server nicht erlauben
authoritative;
#
ddns-update-style none;
allow booting;
allow bootp;
#Logfiles in /var/log/localmessages
log-facility local7;
# Definition des ersten (einzigen) Subnetzes
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.3 192.168.1.254;
#Lease-Time (in Sekunden)
default-lease-time 600;
max-lease-time 7200;
option domain-name-servers 192.168.1.1; #IP eures DNS-Servers, im Zweifelsfall die IP des Routers
option subnet-mask 255.255.255.0;
option routers 192.168.1.1; #IP eures Routers
}
# tftp-Server Einstellungen für PXE
next-server 192.168.1.4; #unser pxe server, rpi
filename "pxelinux.0";
Nachdem die Konfigurationsdatei erstellt wurde, wird der DHCP Server neugestartet und ein Reboot gemacht:
sudo service isc-dhcp-server start
sudo reboot
Einrichtung von tftpd-hpa
Zuerst muss das Paket tftpd-hpa installiert werden:
sudo apt-get install tftpd-hpa
Wichtig: Der Service tftpd-hpa wird hier direkt versucht zu starten was mit einer Fehlermeldung fehlschlägt.
Das ist nicht weiter schlimm, denn jetzt muss noch die Konfigurationsdatei
/etc/default/tftpd-hpa angepasst werden:
sudo nano /etc/default/tftpd-hpa
Die Datei
/etc/default/tftpd-hpa wird folgendermassen angepasst :
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --ipv4"
Der TFTP-Server erwartet in der Voreinstellung einen IPv6-Socket, was zunächst zu
einer Fehlermeldung führt. Darum muss hier der Eintrag
--ipv4 hinzugefügt werden.
Danach wird tftpd-hpa neugestartet:
sudo service tftpd-hpa start
Einrichten des NFS-Servers
Damit der Netzwerkstart von Rettungssystemen funktioniert muss der RasPi die Möglichkeit haben, Verzeichnisse über NFS im Netz bereitzustellen.
sudo apt-get update
sudo apt-get install nfs-kernel-server
Die Warnung danach kann getrost ignoriert werden. Sie kommt daher, dass in der Datei
/etc/exports noch keine Freigaben definiert sind.
Wir erstellen den Ordner
/srv/nfs .An dieser Stelle werden die Dateisysteme der Clients hinterlegt.
cd /srv/
sudo mkdir nfs
Die Datei
/etc/exports wird jetzt folgendermassen angepasst.
sudo nano /etc/exports
/srv/nfs 192.168.1.0/24(ro,sync,no_root_squash,no_subtree_check)
Erklärung:
Die Konfiguration ist für Clients des Netzwerk 192.186.
1.0
ro (read only): Der Client kann im exportierten System nur lesen
sync: Synchroner Datentransfer
no_root_squash: Root Benutzer eines Clients darf mit root Erlaubnis schreiben
no_subtree_check: Ausschalten des Subtree-Checking. Nur wenn komplettes Dateisystem freigegeben
Weiter Optionen unter
NFS Ubuntu Wiki
Dienste:
Jetzt müssen 3 installierte Dienste aktiviert werden. Zuerst muss aber in der Datei
/etc/netconfig die ipv6 Unterstützung deaktiviert werden:
sudo nano /etc/netconfig
Die Zeilen mit udp6 und tcp6 werden durch Voranstellen von # auskommentiert.
Danach starten wir die 3 Dienste:
sudo service rpcbind start
sudo service nfs-common start
sudo service nfs-kernel-server start
Der Befehl
sudo showmount -e zeigt unser freigegebenes Verzeichniss an also
/srv/nfs für
192.168.1.0/24.
Leider werden die Dienste rpcbind und nfs-common nicht automatisch gestartet. Darum müssen noch folgende Anpassungen gemacht werden:
Bestehende Skripte löschen:
Zuerst müssen bestehende Skripte gelöscht werden und mit überprüft ob gewisse Skripte manuell gelöscht werden müssen:
sudo insserv -r nfs-kernel-server
find /etc/rc* -name *nfs-kernel-server
sudo insserv -r nfs-common
find /etc/rc* -name *nfs-common
sudo insserv -r rpcbind
find /etc/rc* -name *rpcbind
Falls ein Skript nicht automatisch gelöscht wurde und mit "find" gefunden wurde kann es folgendermassen gelöscht werden:
sudo rm -f "pfad zur datei"
Danach sollte nochmals mit "find" eine Überprüfung durchgeführt werden.
Skripte neu anlegen
sudo insserv rpcbind
sudo insserv nfs-common
sudo insserv nfs-kernel-server
Mit "find" kann wiederum überprüft werden ob für Start und Kill Skripte vorhanden sind.
Jetzt muss der RPI noch neugestartet werden mit
sudo reboot
Einrichtung des PXE Server (Syslinux)
Jetzt wird das Packet
syslinux-common installiert und danach werden die benötigten Dateien aus dem Syslinux-Installationsverzeichnis ins TFTP-Verzeichnis kopiert. Für die PXE Konfigurationsdateien muss noch ein neues Verzeichniss
pxelinux.cfg im TFTP-Hauptverzeichnis erstellt werden.
sudo apt-get install syslinux-common
sudo cp /usr/lib/syslinux/chain.c32 /usr/lib/syslinux/menu.c32 /usr/lib/syslinux/vesamenu.c32 /usr/lib/syslinux/pxelinux.0 /srv/tftp/
sudo mkdir /srv/tftp/pxelinux.cfg
Nun wird eine simple config Datei erstellt, welche von allen Clients geladen wird wenn keine MAC-Adresse spezifische config gefunden wird.
sudo nano /srv/tftp/pxelinux.cfg/default
In die Datei
/srv/tftp/pxelinux.cfg/default wird folgendes eingetragen:
DEFAULT vesamenu.c32
PROMPT 0
TIMEOUT 300
MENU TITLE PXE Network Boot Menu
LABEL local
MENU LABEL Von Festplatte starten
MENU DEFAULT
LOCALBOOT 0
Wenn gewünscht kann ein Hintergrundbild gesetzt werden. Das Bild muss eine Auflösung von 640x480 haben und idealerweise im JPG-Format sein. Das Bild kommt nach
/srv/tftp/ und in der
/srv/tftp/pxelinux.cfg/default muss noch folgender Eintrag gemacht werden
MENU BACKGROUND dateiname.jpg
Memtest86+
Da Raspbian wegen der ARM Architektur keinen Memtest von zu Hause aus mit sich bringt muss dieser für das PXE Menu heruntergeladen werden.
Dazu wird wird ein neues Verzeichnis erstellen und memtest86+ gedownloadet.
cd /srv/tftp/
sudo mkdir memtest86+
cd memtest86+
sudo wget http://www.memtest.org/download/4.20/mem....20.bin.gz
Die Datei wird entpackt :
sudo gzip -d memtest86+-4.20.bin.gz
Die Endung .bin muss entfernt werden damit memtest über das Netwerk gebootet werden kann.
sudo mv memtest86+-4.20.bin memtest86+-4.20
Die Datei
/srv/tftp/pxelinux.cfg/default wird um folgendes
ergänzt:
sudo nano /srv/tftp/pxelinux.cfg/default
LABEL memtest86+
MENU LABEL Speichertest mit memtest86+ v4.20
KERNEL memtest86+/memtest86+-4.20
Abschliessendes für den ersten Teil
Jetzt muss der RPI noch neugestartet werden mit
sudo reboot
Auf den Clients muss jetzt PXE Boot aktiviert und beim Booten ausgewählt werden. Danach sollte es folgendermassen aussehen:
Wir haben jetzt folgende Verzeichnisstruktur:
/srv/tftp/ ist das Rootverzeichnis des tftp-Servers. Hier werden die Kernel bzw. die zu bootenden Daten hinterlegt. Des Weiteren beinhaltet dieses Verzeichnis das Konfigurationsverzeichnis pxelinux.cfg.
/srv/tftp/pxelinux.cfg/ ist das Konfigurationsverzeichnis. Darin muss die Datei
default enthalten sein.
/srv/nfs/ ist das Rootverzeichnis des Clients. An dieser Stelle werden die Dateisysteme der Clients hinterlegt.
MS DOS 6.22 Bootdisk
Zuerst muss das Programm
memdisk von
/usr/lib/syslinux/ nach
/srv/tftp/ kopiert werden.
sudo cp /usr/lib/syslinux/memdisk /srv/tftp/memdisk
Neues Verzeichnis erstellen und ima Datei downloaden.
cd /srv/tftp/
sudo mkdir msdos622
cd msdos622
sudo wget http://www.pixelbanane.de/yafu/211491893...22boot.IMA
cd ..
Die Datei
/srv/tftp/pxelinux.cfg/default wird um folgendes
ergänzt:
sudo nano /srv/tftp/pxelinux.cfg/default
LABEL msdos622
MENU LABEL MS-DOS 6.22 Bootdisk
KERNEL memdisk
APPEND raw initrd=msdos622/dos622boot.IMA
LABLE muss der Name des Ordners wo die img Datei liegt, hier msdos622, sein.
Bei initrd muss der Pfad der img Datei relativ zur default Datei angegeben werden.
Jetzt muss der RPI noch neugestartet werden mit
sudo reboot
Norton SI
Hier richten wir eine Bootdisk mit Norton SI und MSD ein.
Neues Verzeichnis erstellen und ima Datei downloaden (memdisk muss vorhanden sein, siehe oben).
cd /srv/tftp/
sudo mkdir nortonsi
cd nortonsi
sudo wget http://www.pixelbanane.de/yafu/237175461...SIboot.IMA
cd ..
Die Datei
/srv/tftp/pxelinux.cfg/default wird um folgendes
ergänzt:
sudo nano /srv/tftp/pxelinux.cfg/default
LABEL nortonsi
MENU LABEL Norton SI + MSD auf Bootdisk
KERNEL memdisk
APPEND raw initrd=nortonsi/NortonSIboot.IMA
Jetzt muss der RPI noch neugestartet werden mit
sudo reboot
FreeDOS 1.1 Setup
Neues Verzeichnis erstellen und iso Datei downloaden (memdisk muss vorhanden sein, siehe oben).
cd /srv/tftp/
sudo mkdir freedos
cd freedos
sudo wget http://www.freedos.org/download/download/fd11src.iso
cd ..
Die Datei
/srv/tftp/pxelinux.cfg/default wird um folgendes
ergänzt:
sudo nano /srv/tftp/pxelinux.cfg/default
LABEL freedos
MENU LABEL FreeDOS 1.1 Setup
KERNEL memdisk
APPEND iso initrd=freedos/fd11src.iso
Jetzt muss der RPI noch neugestartet werden mit
sudo reboot
Damn Small Linux (DSL) 4.4.10 Live CD
Neues Verzeichnis erstellen und iso Datei downloaden.
cd /srv/tftp/
sudo mkdir dsl
cd dsl
sudo wget http://distro.ibiblio.org/damnsmall/curr...initrd.iso
Jetzt müssen wir das Image mounten und die benötigen Dateien kopieren:
sudo mount -o loop dsl-4.4.10-initrd.iso /mnt
sudo cp /mnt/boot/isolinux/linux24 /mnt/boot/isolinux/minirt24.gz /srv/tftp/dsl/
Nachdem alle Dateien kopiert wurden wird das iso Image wieder ausgehängt und gelöscht:
sudo umount /mnt
sudo rm /srv/tftp/dsl/dsl-4.4.10-initrd.iso
Die Datei
/srv/tftp/pxelinux.cfg/default wird um folgendes
ergänzt:
sudo nano /srv/tftp/pxelinux.cfg/default
LABEL dsl
MENU LABEL Damn Small Linux 4.4.10 Live CD
KERNEL dsl/linux24
APPEND initrd=dsl/minirt24.gz ramdisk_size=100000 init=/etc/init lang=de quiet vga=791
Jetzt muss der RPI noch neugestartet werden mit
sudo reboot
Anmerkung: Das Laden über PXE dauert eine Weile und es wird kein Bootbild angezeigt. Der Client hat sich also nicht aufgehängt, wenn das PXE Bootmenü länger stehen bleibt. Einfach Geduld haben.
Debian 6.0.9 Netinstall
Neues Verzeichnis erstellen und iso Datei downloaden:
cd /srv/tftp
sudo mkdir debian
cd debian
sudo wget http://ftp.debian.org/debian/dists/squee...i386/linux
sudo wget http://ftp.debian.org/debian/dists/squee.../initrd.gz
Die Datei
/srv/tftp/pxelinux.cfg/default wird um folgendes
ergänzt:
sudo nano /srv/tftp/pxelinux.cfg/default
LABEL debian
MENU LABEL Debian 6.0.9 Netinstall
KERNEL debian/linux
APPEND initrd=debian/initrd.gz
Jetzt muss der RPI noch neugestartet werden mit
sudo reboot
GParted Live 0.18.0-2 i486
Im Gegensatz zum empfohlenen HTTP Server benützen wir unseren NFS Server, der installiert sein muss (siehe oben).
Neues Verzeichnis erstellen und iso Datei downloaden.
cd /srv/tftp/
sudo mkdir gparted
cd /srv/nfs/
sudo mkdir gparted
cd gparted
sudo mkdir live
sudo wget -O gparted-live-0.18.0-2-i486.iso "http://sourceforge.net/projects/gparted/...o/download" #Gänsefüschen nicht vergessen!
Jetzt müssen wir das Image mounten und die benötigen Dateien kopieren:
sudo mount -o loop gparted-live-0.18.0-2-i486.iso /mnt
sudo cp -a /mnt/live/initrd.img /mnt/live/vmlinuz /srv/tftp/gparted/
sudo cp -a /mnt/live/initrd.img /mnt/live/vmlinuz /srv/nfs/gparted/
sudo cp -a /mnt/live/filesystem.squashfs /srv/nfs/gparted/live
Nachdem alle Dateien kopiert wurden wird das iso Image wieder ausgehängt und gelöscht:
sudo umount /mnt
sudo rm /srv/nfs/gparted/gparted-live-0.18.0-2-i486.iso
Die Datei
/srv/tftp/pxelinux.cfg/default wird um folgendes
ergänzt:
sudo nano /srv/tftp/pxelinux.cfg/default
LABEL gparted
MENU LABEL GParted Live i486
KERNEL /gparted/vmlinuz
APPEND initrd=gparted/initrd.img boot=live noswap noprompt nosplash vga=788 netboot=nfs nfsroot=192.168.1.4:/srv/nfs/gparted --
antiX
basiert auf Debian Testing
3.14.1 custom kernel
Läuft unter PII,PIII, min RAM = 64 - 128MB
Infos unter:
http://antix.mepis.org/index.php?title=Main_Page
Kaspersky Rescue Disk 10
cd /srv/tftp
sudo mkdir kaspersky
cd kaspersky
sudo wget
http://rescuedisk.kaspersky-labs.com/res...cue_10.iso
to be continued....
Grml Live Linux
Weitere Infos unter
Booting Grml without grml-terminalserver
PXE Bootdisk für ältere Clients ohne PXE fähige Netzwerkkarte
Weiter Infos unter:
http://www.syslinux.org/wiki/index.php/P...XELINUX.3F
MS DOS 6.22 Installation (Floppy)
Für Windows und weitere Linux Distributionen verweise ich gerne auf den schon oben erwänten Thread von mrshadowtux.
KOMMT BALD, Ich werde dieses Tutorial laufend ergänzen.