Offizielles FHEM Docker Basis Image für verschiedene Plattformen

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

Vorheriges Thema - Nächstes Thema

BAfH

Ich habe einfach eine Datei mit dem Namen fhem-2020-06-00.log mittels WinSCP als User pi hochgeladen.
Folgende Rechte hat die Datei
-rw-r--r-- 1 pi pi 3,1K Aug 15  2019 fhem-docker/fhem/core/log/fhem-2020-06-00.log
Fhem kann diese lesen zeiht mir die Datei unter System Logfile Filelog an.

ZitatIch dachte die Rechteänderungen willst du verhindern.
Ja, nur die Veränderung das ich als pi komplett ausgesperrt wurde. Das ist jetzt nicht mehr der Fall.
Gruß Thorben
mit sonnige Grüße aus Schönow

Wernieman

Fehm sollte die Datei mit den Rechten aber nicht schreiben dürfen .....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

BAfH

das mag sein, muss fhem auch nicht.  :-\denke ich.
Eine Log Datei hat folgende Rechte
-rw-r----- 1 pi pi 21K Jun  4 09:35 fhem-docker/fhem/core/log/Velux_2-2020.log
hier schreibt aber fhem fleißig rein. ???
Gruß Thorben
mit sonnige Grüße aus Schönow

kadettilac89

komisch, läuft dein Fhem unter User pi? Welche Rechte haben jetzt Dateien die Fhem selber angelegt hat, z. B. Plotfiles? Ist die UID im Docker identisch zu der von pi?

Solange alles funktioneirt was du dir vorstellst ist es gut. Um die Dateirechte zu verstehen fehlen ein paar Informationen.

Du hast das im docker-compose stehen? Dann läuft fehm unter der UID von pi.

FHEM_UID: 1000
FHEM_GID: 1000

BAfH

Im Docker als User fhem
fhem@FHEM:~$ id
uid=1000(fhem) gid=1000(fhem) groups=1000(fhem),5(tty),8(mail),20(dialout),29(audio),44(video),6001(bluetooth),6002(gpio),6003(i2c)

auf dem Host als User pi
uid=1000(pi) gid=1000(pi) Gruppen=1000(pi),4(adm),5(tty),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),995(docker),997(gpio),998(i2c),999(spi)
In der Docker-compose

FHEM_UID: 1000
FHEM_GID: 1000

Ich sag mal so, mir gefällt es so ;)
Gruß Thorben
mit sonnige Grüße aus Schönow

zimb0

Hallo zusammen,
habe in dem anderen Docker-Thread bereits eine Frage gestellt, poste sie jetzt nochmal hier, da der Thread doch etwas länger ist:

Ich bin gerade dabei die ersten Schritte mit Docker zu gehen und möchte mir ein docker-compose für fhem bauen.

Eine Sache verstehe ich hierbei noch nicht ganz: Ich möchte erreichen, dass eigentlich nur die fhem.cfg, 99_myUtils.pm, /log, /www/gplot und /www/tablet auf den host umgeleitet wird.
(Wenn ich die Docker-Logik richtig verstanden habe sollte der Rest ja "dynamisch" aktualisiert werden könne, ohne dass meine Config verändert wird, deshalb diese Trennung ?).

Nun habe ich in meinem docker-compose folgende Einträge erfasst:

volumes:
      - /opt/docker/fhem/log:/opt/fhem/log
      - /opt/docker/fhem/www/gplot:/opt/fhem/www/gplot
      - /opt/docker/fhem/www/tablet:/opt/fhem/www/tablet
      - type: bind
        source: /opt/docker/fhem/fhem.cfg
        target: /opt/fhem/fhem.cfg
      - type: bind
        source: /opt/docker/fhem/99_myUtils.pm
        target: /opt/fhem/FHEM/99_myUtils.pm

Die Dateien / Ordner werden auch entsprechend umgeleitet, allerdings ist es so, dass der Container nach der Umleitung der myUtils wohl den kompletten fhem/FHEM - Ordner nicht mehr lesen kann.
Ich tippe hier auf falsch konfigurierte Rechte.

Fehlermeldung beim initialisieren dann z.B:
Zitat
Can't locate RTypes.pm in @INC (you may need to install the RTypes module)
Ebenso tritt auf: Wenn der /opt/fhem/www/tablet umgeleitet ist wird keinerlei CSS im Webinterface dargestellt, was denke ich das gleiche Problem ist.

Könnt ihr mir hier etwas weiterhelfen?
THZ504

Wernieman

Dir ist klar:
1. Das Doppelbosten einer Frage in Unterschiedliche Threads wird in den meisten Forum als Negativ angesehene
2. Die Länge einen Threads ist nicht bedeutend mit der Aufmerksamkeit
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

TWART016

#937
Ich möchte nun FHEM mit configDB nutzen.

  fhem:
    container_name: fhem
    image: fhem/fhem:latest
    restart: always
    ports:
      - "8083:8083"
    volumes:
      - "./fhem/:/opt/fhem/"
      - "./fhem/contrib/configDB/configDB.conf:/opt/fhem/configDB.conf"
    environment:
      FHEM_UID: 1000
      FHEM_GID: 1000
      TIMEOUT: 10
      RESTART: 1
      TELNETPORT: 7072
      TZ: Europe/Berlin
      CONFIGTYPE: configDB
      LOGFILE: ./log/fhem-%Y-%m-%d.log
    depends_on:
      - "mysql"
      - "mqtt"


Mit configDB info erhalte ich folgendes:
-----------------------------------------------------------------
configDB Database Information
-----------------------------------------------------------------
d:$Id: configDB.pm 21571 2020-04-01 11:09:00Z betateilchen $
c:$Id: 98_configdb.pm 21558 2020-03-31 12:24:00Z betateilchen $
-----------------------------------------------------------------
dbconn: SQLite:dbname=/opt/fhem/configDB.db
dbtype: SQLITE
dbsize: 24.00 KB
-----------------------------------------------------------------
lastReorg:   
config:       27 entries

Ver 0 saved: Thu Jul 23 01:49:10 2020 def: 3 attr: 10
Ver 1 saved: by cfgDB_Init  def: 3 attr: 6
-----------------------------------------------------------------
state: 5 entries saved: Thu Jul 23 01:49:14 2020
-----------------------------------------------------------------
filesave: 1 file stored in database
-----------------------------------------------------------------


Eigentlich sollte da mysql stehen. Die Datei /var/lib/docker/volumes/fhem/contrib/configDB/configDB.conf habe ich nach meinen Wünschen angepasst.
Muss bei configDB nicht die configDB.conf direkt in /opt/fhem liegen?
Edit: Auch wenn die configDB.conf in /var/lib/docker/volumes/fhem liegt, bekomme ich die gleiche Meldung.

Gibt es die Möglichkeit zu prüfen, ob die DB bereits existiert? Wenn nicht, soll eine automatisch angelegt werden.

kadettilac89

#938
Zitat von: TWART016 am 23 Juli 2020, 02:01:10
Eigentlich sollte da mysql stehen. Die Datei /var/lib/docker/volumes/fhem/contrib/configDB/configDB.conf habe ich nach meinen Wünschen angepasst.
Muss bei configDB nicht die configDB.conf direkt in /opt/fhem liegen?
Edit: Auch wenn die configDB.conf in /var/lib/docker/volumes/fhem liegt, bekomme ich die gleiche Meldung.

Gibt es die Möglichkeit zu prüfen, ob die DB bereits existiert? Wenn nicht, soll eine automatisch angelegt werden.
ConfigDB kann ich dir nicht helfen. Mounten von einzelnen Files gibt in docker-compose manchmal Probleme. Ist die configDB.conf im Container sichtbar und lesbar?

Wenn du IM CONTAINER die Befehle unten ausführst, siehst du  dann die Konfiguration die du angelegt hast? Mit MySQL als Datenbank mit User / Passwort?


su fhem
cat /opt/fhem/configDB.conf


Wenn dass funktioniert teste mal die Config ... auch IM Container


mysql -u <mysql_fhem_username> -h <mysql_host> -p


welche Datenbanken schon bestehen kannst du dann so prüfen wenn du per Konsole auf der Datenbank bist:        show databases;


MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| fhem               |
| information_schema |
+--------------------+


Wenn das alles funktioniert scheint es eine configDB-spezifische Frage / Problem zu sein.

TWART016

Ich hatte das falsche Volumen. Jetzt kommt jedoch der Fehler:
Starting FHEM ...


DBI connect('database=fhem;host=192.168.178.15;port=3306','fhemuser',...) failed: Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory at configDB.pm line 704.


Unable to start FHEM process - errorcode 11



Bei Zeile 704 steht:
# connect do database
sub _cfgDB_Connect {
my $fhem_dbh = DBI->connect(
"dbi:$cfgDB_dbconn",
$cfgDB_dbuser,
$cfgDB_dbpass,
{ AutoCommit => 0, RaiseError => 1 },
) or die $DBI::errstr;
return $fhem_dbh;
}

kadettilac89

Zitat von: TWART016 am 25 Juli 2020, 16:12:31
Ich hatte das falsche Volumen. Jetzt kommt jedoch der Fehler:


google sagt das hier ... ich selber nutze MariaDB, und kann mich nicht erinnern, das schon mal gesehen zu haben. Wenn du hier mit User rummachst am besten den Docker-MySQL-Ordner sichern wenn was schief geht. Wenn du sowieso neu beginnst, kannst auch mal MariaDB als Container laden, wahrscheinlich mussst nur in der MySQL-Definition statt MySQL das MariaDB Image angeben.

https://stackoverflow.com/questions/49963383/authentication-plugin-caching-sha2-password
https://github.com/docker-library/mysql/issues/454

Möglichkeit 1, Link1, ... User löschen und mit

CREATE USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';


Möglichkei 2, Link2, .. Docker MySQL ändern, docer-compose folgende Zeile hinzufügen

    command: --default-authentication-plugin=mysql_native_password

TWART016

Zitat von: kadettilac89 am 25 Juli 2020, 16:25:47
google sagt das hier ... ich selber nutze MariaDB, und kann mich nicht erinnern, das schon mal gesehen zu haben. Wenn du hier mit User rummachst am besten den Docker-MySQL-Ordner sichern wenn was schief geht. Wenn du sowieso neu beginnst, kannst auch mal MariaDB als Container laden, wahrscheinlich mussst nur in der MySQL-Definition statt MySQL das MariaDB Image angeben.

https://stackoverflow.com/questions/49963383/authentication-plugin-caching-sha2-password
https://github.com/docker-library/mysql/issues/454

Möglichkeit 1, Link1, ... User löschen und mit

CREATE USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';


Möglichkei 2, Link2, .. Docker MySQL ändern, docer-compose folgende Zeile hinzufügen

    command: --default-authentication-plugin=mysql_native_password


Es lag tatsächlich am Image. mysql:latest hat nicht funktioniert, mysql hingegen schon.

TWART016

Zitat von: ManOki am 06 Januar 2020, 10:47:18
Bezieht sich das auf meine Frage bzgl. CPAN_PKGS="Crypt::Rijndael_PP"?

Ich habe die Container mittels docker-compose up erstellt. Beim beenden werden die Container gelöscht und anschließend neu erstellt, daher gehe ich davon aus, dass auch jedes Mal die Container-Option CPAN_PKGS neu ausgewertet wird, richtig?

Zitat von: Loredo am 18 Oktober 2019, 11:49:15
Crypt::Random und seine Abhängigkeiten brauchen leider zu lange, als dass sie im Build direkt installiert werden können. Die Build-Zeit ist bereits auf Kante (50 Minuten Maximum).
Die Lösung über die Umgebungsvariable CPAN_PKGS ist deshalb der richtige Weg. Die Installation findet auch nur beim ersten Start eines frischen Containers statt, nicht bei weiteren Starts. Einen Container ständig neu frisch zu erstellen macht wenig Sinn, man kann ihn problemlos mit den vorhandenen FHEM Modulen AptToDate, npmjs und dem Installer aktuell halten (das Ergebnis ist exakt das selbe).

Ich wäre aktuell bei dem gleichen Punkt. Diese Pakete brauche ich, um einen Xiaomi Luftreiniger betreiben zu können:
CPAN_PKGS: "Crypt::Rijndael Crypt::Random Crypt::Cipher::AES"
APT_PKGS: "libjson-perl libdigest-md5-perl libcrypt-cbc-perl libcrypt-ecb-perl"


Allerdings werden bei jedem docker-compose up (und Änderung am FHEM Container) die Pakete installiert, was mehrere Minuten braucht. Richte ich ein neues Modul ein, welches andere Pakete benötigt, füge ich diese zur compose hinzu.
Bei jedem zusätzlichen Paket muss ich den Containers neu erstellen. Selbst bei den wenigen Paketen derzeit benötigt das mehrere Minuten. Und ich werde noch mehrere Paketen verwenden und dann braucht jede Containererstellung vermutlich über 15 Minuten. Wie ist das gedacht?

kadettilac89

Zitat von: TWART016 am 26 Juli 2020, 01:49:40
Es lag tatsächlich am Image. mysql:latest hat nicht funktioniert, mysql hingegen schon.
erstmal gelöst, vermutlich kommt das Problem wieder wenn latest in das normale Image einfließt


Zitat von: TWART016 am 26 Juli 2020, 02:07:29
Allerdings werden bei jedem docker-compose up (und Änderung am FHEM Container) die Pakete installiert, was mehrere Minuten braucht. Richte ich ein neues Modul ein, welches andere Pakete benötigt, füge ich diese zur compose hinzu.
Bei jedem zusätzlichen Paket muss ich den Containers neu erstellen. Selbst bei den wenigen Paketen derzeit benötigt das mehrere Minuten. Und ich werde noch mehrere Paketen verwenden und dann braucht jede Containererstellung vermutlich über 15 Minuten. Wie ist das gedacht?
Warum musst du so oft docker-compose up ausführen? Wenn es zum Testen ist dann leg dir doch einen Testcontainer ohne die Abhängigkeit an und das Modul mit der hohen Laufzeit nur im produktiven Container.

TWART016

Zitat von: kadettilac89 am 26 Juli 2020, 08:53:38
erstmal gelöst, vermutlich kommt das Problem wieder wenn latest in das normale Image einfließt
Dann schaue ich nochmal das latest an.

Zitat von: kadettilac89 am 26 Juli 2020, 08:53:38
Warum musst du so oft docker-compose up ausführen? Wenn es zum Testen ist dann leg dir doch einen Testcontainer ohne die Abhängigkeit an und das Modul mit der hohen Laufzeit nur im produktiven Container.
Das mit dem Testcontainer ist finde ich was anderes. Würde ich ein Xiaomi Gerät einrichten wollen, teste ich es im Test Container. Ist dies erfolgreich möchte ich dies aber im Produktiven einsetzen. Dann muss ich die Pakete in die compose hinzufügen und starten. Dann möchte ich später SNMP einrichten und muss das gleiche machen. Nach ein paar mal summiert sich das ganze und mit jedem weiteren Modul verlängert sich die Zeit bis der Container erstellt ist.
Nur weil ich ein neues Modul produktiv nehmen möchte, habe ich eine fhem Downtime von 15-30 min.