Schlagwort: Linux

Raspi macht Sachen

Heu­te früh um 4:30 Uhr klin­gel­te wie üblich der Wecker der Gat­tin, und wie unüb­lich ging ihre Nacht­tisch­lam­pe nicht an.
Komisch.
Zabb­bix hat kei­ne Daten zu die­sem Zeit­punkt, eigent­lich die gan­ze Nacht nicht. Jeden­falls fast kei­ne Daten, ein paar sind doch da und zei­gen einen Load von maxi­mal 74 gegen 23 Uhr:
Der Fern­se­her war heu­te früh ein­ge­schal­tet, was nur pas­siert, wenn ent­we­der jemand ver­ges­sen hat ihn aus­zu­schal­ten, oder, viel wahr­schein­li­cher in die­sem Fal­le, Kodi ihn ein­ge­schal­tet hat.
Paßt aber schein­bar nicht:

pi@raspberrypi:~ $ systemctl status kodi
● kodi.service - Kodi Media Center
   Loaded: loaded (/etc/systemd/system/kodi.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-02-16 18:55:35 CET; 2 weeks 3 days ago
 Main PID: 26354 (kodi)
   CGroup: /system.slice/kodi.service
           ├─26354 /bin/sh /usr/bin/kodi
           └─26390 /usr/lib/arm-linux-gnueabihf/kodi/kodi-rbpi_v7 --lircdev /var/run/lirc/lircd

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
pi@raspberrypi:~ $

(mehr …)

0

ZFS-on-Linux scheint gesichert zu sein

Hei­se schreibt:

ZOL kann die neu­en Funk­tio­nen daher nicht nut­zen, weil es einer Lizenz unter­liegt, die gemein­hin als in inkom­pa­ti­bel zur vom Linux-Ker­nel ver­wen­de­ten GPL gilt. Die ZOL-Ent­wick­ler haben das Pro­blem in ihrem Haupt­ent­wick­lungs­zweig mitt­ler­wei­le umschifft. Laut den Ent­wick­lern steigt die CPU-Last dadurch ein wenig; sie erwar­ten aber kei­nen son­der­li­chen Ein­fluss auf die Geschwin­dig­keit, solan­ge die CPU nicht beson­ders schwach ist oder bereits am Anschlag läuft.

Natür­lich wäre es schö­ner gewe­sen, Ora­cle hät­te ZFS unter GPL gestellt. So bleibt ein fader Bei­geschmack — aber wenns funk­tio­niert, ist es gut™. Etwa so:

rainer@big:~$ zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
zroot  1.12T   962G   182G         -    80%    84%  1.77x  ONLINE  -
rainer@big:~$
0

Time machine: Backup device repariert

Time machi­ne, so kom­for­ta­bel es auch ist, hat seit Ewig­kei­ten oder schon immer einen üblen Bug: Nach end­li­cher Zeit (bei mir: ca. 3 Mona­te) ist es der Mei­nung, daß das Back­up neu erstellt wer­den müs­se. Das bedeu­tet natür­lich, daß man alle alten Back­ups weg­wer­fen soll — äußerst frus­trie­rend. Irgend­wann fand ich mal eine Anlei­tung, wie man das umge­hen kann. Hat bis­lang immer gut funk­tio­niert
Vor ein paar Tagen nun war es wie­der soweit — und die Anlei­tung funk­tio­nier­te erst­mal nicht. Der Schritt fsck_hfs -drfy -c 750M /dev/diskxs2 ging zwar schnell (12 Minu­ten), war aber auch nach mehr­ma­li­gem Auf­ruf nicht erfolg­reich.
Also habe ich noch­mal von vor­ne gestar­tet (Retry, Reboot, Reinstall) mit chflags -R nouchg /Volumes/{name of your network share}/{name of}.sparsebundle — und war­ten, war­ten, war­ten. Es gibt kei­ner­lei Fort­schritts­an­zei­ge, nur tcp­dump bestä­tig­te, daß da eine Men­ge Daten übers Netz wan­dern.
Aber heu­te früh war er fer­tig:

1979 Minu­ten, das sind 33 Stun­den!
Aber egal, es back­upt wie­der, und die alten Back­ups sind auch noch da 🙂

0

bzip2 vs. lbzip2

Letz­te­res ist die mul­ti­thre­aded Vari­an­te von ers­te­rem. Ich kann­te lbzip2 bis vor einer Stun­de gar nicht.
Ich packe 10 Giga­byte Zufall auf einer 12-Core-Maschi­ne:

rainer@big:~$ dd if=/dev/urandom of=10G bs=1000M count=10 iflag=fullblock
10+0 records in
10+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 236.169 s, 44.4 MB/s
rainer@big:~$ time bzip2 -9 -k 10G

real 39m50.132s
user 39m4.859s
sys 0m28.117s
rainer@big:~$ time lbzip2 -9 -f 10G

real 11m5.742s
user 25m29.338s
sys 0m18.990s
rainer@big:~$

40 Minu­ten gegen 11 Minu­ten, das ist zwar schnell, aber doch nicht so schnell, wie ich nai­ver­wei­se erwar­tet hat­te.

0

Ingenieure, IT

Hier im Haus haben wir eine ziem­lich gute (ziem­lich ist unter­trie­ben) Lüf­tungs­an­la­ge eines deut­schen(?) Her­stel­lers — die­se.
Nun kann man heut­zu­ta­ge kaum noch Anla­gen ver­kau­fen, die nicht in irgend­ei­ner Wei­se über Com­pu­ter und/oder Apps bedient wer­den kön­ne, so auch unse­re Anla­ge.
Jeden­falls irgend­wie:

WLAN TCP / IP via Rou­ter ja
Anschluss Mod­bus / IP via Rou­ter ja

Das

via Rou­ter ja

ist natür­lich falsch: Das Gerät hat einen Ether­net-Anschluß, ist ein DCHP-Cli­ent (nix IPv6) und spricht dort nicht etwa HTTP, son­dern Mod­Bus. Die Anla­ge muß also nur ans LAN mit einem DHCP-Ser­ver (es läßt sich kei­ne fixe Adres­se ver­ge­ben) kom­men. Daß man im Tech­nik­raum Ether­net zu lie­gen hat, ist eher unwahr­schein­lich, aber für WLAN hat es aus wel­chen Grün­den auch immer nicht gereicht (nein, man kann es auch nicht nach­rüs­ten).

Hat man dann doch die Anla­ge ans Netz bekom­men, kann man sie mit einer App (Andro­id oder IOS) steu­ern, also jeden­falls wenn die App die Anla­ge fin­det, was immer­hin oft der Fall ist. nmap -sT -p502 fin­det die Anla­ge immer.

Aber man kann sie auch viel detail­lier­ter kon­fi­gu­rie­ren — dafür hat die Anla­ge einen USB-Anschluß. Mini-USB-B. Schon das ist gaga. Um das machen zu kön­nen, gibt es ein Pro­gramm namens iFlow, nur hipp mit dem i. Aller­dings nur für Win­dows. Es braucht .NET 3.5, das ist von anno dazu­mal. Es braucht genau die­se Ver­si­on, neue­re gehen nicht.
Ich habe kein Win­dows, in einer VM auf Linux wird die Anla­ge nicht gefun­den (ich wer­de wei­terfri­ckeln, viel­leicht doch irgend­wann?)
Wür­de ich eine Ver­bin­dung bekom­men, hät­te ich 3 Accounts:

  • User (ohne Paß­wort)
  • Instal­la­teur (mit Paß­wort)
  • Admin (mit ande­rem Paß­wort)

Die Paß­wör­ter sind hart codiert und ste­hen im Inter­net. Das GUI ähnelt der SPS-Steue­rung eines Atom­kraft­wer­kes (jeden­falls stel­le ich mir eine sol­che so vor)

Ehr­lich: So schafft sich Deutsch­land ab.

2+

Apache unter CentOS 7 starten

Wenn der Apa­che nicht mit sys­temc­tl gestar­tet wer­den kann und sys­temd die­sen Feh­ler lie­fert:

 httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: failed (Result: signal) since Fri 2018-10-12 18:55:13 CEST; 3min 0s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 3398 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 3411 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=killed, signal=KILL)
 Main PID: 3411 (code=killed, signal=KILL)

Oct 12 18:52:13 www.example.com systemd[1]: Starting The Apache HTTP Server...
Oct 12 18:53:43 www.example.com systemd[1]: httpd.service start operation timed out. Terminating.
Oct 12 18:55:13 www.example.com systemd[1]: httpd.service stop-final-sigterm timed out. Killing.
Oct 12 18:55:13 www.example.com systemd[1]: httpd.service: main process exited, code=killed, status=9/KIL
Oct 12 18:55:13 www.example.com systemd[1]: Failed to start The Apache HTTP Server.
Oct 12 18:55:13 www.example.com systemd[1]: Unit httpd.service entered failed state.
Oct 12 18:55:13 www.example.com systemd[1]: httpd.service failed.

dann fehlt wahr­schein­lich das ent­spre­chen­de Modul:

Load­Mo­du­le systemd_module modules/mod_systemd.so

War­um man auch immer… Bei sys­temd wun­der ick mir über janüscht mehr.

0

Jetzt wächst zusammen, was nicht zusammen gehört

Wir haben unser Haus mit ein paar Tråd­fri-Lam­pen ver­se­hen. Das ist nett. Die wer­den von Fern­be­die­nun­gen bzw. Bewe­gungs­mel­dern gesteu­ert. Es gibt auch eine App, so daß man sie von den Smart­pho­nes aus, ja sogar von den Smart­wat­ches aus steu­ern kann.
Das ist nett, und eine Steue­rung vom Brow­ser aus wäre noch net­ter.
Also habe ich mir auf dem Raspber­ry mal Home Assi­stant instal­liert.
Gleich beim ers­ten Hoch­fah­ren fand er mei­ne Lam­pen und die Sono­se, damit hat­te ich gar nicht gerech­net.
Ich kann nun Lam­pen und Sono­se vom Brow­ser aus steu­ern, ja, schon nicht schlecht.
Aber kann ich auch auto­ma­ti­sie­ren? Also sagen: Wenn die­se Bedin­gung ein­trifft, dann tue jenes?
Ja, geht:

automation:
  - alias: Licht an, Musi aus
    trigger:
      platform: state
      entity_id: light.deckenlampe_arbeitszimmer
      to: 'on'
    action:
      service: media_player.media_stop
      entity_id: media_player.arbeitszimmer
  - alias: Licht aus, Musi an
    trigger:
      platform: state
      entity_id: light.deckenlampe_arbeitszimmer
      to: 'off'
    action:
      service: media_player.media_play
      entity_id: media_player.arbeitszimmer

Das macht: Wenn die Decken­lam­pe im Arbeits­zim­mer ange­schal­tet wird, dann mache bit­te den Sonos im Arbeits­zim­mer aus (und umge­kehrt)
Das ist natür­lich kom­plett sinn­frei, zeigt aber die Mög­lich­kei­ten. Als Trig­ger könn­ten auch Uhr­zei­ten die­nen zum Bei­spiel, Wet­ter­da­ten, alles mög­li­che.

Das könn­te der Beginn einer wun­der­ba­ren Freund­schaft wer­den 😉

0

Spritpreise in Zabbix/Grafana

Ges­tern nach­mit­tag habe ich mir mal mei­ne Tan­ke in Grafa­na rein­ge­den­gelt — sehr schön!

Bei mir wird Grafa­na von Zab­bix befeu­ert, also müs­sen wir erst­mal die Sprit­prei­se in Zab­bix bekom­men.
Es gibt eine schö­ne API bei tankerkoenig.de — die kann man anzap­fen, wenn man einen API-Key hat. Der ist schnell bean­tragt, Link in der Bestä­ti­gungs­mail kli­cken, fer­tig. Dau­ert kei­ne 10 Sekun­den.
Drei Items hät­te ich ger­ne in Zab­bix:

  • Die­sel
  • E 10
  • Super

Ich illus­trie­re das mal an Die­sel:

Das Update-Inter­vall 600 Sekun­den soll­te man nicht klei­ner wäh­len, um unnö­ti­ge Last auf dem API-Ser­ver zu ver­mei­den.
oil.diesel.sh ist, man ver­mu­tet es schon, ein Shellskript:

root@raspberrypi:/etc/zabbix/externalscripts# cat oil.diesel.sh
#!/bin/bash
/usr/bin/curl -s \
 "https://creativecommons.tankerkoenig.de/json/prices.php?ids=66f063b7-8883-4951-bc5c-f0754b48ce18&apikey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" | \
 /usr/bin/jq '.prices."66f063b7-8883-4951-bc5c-f0754b48ce18"."diesel"'
root@raspberrypi:/etc/zabbix/externalscripts#

Für den API-Key müßt ihr natür­lich euren ein­set­zen 🙂 Das lie­fert ein JSON-Objekt zurück, aus dem wir uns mttels jq den Preis für Die­sel raus­ho­len
Die ID der Tank­stel­le (66f063b7-8883–4951-bc5c-f0754b48ce18) war nur mit Tricks her­aus­zu­be­kom­men: Goog­le Maps auf­ru­fen und die Tan­ke suchen, bei mir die­ser Link. Danach Rechtsklick in die Kar­te unge­fähr auf die Tank­stel­le (auf ein paar Kilo­me­ter Abwei­chung kommt es nicht an). “Was ist hier?” aus­wäh­len — unten ste­hen dann die Koor­di­na­ten, und die benö­ti­gen wir.
Damit füt­tern wir die API — und bekom­men die ID der Tan­ke.
Das gan­ze auf drei Skrip­te ver­teilt, die sich nur im jq unter­schei­den: die­sel, e10, e5 (Super ist das).
Nun noch Grafa­na:
Wir kli­cken uns die 3 Prei­se in eine Gra­fik:

Und wir bekom­men einen schi­cken Gra­phen:

(Mehr Daten habe ich noch nicht, aber das ist ja nur eine Fra­ge der Zeit)

 

0

ClamAV mit eigenen Signaturen

Auf Arbeit haben wir in letz­ter Zeit ver­mehrt unter Viren­mails zu lei­den, die von kei­nem der bei uns ver­wen­de­ten Viren­scan­ner als Viren­mails erkannt wer­den.
Auf G+ wur­de ich auf ein schon älte­res Pos­ting auf­merk­sam gemacht, das erklärt, wie man eige­ne Signa­tu­ren schreibt.

Geht wun­der­bar (ich habe den Cla­mAV aus den Quel­len sel­ber über­setzt):

mailgate:/tmp # /usr/local/clamav/bin/clamscan invoice574206_1.pdf
invoice574206_1.pdf: OK

----------- SCAN SUMMARY -----------
Known viruses: 4137933
Engine version: 0.98.7
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.28 MB
Data read: 0.12 MB (ratio 2.29:1)
Time: 12.807 sec (0 m 12 s)
mailgate:/tmp #

Nix gefun­den, wir schie­ben die eige­ne Signa­tur an die rich­ti­ge Stel­le:

mailgate:/tmp # mv ISH-custumsigs.ndb /usr/local/clamav/share/clamav/
mailgate:/tmp #

Und dann noch­mal:

mailgate:/tmp # /usr/local/clamav/bin/clamscan invoice574206_1.pdf
invoice574206_1.pdf: ISH.Trojan.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 4137934
Engine version: 0.98.7
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.28 MB
Data read: 0.12 MB (ratio 2.29:1)
Time: 13.072 sec (0 m 13 s)
mailgate:/tmp #

Ich bin ent­zückt!

0