Stranger Than Usual

Parson: “Are you a sorceress?”
Wanda: “Yes.”
Parso: “Do you have a headache spell?”
Wanda: “Yes! Or… To cure one? No. If I had that, I would never stop casting it.”

Erfworld

Digital Independence Day: Posteo statt Googlemail

Heute ist der zweite Digital Independence Day. Im Januar habe ich mein Blogrepo von github zu Codeberg umgezogen. Diesen Monat ziehe ich meine Email-Adressen um.

Ich habe seit 2012 einen Googlemail-Account. Damals habe ich mir den Account angelegt, weil ich mir mein erstes Mobiltelefon angeschafft habe und das ein Android-Phone war. Damals habe ich es ohne Googlemail nicht hingekriegt, meine Adressen auf das Telefon zu synchronisieren.

Ein paar Jahre später habe ich mir eine Posteo-Adresse zugelegt. Posteo ist sehr datenschutzbedacht, ganz im Gegensatz zu Googlemail. Nur habe ich die Posteo-Adresse zunächst nur für private Kommunikation verwendet. Wenn ich irgendwo in Onlineshops oder dergleichen Accounts anlegen musste, habe ich weiterhin Googlemail genommen.

Das hatte zwei Gründe: Zum einen wollte ich keinen Spam auf die Posteo-Adresse bekommen. Zum anderen gibt es bei Googlemail die Funktion, dass man nach einem + ein beliebiges Suffix an den lokalen Teil der Adresse hängen kann, die Mails aber noch ins selbe Postfach kommen. Zum Beispiel vorname.nachname+bahn@googlemail.com für die deutsche Bahn. So kann ich nachverfolgen, über welchen Weg E-Mail-Adressen geleaked wurden, wenn ich Spam bekomme.

Warum ändere ich das jetzt? Mehrere Gründe:

  1. Posteo kann jetzt auch das +suffix
  2. Ich wollte nicht, dass die ganzen Shopseiten meine Haupt-Email-Adresse kennen. Aber warum soll Google eigentlich wissen, wo ich einkaufe?
  3. Es hängen einige wichtige Accounts an der Googlemail-Adresse. Wenn sich Trump morgen entscheidet, Deutschland zu sanktionieren, bin ich von all diesen Accounts ausgeschlossen.

Ich habe also die am häufigsten genutzten Accounts von Googlemail zu Posteo umgezogen.

Was ändert sich nicht?

Ich werde den Googlemail-Account nicht löschen. Einige alte Bekannte haben vielleicht nur diese Adresse. Für die möchte ich weiterhin erreichbar sein. Außerdem gibt es noch einen Haufen kleinerer Seiten, die ich noch nicht umgezogen habe. Mein Plan: Ich ziehe sie dann um, wenn ich eine Email von denen bekomme oder ich mich auf deren Seiten einloggen will. Nach und nach.

Fun fact: Googlemail

Ich nenne es immer noch „Googlemail“, dabei heißt es eigentlich Gmail. Warum? Es gab in Deutschland eine Zeit lang einen Markenstreit, so dass Gmail in Deutschland Googlemail hieß. Als ich meinen Account erstellt habe, habe ich eine @googlemail-Adresse bekommen, und bin dabei geblieben.

Technology Connections über erneuerbare Energien

Ich bin gestern über diese Video des Youtube-Kanals „Technology Connections“ gestolpert. Es geht um erneuerbare Energien, mit einem besonderen Fokus auf Solarkraft und Batterien zum Speichern von Energie.

Das Coole an dem Video: Er hat es geschaft, eine sehr solide Argumentation für erneuerbare Energien auf die Beine zu stellen, ohne den Klimawandel erwähnen zu müssen. Alleine aus wirtschaftlicher Sicht sind Solar- und Windkraft fossilen Energieträgern weit überlegen. Das Video kann also auch die Spinner überzeugen, die den Klimawandel für eine Lüge halten.

Ich folge dem Kanal schon eine Weile. Normalerweise bringt er deutlich kürzere Videos, in denen mehr oder weniger alltägliche Technologien erklärt und demonstriert werden, zusammen mit ihren Vor- und Nachteilen. Der Kanal ist auf jeden Fall sehenswert. Das neue Video ist ziemlich lang, aber ihr solltet es trotzdem anschauen, selbst wenn ihr schon von Solar- und Windkraft überzeugt seid, denn es gibt euch vielleicht noch ein paar gute Argumente, um andere Menschen zu überzeugen.

Plesiosaurier

Die Westfälischen Plesiosaurier sind die Fossilien des Jahres 2026. Plesiosaurier sind übrigens keine Dinosaurier, sondern Reptilien, die aber zeitgleich mit Dinosauriern lebten.

Das verlinkte Blog ist das Beutelwolf-Blog, wo der Autor regelmäßig Tierarten vorstellt. Nicht nur ausgestorbene (wie der Name vermuten lässt), sondern, soweit ich es beobachtet habe, hauptsächlich rezente Arten. Kann sich lohnen, da mal ab und zu reinzuschauen.

Rollenspielszenen: Geschwister

Rollenspielszene. Die Band Spice of Life ist immer noch im Zug. Mint hat ein schwieriges Verhältnis zu ihrem „Bruder“ Anis. Ihre Eltern halten Mint für eine Versagerin und lassen sie das bei jeder Gelegenheit spüren. Anis hingegen passt ihnen viel besser. Nach einem unfreiwillig harschen Austausch zwischen den beiden versucht Mint einen Keil zwischen Anis und Cracker zu schieben, die sich näher gekommen sind.

Anis und Cracker kapieren das beide nicht und gehen nicht darauf ein, aber Cracker bringt Anis dazu, ihr von seinem Verhätlnis zu Mint zu erzählen:

Cracker: „Ich dachte ihr seid Geschwister.“
Anis: „Eigentlich nicht. Wir haben nur dieselben Eltern.“

Blogstatistiken: Tags

Ich hatte eigentlich gehofft, dass mehr aus diesem Artikel wird. Aber man soll ja auch fehlgeschlagene Experimente veröffentlichen, also kommt das jetzt.

Die Idee war ja eigentlich schön: Ich habe ja die meisten meiner Beiträge mit einem oder mehreren Tags versehen. Die Tagseite listet alle Tags auf, und ihre absolute Häufigkeit im Blog. Momentan ist „rant“ mit Abstand das häufigste Tag, zum Beispiel.

Aber es wäre doch cool, auch zu wissen welche Tag-Kombinationen häufig vorkommen, oder?. Also habe ich ein kleines Programm geschrieben und in einem Repo veröffentlicht. Ich habe Tag-Paare und Tag-Tripel gezählt. Ein N-Tupel sind hier N unterschiedliche Tags, die zum selben Artikel gehören (Bei Paaren ist N = 2, bei Tripeln ist N = 3).

Die Ergebnisse sind, wie schon gesagt, eher langweilig. Hier erst einmal die 20 häufigsten Tag-Paare (von insgesamt 7385 Paaren):

  1. {rollenspiel, rollenspielszenen}: 22
  2. {gentoo, linux}: 18
  3. {39c3, chaos communication congress}: 15
  4. {das labor, labor}: 15
  5. {advent of code, adventskalender}: 14
  6. {bahn, deutsche bahn}: 13
  7. {deutsche bahn, rant}: 13
  8. {advent of code, programmieren}: 12
  9. {hackerspace, labor}: 12
  10. {das labor, hackerspace}: 12
  11. {adventskalender, programmieren}: 11
  12. {rant, öpnv}: 11
  13. {politik, rant}: 10
  14. {programmieren, rust}: 10
  15. {bahn, rant}: 10
  16. {per anhalter durch die galaxis, thhgttg}: 10
  17. {deutsche bahn, öpnv}: 10
  18. {rant, webdesign}: 10
  19. {uni, zitate}: 10
  20. {advent of code, puzzle}: 9

Am häufigsten zusammen sind tatsächlich eng verwandte Begriffe oder Synonyme. „bahn“ und „deutsche bahn“ zum Beispiel. Erst auf Platz 12 finden wir die Kombination, die ich viel weiter oben erwartet hätte, nämlich {rant, öpnv}, {bahn, rant} und {politik, rant}. Die Rollenspielszenen haben es in nur einem guten halben Jahr auf Platz 1 geschafft. Der 39C3 nach zwei Wochen Blogmanie auf Platz 3.

Die Tripel sind auch nicht viel interessanter. Insgesamt gab es 22527 Tripel, die zehn häufigsten sind:

  1. {das labor, hackerspace, labor}: 12
  2. {advent of code, adventskalender, programmieren}: 11
  3. {advent of code, adventskalender, puzzle}: 9
  4. {advent of code, adventskalender, rust}: 7
  5. {advent of code, programmieren, puzzle}: 6
  6. {adventskalender, programmieren, puzzle}: 6
  7. {adventskalender, programmieren, rust}: 6
  8. {advent of code, programmieren, rust}: 6
  9. {digitale kunst, fordite, kunst}: 5
  10. {39c3, chaos communication congress, humor}: 5

Dasselbe Muster. Naja, es war einen Versuch wert. Vielleicht kriege ich ja noch interessante Statistiken, wenn ich die Häufigkeit der Kombination irgendwie gegen die Häufigkeit der einzelnen Bestandteile gegenrechne oder so. Aber erst einmal belasse ich es dabei.

Trumps Sturmabteilung

Ich war ja bisher immer ein bisschen vorsichtig mit direkten Nazivergleichen. Zum einen wegen Godwin's Law. Zum anderen, weil ich die Naziverbrechen nicht verharmlosen möchte.

Aber was Trump da seit einem Jahr abzieht hat schon lange jedes Maß verloren und befindet sich so weit jenseits allen, was normal, akzeptabel oder auch nur tolerierbar wäre. Wenn er handelt wie ein Nazi, redet wie ein Nazi und Menschen behandelt wie ein Nazi, dann nenne ich diesen Vogel einen Nazi.

Trumps aufgemotze ICE-Leute rennen durch die USA wie die SA der Nazis. Sie wenden Gewalt gegen Leute an, erschießen Leute und verhaften Leute aus rassistischen Gründen. Sie suchen halt nach „illegalen Einwanderern“, und da ist jeder verdächtig, der eine auch nur etwas dunklere Hautfarbe hat oder komisch spricht. Dann ist es egal, ob die Person Bürger der USA ist, kein Bürger, aber legal im Land oder ohne Aufenthaltserlaubnis im Land.

Menschen haben mittlerweile Angst, auf die Straße zu gehen. Leute verschwinden. Fünfjährige werden festgehalten, um ihren Vater aus dem Haus zu locken. Und die Trump-Junta verbreitet weiter ihre Lügen, dass die ganzen Einwanderer alle ganz schlimm und gewalttätig sind und alle, die sich Trump widersetzen, gewalttätige Linksradiale seien, die Amerika zerstören wollen.

Das ist eine Nazitaktik. Verbreite Lügen, wiederhole sie immer wieder, bezeichne alle, die gegen dich sind als Feinde und Verräter, mach die Presse nieder, wenn sie es wagt, dir zu widersprechen, untergrabe die Rechtsstaatlichkeit auf allen Ebenen… die Liste lässt sich fortsetzen.

Und nur um es zu betonen: selbst wenn jemand illegal im Land ist, und selbst wenn diese Person for fünf Jahren mal einen Schokoriegel geklaut hat, dann ist das immer noch ein Mensch, den man wie einen Menschen behandeln muss. Und man sollte sich fragen: Warum ist diese Person hier nicht legal im Land? Kann man das vielleicht legal machen, wenn sie hier schon arbeitet, Freunde hat, vielleicht auch Familie?

In der Hinsicht können wir uns übrigens auch gerne mal an die eigene Nase fassen. Auch wenn wir noch keine Terroreinheiten durch die Städte schicken, gehen wir hier in Deutschland auch brutal mit Leuten um, denen die Aufenthaltsgenehmigung nicht erteilt wurde. Wo dann Bürgerkriegsgegenden als „sichere Herkunftsländer“ erklärt werden.

Und ist euch schon einmal aufgefallen, dass verzweifelte Menschen Unsummen bezahlen, um auf mäßig seetauglichen, völlig überfüllten Booten über das Mittelmeer nach Europa zu kommen? Und dabei oft genug ertrinken? Das machen nur Leute, die wirklich verzweifelt sind. Die haben einen Grund, weg zu wollen. Und für Das Geld, dass sie alleine für die Bootsfahrt ausgeben, könnten sie sich ein Flugticket besorgen und hätten sogar noch genug über, um sich für die erste Woche Kost und Logis in Deutschland leisten zu können.

Ich habe keine Lust mehr auf den Scheiß. Und wenn demnächst die AfD an die Regierung kommt, dann haben wir hier auch wieder echte deutsche Nazis, die Angst und Schrecken verbreiten.

Modern Solution: Good riddance!

Modern Solution ist insolvent. Etwas Besseres hat die Firma nicht verdient. Ihre Kunden vielleicht schon: Denn ganz im Rahmen der bisher gezeigten Kompetenz der Firma lief bei ihren Kunden plötzlich ohne Vorwarnung nichts mehr. Online-Shop, Email, Warenwirtschaftssystem: Weg. Auch kein Zugriff auf die Daten (wobei letzteres mittlerweile auf Kulanz des Hosters wieder möglich ist, wenn auch langsamer, wenn ich es richtig verstanden habe).

Warum gönne ich Modern Solution den Untergang? Nun, erst einmal waren die so inkompetent, dass sie die Secrets für ihre Datenbankzugriffe in ihren Binaries rausgegeben haben. Und dann waren es dieselben Credentials für alle Kunden. Wenn du also Kunde bei denen warst, konntest du auf die Daten von allen anderen Kunden zugreifen.

Das hat dann ein Entwickler herausgefunden, der für einen der Kunden einen Auftrag erledigt hat. Er hat dann versucht, Modern Solution darauf hinzuweisen, worauf Modern Solution den Entwickler verklagt hat.

Und nicht nur das, sie sind damit sogar erfolgreich gewesen. Der Entwickler ist dann durch die Instanzen gegangen und hat am Ende sogar eine Verfassungsbeschwerde eingereicht, die aber abgelehnt wurde.

Das ist ein Muster, das leider zu häufig passiert und meiner Meinung nach ein gutes Beispiel ist, warum der Hackerparagraph Murks ist und abgeschafft gehört.

Rollenspielszenen: Am Eingang die Waffen abgeben

Rollenspielszene. Wir sind im Land Galt, das seit Jahren von Unruhen und Revolutionen geplagt wird. Genauer gesagt sind wir in Eloins Heim, wo die Stadt streng in zwei Teile getrennt ist. In einem Stadtteil ein Haufen rassistischer Elfen, die sich als Beschützer der Stadt sehen, in der anderen Hälfte alle anderen. Von unserer Gruppe darf nur Thivuc, der Halbelf, in den elfischen Teil.

Thivuc schafft es aber, den Elfen das Versprechen abzuringen, dass er mit dem Anführer unserer Gruppe (ein Mensch) in den elfischen Teil der Stadt kommen darf, um zu handeln. Als sie am Tor ankommen, werden sie aufgefordert, alle Waffen abzugeben. „Alle Waffen? Aber wir wollen doch auch Waffen verkaufen!“. Ok, also dürfen sie die Waffen mitnehmen, die sie verkaufen wollen.

Gut. Ich möchte alle meine Waffen verkaufen.

Und schwupps waren sie drin, mit allen Waffen.

Avif und andere Bildformate

Im Zuge meiner Blogpost-Exzesse zum 39C3 habe ich zwischendurch auch zum ersten AVIF für Bilder verwendet. Dazu musste ich die Blogsoftware leicht anpassen (um automatisch die Bildgröße zu ermitteln), aber das ist nicht weiter wichtig.

Ich habe dabei ein bisschen herumexperimentiert, AVIF-Dateien mit Webp verglichen und so, und wollte noch etwas dazu schreiben. Da kommt es mir gerade recht, dass ein anderer enthusiastischer Bildformateamateur einen Blogpost über AVIF im Vergleich mit anderen Formaten geschrieben hat.

AVIF im Vergleich zu JPEG und Webp

In dem anderen Post war der Ansatz: ein unkomprimiertes Bild nehmen, es mit 10% Qualität als JPEG abspeichern, und dann mit anderen Bildformaten versuchen, eine vergleichbare Dateigröße zu erreichen. JPEG schneidet hier am schlechtesten ab, mit stark sichtbaren Artefakten (bei 10% kein Wunder). Webp sieht deutlich besser aus, zeigt aber gerade an Kanten unschöne Artefakte. AVIF sieht am besten aus, wenn man genau hinschaut, sieht man aber auch ein paar Artefakte. Der Autor hat auch noch andere Formate verglichen, aber die können bei mir im Browser nicht angezeigt werden, deswegen ignoriere ich sie erst einmal. Wichtig ist: Avif ist bei gleicher Größe deutlich besser als Webp.

Interessanterweise entspricht das nicht ganz meinen eigenen Erfahrungen. Ich bin aber auch weniger systematisch herangegangen. Ich habe Webp-Bilder und AVIF-Bilder mit 75% bzw. 50% Qualität (die Standardeinstellungen) erstellt. Die AVIF-Bilder waren i.d.R. ein kleines bisschen kleiner und ein kleines bisschen besser, wobei letzteres nur nach Augenschein war. Vielleicht lag es an der Art der Bildinhalte. Vielleicht an etwas anderem. Allgemein ist mir aufgefallen, dass bei AVIF die Artefakte eher wie ein Gaußfilter aussehen während Webp, ähnlich wie bei JPEG. Ich bin aber bei Weitem kein Experte in Bildkompression, insbesondere nicht bei Webp und AVIF.

Was verlustfreie Kompression anging, war AVIF deutlich hinter Webp hinterher. Zumindest dafür werde ich also in Zukunft auch Webp nehmen, bei verlustbehafteter Kompression werde ich noch herumprobieren

JPEG-XL

Ein weiteres Bildformat, das leider von aktuellen Browsern nicht gut unterstützt wird, ist JPEG-XL. Das Format hat eine bewegte Geschichte hinter sich. 2022 hat Google angekündigt, es nicht mehr unterstützen zu wollen (Maintenance-Kosten, und Bildformate parsen ist auch immer eine Stelle, an der leicht Sicherheitslücken passieren) und hat die experimentelle Unterstützung eingestellt. Mozilla ist mit Firefox nachgezogen, denn wenn Chrome ein Format nicht unterstützt, macht sich kaum ein Website-Betreiber die Mühe, das Format bereitzustellen.

Es gab dann in den entsprechenden Communities Proteste, es wurde ein Rust-basierter Decoder angekündigt, um die Sicherheitsrisiken kleinzuhalten und erst vor ein paar Tagen wurde in Chromium wieder der JPEG-XL-Suppoert hinzugefügt.

Ich bin mal gespannt auf dieses Format. Ich habe einige gute Dinge darüber gehört, aber mich noch nicht näher damit auseinandergesetzt. Ich werde vermutlich mal ein bisschen herumprobieren.

Content Negotiation

Was mir bei dem Thema auch wieder eingefallen ist: Ich habe einen ganzen Haufen alter Bilder auf diesem Blog. Viele PNG-Bilder, die als Webp noch deutlich kleiner sein könnten. Hier stehe ich jetzt vor einem kleinen Dilemma: Ich würde sie gerne ersetzen, aber die Dateiendung der Bilder ist Teil der URL. Wenn ich die nicht ändere, führt es bei Benutzern zu Verwirrung, die sich die Dateien vielleicht herunterladen. Wenn ich die ändere, habe ich kaputte URLs und Cool URIs don't change.

Der Fehler war natürlich, die Dateiendung überhaupt zum Teil der URL werden zu lassen. Sonst könnte ich jetzt im Hintergrund ohne Probleme das Dateiformat austauschen. Glücklicherweise gibt es in HTTP ja schon seit Ewigkeiten Content Negotiation: mittels des Accept-Headers kann man bei einer Anfrage angeben, welche Formate man unterstützt. Der Server liefert dann nur ein unterstütztes Format zurück. Das bräuchte ich auch für meinen Server.

So könnte ich zum Beispiel das alte und das neue Bild nebeneinander auf die Platte legen, mit unterschiedlichen Dateiendungen. Der Server sieht sie beide, und wenn die Datei ohne Endung angefordert wird, liefert der Server die kleinste Datei zurück, die unterstützt wird. In meinen Blogposts müsste ich dann die Pfade anpassen, aber das könnte ich vermutlich auch automatisch machen. Wenn eine Datei mit Endung angefordert wird, könnte er ja die konkrete Datei ausliefern. So gehen auch existierende Deeplinks nicht kaputt.

Damit kann ich auch das Problem mit unterstützten Bildformaten umgehen, indem ich zwei oder mehr verschiedene Formate ablege. Wenn jemand dann z.B. noch kein JPEG-XL unterstützt, wird halt Webp ausgeliefert oder so.

Die ganze Sache hat nur ein Problem: Ich habe noch nicht herausgefunden, wie ich das mit nginx mache, ohne mich komplett zu verrenken. Aber irgendwann…

PS: AVIF in og:images

Ich habe ja schon erwähnt, dass ich AVIF für einige Bilder während des 39C3 verwendet habe. Die habe ich dann auch in die og:image-Tags eingefügt. Die Unterstützung dafür lässt aber noch zu Wünschen übrig. Aber das ist vermutlich auch nur eine Frage der Zeit.

Raspberry Pi: Headless setup mit WLAN und SSH

Ich muss gerade einen meine Raspberry Pis neu aufsetzen. Den mit den Raumklimasensoren. Schuld daran ist ein fehlgeschlagenes Update. Also ein Backup gezogen, ein aktuelles OS-image geladen, das image entpackt, und auf die Karte kopiert:

$ sudo dd if=2025-12-04-raspios-trixie-arm64-lite.img of=/dev/mmcblk0 bs=32M
89+0 records in
89+0 records out
2986344448 bytes (3.0 GB, 2.8 GiB) copied, 9.68393 s, 308 MB/s

Wunderbar. Nur… ich habe keine Tastatur, keine Maus, keinen Bildschirm für das Ding. Ich habe es bisher auch immer headless aufgesetzt. Kein Problem. Ich muss nur irgendwelche Konfigurationsdateien an die richtige Stelle legen, oder? Wie war das noch gleich. Mal eine Internetsuche machen.

Die Ergebnisse sind furchtbar. Alle wollen, dass ich mir irgendein komisches UI-Tool herunterlade, um die SD-Karte zu beschreiben und die Einstellungen zu machen. Aber ich will doch nur die Wifi-Einstellungen, SSH aktivieren, einen public key hinterlegen und die SSH-Config anpassen. Macht das doch nicht komplizierter, als es ist.

Ich weiß noch, dass da irgendwelche magischen Dateien waren, die man an die richtigen Stellen legen musste. Aber welche, und wohin? Da, endlich ein aktuelles Suchergebnis (von 2026), das mir sagt, wohin ich die Datei legen muss, und was drinstehen muss:

Create a new text (.txt) document on your computer, similar to the image below, under the SD Card storage section.

Ok, aber auf der SD-Karte sind zwei Partitionen, die erste, die Bootpartition ('bootfs' laut Gnome) und die zweite, mit dem ganzen Rest (rootfs). Also auf welche muss es? Ist nicht genannt. Aber da ist ein „Screenshot“. Und damit meine ich, dass jemand den Bildschirm abfotografiert hat, auf dem ein Dateimanager geöffnet ist, anhand dessen ich darauf schließen kann, welche Partition gemeint ist. Und dann faselt die Anleitung auch noch irgendwas davon, mit über vscode SSH zu benutzen. Ich würde ein LLM vermuten, aber ein LLM hätte einen besseren Screenshot gemacht.

Ich habe die Schnauze voll. Ich verlinke nicht auf den Artikel. Ich schreibe jetzt meine eigene Anleitung. With Blackjack! And Hookers! Hauptsächlich, damit ich das beim nächsten Aufsetzen eines Raspberry Pis hier wieder nachschlagen kann.

Die Anleitung

Schritt 1: Image herunterladen und aufspielen

Richtiges Image auf der Raspberry-Pi-Seite herunterladen. Dann entpacken (xz -d) und aufspielen (aufpassen, dass man das richtige Gerät für die SD-Karte nimmt:

sudo dd if=2025-12-04-raspios-trixie-arm64-lite.img of=/dev/mmcblk0 bs=32M

Keine Ahnung, ob 32M als block size vernünftig ist, aber irgendwann wird das fertig.

Schritt 2: WLAN-Konfiguration

Hier ist es schwieriger als früher. Früher konnte man einfach eine passende wpa_supplicant.conf.txt (fragt mich nicht, warum da noch ein .txt am Ende ist, ich weiß es wiklich nicht) in der Boot-Partition ablegen, der Pi hat dan den Rest gemacht. Das stand auch in der oben erwähnten Müll-Anleitung. Tatsächlich findet man jetzt aber auf der offiziellen headless-Installationsanleitung (die für mich auch nutzlos ist, weil sie auf diesem UI-tool basiert) folgenden Hinweis:

Previous versions of Raspberry Pi OS made use of a wpa_supplicant.conf file, which could be placed into the boot folder to configure wireless network settings. This functionality isn’t available from Raspberry Pi OS Bookworm onwards.

Danke für den Hinweis. Ich habe auch nicht gerade eine Stunde damit verplempert herauszufinden, warum sich das Teil nicht verbindet. Aber man kann das WLAN ja noch anders konfigurieren. Aber im Ernst: vergesst es.

Ich habe es lange genug versucht. Die WLAN-Konfiguration selber ist noch harmlos. Aber dann muss man noch das WLAN-country setzen (aus regulatorischen Gründen, ich vermute mal es geht darum, welche Frequenzen erlaubt sind). Dieser Artikel einer Informatikerin hat mir sehr weitergeholfen zu verstehen, wie der ganze Krams über die UI konfiguriert wird (der einzige brauchbare Artikel übrigens. Die Autorin hat die Autoconfig auseinandergenommen um zu sehen, wie sie funktionier. Darauf aufbauend konnte ich dann tiefer graben).

Aber wenn man meint, das gesetzt zu haben, ist das WLAN-Modul immer noch durch rfkill blockiert, und um das zu entsperren muss man… naja, ich dachte ich hätte einen Weg, der /var/lib/systemd/rfkill/platform-3f300000.mmcnr\:wlan und ein Kommandozeilenparameter für den Kernel beinhaltete, aber das hat nicht funktioniert.

Die viel einfachere Lösung: Schließt den Pi per Kabel ans Netzwerk an, startet ihn, logged euch ein und konfiguriert das WLAN-Country und das WLAN dann mit raspi-config. Christ on a stick!

Schritt 3: SSH-Konfiguration

Zuerst eine magische Datei in der Boot-Partition (erste Parition, bootfs) anlegen:

touch ssh

Die ist magisch, die braucht keinen Inhalt. Die ist nur dafür da, damit der Pi SSH startet, was er nicht per default macht, weil das gefährlich ist. Und weil das gefährlich ist, müssen wir das absichern. Das geht auf der anderen Partition, rootfs. Dort, wie gewohnt, den eigenen öffentlichen SSH-Schlüssel in /home/pi/.ssh/authorized_keys eintragen.

Dann etc/ssh/sshd_config bearbeiten. Wichtige Zeilen:

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
PasswordAuthentication no

Diese Zeilen sind per default auskommentiert, PasswordAuthentication sollte man auf no setzen. Niemals SSH mit password authentication!

Schritt 4: Benutzerkonfiguration

Und dann booten und… nicht? Keine Verbindung? Früher konnte man immer darauf verlassen, dass es den Benutzer pi gab. Den gibt es augenscheinlich immer noch, allerdings blockt der Raspberry Pi und meldet sich nicht im Netzwerk an. Es fehlt noch ein Benutzer.

Also noch eine Datei, userconf.txt auf bootfs anlegen. Dort muss dann eine Zeile sein:

pi:<password>

Wobei pi irgendein Benutzername sein kann und <password> ein SHA512-gehashtes Passwort, das kann man mit openssl passwd -6 erzeugen. Ich habe einfach ein sehr langes, zufälliges Passwort gewählt, das man unmöglich raten und das ich mir noch unmöglicher merken kann. Aber ich muss es mir ja nicht merken, ich will mich ja mit meinem SSH-Key anmelden. Fun Fact: Das sudo-Password ist immer noch nicht gesetzt, dafür brauche ich das Passwort also auch nicht.

Schritt 5: Andere Kleinigkeiten

Man kann auch noch /etc/hostname anpassen, um den Hostname des Raspberry Pis zu ändern.

Schritt 6: Booten

Nach dem Booten das Übliche an Raspi-Konfiguration machen (sudo raspiconfig), dann die üblichen Verdächtigen installieren, Daemons beschwören, yadda yadda… Was man halt mit dem Pi so machen will.

Fazit

Meine Güte, haben die es schwierig gemacht, den Raspberry Pi headless aufzusetzen. Über die Jahre wurde es immer schwieriger. Zunächst konnte man noch sagen: Ok, das ist ein Sicherheitsfeature (SSH ist standardmäßig deaktiviert). Aber dass der Pi nicht einmal mehr fertig bootet, wenn man keinen Benutzer angelegt hat, oder dass es praktisch unmöglich ist, das WLAN zu konfigurieren… das ist echt Kacke. Es ist einfach alles grundlos viel komplexer gemacht worden. Ich will doch nur meinen Pi.

Ach ja, und der mittlerweile nicht mehr ganz neue Pi gerät gelegentlich in Bootschleifen. Vermutlich hat das was mit der SD-Karten-Halterung zu tun. Sehr unpraktisch, wenn man das Ding headless startet und nie sicher sein kann, dass es dieses Mal dann endlich korrekt bootet.

Ich bin jetzt am Ende meiner Nerven, aber der Pi läuft. Mal sehen, ob ich zumindest noch schnell die Datenerfassung für das Raumklima wieder angeworfen kriege. Der Webserver zur Anzeige kann dann später kommen.