WriteFreely

Reader

⚠️ FIMIDI IS CLOSING ON 15 OCT ⚠️: https://write.fimidi.com/about

from HDValentin

Ich bin gerade von fimidi.com zu tchncs.de mit #Pixelfed und #Writefreely umgezogen. Der bisherige Instanzbetreiber hat uns leider verlassen.

Solltest Du den Texten und mir weiter folgen wollen, kannst Du Deine Abos hiermit aktualisieren:

Schnappschüsse auf Pixelfed @hdvalentin@pixel.tchncs.de pixel.tchncs.de/hdvalentinPixelfed Feed

Texte auf text.tchncs @hdvalentin@text.tchncs.deFeed

Eine Anleitung, wie Du einfach Deine Texte sichern und zu einer anderen #Writefreely-Instanz umziehen kannst, habe ich hier verfasst: text.tchncs.de/hdvalentin/texte-zu-einer-anderen-instanz-umziehen

 
Weiterlesen...

from Pelzvieh

Gasheizungen sind ja nicht mehr so der letzte Schrei der Technik. Aber wenn du eine hast, solltest du dich regelmäßig versichern, ob sie eigentlich noch so funktioniert, wie sie soll. Ich berichte hier 1:1 von meinen Erfahrungen als ganz normaler “Anwender” einer solchen Heizung. Die Anlage wurde übrigens jährlich von einer Fachfirma gewartet und selbstverständlich wurden die hier beschriebenen Fehler auch von der Fachfirma behoben. Fast nichts davon ist aber in der Inspektion aufgefallen, ganz einfach weil sich diese auf den Brennvorgang konzentriert und nicht die Wechsel der Betriebszustände im Normalbetrieb analysiert – das würde auch Stunden dauern.

Der Außentemperaturfühler

Geh mal an deine Heizungsanlage und lass dir die Messungen des Außentemperaturfühlers anzeigen. Machen die Angaben Sinn?

Bei mir Folgendes: Temperatur 5,0°C, Minimium 5,0°C, Maximum 5,0°C. Das hatte nichts mit der Lufttemperatur zu tun, gar nichts. Und die Temperatur ändert sich bei uns auch zwischen Morgen und Nachmittag.

Finding: der Außentemperaturfühler ist kaputt!

Maßnahme: Austausch des Temperaturfühlers.

Nach dem Tausch des Außentemperaturfühlers: In einer Frostnacht Minimum 8,9°C. An einem warmen Frühlingstag Maximum 14,3°C.

Finding: der Außentemperaturfühler lungert in einem Lichtschacht, dessen Mikroklima mit den realen Wetterverhältnissen nichts zu tun hat.

Maßnahme: längeres Anschlusskabel beschaffen, aus dem Lichtschacht herausführen und an einer repräsentativen Stelle der Hauswand anbringen lassen.

Die Temperaturkurve der Vorlauftemperatur

So im Normalbetrieb: geben deine Heizkörper ein sanftes Rauschen von sich, oder dringt ein gepresstes Zischen aus dem Ventil?

Im Normalbetrieb sollten die Ventile der Heizkörper typischerweise offen sein (solange nicht Sonneneinstrahlung oder andere Wärmequellen die Temperatur hochgetrieben haben), der Heizkörper über seine ganze Höhe eine gleichmäßig abnehmende Temperatur haben.

Hier fast geschlossene Ventile, Heizkörper ganz oben ein paar Zentimeter sehr heiß. Und der einzige Befund bei der Wartung: ein knochentrockener Brenner statt kondensierender Feuchtigkeit wie sich das für eine Brennwerttherme gehört.

Befund: als Ausgleich für den kaputten Außenfühler wurden die Temperaturvorgaben völlig verdreht.

Maßnahme: drehe die Ziel-Raumtemperatur an der Therme radikal zurück (hier ungefähr 5 Grad). Mechanische Thermostat-Ventile im Gegenzug etwas weiter auf.

Das 3-Wege-Ventil

Geh mal duschen, aber während aktiver Warmwasserbereitschaft. Also sprich: bring deine Heizung dazu, Warmwasser zu bereiten. Was machen derweil die Heizkörper?

Hier: die Heizkörper laufen weiter und werden richtig heiß, auch wenn es draußen nicht besonders kalt ist.

Befund: das 3-Wege-Ventil ist kaputt.

Maßnahme: tausch das kaputte 3-Wege-Ventil, damit die Heizanlage wieder zwischen Warmwasserbereitung und Raumheizung umschaltet.

Das Rohr vom Speicher

Das 3-Wege-Ventil ist frisch getauscht, nach dem Duschen gehen die Heizkörper aus – aber stundenlang nicht wieder an?! Am Gerät liest man: der Kessel ist auf Maximaltemperatur, der Brenner aus, die Warmwassertemperatur dagegen: kalt. Dabei kommt durchaus warmes Wasser aus dem Hahn. Warum nur wird der Brenner die Wärme nicht los und das Wasser nicht warm?

Befund: ein Rohr ist verschwunden. Korrodiert, in den Speicher gefallen oder gleich ganz aufgelöst. Klingt spooky, ist aber so.

Maßnahme: neues Rohr einbauen.

Was bringt eine funktionierende Heizanlage?

Ergebnis: über 50% Einsparung im Gasverbrauch, geringerer Verschleiß.

Und jetzt schau nochmal auf deine Vorlauftemperaturen im Winter und lasse mit den Werten prüfen, ob bei dir eine Wärmepumpe funktioniert.

 
Weiterlesen...

from Pelzvieh

Wie schon geschrieben, mein #BananaPi M2 Zero konnte ja nicht mit dem DHT11-Kernelmodul den angeschlossenen Sensor auslesen. Von rund 80 erwarteten Flanken lösten gerade immer knapp 20 einen IRQ aus. Ich habe auch schon Workarounds durch Polling im Userspace und eine polling-Version des DHT11-Kernelmoduls vorgestellt. Die gute Nachricht: der Mist kann weg!

Diskussionen mit den Kernel-Entwicklern

Fruchtbare Anstöße gab es, als ich versucht habe, den Polling-Driver in den Kernel zu bekommen. Das dürfe eigentlich gar nicht nötig sein, nicht bei diesem Board, hieß es. Es müsse ein Problem mit meinem Setup geben. Nun, zum Glück ist das Setup ja aus nachvollziehbaren Quellen mit reproduzierbaren Schritten entstanden, da weiß man ja, wo's her kommt.

Fakten, Fakten, Fakten

Ich habe also analysiert, was eigentlich beim Treiber so ankommt. Allerdings sind wir jetzt am Puls der Kernel-Zeit, d. h. ich musste erstmal den aktuellen staging-testing-Branch des Kernel für die Banane übersetzen (Image, Module, devicetree) und ein initramfs-Image generieren. Letzteres verursacht wieder Puls, weil der ARM64-Laptop nicht in der Lage ist, armhf-Binaries auszuführen. Aber dank update-ramfs auf dem BananaPi selbst, konnte auch dieses Problem wieder gelöst werden. Meine neue Erkenntnis des Tages: “dynamic debug” ist eine Kernel-Funktion, über die man ganz bestimmte debug-Ausgaben im laufenden Kernel an- und ausknipsen kann:

    echo "file dht11.c +p" | sudo tee /proc/dynamic_debug/control

..schaltet das Debugging unseres dht11-Kernelmoduls an. Ergebnis der Übung eigentlich recht diffus: so alle 150-300µs trudelt mal ein IRQ ein, über die Hälfte geht verschütt. CPU-Leistung, Interrupt-Geschehen, Speicher, Kernel-Meldungen: alles unauffällig. Was ist hier los?

Des Bananenproblems Kern

Ich weiß gar nicht so genau warum, aber ich hatte immer das Gefühl, dass das Problem mit der Verarbeitung von GPIO-Signalen zu IRQs des SoC zu tun haben muss – und nicht mit etwas, was Betriebssystem und CPUs so treiben. Diesem Gefühl folgend arbeitete ich mich mäßig inspiriert durch ein Datasheet des Allwinner H3 (zu finden in den Untiefen des Internet...). Architektur des SoC, Busse, Bridges. Beschreibung der GPIOs, Register der PA-Bank, hmhm. Oha! Hinter den Registern der PG-Bank kommt nochmal die PA-Bank dran: Kapitel 4.2.55ff beschäftigen sich mit Registern zur Kontrolle der Interrupts aus der PA-Bank. Und dann fällt mir ins Auge “4.22.2.61. PA External Interrupt Debounce Register”. Debounce, also ein Filter gegen Interrupt-Feuer durch prellende (mechanische) Taster, sowas kann das Gerät? Und der Default ist Abriegelung mit 32kHz, scheinen die kargen Infos nahe zu legen. Das könnte die Erklärung sein und war dann auch! Geschwind in Devicetree-Doku und Kernel-Sourcen geblättert, wie dieses Register bespielt wird und flugs den Devicetree-Overlay ergänzt um eine Einstellung des &pio:

   input-debounce = <5 0>;

...und schon funktioniert der Treiber!

Und nun?

Ihr findet das aktualisierte Devicetree Overlay in meinem Repository von Bananen-Ressourcen. Daneben auch einen veränderten DHT11-Devicetreiber, der nur noch auf falling edges lauscht, da die low-Pegel des Sensors keine Information tragen. Der ist kein Muss, aber meinen Messungen nach funktioniert er noch einen Tick zuverlässiger als der Original-Treiber und letzter benötigt einen eher noch niedrigeren debounce-Eintrag: mit input-debounce = <1 0> tut er's dann auch ganz robust. Solltet ihr die Polling-Version des Treiber gebaut und per device tree eingebunden haben: das kann jetzt glücklicherweise entfallen. Was mir noch unklar ist: ob das Fehlen einer input-debounce-Konfiguration nicht nachgerade ein Bug im Devicetree (aus den Kernel-Sourcen) ist. Denn an der A-Bank hängen auch andere Geräte, nicht nur über die Steckerleiste frei nutzbare GPIOs. Dass z. B. die seriellen Schnittstellen mit dieser Schaumbremse glücklich sein sollen, kann ich mir nur schwer vorstellen. Und seit der Umstellung ist die Kerneltask sugov:0, die mich vorher in der Anzeige von top wegen ihres (angeblichen) CPU-Konsums verwirrt hat, von dort verschwunden. Die Änderung ist also alles andere als frei von Nebenwirkungen, schauen wir mal, wie sie sich bewährt.

 
Weiterlesen...

from Pelzvieh

GPIO, aber wie?

Wenn es darum geht, auf den Einplatinencomputern elektronische Komponenten anzusteuern bzw. auszulesen, wird man sowohl beim #RaspberryPi als auch beim #BananaPi auf Libraries und Dämonen im Userland gestoßen: #pigpiod, #WiringPi und ähnliche. Schaut man sich mal oberflächlich an, wie diese gebaut sind, kriegt man es mit der Angst: Direkte Registerzugriffe per /dev/mem werden munter gemischt mit Kernelfunktionen verwendet, eine Prüfung ob ein Pin bereits von einem Kernelmodul bedient wird, findet nicht statt. Z. B. stellte ich erst im Zuge meiner BananaPi-Rechere fest, dass ich auf einem RaspberrPi einen Temperatursensor per gigpiod zugreife, während gleichzeitig das OneWire-Kernelmodul darauf lauscht. Im Kernel und im klassischen Linux-Userland gibt es dagegen auch fertige Lösungen (irgendwie weniger präsent in meiner favorierten Suchmaschine): das neue GPIO-Kernel-Interface unter /sys/bus/gpio/devices/gpiochip0 kann

  • zum einen bastlerisch-explorativ mit den Tools aus dem Paket gpiod genutzt werden (also Achtung: gpiod ist etwas völlig anderes als pigpiod, die bauen nicht aufeinander auf, sondern beharken sich),
  • zum anderen gibt es fertige Kernelmodule für bestimmte Hardware, die man an diese GPIO-Pins hängt (genau für sowas wurde das IIO-Framework im Kernel bereit gestellt).

Das Beispiel”projekt”

Ich nehme hier mal als Beispiel einen Temperatur- und Feuchtigkeitssensor #DHT22. Dieser wird an einen PIN angeschlossen und es gibt einen IIO-basierten Kernel-Treiber dht11.ko (DHT11 und DHT22 sind offensichtlich sehr nahe verwandt und dht11.ko kann auch DHT22). Spoiler: das Beispiel ist fies gewählt, denn der dht11.ko funktioniert am BananaPi am Ende des Tages nicht. Ich hoffe, dass einer von euch weiß, was das Problem verursacht und wie man es abgestellt bekommt :-D

Anschluss des Sensors

Mein DHT22 kommt auf einer kleinen Platine konfektioniert mit 3 beschrifteten Anschlüssen nebst passendem 3-poligen Kabel. Der BananaPI hat im Auslieferungszustand ein 40-poliges Lochraster, in das ich eine Sockelstiftleiste eingelötet habe (vermutlich gibt es auch Sockelstiftleisten mit Klemmkontakten). Das Anschlussschema findet man im BananaPi-Wiki. Der (+)-Anschluss muss mit einem 3,3V-Pin verbunden werden, Pin Nr. 1 bietet sich an. Der (–)-Anschluss mit einem Gnd-Pin, z. B. Pin Nr. 6. Der GPIO-Pin kann grundsätzlich aus einer reichlichen Auswahl gewählt werden, wir nehmen Pin Nr. 7, gemäß Schema Anschluss PA6. Also nicht verwechseln: wir stöpseln die Hardware an Pin 7, in der Software heißt das Ding aber PA6 (A=Bank 0, 6=Nr. 6 auf dieser Bank).

Konfiguration von dht11.ko – das Devicetree Overlay

Versucht man sich diesem dht11.ko naiv zu nähern – ich hätte erwartet, dass das Kernelmodul irgendwelche Parameter bietet, über das man ihm mitteilt, an welchem Pin das Gerät sitzt – aber weit gefehlt, so tickt diese IIO-Welt nicht: sie möchte, dass wir über den #Devicetree kundgeben, welche Geräte wo an welchen Bussen hausen. Der eigentliche Devicetree des BananaPi findet sich bereits in den Sourcen des Linux-Kernel. Er beschreibt sozusagen, welche Geräte auf der kleinen Platine wie zusammengestöpselt sind (sogar die auf dem SOC integrierten Geräte). Wir gedenken aber nun, ein weiteres Gerät hinzuzufügen, indem wir es an einen GPIO-Pin anschließen. Diese Information müssen wir also in den Devicetree einbauen. Da wäre es natürlich praktisch, wir könnten genau die Aussage, “wir haben ein DHT11 an PA06 gesteckt” hinterlegen, ohne uns mit dem ganzen Devicetree auseinandersetzen zu müssen? Genau dafür gibt es Devicetree Overlays. Damit das schick funktioniert, habe ich in der Anleitung zur Erstellung des Boot-Images beim Kompilieren des Devicetree die Option DTC_FLAGS=-@ hineingeschmuggelt. So enhält der kompilierte Devicetree die logischen Symbole und wir können im Devicetree Overlay darauf referenzieren. So sieht das dann aus (du findest die Datei auch auf Github):

// Definitions for dht11 module
/*
Adapted from dht11.dts for Raspberrypi, by Keith Hall
Adapted by pelzi.
*/
/dts-v1/;
/plugin/;

/ {
        fragment@0 {
                target-path = "/";
                __overlay__ {
                        temperature_humidity: dht11@6 {
                                compatible = "dht22", "dht11";
                                pinctrl-names = "default";
                                pinctrl-0 = <&dht11_pins>;
                                gpios = <&pio 0 6 0>; /* PA6 (PIN 7), active high */
                                status = "okay";
                        };
                };
        };

        fragment@1 {
                target = <&pio>;
                __overlay__ {
                        dht11_pins: dht11_pins {
                                pins = "PA6";
                                function = "gpio_in";
                                bias-pull-up;
                        };
                };
        };

        __overrides__ {
                gpiopin =       <&dht11_pins>,"pins:0",
                                <&temperature_humidity>,"gpios:8";
        };
};

Das “Fragment 0” erzeugt einen neuen Knoten “dht11@6” und dem Symbol “temperature_humidity” direkt an der Baumwurzel. Es referenziert auf dht11_pins als pinctrl-0. Diese erzeugt das “Fragment 1”, und zwar dort wo das Gerät auch hängt, nämlich am PIO-Controller, also unterhalb des Knotens mit dem Symbol pio. Es gibt an, an welchen Pins es hängt (pins, nur einer, mit dem Symbol PA6). Schließlich definieren wir noch eine Parametrierung gpiopin, um einen anderen Pin angeben zu können. Aus dieser Definition kompilieren wir ein binäres Devicetree-Overlay:

dtc dht11-banana.dts -@ -o dht11-banana.dtbo

Erzeugen und Einspielen des zusammengesetzten Devicetree

Während das Bootsystem des RaspberryPi bereits eine Nachlade- und Parametrierungslogik implementiert (/boot/config.txt), haben wir solche Bequemlichkeit auf dem BananaPi (noch?) nicht. Man kann durchaus dem U-Boot-Loader sowohl Devicetree, als auch separate Overlays zum Laden und zusammenmischen antragen. Da dies aber ohnehin hart codiert auf dem Image ist, bevorzuge ich aktuell, den Devicetree im Vorfeld fertig zu erzeugen und aufzuspielen, da ich Fehler nicht erst im Rahmen des Bootvorganges auf einer seriellen Console zu Gesicht bekomme, sondern als gewöhnliche Meldung eines gewöhnlichen Kommandozeilentools. Auftritt fdtoverlay!

fdtoverlay -v -i sun8i-h2-plus-bananapi-m2-zero.dtb -o banana-with-dht.dtb dht11-banana.dtbo

Dieser Aufruf erzeugt aus dem gewöhnlichen Devicetree des BananaPi M2 Zero, sun8i-h2-plus-bananapi-m2-zero.dtb und dem gerade erstellten Overlay dht11-banana.dtbo einen vollständigen Devicetree mit DHT-Knoten namens banana-with-dht.dtb. Dies kopiere ich einfach auf das Image über den bisher genutzten Devicetree:

cp banana-with-dht.dtb /mnt/debinst/boot/dtbs/sun8i-h2-plus-bananapi-m2-zero.dtb

Diese Übungen kann man selbstmurmelnd auch auf dem laufenden Device selbst durchführen und das Ergebnis dann nach /boot/dtbs/sun8i-h2-plus-bananapi-m2-zero.dtb kopieren – aktiv wird es aber erst nach einem Reboot. Ich habe leider kein Userspace-Kommando à la dtoverlay auf dem RaspberryPi finden können, um den Devicetree auf dem laufenden Gerät zu modifizieren. Das ist erstaunlich, weil es dafür eigentlich eine Kernel-API gibt, aber dtoverlay funktioniert tatsächlich nur auf einem RaspberryPi. Wer möchte ein solches Tool implementieren?

Neustart und Nutzung

Bootet man nun den BananaPi mit diesem ergänzten Devicetree, bemerkt man sofort ein geladenes Kernelmodul

$ lsmod|grep dht
dht11                  20480  0
industrialio           65536  1 dht11

Und es ist fein säuberlich hinterlegt, dass und wofür wir unseren Pin PA6 verwenden:

$ sudo gpioinfo
gpiochip0 - 224 lines:
[...]
	line   6:      unnamed    "dht11@6"   input  active-high [used]
[...]

Der DHT-Treiber stellt uns fertige Geräte zum Auslesen zur Verfügung:

$ ls -l /sys/bus/iio/devices/iio\:device0/
insgesamt 0
-r--r--r-- 1 root root 4096 15. Jan 13:16 dev
-rw-r--r-- 1 root root 4096 15. Jan 13:16 in_humidityrelative_input
-rw-r--r-- 1 root root 4096 15. Jan 13:16 in_temp_input
-r--r--r-- 1 root root 4096 15. Jan 13:16 name
lrwxrwxrwx 1 root root    0 15. Jan 13:16 of_node -> ../../../../firmware/devicetree/base/dht11@6
drwxr-xr-x 2 root root    0 15. Jan 11:30 power
lrwxrwxrwx 1 root root    0 15. Jan 13:16 subsystem -> ../../../../bus/iio
-rw-r--r-- 1 root root 4096 14. Jan 23:08 uevent

Wir können die aktuellen Messwerte einfach durch Lesen an den device files in_humidityrelative_input und in_temp_input ermitteln.

Das Problem mit dht11

Wie oben schon angekündigt, gibt es hier aber leider ein verdrießliches Problem – das Auslesen funktioniert nicht:

$ cat /sys/bus/iio/devices/iio\:device0/in_humidityrelative_input 
cat: '/sys/bus/iio/devices/iio:device0/in_humidityrelative_input': Die Wartezeit für die Verbindung ist abgelaufen

Parallel dazu nennt uns dmesg:

[52801.685052] dht11 dht11@6: Only 18 signal edges detected

Wie ich nach etwas Analyse definitiv bestätigen kann: der Treiber weckt den DHT11-Sensor auf und dieser fängt an, seine Messwerte zu schicken. Das Dumme ist, dass der BananaPi nur ein Bruchteil der tatsächlich entstandenen Flanken am Signalpin via Interrupt einfängt. Wir wissen von den eingefangenen Flanken zwar hinreichend genau die Zeitstempel, aber es fehlen halt ungefähr 70 Flanken! Warum es so lange Totzeiten zwischen den Interrupts gibt, ist mir noch nicht klar. Für Hinweise wäre ich extrem dankbar!

Was funktioniert denn nun?

Wenn du z. B. nur ein paar Ein-Aus-Sensoren (auch Bewegungsmelder...) und LEDs verbinden möchtest, funktioniert das auf analoge Weise durchaus. Du kannst analog des fragment@1 oben Pins für Input oder Output konfigurieren, inkl. Pull-Up/Down-Widerständen (Input) oder Drive-Konfiguration (Output). Und es gibt eine riesige Menge an IIO-Device-Treibern fertig in den Linux-Quellen, die eigentlich nur darauf warten in eigenen Projekten genutzt zu werden. Wie du den Treiber eines GPIO-basierten Gerätes am BananaPi in Betrieb bekommst, sollte dieser Artikel dir jetzt verraten haben. Ich wäre dir dankbar, wenn du erfolgreiche Anbindungen von anderen Sensoren auch veröffnetlichen würdest!

Vertiefende Dokumentation

  1. Device Tree Usage
  2. Device Tree Overlay Notes
  3. Bindings der IIO-Treiber
 
Weiterlesen...

from Pelzvieh

Warum die Übung?

Die etablierten Informationsquellen zum BananaPi (z. B. das Wiki) verlinken einmalig fertig gebaute Images und bieten Anleitung, den Rechner auf dieser Basis in Betrieb zu nehmen.

Warum ist das ein Problem?

  1. Vulnerabilities: die Images wurden von irgendeinem vergangenen, Jahre alten, Releasestand von Linux-Kernel und Distributionen gebaut. Inzwischen dürften hunderte von Schwachstellen dieses Standes bekannt geworden sein, deren Korrekturen aber nicht in den Images enthalten sind.
  2. Unklare Herkunft: es ist nicht transparent, wer diese Images gebaut hat, welche Review-Prozesse stattgefunden haben und welche Änderungen an den Upstream-Quellen durchgeführt wurden und zu welchem Zweck.
  3. Mangelnde Professionalität: unter den veröffentlichten Images befinden sich solche, die nicht durch einen Buildprozess erzeugt wurden, sondern einen Snapshot eines manuell aufgesetzten und genutzten Systems darstellen. Es finden sich insbesondere lange Shell-Histories, konfigurierte Zugänge zu WLANs taiwanesicher(?) Shared Office-Standorte.
  4. Fehlende Versionskontrolle: es werden auf unterschiedlichen Seiten unterschiedliche Stände auf unterschiedlichen Filesharing-Plattformen referenziert, von denen einige nicht mehr richtig funktionieren. All dies zusammen genommen macht diese Quellen zu einem El Dorado für persistente Angriffe (APTs). Sowas kommt mir nicht ins Haus und euch hoffentlich nicht ins Unternehmen. Da sind wir uns doch einig..?!? Dann kann's ja losgehen!

Ziele

  1. Ein Image zum Aufspielen auf Micro-SD-Karte wird erstellt
  2. Ein #BananaPi M2 Zero kann von einer mit diesem Image bespielten SD-Karte booten
  3. Der Bootvorgang verläuft unfallfrei in ein nutzbares System
  4. Funktionsfähig sind zumindest: Mini-HDMI (Bildschirmausgabe), Micro-USB-Port, GPIO (PINs), WLAN
  5. Das Gerät bucht sich automatisch in das konfigurierte WLAN ein und ist remote über ssh erreichbar (denn das Gerät hat keine fertig konfektionierte Ethernet-Schnittstelle und ich bin zu faul um die dafür nötigen PINs einzulöten und an per Kabeln an eine Ethernet-Buchse zu fummeln).

Anlegen des Images

Wir legen das spätere Image als lokale Datei auf einem Debian-Linux-Rechner (gerne virtuell...) an, machen diese via Loop-Device als Blockgerät verfübar und richten dieses richtig ein. Dieses Vorgehen hilft gegen die Versuchung, die SD-Karte zur Unzeit schonmal ins Zielgerät einzulegen und darauf manuell weiter zu fummeln, bis etwas funktioniert. Das Vorgehen hier folgt eigentlich nur Schritt für Schritt der entsprechenden Anleitung von Debian! Wenn dieser Artikel schon einige Jahre alt ist wenn du das liest, solltest du dort nach einer aktuellen Anleitung suchen. (todo: Hier fehlt eine Aufstellung der auf dem Linux-Rechner benötigten Pakete und sonstigen Voraussetzungen; beispielsweise fehlt die Warnung, dass das alles nicht auf arm64-Umgebungen funktioniert, weil ...)

dd if=/dev/zero of=bananapi_debian.img bs=1G count=3
sudo losetup -f bananapi_debian.img 
sudo fdisk /dev/loop0 
sudo mkfs.ext4 -O ^metadata_csum,^64bit /dev/loop0p1
sudo losetup -d /dev/loop0 
sudo losetup -P -f bananapi_debian.img 
sudo mkfs.ext4 -O ^metadata_csum,^64bit /dev/loop0p1 
sudo mkdir /mnt/debinst
sudo mount /dev/loop0p1 /mnt/debinst/
sudo debootstrap --arch=armhf --foreign --include=binfmt-support,wpasupplicant,dhcpcd5 bullseye /mnt/debinst
sudo cp /usr/bin/qemu-arm-static /mnt/debinst/usr/bin/
sudo LANG=C.UTF-8 chroot /mnt/debinst qemu-arm-static /bin/bash

An dieser Stelle haben wir die benötigten Softwarepakete schon in unserem Image liegen, wir können Programme auf der Zielplattform ausführen und sind gerade in die Systemumgebung unseres aufzusetzenden Rechners geschlüpft. Weiter geht's, nun im chroot:

/debootstrap/debootstrap --second-stage
editor /etc/adjtime

Das ist jetzt ein bisschen doof, weil du nicht siehst, was man da reinschreiben kann. Aber du kannst die Man-Page bzw. die Debian-Anleitung zu Rate ziehen :–)

dpkg-reconfigure tzdata
editor /etc/systemd/network/eth0.network
editor /etc/systemd/network/wlan0.network
editor etc/wpa_supplicant/wpa_supplicant.conf

Dokumentation nebst Beispielen findest du in der man-Page wpa-supplicant.conf

mkdir root/.ssh
editor root/.ssh/authorized_keys 

Hier kopierst du den public ssh-key rein, mit dem du dich am laufenden System anmelden willst. Achtung, es ist KEIN Passwort-Login für root möglich! Vielleicht möchtest du auch direkt an dieser Stelle einen User anlegen, für diesen einen ssh-Key hinterlegen, ihn für sudo berechtigen usw. Das halte ich für eine gute Idee, ist aber normales Linux-Alltagsgeschäft, da brauchst du ja keine Tipps von mir.

editor etc/resolv.conf
apt install openssh-server
editor etc/apt/sources.list.d/security.list # hier trägst du die apt source für Security-Updates deiner Distribution ein
editor etc/apt/sources.list.d/firmware.list # hier trägst du die apt source ein, aber die Sektion non-free
apt update
apt install locales && dpkg-reconfigure locales
apt install console-setup && dpkg-reconfigure keyboard-configuration
apt install linux-image-armmp-lpae
apt install firmware-linux bluez-firmware firmware-atheros firmware-bnx2 firmware-bnx2x firmware-brcm80211 firmware-cavium firmware-ipw2x00 firmware-iwlwifi firmware-libertas firmware-qcom-soc firmware-qlogic firmware-ti-connectivity firmware-zd1211 

Viel hilft viel! Naja, ehrlich gesagt müsste sich mal jemand die Mühe machen herauszusuchen, welche Firmware-Pakete der BananaPi wirklich braucht...

systemctl add-requires wpa_supplicant.service systemd-networkd-wait-online.service
systemctl add-wants network-online.target wpa_supplicant.service
editor /lib/systemd/system/wpa_supplicant.service

Im ausgelieferten Zustand würde wpa_supplicant nur über dbus lauschen, daher musst du -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf zu ExecStart hinzufügen. Kennst du eine saubere Lösung für das Problem?

echo "banana" > /etc/hostname
editor /etc/dhcpcd.conf # enable option "hostname"
exit

Nun sind wir wieder draußen aus dem Image. Die Userland ist jetzt fertig. Was fehlt, sind Bootloader und die Systemkonfiguration in /boot. Das U-Boot (den Bootloader) bauen wir wie folgt:

git clone git://git.denx.de/u-boot.git
cd u-boot
make bananapi_m2_zero_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf-
cd ..

Eine Device-Tree-Definition für den BananaPi M2 Zero gibt es glücklicherweise fertig im Linux-Sourcetree. Wir können sie also ebenfalls bauen:

apt source linux-image-5.10.0-20-armmp-lpae
cd linux-5.10.*/
make CROSS_COMPILE=arm-linux-gnueabihf- defconfig
make CROSS_COMPILE=arm-linux-gnueabihf- DTC_FLAGS=-@ dtbs
cd ..

Eine Bootloader-Konfiguration leihen wir uns von TuryRx in github aus. Das U-Boot-Script wird allerdings fest codierte Namen für Kernel und InitRAMFS verwenden, während diese Dateien im Debian-Paket mit Versionsnummern verziert sind. Deshalb kopieren wir die gerade installierten einfach.

wget https://github.com/TuryRx/Banana-pi-m2-zero-Arch-Linux/raw/master/boot.cmd
mkdir /mnt/debinst/boot/dtbs
sudo cp u-boot/u-boot-sun8i-h2-plus-bananapi-m2-zero.dtb /mnt/debinst/boot/dtbs/sun8i-h2-plus-bananapi-m2-zero.dtb
sudo cp /mnt/debinst/boot/vmlinuz-5.10.0-20-armmp-lpae /mnt/debinst/boot/zImage
sudo cp /mnt/debinst/boot/initrd.img-5.10.0-20-armmp-lpae /mnt/debinst/boot/initramfs-linux.img
sudo mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "BananaPI boot script" -d boot.cmd /mnt/debinst/boot/boot.scr
sudo umount /mnt/debinst 
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8 # ja, so habe ich auch gekuckt: so lädt die Firmware des BananaPi ihren Bootloader...
sudo losetup -d /dev/loop0

Fertig ist das Image! Du kannst es jetzt auf eine Micro-SD-Karte übertragen und einen BananaPi M2 Zero damit starten.

 
Weiterlesen...

from Schwarmschwärmerei

Ein kleines Vorwort:

Ich habe jetzt schon etwas länger keinen Beitrag veröffentlicht. Leider haben mich Herausforderungen des realen Lebens mich so in Anspruch genommen, dass ich mir keine Zeit zum Schreiben nehmen konnte. Ich werde versuchen, wieder etwas mehr zu schreiben, damit ich mit meinem Blog auch zeitlich wieder auf gleicher Höhe wie die Realität bin.


Wenn ich mit etwas Neuem beginne, recherchiere ich gerne gründlich. Ich bin auch kein Freund von “Das haben wir schon immer so gemacht!”

Als ich damals das erste Mal Honig bei meiner (zu der Zeit noch nicht) Imkerpatin kaufte, erzählte sie mir, dass sie seinerzeit mit Magazinbeuten im Deutschnormal-Maß begonnen hat, weil das in unserer Gegend eben am meisten verbreitet und so der Austausch von Material und Bienenvölkern unter den Imkern auch am einfachsten war. Sie äußerte, dass sie zwar gerne auch mal andere Systeme probieren würde, dies aber nicht ganz so einfach sei wegen der Menge an vorhandenem und für Experimente neu benötigtem Material.

Magazinbeuten sind diese klassischen, viereckigen Boxen, die man heutzutage bei fast jedem Imker sieht. Magazinbeuten bestehen aus einer oder mehrerer sogenannter “Zargen”, also einzelne Etagen, welche die Rähmchen enthalten, in welchen Mittelwände aus Wachs eingearbeitet sind. Diese Mittelwände bauen die Bienen dann aus mit ihrem Wabenwerk. Der Einsatz von Mittelwänden soll den Bienen die Arbeit erleichtern, der Einsatz von Rähmchen dagegen dem Imker. Magazinbeuten gibt es in verschiedenen Standardgrößen, die wohl bekanntesten sind “Deutschnormal” (auch DNM abgekürzt), “Zander” und “Dadant”. Darüber hinaus gibt es noch viele andere Größen, Untergrößen und regionale Besonderheiten.
Das Imkern in Magazinbeuten ist die Betriebsweise, die man in der konventiellen Imkerei lernt und die dort weitestgehend als einzige vernünftige Betriebsweise proklamiert wird.

Angeregt durch die Aussage meiner Imkerpatin und meinen Wunsch, bienengerecht zu imkern, fing ich also an zu recherchieren und stieß schließlich auf den “Barefoot Beekeeper” Philip Chandler. Fragt mich bitte nicht wie, ich bin einfach irgendwann bei seinen Videos gelandet. Insbesondere sein in den Videos erkennbarer ruhiger, natürlicher Umgang mit den Bienen hat mich beeindruckt, so dass ich alle Videos von ihm gesehen und alle Bücher und Texte von ihm gelesen habe.

Philip Chandler geht einen Mittelweg zwischen der exzessiven Bienenhaltung, dem “Honey Farming”, wie er es nennt, und der “Bienenkonservierung”, bei der dem Bienenstock nichts hinzugefügt und nichts entnommen wird. Er nennt diesen Weg “Balanced Beekeeping”. Dabei können tiermedizinische Behandlungen erfolgen, müssen aber nicht. Eine Entnahme von Bienenprodukten erfolgt nur, wenn reichlich vorhanden ist und die Entnahme dem Bien nicht schadet. Steuernde Eingriffe sollen so gering wie möglich gehalten werden und vor allem nicht zur Ertragssteigerung erfolgen.

Die vom Barefoot Beekeeper bevorzugte Bienenbehausung ist der Kenyan Top Bar Hive (kTBH), eine Oberträger-Trogbeute, die ursprünglich für die Imkerei in Kenia erdacht wurde, um dort die Imkerei für die Bevölkerung einfach und günstig zugänglich zu machen. Die kTBH kann selbst aus wenig Material und mit geringem Werkzeugeinsatz hergestellt werden. Bei der kTBH bauen die Bienen ihr Wabenwerk selbst an Oberträgern, ohne Rähmchen. Durch die Trapezform können die Bienen ihre Waben natürlich und ohne leeren Raum bauen. Zudem werden dadurch kalte Ecken vermieden.

In seiner Definition als Imker sieht sich der Barefoot Beekeeper weniger als Bienenhalter (Beekeeper) sondern mehr als Bienenpfleger oder Bienenhirte.

All das, was ich gelesen und gesehen habe, auch hinsichtlich anderer Systeme und Betriebsweisen, hat mich davon überzeugt, dass das Balanced Beekeeping genau das Richtige für mich ist. Und somit steht für mich fest:

Ich bin Shadowsword, Bienenhirte.

 
Read more...

from ybaumy

Der Beitrag wurde ebenfalls auf gnulinux.ch veroeffentlicht.

Misskey ist eine Micro-Blogging Plattform, die mit ihrer Vielfallt an Funktionen punktet.

Misskey ist wie Mastodon und Pleroma ebenfalls eine Micro-Blogging Plattform. Entwickelt und entstanden ist die Plattform in Japan, was sich immer noch an den englischen Übersetzungen auf der Homepage Misskey-Hub widerspiegelt. Das Projekt ist ebenfalls auf Github zu finden. Auch hier sind viele Issues in Japanisch. DeepL schafft hier Abhilfe bei Übersetzungen.

Das mag auf den ersten Blick Nutzerinnen und Administratorinnen abschrecken.

In Europa ist Misskey immer noch eher unbekannt, da der Platzhirsch Mastodon, hier vor allem durch grosse Instanzen, den Blick bei Endusern für Alternativen versperrt. Auch Misskey kommuniziert über das Activity-Pub Protokoll und ist somit in der Lage mit Mastodon, Pleroma, Pixelfed, Peertube, Writefreely, Friedica und Co. zu kommunizieren.

Auf den ersten Blick erschien mir das Interface sehr ungewohnt und überladen mit neuen Funktionen.

Die Features im Einzelnen

Hier eine Übersicht der wichtigsten Features.

Die Entwicklerinnen von Misskey verfolgen den Ansatz, eine möglichst zentrale Plattform für Social-Media zu erstellen und sich nicht nur auf den Aspekt des Micro-Blogging zu beschränken.

Ein inzwischen für viele Nutzerinnen wichtiger Aspekt ist die Zeichenanzahl für Posts. Der Standard beträgt hier 3000 Zeichen und ist inzwischen nicht mehr über das Administrationsmenü konfigurierbar. Hier waren vor einiger Zeit noch bis zu 8000 Zeichen möglich.

Timelines

Wie bei Mastodon gibt es verschiedene Default Timelines, die sich in Home (alle Personen, denen gefolgt wird), Local (alle Posts auf der lokalen Instanz) und Global (alle Posts von Instanzen, die sich über Federation verbunden haben) gliedern.

Lists

Einzelne User können in Listen gruppiert und auch als Timeline angezeigt werden.

Antennas

Genau wie bei Listen, können über Antennas Gruppierungen erstellt werden, hier jedoch über Keywords Matching und/oder Excludes, die entweder globale oder bestimmten Personen dann eine Timeline befüllen.

Drive

Misskey verfügt über die Möglichkeit, Dateien direkt auf der Plattform abzulegen und auszutauschen. Die maximale Drive-Kapazität kann je nachdem, was auf administrativer Seite eingestellt wurde, variieren.

Dieses Feature bringt unter Umständen natürlich maximale Probleme für Administratorinnen mit sich, denn es kann nicht kontrolliert werden, was für Dateien abgelegt werden und ob hier Copyright Verletzungen vorliegen, was auch rechtliche Konsequenzen nach sich ziehen kann.

Chat

Ein Feature, das ich wirklich bei Mastodon vermisst hatte, ist die Chat-Möglichkeit, wo sich der Gesprächsverlauf wie bei anderen Chat-Programmen darstellt und so eine flüssigere Kommunikation mit einzelnen Personen oder auch Gruppen geführt werden kann.

Pages

Pages können wie ein Blog genutzt werden. Neben einfachen Textinhalten gibt es hier die Möglichkeit Javascript zu nutzen. Ferner werden sogenannte Blocks unterstützt, mit denen der Inhalt gestaltet werden kann.

Channels

Channels können z. B. thematisch genutzt und es kann ihnen gefolgt werden. Es sind im Prinzip abgeschlossene Public Timelines, in denen Posts erstellt werden können.

Die Gallery ist im Prinzip ein Imageboard wie Pixelfed, um Bilder zu teilen. Was mir hier neben der Like-Funktion fehlt, ist definitiv die Möglichkeit Kommentare zu hinterlassen.

Widgets

In der rechten Seitenleiste finden befinden sich Widgets, die komplett angepasst werden können.

Verfügbare Widgets sind:

Ich selbst nutze die rechte Seite für Notifikation und eine Liste meiner regulären Kontakte.

User Settings

Die User Settings sind sehr umfangreich. Neben persönlichen Einstellungen und Einstellungen für die Timeline finden sich hier Möglichkeiten das Interface noch weiter zu verändern. Es ist z. B. auch möglich, die Navigation Bar selbst, mit Funktionen und in der Reihenfolge zu verändern.

Achtung! Einstellungen können über “Preference Backups” gesichert werden. Passiert dies nicht, dann sind alle Einstellungen, die ansonsten nur über Cookies gespeichert sind, neu eingestellt werden, dies gilt auch, wenn z. B. auch ein anderer Browser verwendet wird.

Andere Besonderheiten

Posts unterstützen Markdown Format, was z. B. beim Teilen von Code-Snippets sehr nützlich sein kann.

Für Administratoren

Es gibt hier sehr viele Features, die sich von Mastodon abgrenzen.

Für mich sind, die direkte DeepL Integration für Übersetzungen von Posts direkt in der Timeline und die Möglichkeit S3 kompatiblen Object Storage zu konfigurieren, um z. B. Minio zu nutzen, wichtig.

Mobile und CLI

Mobile (IOS)

Der grösste Schwachpunkt ist für mich, dass es keinen guten mobilen Client auf IOS gibt. Hier gibt es Misscat, ein Projekt, dass seit über einem Jahr kein Update erhalten hat.

Die verfügbaren Mastodon Clients funktionieren nicht. Wie es auf der Android-Seite aussieht, kann ich nicht beurteilen.

Persönlich nutze ich inzwischen den Brave-Browser, denn mit Firefox hatte es Probleme gegeben, auf IOS. Ich bin aber wirklich niemand, der ausgiebig sein Mobile Device für Social-Media nutzt.

CLI

Es fehlen wie bei Mobile ebenfalls gute CLI Clients. Ich habe für mich ein API Script geschrieben, welches via Curl, automatische Posts generiert.

Fazit

Ich nutze Misskey nun fast ein ganzes Jahr und würde nur ungern wieder auf Mastodon zurückgehen. Ich betreibe selbst noch eine leere Mastodon Instanz, vor allem, um hier neue Features mitzubekommen.

Ist Misskey für mich die richtige Plattform? Es würde mir sicherlich mehr bringen, wenn es mehr User auf meiner Instanz geben würde und ich so mehr Features nutzen könnte. Trotzdem finde ich das Interface hübscher und anpassungsfähiger. Dazu kommt, dass hier aktiv entwickelt wird und nach und nach Features ausgereifter werden, denn noch nicht alles ist perfekt.

Aus administrativer Sicht verbraucht Misskey auch weniger Ressourcen für eine Single User Instanz, aber es kommt hier auch etwas darauf an, mit wie vielen Instanzen diese sich in Federation befindet.

Wie schon oben erwähnt verfolgt Misskey den Ansatz möglichst alle populären Features von Social-Media auf einer Plattform abzubilden. Aus dem Blickwinkel von Dezentralisierung kann das unter Umständen nicht optimal sein, denn für Nutzerinnen entsteht dann auch rasch eine Lock-In Situation, in der Userinnen mit ihren Daten, wie Text Posts bis hin zu Blogs und Dateien, dann auf diese Plattform angewiesen sind. Da stellt sich schnell die Frage, wie ist es denn um Datensicherheit und Verfügbarkeit gestellt? Das wiederum ergibt neue Herausforderungen für Administratorinnen, um hier den Ansprüchen von Nutzerinnen gerecht zu werden. Eine Migration auf eine andere Instanz wird dadurch erschwert und auch die Flexibilität hinsichtlich der Plattformauswahl, also z. B. zurück zu Mastodon, eingeschränkt.

Für Userinnen, die keinen IT-Hintergrund haben, könnte die Anzahl der Funktionen anfangs doch sehr überwältigend erscheinen.

Die mangelnde Unterstützung für Mobile Devices könnte Misskey potenzielle Nutzerinnen kosten. Das ist schade!

Grundsätzlich finde ich inzwischen schwierig, die rechtliche Seite im Fediverse zu beurteilen, vor allem wenn es sich um den Betrieb von Public Instanzen handelt. Dies gilt aber für alle Dienste im Fediverse.

Liste der Instanzen Support auf Patreon


verfasst von ybaumy am 25.09.2022

 
Read more...

from Imkes Gedanken

Ich entdecke #writefreely

Beiträge als Menüpunkt anpinnen

Irgendwie ist es mir gerade gelungen, meinen ersten Blogbeitrag anzupinnen und daraus einen Menüpunkt zu machen. Nun kann ich es aber nicht mehr rückgängig machen. Ich finde diese Ansicht einfach nicht mehr ... Muss wohl noch weiter wild herumklicken. ;–)

Nachtrag

Gerade habe ich herausgefunden, wie ich den Beitrag wieder lösen kann: Wenn ich meinen Blog geöffnet habe und mit der Maus über die Überschrift des Beitrags fahre, erscheint dort diese Möglichkeiten:

edit | pin/unpin | delete | change to draft

WriteFreely am Handy

Eine App scheint es für Android nicht zu geben, daher habe ich mich einfach im Browser eingeloggt. (Kleinere) Beiträge schreiben klappt so eigentlich ganz gut. Verlinkungen wären mir jetzt gerade zu frickelig, auch das Einbinden von Fotos. Aber das muss ja auch nicht (immer) sein.

 
Weiterlesen...