Raspberry Pi - PXE Boot von Qnap NAS
Vorbereitungen SD-Karte und Raspberry Pi
Übertragt wie gewöhnlich das aktuelle Rasbian lite Image(oder ein anderes) auf eine SD-Karte.
Tipp: Noch eine leere Datei "ssh" in der ersten Partition anlegen! -> aktiviert den Zugriff über ssh (Putty/Winscp)
Bootet nun euren Pi und führt eine Grundkonfiguration mit raspi-config durch.
Danach wechselt ihr auf das next-Release:
- ermitteln der Seriennummer und macadresse eures Pi:
sudo cat /proc/cpuinfo|grep Serial
sudo cat /sys/class/net/eth0/address
Beide Werte notieren!
Sie werden zum einen in der dhcpd.conf und zum anderen in der Verzeichnisstruktur gebraucht!
Für Raspberry Typ 3 :
Anschließend fügt ihr mit dem nachfolgenden Befehl am Ende der Datei "/boot/config.txt" noch eine Zeile hinzu (program_usb_boot_mode=1) :
echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
und startet danach den Pi neu!
Nach erfolgtem Neustart könnt ihr die Zeile wieder aus der Datei entfernen. Führt nun zur Sicherheit folgenden Befehl aus:
vcgencmd otp_dump | grep 17:
Die Ausgabe sollte „17:3020000a“ entsprechen. Somit hat alles geklappt. Euer RasPi-Typ 3 ist nun auf dem next-Release und grundsätzlich Netzwerk Boot-fähig.
Für alle andern Raspberry (außer Typ 3) :
Diese benötigen für den PXE Boot eine mit FAT32 formatierte SD Karte auf der als einzige Datei die (aktuelle) bootcode.bin ist!
Vorbereitung auf dem Qnap NAS
Für mein Setup hatte ich mir folgende Bedingungen gesetzt:
- keine zusätzlichen Pakete bzw. Apps / alles soll nur mit in der Firmware bereits vorhandenen Programme laufen
- alle benötigten Konfigurationen und Dateien in einem Freigabeordner (auch NFS)
- Möglichkeit der Aktualisierung der Raspi Software incl.Firmware (boot)
1. Im Webinterface / ControlPanel
Anlegen eines Freigabeordners (pxeroot) im Webinterface (Systemsteuerung/Rechte/Freigabeordner)
Berechtigung für Freigabeordner bearbeiten / NFS-Hostzugriff /Zugriffrecht - Keine Beschränkung
Wichtig! - Den DHCP Server und den TFTP Server NICHT im Webinterface aktiv setzen!!
2. Verzeichnisstruktur in /share/pxeroot anlegen und Dateien erstellen bzw. kopieren
share/pxeroot
├── 0e81e887 -> raspi/PiJuergen/boot
├── bootcode.bin
├── ccfc0bd9 -> raspi/PiGernot/boot
├── conf
│ ├── dhcpd.conf
│ ├── opentftpd.ini
│ └── pxe.sh
└── raspi
├── PiGernot
│ └── boot
│
└── PiJuergen
└── boot
Alles anzeigen
Datei "bootcode.bin" wird von der SD Karte nach "pxeroot" kopiert.
Verzeichnis "conf" enthält alle Konfigurationsdateinen und das Startscript (pxe.sh)
pxe.sh
Wichtig! - wenn ihr eine andere Verzeichnisstruktur wählt, dann die Variable "PXECONF" anpassen!
Datei auf "ausführbar" setzen!
#!/bin/sh
#pxe.sh
PXECONF=/share/pxeroot/conf
if ! [ -e $PXECONF/dhcpd.leases ] ; then touch $PXECONF/dhcpd.leases ; fi
if ! [ -L /bin/pxe.sh ] ; then ln -s $PXECONF/pxe.sh /bin/pxe.sh >null 2>&1 ; fi
start()
{
echo `date` Start APP "PXE" pxe.sh >> /var/log/pxe.log
#======================================================================
dhcpd -cf $PXECONF/dhcpd.conf -lf $PXECONF/dhcpd.leases
sleep 1
if [ -n "$(pidof dhcpd)" ]
then
echo -e " \033[32m OK - dhcpd läuft \033[0m "
else
echo -e "\033[31m ERROR - dhcpd läuft nicht \033[0m "
exit 1
fi
if [ -e $PXECONF/opentftpd.log ] ; then rm $PXECONF/opentftpd.log ; fi
opentftpd -i $PXECONF/opentftpd.ini -l $PXECONF/opentftpd.log
#================================================
}
stop()
{
echo `date` Stop pxe.sh >> /var/log/pxe.log
#====================================================================
echo "Shutting down opentftpd and dhcpd"
/bin/kill -9 `/bin/pidof opentftpd`
/bin/kill -9 `/bin/pidof dhcpd`
#================================================
}
# you do not need to edit this lines
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
# Restarting the Daemon
$0 stop
sleep 1
$0 start
;;
*)
## If no parameters are given, print which are avaiable.
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit
Alles anzeigen
dhcpd.conf (muss natürlich auf eure Umgebung angepasst werden)
# dhcpd.conf
max-lease-time 86400;
default-lease-time 3600;
ddns-update-style none; ddns-updates off;
authoritative;
allow booting;
allow bootp;
next-server 10.128.5.184;
option tftp-server-name "10.128.5.184";
subnet 10.128.5.160 netmask 255.255.255.224 {
range 10.128.5.165 10.128.5.179;
option routers 10.128.5.161;
option domain-name "hm6.loc";
#option netbios-name-servers 0.0.0.0;
option domain-name-servers 10.128.5.180;
}
group {
option bootfile-name "bootcode.bin";
option vendor-class-identifier "PXEClient";
option vendor-encapsulated-options "Raspberry Pi Boot";
#option vendor-encapsulated-options 6:1:3:a:4:0:50:58:45:9:14:0:0:11:52:61:73:70:62:65:72:72:79:20:50:69:20:42:6f:6f:74:ff;
host pi3Juergen {
hardware ethernet b8:27:eb:81:e8:87;
##Serial : 000000000e81e887 # 0e81e887
}
host piGernot {
hardware ethernet b8:27:eb:fc:0b:d9;
fixed-address 10.128.5.180;
##Serial : 00000000ccfc0bd9 # ccfc0bd9
}
host piPeter {
hardware ethernet b8:27:eb:7a:89:de;
##Serial : 00000000257a89de # 257a89de
}
host whitepi {
hardware ethernet b8:27:eb:a5:b4:83;
}
}
host terra {
hardware ethernet 00:19:99:ac:6c:07;
fixed-address 10.128.5.162;
}
host gigaquad {
hardware ethernet 90:98:64:00:31:2a;
fixed-address 10.128.5.163;
}
host gigablue {
hardware ethernet ac:db:ef:11:22:33;
fixed-address 10.128.5.164;
}
Alles anzeigen
opentftpd.ini
Wichtig! - wenn ihr eine andere Verzeichnisstruktur wählt, dann die Variable [HOME] anpassen!
[PORT]
69
[LISTEN-ON]
[HOME]
/share/pxeroot
[LOGGING]
All
[ALLOWED-CLIENTS]
[TFTP-OPTIONS]
username=admin
read=Y
overwrite=N
write=N
Alles anzeigen
Jetzt kann DHCP und TFTP mit dem Script "pxe.sh" gestartet werden.
/share/pxeroot/conf/pxe.sh start
Der vollständige Path muss nur beim erstmaligen Start angegeben werden.
Später reicht der Aufruf pxe.sh restart da ein Symlink "/bin/pxe.sh" angelegt wird.
ob der DHCP Dienst läuft - ps -e|grep dhcpd
ob der TFTPDienst läuft - ps -e|grep tftp
Test TFTPDienst
unter Linux auf dem NAS - tftp -g -r bootcode.bin 127.0.0.1
auf einem Windows Client - tftp 10.128.5.184 get bootcode.bin
C:\Users\Administrator>tftp 10.128.5.184 get bootcode.bin
Übertragung erfolgreich: 52116 Bytes in 1 Sekunde(n), 52116 Bytes/s
Auch im TFTP Logfile unter "pxeroot/conf" sieht man ob ein Get File erfolgreich war!
Zum jetzigen Zeitpunkt kann man schon mal seinen Pi über PXE starten.
Wenn DHCP und TFTP fehlerfrei laufen, dann kann man die Seriennummer vom Pi in der "opentftpd.log" finden. Damit hat man dann gleich den richtigen Name für den Symlink aus Seriennummer!
aus meinem Logfile die wichtige Zeile mit der Seriennummer(hier ^^^^) :
Wenn beide Dienst fehlerfrei laufen dann realisiert man den Autostart der Dienste durch folgenden Eintrag am Ende der "/etc/config/qpkg.conf"
[pxe]
Status = complete
Build = 20170620
Name = pxe
Version = 0.8
Author = kasimodo
QPKG_File = pxe.qpkg
Date = 2017-11-11
Shell = /share/pxeroot/conf/pxe.sh
Install_Path = /share//pxeroot/conf
RC_Number = 191
Enable = TRUE
Alles anzeigen
PI Software kopieren und anpassen
Das Verzeichnis "pxeroot/raspi" enthält für jeden Raspi bzw. Pi-Betriebssystem ein eigenes Unterverzeichnis. Dies ist gleichzeitig das NFS Root Verzeichnis
Welches Verzeichnis zum Booten benutzt, dies wird über den jeweiligen Symlink (Seriennummer vom Raspi) in "pxeroot" bestimmt. Der Symlink "Seriennummer" in "pxeroot" verweist immer auf das Verzeichnis "boot" in dem Raspi Software Root Verzeichnis. ( siehe Verzeichnisstruktur oben im Beitrag)
Das Linux Root Verzeichnis von der zweiten Partition auf der SD Karte wir in dieses Verzeichnis kopiert.
Das Kernel Verzeichnis von der ersten Partition (Fat32) auf der SD Karte wird dann in das Unterverzeichnis "boot" kopiert!
Achtung! - wer DietPi benutzt, der muss noch alle Dateien unter "boot/dietpi" auf "ausführbar" setzen!
Jetzt sollte eure Verzeichnisstruktur so ähnlich aussehen:
Anpassen der Datei "boot/cmdline.txt" :
in dieser Datei root=/dev/mmcblk0p2 rootfstype=ext4 ersetzen durch
nfsroot=10.128.5.184:/pxeroot/raspi/PiJuergen,tcp,v3 vers=3 rw ip=dhcp
(natürlich euren Verzeichnispath benutzen)
Anpassen des Filesystem Table (etc/fstab)
Da im Standard die Konfiguration der Datei fstab auf die SD-Karte für die root bzw. boot-Partition verweist, muss das natürlich auch noch geändert werden:
Wichtig ist vor allem, dass ihr die Verweise auf die SD-Karte auskommentiert.
Hier Beispiel Inhalt einer fstab (Auszug):
proc /proc proc defaults 0 0
#/dev/mmcblk0p1 /boot vfat defaults 0 2
#/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
So, nun sollte euer Raspi über PXE starten und auch sein Filesystem finden!
Vergesst nicht die SD Karte mit der "bootcode.bin" bei allen Raspi außer Version 3!
Quelle u.a. : http://www.do-it-neat.com/open…berry-pi-pxe-boot-teil-1/
Diskussion und Fragen hier: