WLAN in Software2: So gehts
Verfasst: Mi Sep 20, 2023 7:30 pm
Vorweg: Ich arbeite nicht für openWB, alles hier auf eigene Gefahr. Wenn ihr diese Anleitung nutzt, habr ihr euer Supportrecht verwirkt. Ich behaupte aber, das hier ist komplett unproblematisch und hier wird auch geholfen.
Ihr wollt Software 2.x, braucht/wollt aber Wlan? Die offizielle GUI kann das leider nicht mehr, obwohl seit Debian Buster die Wlantreiber deutlich stabiler laufen. In meinem Fritz-Mesh läuft es im Vergleich zu vorher jetzt absolut problemfrei.
Es spricht also nichts dagegen es zu benutzen.
Unter Linux kann man bekannterweise alles über Kommandozeile oder Konfigurationsdateien...konfigurieren. So auch das Wlan.
Wenn ihr Linux nutzt, könnt ihr einfach die sdcard mit der Software2 nehmen, die zweite Partition mounten, und <mount_path>/etc/wpa_supplicant/wpa_supplicant.conf um einen Eintrag eures Wlans ergänzen (Anführungszeichen bleiben):
Und die Karte zurück in die Box stecken, hochfahren, fertig. Sollte im Wlan auftauchen. Wer statische IP usw braucht, darf sich die Dokumentation für wpa_supplicant ergooglen.
Wenn ihr jedoch Windows oder macOS nutzt:
Die Raspberry Pi Foundation hat ein extra Tool, um sdcards für Pis zu flashen. Dieses Tool kann zum einen custom Images annehmen (rein hypothetisch eine Datei namens openwb_irgendwas.img.gz) und zum anderen erlaubt es VOR dem Flashen Dinge wie ein Wlan zu konfiguerieren. Dies werden wir nutzen.
Installert euch den Raspberry Pi Imager. Windows hat mittlerwiele einen Paketmanager, daher könnt ihr PowerShell öffnen und einfach "winget install rpi-imager" tippen (mac: homebrew?). Ansonsten google, download, install.
Wählt im Tool für Operating System den letzten Eintrag "Use custom", wählt die .img oder .img.gz der openWB2.0.
Update: aktuelle Versionen bieten die erweiterten Optionen proaktiv an
Drückt Strg+Shift+X, um die erweiterten Optionen zu öffnen. Hier könnt ihr u.a. das Wlan mit Name und Passwort angeben. LASST ALLES ANDERE unangehakt. Kein Hostname, kein SSH, kein username, kein locale. "Play sound when finished" oder "eject when finished" dürft ihr drücken. Telemetrie nicht.
Danach "Schreiben", Warten, sdkarte wieder einbauen, Strom wieder an, ein paar Minuten warten; Tadaa, ihr habt eine Software2 im Wlan.
Wenn eure Software2 schon im Betrieb ist und ihr euch nicht mit Neuinstallation und Backup abmühen wollt,
dann könnt ihr dasselbe, was der Rpi-Imager tut, auch im Nachgang emulieren.
Technische Details, die ihr überspringen dürft:
Die sd-karte enthält zwei Partitionen: eine Boot-Partition, auf der der Linux-Kernel, Bootloader etc liegt, und eine Root-Partition, auf der alles andere liegt. Auch Einstellungen und openWB-Software.
die Boot-Partition ist FAT-formatiert, das kann Windows lesen. Die Root-Partition ist ext4, das ist ein Linux-Dateisystem, das kann Windows nicht lesen. Leider liegen genau da die Wlan-Einstellungen. Ihr könntet also zurück an den Anfang springen, dort wo "wenn ihr Linux nutzt" steht, oder: Wir schaffen es irgendwie, dass wir etwas in die Boot-partition schreiben können, vielleicht ein Skipt, dessen Inhalt beim Hochfahren ausgeführt wird, um das Wlan zu konfigurieren. Das ist genau das, was der rpi-imager tut: Er jubelt der Boot-Partition ein generiertes Skript unter und sagt dem Betriebssystem "führe das nach dem Hochfahren aus".
Ab hier wieder lesen:
- Nehmt die sd-karte, schließt sie an Windows an, und ihr müsstet ein neues Laufwerk sehen, die Boot-Partition der openWB.
- Nehmt einen Texteditor eurer Wahl, z.B. Visual Studio Code oder Notepad++. Nicht Notepad, denn ihr müsst Zeilenenden auf LF (Unix) anstatt CRLF (Windows) einstellen in den zwei Dateien, die jetzt folgen.
Erstellt eine neue Datei firstrun.sh mit folgendem Inhalt. Hier an der gut sichtbaren Stelle euer Wlan mit Name und Passwort angeben (Anführungszeichen bleiben):
Datei als "firstrun.sh" in die Boot-Partition speichern. Seht zu, dass die Datei nicht am Ende firstrun.sh.txt heisst, weil ihr "bekannte Dateiendungen ausblendet". Ihr seid im richtigen Ordner, wenn dort Dateien wie "kernel.img", "start4.elf" liegen.
Nun macht ihr euch eine Sicherungskopie von "cmdline.txt", öffnet sie dann und fügt dort ans Ende der vorhanden Zeile ein (keine neue Zeile anfangen!):
sodass die Datei in Summe (zumindest bei mir) auf einer frisch geflashten Karte) so aussieht:
Diese Modifikation der Bootline beseitigt das firstrun-skript am ende selber wieder.
Speichern, karte sauber auswerfen, wieder einbauen, hochfahren, fertig.
Habt ca 4 minuten Geduld, nach Setzen der Wifi-Settings wird hier direkt nochmal neugestartet.
DISCLAIMER: Ich habe nur die Methoden mit "unter Linux editieren" und "Rpi-Imager unter Windows mit frischem Image" getestet. Die "Im Bestand anpassen"-Methode SOLLTE aber so funktionieren. Wenn nicht, helfe ich gerne bei der Fehlersuche. Aber wenn die Box danach nicht mehr hochfährt und keine Fehlerbeschreibung jenseits von "es geht nicht mehr" kommt, dann übernehme ich keine Verantwortung.
Ihr wollt Software 2.x, braucht/wollt aber Wlan? Die offizielle GUI kann das leider nicht mehr, obwohl seit Debian Buster die Wlantreiber deutlich stabiler laufen. In meinem Fritz-Mesh läuft es im Vergleich zu vorher jetzt absolut problemfrei.
Es spricht also nichts dagegen es zu benutzen.
Unter Linux kann man bekannterweise alles über Kommandozeile oder Konfigurationsdateien...konfigurieren. So auch das Wlan.
Wenn ihr Linux nutzt, könnt ihr einfach die sdcard mit der Software2 nehmen, die zweite Partition mounten, und <mount_path>/etc/wpa_supplicant/wpa_supplicant.conf um einen Eintrag eures Wlans ergänzen (Anführungszeichen bleiben):
Code: Alles auswählen
network={
ssid="EuerWlanName"
psd="euerWlanPasswort"
}
Wenn ihr jedoch Windows oder macOS nutzt:
Die Raspberry Pi Foundation hat ein extra Tool, um sdcards für Pis zu flashen. Dieses Tool kann zum einen custom Images annehmen (rein hypothetisch eine Datei namens openwb_irgendwas.img.gz) und zum anderen erlaubt es VOR dem Flashen Dinge wie ein Wlan zu konfiguerieren. Dies werden wir nutzen.
Installert euch den Raspberry Pi Imager. Windows hat mittlerwiele einen Paketmanager, daher könnt ihr PowerShell öffnen und einfach "winget install rpi-imager" tippen (mac: homebrew?). Ansonsten google, download, install.
Wählt im Tool für Operating System den letzten Eintrag "Use custom", wählt die .img oder .img.gz der openWB2.0.
Update: aktuelle Versionen bieten die erweiterten Optionen proaktiv an
Drückt Strg+Shift+X, um die erweiterten Optionen zu öffnen. Hier könnt ihr u.a. das Wlan mit Name und Passwort angeben. LASST ALLES ANDERE unangehakt. Kein Hostname, kein SSH, kein username, kein locale. "Play sound when finished" oder "eject when finished" dürft ihr drücken. Telemetrie nicht.
Danach "Schreiben", Warten, sdkarte wieder einbauen, Strom wieder an, ein paar Minuten warten; Tadaa, ihr habt eine Software2 im Wlan.
Wenn eure Software2 schon im Betrieb ist und ihr euch nicht mit Neuinstallation und Backup abmühen wollt,
dann könnt ihr dasselbe, was der Rpi-Imager tut, auch im Nachgang emulieren.
Technische Details, die ihr überspringen dürft:
Die sd-karte enthält zwei Partitionen: eine Boot-Partition, auf der der Linux-Kernel, Bootloader etc liegt, und eine Root-Partition, auf der alles andere liegt. Auch Einstellungen und openWB-Software.
die Boot-Partition ist FAT-formatiert, das kann Windows lesen. Die Root-Partition ist ext4, das ist ein Linux-Dateisystem, das kann Windows nicht lesen. Leider liegen genau da die Wlan-Einstellungen. Ihr könntet also zurück an den Anfang springen, dort wo "wenn ihr Linux nutzt" steht, oder: Wir schaffen es irgendwie, dass wir etwas in die Boot-partition schreiben können, vielleicht ein Skipt, dessen Inhalt beim Hochfahren ausgeführt wird, um das Wlan zu konfigurieren. Das ist genau das, was der rpi-imager tut: Er jubelt der Boot-Partition ein generiertes Skript unter und sagt dem Betriebssystem "führe das nach dem Hochfahren aus".
Ab hier wieder lesen:
- Nehmt die sd-karte, schließt sie an Windows an, und ihr müsstet ein neues Laufwerk sehen, die Boot-Partition der openWB.
- Nehmt einen Texteditor eurer Wahl, z.B. Visual Studio Code oder Notepad++. Nicht Notepad, denn ihr müsst Zeilenenden auf LF (Unix) anstatt CRLF (Windows) einstellen in den zwei Dateien, die jetzt folgen.
Erstellt eine neue Datei firstrun.sh mit folgendem Inhalt. Hier an der gut sichtbaren Stelle euer Wlan mit Name und Passwort angeben (Anführungszeichen bleiben):
Code: Alles auswählen
#!/bin/bash
set +e
# Ueberschreibe die wpa_supplicant.conf mit nachfolgendem Inhalt, der euer Wlan konfiguriert
cat >/etc/wpa_supplicant/wpa_supplicant.conf <<'WPAEOF'
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1
update_config=1
network={
ssid="Euer Wlanname"
psk="euerWlanPasswort"
}
WPAEOF
# mach, dass nur noch root diese datei lesen kann
chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
# stelle sicher, dass wifi nicht ausgeschaltet ist
rfkill unblock wifi
for filename in /var/lib/systemd/rfkill/*:wlan ; do
echo 0 > $filename
done
# entferne dieses skript und seine ausführung aus der cmd.txt
rm -f /boot/firstrun.sh
sed -i 's| systemd.run.*||g' /boot/cmdline.txt
exit 0
Nun macht ihr euch eine Sicherungskopie von "cmdline.txt", öffnet sie dann und fügt dort ans Ende der vorhanden Zeile ein (keine neue Zeile anfangen!):
Code: Alles auswählen
systemd.run=/boot/firstrun.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target
Code: Alles auswählen
console=tty1 root=PARTUUID=26871613-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash consoleblank=10 vt.global_cursor_default=0 systemd.run=/boot/firstrun.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target
Speichern, karte sauber auswerfen, wieder einbauen, hochfahren, fertig.
Habt ca 4 minuten Geduld, nach Setzen der Wifi-Settings wird hier direkt nochmal neugestartet.
DISCLAIMER: Ich habe nur die Methoden mit "unter Linux editieren" und "Rpi-Imager unter Windows mit frischem Image" getestet. Die "Im Bestand anpassen"-Methode SOLLTE aber so funktionieren. Wenn nicht, helfe ich gerne bei der Fehlersuche. Aber wenn die Box danach nicht mehr hochfährt und keine Fehlerbeschreibung jenseits von "es geht nicht mehr" kommt, dann übernehme ich keine Verantwortung.