Kategorie: IT

Tiefkühlfach monitoren

Unser Zweit-Kühl­schrank hat eine Macke, und zwar hört er ab und an, die let­zen 3 Wochen viel­leicht 3 mal, auf zu kühlen.
Als Fei­er­abend­bier­trin­ker bemer­ke ich das zwar, aber Moni­to­ring by Bier­trink­tem­pe­ra­tur ist feh­ler­an­fäl­lig, zumal man eigent­lich 24/7 trin­ken müßte.
Der Kühl­schrank erholt sich wie­der, wenn man ihn einen Tag (mög­li­cher­wei­se auch kür­zer, ich habs nicht getes­tet) vom Strom nimmt.
Irgend­wann wer­den wir ihn erset­zen müs­sen, aber nicht demnächst.

Um also die Leber zu ent­las­ten, muß ein Moni­to­ring her, natür­lich mit Alar­mie­rung, Eska­la­tio­nen und dem gan­zen Zinnober.
#Zab­bix!
Heu­te kam das Ther­mo­me­ter, ich habe schon lan­ge eine Wet­ter­sta­ti­on, an die ich meh­re­re Sen­so­ren für Tem­pe­ra­tur und Luft­feuch­tig­keit anknüp­pern kann.
Gemacht, getan, jetzt nur noch die Tem­pe­ra­tur auslesen.
Das kann zwar lokal blei­ben, dann habe ich aber nur eine Anbin­dung an Home Assistant. Ver­mut­lich könn­te ich Zab­bix auch an Home Assistant anflan­schen, aber ein­fa­cher gehts über die API im Internet:

#!/bin/bash
/usr/bin/curl -s \
'https://api.ecowitt.net/api/v3/device/real_time?application_key=[…]&api_key=[…]&mac=[…]&call_back=all&temp_unitid=1' | \
/usr/bin/jq -r .data.temp_and_humidity_ch8.temperature.value

Funk­tio­niert:

❯ ./wetterstation.hwr.eisfach-temperatur.sh
-14.7

Jetzt nur noch ein Item bas­teln in Zabbix:

Und den ent­spre­chen­den Trig­ger, der bei einer Tem­pe­ra­tur gleich oder über ‑15°C aus­lö­sen soll:

Ein­bie­gen auf die Ziel­ge­ra­de, wir brau­chen ja noch die Benachrichtigung:

Und nun nur noch, wer auf wel­chem Wege alar­miert wer­den soll: ich, via Telegram.

Funzt!

Und wenn wir schon dabei sind: #Graf­a­na!

 

Opensource hat nicht nur Nachteile ;-)

Aus­gangs­si­tua­ti­on: Ich habe einen Zab­bix-Ser­ver im Inter­net, der monit­ort auch mei­nen klei­nen Rech­ner­zoo zu Hau­se, dazu noch IOT wie Wall­box, Mäh­ro­bo­ter, Dru­cker usw.
Dafür steht ein Raspi im Kel­ler, auf dem ein Zab­bix-Pro­xy plus ein Wire­guard mit dem Zab­bix-Ser­ver lau­fen. Der Ser­ver greift über den Wire­guard-Tun­nel auf den Pro­xy zu. Vor­teil mit dem Tun­nel: Die IP im Tun­nel ändert sich nie, auch wenn mein Inter­net-Zugang eine neue IP bekommt, und ich muß mich nicht um Trans­port­ver­schlüs­se­lung küm­mern. Das hat immer gut funk­tio­niert, bis ich auf dem Ser­ver auf Zab­bix 7 LTS hoch­ge­gan­gen bin. Und der woll­te nicht mehr mit dem Pro­xy, der ein Zab­bix 6 LTS ist.
Man soll­te mei­nen: Auf dem Raspi das 7‑er Repo­si­to­ry ein­tra­gen, upgraden und fertig.
So ein­fach ist es dann aber lei­der nicht: Mein Raspi ist 32 Bit (armhf), es gibt aber nur noch 64 Bit (aarch64). Zwar habe ich einen 64-Bit Ker­nel, aber das gesam­te User­land ist 32 Bit. Und Hoch­zie­hen geht nicht, man muß neu instal­lie­ren. Das ist zwar kei­ne Rake­ten­wis­sen­schaft, aber aufwendig.

Und nun?

Ein­fach: Zab­bix ist ja Open Source, also habe ich mir die Sourcen gezo­gen, ./configure --enable-ipv6 --prefix=/usr/local/zabbix-7.0.0 --enable-proxy --with-net-snmp --with-mysql && make install — und natür­lich hat das erst­mal nicht funk­tio­niert, weil diver­se Hea­der gefehlt haben. Also muß man die ent­spre­chen­den *-dev Pake­te nach­in­stal­lie­ren — und: Läuft.
Jetzt noch ein Unit-File für sys­temd schrei­ben, und alles ist wie­der fein.

Und irgend­wann dann doch auf 64 Bit gehen, dann kann ich auch wie­der das offi­zel­le Zab­bix-Repo­si­to­ry verwenden

Warum eine zentrale DB nicht immer eine gute Idee ist

Ich ver­such­te, ein Zab­bix auf die aktu­el­le 7‑er Ver­si­on zu zie­hen und der Ver­such schlug fehl, das Front­end mecker­te, daß die DB-Ver­si­on zu alt sei.
Nach eini­ger Zeit fand ich im Log:

3888423:20240610:221530.805 current database version (mandatory/optional): 06040000/06040003
3888423:20240610:221530.805 required mandatory version: 07000000
3888423:20240610:221530.805 mandatory patches were found
3888423:20240610:221530.808 starting automatic database upgrade
3888423:20240610:221530.843 completed 0% of database upgrade
3888423:20240610:221530.905 completed 1% of database upgrade
3888423:20240610:221530.991 completed 2% of database upgrade
3888423:20240610:221531.038 completed 3% of database upgrade
3888423:20240610:221531.065 [Z3005] query failed: [1060] Duplicate column name 'allow_redirect' [alter table `dchecks` add `allow_redirect` integer default '0' not null]
3888423:20240610:221531.066 database upgrade failed on patch 06050012, exiting in 10 seconds

Auf einer ande­ren Kis­te hin­ge­gen hat­te es geklappt, ich glau­be aber, von einer 6.0 LTS eben auf 7.0 LTS. Die­ses hier war eine 6.4, und schein­bar soll­te erst zu 6.5 upge­gra­det wer­den, was fehl schlug, war­um auch immer. Kühn und bie­rer­mu­tigt habe ich dann ein­fach dchecks.allow_redirect gelöscht — mit mäßi­gem Erfolg: Folgefehler.
Der Zab­bix-Rech­ner ist eine VM im VMWare, da kann man (natür­lich vor Updates!) Snapshots anle­gen — und wenn das Update fehl schlägt, rollt man ein­fach zurück. Das ist eine Sache von ein paar Sekun­den. Doch wenn die DB auf einem ent­fern­ten Rech­ner liegt, mit eige­nem DBA, dann nützt ein Snapshot nichts.
So wer­de ich mor­gen den Kol­le­gen bit­ten müs­sen, einen Dump zurück zu spie­len. Und dabei die Daten von ca. 12 Stun­den ver­lie­ren (das ist aber nicht schlimm).
Erkennt­nis: Loka­le Daten­ban­ken sind schmerzfreier.

Wir schießen uns in die Füße, erneut

Das Schö­ne an Linux ist ja, daß man als root über sämt­li­che Waf­fen vefügt, um sich gepflegt in die Füße zu schie­ßen, und nut­zer­freund­lich wie Linux nun mal ist, sind die­se Waf­fen auch schon gela­den, aus­ge­rich­tet und ent­si­chert — man muß nur noch abdrücken.

Vor ein paar Wochen: Ich woll­te ein Video mit nach AV1/Opus umco­die­ren und hat­te irgend­wie nicht begrif­fen, daß die Enco­der bei Debi­an im ganz nor­ma­len Repo­si­to­ry lie­gen und war also der Mei­nung, ich müs­se das selbst über­set­zen. Das ist ein ziem­lich dickes Brett, was man da boh­ren muß, zum Bei­spiel sind man­che Biblio­the­ken in golang geschrie­ben, so daß man noch ein go nach­in­stal­lie­ren muß. Ich fing also an, und natür­lich wur­den erst­mal ton­nen­wei­se Abhän­gig­kei­ten nach­in­stal­liert, bevor es über­haupt ans Bau­en ging. Am Ende hat­te es funk­tio­niert — und ich stell­te fest, daß das völ­lig umsonst war: Debi­ans ffmpeg lie­fert alles mit, was ich brau­che. Lehrgeld.

Der Rech­ner hat eine rela­tiv klei­ne Root-Par­ti­ti­on, und der gro­ße Rest wird für ZFS ver­wen­det. Alle Diens­te, die ins Inter­net expo­niert sind, lau­fen dort. Also jeden­falls / war arg voll, aber ich wuß­te nicht mehr, was ich alles sinn­lo­ser­wei­se nach­in­stal­liert hat­te. Da kam mir eine Idee: Ein­fach alle dev-Pake­te löschen und hin­ter­her noch ein autore­mo­ve, damit auch die Abhän­gig­kei­ten gelöscht wer­den. Hat gut funk­tio­niert, danach war wie­der eini­ger Platz frei. Das war vor ein paar Tagen.
Heu­te sehe ich mal wie­der ins Zab­bix. Da steht auf ein­mal, daß zfs-zed.service nicht lau­fen wür­de. Also ver­su­che ich ihn zu star­ten, doch systemctl meint, es gäbe ihn nicht, und in der Tat: es gibt ihn nicht. Ich ahne etwas:

Start-Date: 2024-05-05 20:58:18
Commandline: apt -y purge dpkg-dev
Purge: build-essential:amd64 (12.9), zfs-zed:amd64 (2.2.3-1~bpo12+1), zfs-dkms:amd64 (2.2.3-1~bpo12+1), dpkg-dev:amd64 (1.21.22), xtables-addons-dkms:amd64 (3.23-1), dkms:amd64 (3.0.10-8+deb12u1)
End-Date: 2024-05-05 20:58:53

ZFS-on-Linux ist aus Lizenz­grün­den als dyna­mi­sches Ker­nel­mo­dul rea­li­siert. Und muß mit dkms(8) gebaut wer­den, was diver­se Hea­der erwar­tet, die eben in dev-Pake­ten lie­gen. Die hat­te ich aber gelöscht, und mein tap­fe­res autore­mo­ve hat­te dann das kom­plet­te ZFS weg­ra­siert (aber nicht die Daten). Und solan­ge die Büch­se läuft, macht das auch nichts.
Heu­te dach­te ich dann, ich soll­te nicht län­ger war­ten mit einem Reboot. Code, der nur noch im RAM liegt, nee, muß nicht sein. Also reboot und tja, kein ZFS, kei­ne Dienste.

Die Lösung: Nach­se­hen, ob der Pool noch da ist (zpool import) und dann impor­tie­ren (zpool import <poolname>) Reboot, alles wie­der schön.

Und die Flin­ten nach­la­den nicht ver­ges­sen fürs nächs­te mal!

 

Firefox kann, Firefox kann nicht

Der Sohn möch­te einen Film sehen von unse­rem Jel­ly­fin-Ser­ver. Der läuft auf einenm Raspi und ist mit Trans­co­die­ren natür­lich völ­lig über­for­dert. Der Cli­ent ist ein aktu­el­ler Firefox/Linux.
Die Stream-Infor­ma­ti­on sieht so aus:

Bei mir mit Firefox/MacOS gibt es kei­ne Probleme:

Wir ver­ste­hen das nicht. Kann FF/Linux etwa kein VP9 mit meh­re­ren Tonspuren?

Passkeys, viele Anbieter machen es falsch

Nach und nach, seit­dem Bit­war­den Pass­keys kann¹, spen­die­re ich mei­nen Accounts Pass­keys. Zwar füh­le ich mich recht sicher, jeder Account hat ein ande­res zufäl­li­ges Paß­wort und wo es geht, also fak­tisch über­all, habe ich 2FA via TOTP.
Aber Pass­keys sind wirk­lich char­mant und bequem.
Nur: Um wirk­lich sicher zu sein, muß natür­lich der Pass­key das Paß­wort erset­zen, sprich, eine Anmel­dung via Paß­wort muß unmög­lich sein. Denn wenn das geklau­te Paß­wort ver­wen­det wer­den kann, sind Pass­keys witz­los. Als wäre die Voder­tür best­mög­lich ver­ram­melt, die Hin­ter­tür aber aus Pappe.
Bei mir kann es nur WordPress:


Bei allen ande­ren Diens­ten funk­tio­niert die Anmal­dung mit Paß­wort wei­ter­hin und kann auch nicht deak­ti­viert wer­den. Das ent­wer­tet die Pass­keys, die sind dann prak­tisch nutzlos.

Hof­fent­lich ändert sich das noch.


¹ Bitwarden für IOS leider (noch) nicht.

DNS-Schmerzen

Wer kennt es nicht:

Ich habe die Domain example.com.
Mar­ke­ting will die Domain fancy.example.com bei einer Agen­tur hos­ten, weil Mar­ke­ting das eben kann.
Die Agen­tur ist natür­lich auch nur Kun­de bei einem der gro­ßen Cloud-Anbie­ter, und der möch­te für fixe IP-Adres­sen mehr Geld als für nicht-fixe haben. Die Agen­tur umgeht das, indem sie uns bit­tet, fancy.example.com mit einem CNAME auf irgend­was beim Cloud-Anbie­ter zu ver­se­hen. Ist halt billiger.
Für example.com habe ich einen CAA-Record im DNS, in dem die CA, die die Agen­tur ver­wen­det, nicht ent­hal­ten ist. Jetzt könn­te ich natür­lich die­se CA in mei­nen CAA auf­neh­men, aber dann hät­te die­se CA das Recht, für alles in example.com Zer­ti­fi­ka­te aus­zu­stel­len. Nein, das will ich nicht.
Also soll die Agen­tur-CA nicht an example.com geta­ckert wer­den, son­dern an fancy.example.com. In bind etwa so:

fancy.example.com. CNAME host.bei.cloud-anbieter.
                   CAA 0 issue "pki.goog"

Das geht aber nicht, bind beschwert sich: “CNAME and other data”. Zu Recht, der RfC ver­bie­tet das: Wenn CNAME, dann kein CAA. Nun ist guter Rat teuer.
Doch dafür gibt es seit Novem­ber 2023 einen RfC, der den HTTPS-Record ein­führt. Im bind steht dann:

fancy.example.com. HTTPS   0       host.bei.cloud-anbieter.
                   CAA 0 issue "pki.goog"

Das funk­tio­niert dann, lei­der schein­bar nur in der Apple-Welt. Safa­ri hat kei­ne Pro­ble­me, Chro­me und Mac fin­den fancy.example.com genau­so­we­nig wie curl.

Scha­de!

Prozesse/Threads unter Linux, top

Fra­ge:

Ich habe ein ffmpeg ange­wor­fen, da ich 10 CPUs habe, mit der Opti­on --threads 10. Wenn ich mir in top mei­ne Pro­zes­se anse­he, sieht das erst­mal so aus:

Die Maschi­ne ist gut aus­ge­las­tet, so soll es sein.
Sehe ich mir die ein­zel­nen CPUs an, so schei­nen die zu ideln:

Las­se ich mir aber die Threads anzei­gen, so ändert sich das Bild:

Wäh­rend im obe­ren Teil bei den CPUs die­se sich immer­noch zu lang­wei­len schei­nen, ist unten in der Thread-Ansicht mehr los: Jeder Thread nimmt fast 100%, was erwar­tet wird.
Fragen:

  • War­um unter­schei­den sich die CPU-Wer­te oben und unten?
  • Was machen all die ffmpeg-Threads, die nichts machen?

Der Trockner will nicht

Die Gat­tin will trock­nen, die App ver­bin­det sich aber nicht mit dem Trock­ner (ja, man könn­te das Gerät auch mit der Hand bedie­nen, aber wir alten Leut­chen sind schließ­lich modern!)
Reboot tut immer gut.
Aber nicht in die­sem Falle.
Ping auf trockner.sokoll (selbst­ver­ständ­lich habe ich eine eige­ne TLD) funk­tio­niert, Netz ist also da. Strom gezo­gen und drau­ßen gelas­sen. Ping funk­tio­niert immmer noch. Hä???
Dann muß es ja wohl ein ande­res Gerät sein, aber welches?

Die /etc/dhcp/dhcpd.conf:

[…]
    host trockner {
      option host-name "trockner";
      hardware ethernet 34:86:5d:a0:71:84;
      fixed-address 192.168.1.57;
    }
[…]
    host sophia-tp {
      option host-name "sophia-tp";
      hardware ethernet 4:ea:56:78:ac:b2;
      fixed-address 192.168.1.57;
    }
[…]

Bamm! Die 192.168.1.57 ist dop­pelt ver­ge­ben, und da die Toch­ter ihren Lap­top auf­ge­klappt hat­te nach der Schu­le, die Gat­tin den Trock­ner aber erst danach ein­ge­schal­tet hat, stand der Trock­ner ver­zwei­felt ohne IP da. Und ohne IP nimmt er kei­ne Befeh­le ent­ge­gen, weder von uns noch vom Chinamann.

Ich muß bei Gele­gen­heit mal mit dem Admin reden.

Suche im Browser, Javascript

In mei­nem Vault­wa­ren habe ich eine Notiz (borg­back­up pass­phra­ses), und ich weiß, daß die­se Notiz Anhän­ge hat.

Die Suche im Brow­ser fin­det auch den String “anhäng” — zeigt aber 0/1 Tref­fer an:

Also irgend­wo ist der String, aber wo?
Hier:

War­um es jetzt 2 Tref­fer gibt, weiß ich auch nicht.
Das ist doch Mist. Wenn ich suche und es Ergeb­nis­se gibt, die­se aber nicht ange­zeigt wer­den, dann ist das Mist.

Hät­te ich einen Tre­cker, wür­de ich viel­leicht demonstrieren 😉