Offizielles FHEM Docker Basis Image für verschiedene Plattformen

Begonnen von Loredo, 28 Juli 2018, 21:24:57

Vorheriges Thema - Nächstes Thema

ch.eick

#780
Hi,
ich habe fhem mit host network laufen, um an einige devices zu kommen, die mit udp laufen. Da hatte ich mir hier bereits helfen lassen. Soweit ist alles prima.

Nun möchte ich für's logging eine DB in einem weitern Container betreiben mairidb oder mysql wäre mir sympatisch, da ich mit mysql schon mal etwas umgesetzt habe.

Welches docker image würde da am besten passen?

Ich habe einen RPI4 mit 4G Ram und nes 250 GB SSD mit Debian Buster.

Muss ich mit dem Netzwerk etwas beachten?
    Host Network? Wäre dann ja vom ganzen Netz erreichbar.
    Zusätzliches Network? Geht das im Docker zwischen fhem- und mysql Container wenn fhem bereits ein Host Netzwerk hat?

Eine kleine Starthilfe wäre mir lieb.

Viele Grüße
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

kotaro

Ich habe es wie Matthias schon in seinem Github hochgeladen mit MySQL-Server gemacht. Braucht insgesammt nur 2 Layer, die MySQL-Docker-Hub braucht glaube ich ca 5 oder 6 Layer...

Oh, sorry, gerade  nochmal gelesen, das du ein RPI4 nutzt..

Hier kannst du das nachlesen, was er für Einstellungen in der Docker-Compose gesetzt hat , damit dies mit Docker super klappt ^^ (hab dir auf das Raspbian-Build verlinkt, Master ist für x64)
https://github.com/klein0r/fhem-docker/tree/raspbian
Edit: er nutzt dafür das Build von hypriot/rpi-mysql

ch.eick

Zitat von: kotaro am 19 Februar 2020, 15:04:31
Ich habe es wie Matthias schon in seinem Github hochgeladen mit MySQL-Server gemacht. Braucht insgesammt nur 2 Layer, die MySQL-Docker-Hub braucht glaube ich ca 5 oder 6 Layer...

Oh, sorry, gerade  nochmal gelesen, das du ein RPI4 nutzt..

Hier kannst du das nachlesen, was er für Einstellungen in der Docker-Compose gesetzt hat , damit dies mit Docker super klappt ^^ (hab dir auf das Raspbian-Build verlinkt, Master ist für x64)
https://github.com/klein0r/fhem-docker/tree/raspbian
Edit: er nutzt dafür das Build von hypriot/rpi-mysql
Ich schau es mir an, jedoch ist der letzte update auf hypriot/rpi-mysql 2 Jahre her.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

MCh76

habe gerade meine FHEM umgebung auf docker umgestellt und für das db logging folgendes basis image verwendet:
https://hub.docker.com/r/webhippie/mariadb
Klappt einwandfrei

ch.eick

#784
Hm, soweit so gut


DBI connect('database=fhem;host=<ip-adresse>;port=3306','fhemuser',...) failed: Access denied for user 'fhemuser'@'%' to database 'fhem' at ./FHEM/93_DbLog.pm line 2975.

mysql> select User,Host from mysql.user;
+----------+-------------+
| User     | Host        |
+----------+-------------+
| fhemuser | %           |
| root     | 127.0.0.1   |
| root     | ::1         |
| root     | localhost   |
| root     | raspberrypi |
+----------+-------------+
5 rows in set (0.00 sec)

mysql> set password for 'fhemuser'@'%' = password('geheim');
Query OK, 0 rows affected (0.01 sec)


root@raspberrypi:/# mysql -u fhemuser -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6541
Server version: 5.5.60-0+deb7u1 (Debian)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

mysql> connect fhem
ERROR 1044 (42000): Access denied for user 'fhemuser'@'%' to database 'fhem'
mysql>


ohne Passwort gehts

root@raspberrypi:/# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6853
Server version: 5.5.60-0+deb7u1 (Debian)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> connect fhem
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Connection id:    6855
Current database: fhem

mysql> show tables;
+----------------+
| Tables_in_fhem |
+----------------+
| current        |
| history        |
+----------------+
2 rows in set (0.00 sec)

mysql>


Wo habe ich denn nun schon wieder einen Fehler gemacht? Dies hier war Teil des init.sql

mysql> CREATE USER 'fhemuser'@'%' IDENTIFIED BY 'geheim';

mysql> select User,Host from mysql.user;
+----------+-------------+
| User     | Host        |
+----------+-------------+
| fhemuser | %           |
| root     | 127.0.0.1   |
| root     | ::1         |
| root     | localhost   |
| root     | raspberrypi |
+----------+-------------+
5 rows in set (0.00 sec)

mysql>



Im Hausnetz ist der Port 3306 auch schon aktiv

pi@raspberrypi:~/docker-compose/fhem_2020 $ nc -zv <ip-adresse> 3306
Connection to <ip-adresse> 3306 port [tcp/mysql] succeeded!
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

kotaro

Hast du fhemuser auch per Grant die Berechtigung zum Zugriff auf die Datenbank fhem ermöglicht?

sonst nutze die enviroment-Variablen ;-) meistens wird das gleich so fertig eingerichtet ^^

ch.eick

#786
Zitat von: kotaro am 19 Februar 2020, 18:10:11
Hast du fhemuser auch per Grant die Berechtigung zum Zugriff auf die Datenbank fhem ermöglicht?

sonst nutze die enviroment-Variablen ;-) meistens wird das gleich so fertig eingerichtet ^^

Ich habe die init.sql verwendet und nur das passwort verändert. Einmal beim DB initialisieren und dann natürlich auch in der db.conf vom FHEM.
Die fhem Meldung sagt ja auch Access denied :-(
Ein grand ist auch in der init.sql

Ich habe den Grand nochmals ausgeführt und nun sieht's so aus als ob es okay ist.

mysql> GRANT CREATE ROUTINE, CREATE VIEW, ALTER, SHOW VIEW, CREATE, ALTER ROUTINE, EVENT, INSERT, SELECT, DELETE, TRIGGER, GRANT OPTION, REFERENCES, UPDATE, DROP, EXECUTE, LOCK TABLES, CREATE TEMPORARY TABLES, INDEX ON `fhem`.* TO 'fhemuser'@'%';
Query OK, 0 rows affected (0.00 sec)


Vielen Dank für den Schubser.
    Christian


EDIT:
Nun rauschen auch schon die ersten Eintrag in die db...


Im "userattr global" musste noch "DbLogExclude DbLogInclude DbLogValueFn:textField-long" rein und schon konnte man mit

attr .* DbLogExclude .*

für Ruhe sorgen. Danach kann man dann einzelne Einträge wieder frei geben, ohne das die DB sofort dicke Backen bekommt.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

kotaro

Sehr gut  :)

ich habe noch folgendes Notify am laufen:
define nDbLogExclude notify global:DEFINED.* attr $EVTPART1 DbLogExclude .*

das Verhindert einfach, das immer, wenn ein Gerät definiert wird, erstmal automatisch DbLogExclude gesetzt wird. Dann kann man gezielt immer noch aktivieren, was man benötigt. Aber man muss sich keine Gedanken machen.
Alternativ kannst du natürlich DbLog nur auf include stellen ^^ aber, das hab ich halt einmal so eingerichtet..

ch.eick

Zitat von: kotaro am 19 Februar 2020, 18:51:53
Sehr gut  :)

ich habe noch folgendes Notify am laufen:
define nDbLogExclude notify global:DEFINED.* attr $EVTPART1 DbLogExclude .*

das Verhindert einfach, das immer, wenn ein Gerät definiert wird, erstmal automatisch DbLogExclude gesetzt wird. Dann kann man gezielt immer noch aktivieren, was man benötigt. Aber man muss sich keine Gedanken machen.
Alternativ kannst du natürlich DbLog nur auf include stellen ^^ aber, das hab ich halt einmal so eingerichtet..
Okay, danke das notify habe ich auch bereits eingetragen. Nun schau ich mal wie ich die alten Daten gefiltert importieren kann.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

volschin

Zitat von: MCh76 am 19 Februar 2020, 17:47:18
habe gerade meine FHEM umgebung auf docker umgestellt und für das db logging folgendes basis image verwendet:
https://hub.docker.com/r/webhippie/mariadb
Klappt einwandfrei
Warum nutzt Du nicht das official Image?

https://hub.docker.com/_/mariadb

Da ist Aktualität gewährleistet und auch ein Security Scan.
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

ch.eick

Meine Aussage könnte jetzt falsch sein.
Ich meine gelesen zu haben, dass der Rpi4 noch mit 32 Bit Buster läuft. 64 Bit soll noch kommen.
Das Mariadb Image ist für arm64 und kann somit noch nicht laufen.
Wenn das falsch ist lösche ich den Eintrag gerne wieder.

Gesendet von meinem SM-G930F mit Tapatalk

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

volschin

Ja, du bist zumindest teilweise richtig. Du kannst auch den 64Bit-Kernel aktivieren, den Raspbian standardmäßig ausliefert.
Docker gibt es für Raspbian nur 32bit. Leider sind damit ein paar Hacks notwendig, um arm64 Images laufen zu lassen. Ich habe das bei mir am Laufen.
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

ch.eick

Ich denke das ist dann noch nichts für Anfänger. Mit etwas Geduld kommt sicher bald ein von Disk bootendes 64Bit mit Docker und dann geht's ab ;-)

Gesendet von meinem SM-G930F mit Tapatalk

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

MCh76

Zitat von: volschin am 19 Februar 2020, 22:47:49
Warum nutzt Du nicht das official Image?

https://hub.docker.com/_/mariadb

Da ist Aktualität gewährleistet und auch ein Security Scan.

weil ich auf einem Raspberry 3b+ bin und ich gelesen hatte dass das offizielle image hierfür nicht ausgelegt ist.

fallenguru

Zitat von: balli1187 am 16 Februar 2020, 17:20:31
- wie sollten Änderungen in FHEM (Geräte anlegen) möglich sein, wenn die fhem.cfg readonly wäre?

Gar nicht. Ich schreibe meine cfg mit der Hand, mit Unterstützung von ein paar scripts. Um an der laufenden Instanz etwas umzukonfigurieren, braucht's keine Schreibrechte, wenn sich was bewährt, kann man's ja übernehmen. Einfach cfg unter anderem Namen rausschreiben lassen, diffen, relevante Änderungen händisch in die schreibgeschützte einarbeiten. Das mach ich auch so, wenn neue Gerätetypen dazukommen, nach größeren Fhem-Updates ...
Die Änderung der (persistenten) Konfiguration in der Weboberfläche hat sich bei mir einfach nicht bewährt, zu oft haben mir gutgemeinte Automatismen und unachtsame Bedienung die komplette Konfiguration zerschossen.

Zitat von: balli1187 am 16 Februar 2020, 17:20:31
- allgemein sind volumes doch dazu gedacht gewisse Daten persistent zu machen. Auch hier wäre meine Frage wie das gehen sollte, wenn ein Container nicht in ein Volume schreiben dürfte?

Das sind jetzt zwei verschiedene Dinge:
1. Schreibgeschützt habe ich nur die fhem.cfg, s. o., der Rest (updates, logs, ...) ist schreibbar.
2. Ein Container darf natürlich in seine volumes schreiben, aber eben nur in diese. Er darf keine Änderungen am Host-System vornehmen Zudem ist ein Unterschied zwischen "in eine volume schreiben" und "dort vorhandene Konfiguration in Bausch und Bogen überschreiben".

Zitat von: Loredo am 17 Februar 2020, 00:02:21
1. FHEM ist von seiner Systemarchitektur selbst kein guter Kandidat für ein klassisch-modernes Container Setup.
2. FHEM Module sind extrem divers in ihren Systemanforderungen und kaum durchschaubar. Die Systemabhängigkeiten herauszufinden ist oft sehr zeitaufwändig und für Anfänger oft eine unüberwindbare Hürde.
3. [...] Dies ermöglichte dann eine Verkleinerung des Images ohne Verlust des Komforts [...]

1. kann ich nicht nachvollziehen. Die Tatsache, dass sowieso schon alles in /opt/fhem sitzt und gut dokumentiert ist, sollte doch eher helfen.
2. kann ich nicht beurteilen. Selbst wenn dem so wäre, "eine saubere Lösung ist den dummen Usern nicht zumutbar" ist IMHO nie ein gutes Argument.
3. ist mir nicht so wichtig.

Zitat von: Loredo am 17 Februar 2020, 00:02:21
Ergo: Wie schon richtig erkannt geht es hier nicht darum, dass Power Systemintegratoren ihre Wolllust befriedigt bekommen. Der Ansatz ist eher pragmatisch für die Mehrzahl der "normalen" Benutzer gewählt. Zu denen zählt ihr beide euch eben nicht. Das ist vollkommen okay, aber einsehen solltet ihr das eben auch ;-)

Mein Problem liegt darin, dass ich mit (Docker-)Containern bestimmte Eigenschaften und Zielsetzungen verbinde, die Dein Projekt nicht aufweist, ja noch nicht einmal anstrebt. Erwartet habe ich eine Containerisierung, die es erlaubt, Fhem sauber neben einer Anzahl anderer Services auf einem Server laufen zu lassen, was vorliegt, ist quasi eine Art anfängerfreundlicher Installer, der zufällig unter der Haube Docker verwendet. Wenn das wem was bringt, wunderbar -- aber es ohne weiteres als Docker-Image, noch dazu als offizielles, zu präsentieren, finde ich irreführend.

Keine Frage, ich hätte den Source auf Github lesen können/sollen, aber ich dachte mir, was soll sein, es ist ja ein "offizielles" Docker-Image.