openSUSE Leap 42.1 PXE Server / Raspberry Pi PXE boot: Teil 1

swarkn

swarkn

Stefans Schwerpunkte liegen im Umfeld von Betriebssystemen, serverbasierten Diensten und im weitesten Sinne in allgemeiner technischer Infrastruktur. Tagsüber mit strategischen IT-Themen beschäftigt, tackert er Nachts doch mal gerne ins schwarze Loch.
swarkn

Letzte Artikel von swarkn (Alle anzeigen)

Hallo zusammen,

In diesem Artikel möchte ich euch gerne zeigen, wie einfach ihr einen openSUSE Leap 42.1 PXE Server an den Start bekommt.

Das nächste Release von Raspbian wird nun endlich PXE boot direkt unterstützten (nur für den Raspberry Pi 3). Damit entfällt dann sogar die SD-Karte für die /boot Partition. Diese war bei NFS basierten root-Partitionen bisher noch immer benötigt worden. Wer auf das next-Release wechselt, kann diese Funktion auch schon testen.

Die allgemeinen Anleitungen im Internet behandeln das Thema mit den Standard Diensten wie dnsmasq und tftp. So auch die Entwickler des Raspberry Projektes. Ihr bekommt diese Pakete zwar auch für Leap – im Standard kommt dort aber der ISC DHCP und atftpd zum Einsatz. Ein Erbe der Enterprise Distribution SLES. Für uns kein Stress. 🙂

Vorbereiten der SD-Karte für den Raspberry Pi

Übertragt wie gewöhnlich das aktuelle Rasbian Image auf eine SD-Karte. Dies kann die lite oder auch die normale Version des Jessie Images sein. Bootet nun euren Pi und führt eine Grundkonfiguration mit raspi-config durch.

Danach wechselt ihr auf das next-Release:

sudo apt-get update; sudo apt-get install rpi-update
sudo BRANCH=next rpi-update

Anschliessend fügt ihr am Ende der Datei /boot/config.txt mit dem nachfolgenden Befehl noch folgende Zeile hinzu und startet den Pi neu:

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

Nach erfolgtem Neustart könnt ihr die Zeile mit nano oder vi 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 Pi ist nun auf dem next-Release und grundsätzlich Netzwerk Boot-fähig.

openSUSE Leap 42.1 PXE Server Pakete

Ihr benötigt – so noch nicht installiert – folgende Pakete:

sudo zypper in dhcp-server atftp nfs-kernel-server

Konfigurieren des ISC DHCP

Editiert jetzt die Konfigurationsdatei des DHCP-Servers. Ich habe hier schon einmal eine kleine Besonderheit für den PXE-boot des Raspberry Pi eingebaut (option 43). Diese ist aber für einen normalen PXEClient nicht notwendig.

# /etc/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none; ddns-updates off;

allow booting;
allow bootp;

option OPT43 code 43 = text;

class "rpi" {
   match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
   option OPT43 "Raspberry Pi Boot   ";
}

subnet 192.168.178.0 netmask 255.255.255.0 {
   option broadcast-address 192.168.178.255;
   pool {
      allow members of "rpi";
      range dynamic-bootp 192.168.178.240 192.168.178.254;

      default-lease-time 180;
      max-lease-time 360;
   }
}

Vielleicht kurz zur Erklärung der ISC DHCP Konfiguration. Diese Konfiguration geht davon aus, dass in eurem Netzwerk bereits ein DHCP-Server vorhanden ist (z.B. in eurem Heimrouter). Er verteilt also nur Leases an Clients, deren erste 10 Bytes des „vendor-class-identifier“ im BOOTPREQUEST gleich „PXEClient“ sind. Diese Leases werden deutlich verkürzt ausgegeben, da diese nach dem PXE-Boot nicht mehr benötigt werden. Denn dann greift der existierende DHCP-Dienst eures Routers wieder.

Das Setzen der Option 43 wird vom Bootloader des Raspberry Pi benötigt. Die Option 43 soll unserem Raspi also sagen: „Ja, ist wirklich für dich!“. Durch einen Fehler im Bootloader muss aktuell allerdings 3x Spaces an den String angehangen werden damit es funktioniert.

Aktiviert und startet im Anschluß den Dienst.

sudo systemctl enable dhcpd.service
sudo systemctl start dhcpd.service

Falls ihr in Schwierigkeiten kommt und nicht wisst, was euer DHCP-Server so treibt – kein Problem. Werft einfach einen tcpdump an. Die Ausgabe wird via Pipe an das Tool dhcpdump aus den DHCP-Tools weitergeleitet. Schon sieht die Ausgabe direkt lesbar aus:

sudo tcpdump -lenx port bootps or port bootpc | dhcpdump

Anfrage und Antwort sollten dann in etwa so aussehen, wenn alles gut gegangen ist:

  TIME: 23:52:43.198827
    IP: > (b8:27:eb:a2:c9:3a) > BOOTP/DHCP (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 26f30339
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: b8:27:eb:a2:c9:3a:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         1 (DHCPDISCOVER)
OPTION:  55 ( 12) Parameter Request List     43 (Vendor specific info)
                                             60 (Vendor class identifier)
                                             67 (Bootfile name)
                                            128 (???)
                                            129 (???)
                                            130 (???)
                                            131 (???)
                                            132 (???)
                                            133 (???)
                                            134 (???)
                                            135 (???)
                                             66 (TFTP server name)

OPTION:  93 (  2) Client System             0000             ..
OPTION:  94 (  3) Client NDI                010201           ...
OPTION:  97 ( 17) UUID/GUID                 0044444444444444 .DDDDDDD
                                            4444444444444444 DDDDDDDD
                                            44               D
OPTION:  60 ( 32) Vendor class identifier   PXEClient:Arch:00000:UNDI:002001
---------------------------------------------------------------------------
  TIME: 23:52:44.200138
    IP: > (00:22:19:21:04:9d) > BOOTP/DHCP (b8:27:eb:a2:c9:3a)
    OP: 2 (BOOTPREPLY)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 26f30339
  SECS: 0
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 192.168.178.32
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: b8:27:eb:a2:c9:3a:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         2 (DHCPOFFER)
OPTION:  54 (  4) Server identifier         192.168.178.27
OPTION:  51 (  4) IP address leasetime      300 (5m)
OPTION:  43 ( 20) Vendor specific info      5261737062657272 Raspberr
                                            7920506920426f6f y Pi Boo
                                            74202020         t
OPTION:   1 (  4) Subnet mask               255.255.255.0
---------------------------------------------------------------------------

Konfigurieren des Advanced TFTP

Die Konfiguration liegt unter /etc/sysconfig/atftpd. Diese muss aber zur Funktion grundsätzlich nicht angepasst werden. Kopiert einfach den gesamten Inhalt der boot-Partition der SD-Karte unter /srv/tftpboot:

sudo mount /dev/sdf1 /mnt
sudo cp -r /mnt/* /srv/tftpboot
sudo umount /mnt

Jetzt noch den Dienst aktivieren und starten. Beachtet bitte, dass der Dienst wie klar zu erkennen, via systemd gestartet wird und die Aktivierung des Dienstes via Socket geschieht. Das Starten des Dienstes aftpd.service bringt also gar nichts und schlägt im besten Fall einfach fehl.

sudo systemctl enable atftpd.socket
sudo systemctl start atftpd.socket

Konfigurieren des NFS-Kernel-Server

Erstellt einen neuen NFS Export. Zum Beispiel:

echo "/srv/nfs/rpi3 *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports

Kopiert dann den gesamten Inhalt der root-Partition der SD-Karte an den Ort, welchen ihr in eurem neuen Export angegeben habt. In meinem Beispiel nach /srv/nfs/rpi3:

sudo mkdir -p /srv/nfs/rpi3
sudo mount /dev/sdf2 /mnt
sudo cp -axv /mnt/. /srv/nfs/rpi3
sudo umount /mnt

Aktiviert und startet zu guter Letzt den NFS-Server:

sudo systemctl enable nfs-server
sudo systemctl start nfs-server

Raspberry Pi PXE boot: Teil 2

Herzlichen Glühstrumpf, jetzt habt ihr mit openSUSE Leap 42.1 einen PXE Server an den Start bekommen!

In meinem nächsten Blogpost zeige ich euch, was ihr noch an der Konfiguration im tftpboot und im NFS Export ändern müsst, damit ihr euren Raspberry Pi darüber auch booten könnt.

Viele Späße,
swarkn

pinterest

Steam In-Home Streaming und SuSEfirewall

swarkn

swarkn

Stefans Schwerpunkte liegen im Umfeld von Betriebssystemen, serverbasierten Diensten und im weitesten Sinne in allgemeiner technischer Infrastruktur. Tagsüber mit strategischen IT-Themen beschäftigt, tackert er Nachts doch mal gerne ins schwarze Loch.
swarkn

Letzte Artikel von swarkn (Alle anzeigen)

Hallo zusammen,

Steam kann zwischenzeitlich hervorragend über die Funktion „Steam In-Home Streaming“ Spiele von einem Computer auf ein anderes Device „streamen“. In diesem Artikel möchte ich euch gerne auf die Besonderheiten in Zusammenhang mit openSUSE und der SuSEfirewall aufmerksam machen.

Ich will mich gar nicht so sehr damit auseinander setzen, den Steam-Client zu installieren. Vielmehr geht es mir um die Firewall Konfiguration unter openSUSE via SuSEfirewall.

Wichtig ist nur, dass ihr auf eurem Gaming-PC die Funktion In-Home Streaming aktiviert. Dazu geht ihr einfach unter „Einstellungen/In-Home Streaming“ und aktiviert die Option „enable streaming“. Mehr dazu findet ihr hier.

„Firewall deaktivieren? Kann man schon machen, ist dann halt Kacke.“

Das Einfachste ist sicherlich die Firewall zu deaktivieren damit alles funktioniert. Nur leider nicht unbedingt das sinnvollste, wenn es um sichere Netzwerkkonfiguration geht.

Die Firewall unter openSUSE konfiguriert ihr am besten mit Yast (yet another system tool). Dazu einfach auf der Kommandozeile „sudo yast firewall“ eingeben. Kurz das Root-Kennwort eingeben und schon seid ihr im richtigen Konfigurations-Modul.

SuSEfirewall-Menu

Jetzt müssen wir unsere Ethernet oder WLAN-Verbindung erst einmal einer Zone hinzufügen. Wenn ihr das schon einmal konfiguriert habt, könnt ihr den Punkt einfach überspringen. Wenn nicht, folgt den folgenden Anweisungen.

Verwendet die Cursortasten um auf „Schnittstellen“ zu klicken und navigiert mit der Tab-Taste auf die Schnittstelle, über welche Ihr Steam In-Home streaming machen wollt. In meinem Fall im Screenshot unten, die WLAN-Schnittstelle. Weißt dieser nun die Zone „Externe Zone“ zu.

SuSEfirewall-Schnittstellen

Nachdem dies geschehen ist, verwendet die Tab-Taste um wieder in das Firewall Menü zurückzukehren. Dort verwendet ihr wieder die Cursor-Tasten um auf „Benutzerdefinierte Regeln“ zu navigieren.

Wir müssen nur eingehende Regeln definieren, damit Steam In-Home streaming funktioniert. Zwei Regeln sind notwendig:

NetzwerkTCP / UDPPorts
192.168.178.0/24TCP27036:27037
192.168.178.0/24UDP27031:27036

Das Netzwerk ist natürlich von eurem eigenen Netzwerk abhängig. Grundsätzlich ließe sich auch „0/0“ eintragen, um Verbindungen aus jedwedem Netzwerk zuzulassen. Vielleicht ungeschickt, wenn man sich gerade in öffentlichen Netzwerken befinden. Soll ja auch nur zu Hause funktionieren, oder?

Wenn ihr euch nicht sicher seid, was ihr unter Netzwerk eintragen müsst, verwendet auf der Konsole den Befehl „sudo ifconfig„. In der Ausgabe findet ihr auch die Schnittstelle, mit welcher ihr Steam In-Home streaming verwenden wollt.

In der Regel handelt es sich zu Hause um ein Class-C Netzwerk. Dieses erkennt man an der Netzwerkmaske „255.255.255.0„. Nehmt in diesem Fall eure IP-Adresse und verwendet die ersten drei „Octets“ (also die durch Punkte getrennten Zahlen) um euren Netzwerknamen zu definieren. Hängt wie in meinem Beispiel oben einfach eine „.0/24“ an. *daumenhoch*

Das Regelwerk der Firewall muss nach der Eingabe so aussehen:

SuSEfirewall-Ports

Navigiert nun mit der Tab-Taste auf „Weiter“. Die Regeln werden gespeichert und angewandt. Falls ihr euren Steam-Client in der Zwischenzeit geöffnet hattet, schließt und startet ihn einfach neu. Danach solltet ihr euren Gaming-PC unter „Einstellungen/In-Home Streaming“ aufgelistet finden und alle installierten Spiele dessen sollten ebenfalls in der Spieleliste auftauchen.

Um ein Spiel vom Gaming-PC zu starten, klickt auf das Spiel in der Spieleliste und dann auf „Stream“.

Viel Spaß beim daddeln!

swarkn

 

 

 

 

pinterest