Offizielles FHEM Docker Basis Image für verschiedene Plattformen

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

Vorheriges Thema - Nächstes Thema

Karflyer

ZitatMoin

soweit ich das jetzt verstanden hätte auf https://github.com/fhem/fhem-docker :

Zitat

    Perl CPAN modules:

    -e CPAN_PKGS="App::Name1 App::Name2"


Somit

Code: [Auswählen]

-e CPAN_PKGS="Crypt::Rijndael Crypt::Random"


Dann haste die immer mit dabei und sie werden beim starten des Containers mit installiert.

Diese Variante funktioniert nur in Verbindung mit dem docker run-command. Ich benutze docker-compose und hier werden die Environment-Variablen so deklariert wie ich es geschrieben habe. Andere Variablen die ich ebenso deklariert habe, führen zum gewünschten Erfolg. Nur CPAN_PKGS: "Crypt::Rijndael Crypt::Random" scheint keine Wirkung zu haben.

ZitatBesser libcrypt-rijndael-perl per apt nutzen.
Damit habe ich es zuerst probiert. Zeigt leider keinen Erfolg bei verschlüsseltem EnOcean-Funk.

volschin

Zitat von: Karflyer am 11 Oktober 2019, 18:29:00
Damit habe ich es zuerst probiert. Zeigt leider keinen Erfolg bei verschlüsseltem EnOcean-Funk.
Das ist verwunderlich. Allerdings enthält Buster die Version 1.13 und CPAN die 1.14.
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)

Master_Nick

Puh ... da kann ich auch nix zu sagen weiter sry.  :-X
Habe das alles in einem Cluster mit Rancher Kubernetes Engine da kann ich solche Eigenschaften einfach setzen.
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Karflyer

Noch einmal zu dem Thema Enocean-Verschlüsselt

Aktuell habe ich in der der docker-compose.yml folgenden Eintrag:


environment:
    CPAN_PKGS: "Crypt::Rijndael Crypt::Random"


Bei dem Start des Containers erscheinen unter anderem folgende Zeilen im Log:

Preparing initial start:
1. Adding custom APT packages to container ...
2. Adding custom Perl modules to container ...
3. Updating existing FHEM installation in /opt/fhem


Hiernach sieht es so aussehen, dass die oben genannte Variable  CPAN_PKGS nicht berücksichtigt wird (im Log ist nicht die Rede davon, dass CPAN-Packages zum Container hinzugefügt werden).

Ich habe nun die beiden CPAN-Packages in die entry.sh gepackt. So funktioniert es jetzt. Trotzdem ist es unbefriedigend nicht zu wissen warum das setzen der Environment-Variable in der docker-compose.yml nicht funktioniert.

@Loredo Noch einmal der Wunsch von mir, die beiden CPAN-Module gleich in das Image zu integrieren.

Gruß
Stefan

volschin

Also wenn ich ins Dockerfile schaue, sehe ich dort folgende Anweisung


libcrypt-*-perl

D.h. ich vermute, die Pakete sind über apt bereits vorinstalliert. Mit Deiner cpan-Geschichte produzierst Du damit evtl. Einen Versionskonflikt
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)

volschin

@Karflyer: Probier doch bitte mal an einem neuen Image, ob auch die cpan-Installation von Crypt::Random den gewünschten Effekt gibt. Es gibt unter Debian zwar libcrypt-random-seed-perl und libcrypt-random-source-perl, aber anscheinend kein identisches Paket.
Crypt::Rijndael ist definitiv abgedeckt.
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)

Karflyer

Zitat@Karflyer: Probier doch bitte mal an einem neuen Image, ob auch die cpan-Installation von Crypt::Random den gewünschten Effekt gibt. Es gibt unter Debian zwar libcrypt-random-seed-perl und libcrypt-random-source-perl, aber anscheinend kein identisches Paket.
Crypt::Rijndael ist definitiv abgedeckt.

Du hast Recht. Es genügt in der Tat das Modul Crypt::Random. Jetzt funktioniert auch der folgende Eintrag in der docker-compose.yml um das Modul zu laden:

environment:
     CPAN_PKGS: "Crypt::Random"

Vielen Dank für die Unterstützung! Es wäre natürlich schön, wenn das Modul Crypt::Random in das Basis-Image aufgenommen würde. Der Start des Containers dauert so recht lang, weil die Installation des Moduls seine Zeit benötigt.

Grüße
Stefan

Loredo

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).
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

ManOki

#563
Zitat von: Loredo am 10 Juli 2019, 18:58:17

Inzwischen tendiere ich dazu die Empfehlung durchaus zu geben, dass der Container im Netzwerk Modus "host" betrieben wird.

[...]

Diejenigen, denen es neben der Funktion auch auf das i-Tüpfelchen an Sicherheit ankommt, die haben in der Regel ohnehin die Möglichkeit einen virtuellen Server nur für Docker abzustellen. Sprich, wenn man Docker in einem virtuellen Server laufen lässt statt bare metal, dann kann man dort IMHO auch getrost den FHEM Container direkt im selben LAN betreiben. Wer es übertreiben will, muss ja nicht auf dem selben virtuellen Server auch andere Container betreiben... somit bekommt man das, was man von einem Docker Container erwartet: Eine fix und fertige Laufzeitumgebung für FHEM, die einfach zu replizieren ist.

Das möchte ich auch so betreiben. Dazu will ich einen weiteren Container mit Mysql/MariaDB für configDB und LogDb betreiben. Da fhem im host-Modus läuft, muss aus meiner Sicht die Datenbank über einen host-Port (z.B. 3307) freigegeben werden, damit der DB Container nicht auch im host-Modus laufen muss, richtig?

Mein (testweise) docker-compose.yml sieht zurzeit wie folgt aus:


version: '3'

services:
  fhem:
    image: fhem/fhem
    restart: unless-stopped
    network_mode: host
    volumes:
        - fhem_log:/opt/fhem/log
        - ./configDB.conf:/opt/fhem/configDB.conf
    devices:
        # CUL 433
        - "/dev/serial/by-id/usb-busware.de_CUL433-if00:/dev/CUL433"
        # CUL 868
        - "/dev/serial/by-id/usb-busware.de_CUL868-if00:/dev/CUL868"
        # jeeLink
        - "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AL014KEQ-if00-port0:/dev/jeeLink"
    environment:
        - FHEM_UID=999
        - FHEM_GID=20
        - TZ=Europe/Berlin             
        - CONFIGTYPE=configDB
        - APT_PKGS="libcryptx-perl"
    depends_on:
        - database

  database:
    image: mariadb
    restart: unless-stopped
    ports:
        - 3307:3306
    volumes:
        - database_files:/var/lib/mysql
    env_file: ./database.env
    environment:
        - MYSQL_ROOT_PASSWORD=root

volumes:
  fhem_log:
  database_files:


Dazu passend die .configDB.conf


%dbconfig= (
   connection => "mysql:host=localhost;database=fhem;port=3307",
   user => "fhem",
   password => "fhem",
);


So startet allerdings der fhem container nicht, da er den "localhost" direkt über das lokale "/var/run/mysqld/mysqld.sock" ansprechen möchte, was natürlich schief geht. Workaround wäre, den hostname des host-Systems einzutragen. Ist das korrekt so oder gibt es da einen eleganteren Weg?

Leider wird der host-Modus kaum thematisiert, auch nicht auf Github (weder README noch docker-compose.yml).

EDIT: Auch mein DbLog funktioniert nicht korrekt. Obwohl ich auf die gleiche configDB.conf verweise, wird einfach irgendeine (alte) Standard-Konfiguration geladen, die auf Port 3306 verweist .. Ich kann sogar von fhem aus die conf-Datei ausgeben mit dem korrekten Port 3307, aber bei reopen wird das nicht berücksichtigt.
EDIT2: Antwort gefunden, configDB speichert natürlich Konfigurationsdateien (wie configDB.conf) für andere Module in der Datenbank, das muss man natürlich beim Umzug beachten.

ManOki

persching

Auch ich versuche gerade von einer Installation auf einem bananaPi mit logDB und seperater configDB auf einen NUC mit komibinierter mysql Datenbank zu wechseln. Ich hab es jetzt geschafft, dass ich einen mysql und portainer fehlerfrei und fhem wenigstens mal halbwegs startet und sich nicht sofort wieder beendet. Jetzt hänge ich gerade an folgender Meldung:


Preparing initial start:


1. Updating existing FHEM installation in /opt/fhem





Preparing user environment ...


1. Creating group 'fhem' with GID 6061 ...


2. Enforcing GID for group 'bluetooth' to 6001 ...


3. Creating user 'fhem' with UID 6061 ...


4. Creating log directory /opt/fhem/./log ...


5. Enforcing user and group ownership for /opt/fhem to fhem:fhem ...


6. Enforcing file and directory permissions for /opt/fhem ...


7. Correcting group ownership for /dev/tty* ...


8. Found GPIO: Correcting group permissions in /dev and /sys to 'gpio' with GID 6002 ...


9. Found I2C: Correcting group permissions in /dev to 'i2c' with GID 6003 ...


10. Updating /etc/sudoers.d/fhem-docker ...


11. Adding gateway.docker.internal to /etc/hosts ...


12. Adding host.docker.internal to /etc/hosts ...


13. Pre-authorizing SSH to Docker host for user 'fhem' ...


14. Updating SSH key pinning and SSH client permissions for user 'fhem' ...





Preparing configuration ... skipped (detected configDB)


HINT: Make sure to have your FHEM configuration properly prepared for compatibility with this Docker Image _before_ using configDB !



Starting FHEM ...


2019.11.02 21:03:20 3: From the FHEM_GLOBALATTR environment: attr global logfile ./log/fhem-%Y-%m-%d.log


2019.11.02 21:03:20 3: From the FHEM_GLOBALATTR environment: attr global pidfilename ./log/fhem.pid


2019.11.02 21:03:20 3: From the FHEM_GLOBALATTR environment: attr global updateInBackground 1


2019.11.02 21:03:20 3: From the FHEM_GLOBALATTR environment: attr global nofork 0


Can't locate RTypes.pm in @INC (you may need to install the RTypes module) (@INC contains: . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/x86_64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at fhem.pl line 597.


ManOki

Zitat von: persching am 02 November 2019, 22:08:39

Can't locate RTypes.pm in @INC (you may need to install the RTypes module)


Irgendwie musst du dieses Perl-Modul installieren, z.B. über das Debian-Package https://packages.debian.org/de/buster/libmime-types-perl (gefunden nach Google-Suche, nicht selbst ausprobiert..)

persching

#566
Das war leider nicht das passende Packet. Wenn man sich die Liste der beinhalteten Dateien aus deinem Link anguckt, dann ist da auch RTypes.pm nicht dabei. :(

Liegt das ganze vielleicht daran, dass ich ubuntu server 18.04 und nicht debian verwende??

EDIT: die Datei liegt auch unter /opt/fhem/FHEM, aber scheinbar wird diese Datei nicht gefunden bzw. gar nicht der komplette Ordner nicht.

Hier ist mal meine docker-compose.yml


# This is an exmaple Docker Compose file to start your own Docker Stack

version: '2.3'

networks:
  net:
    driver: bridge
    # enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: 172.27.0.0/24
          gateway: 172.27.0.1
        # - subnet: fd00:0:0:0:27::/80
        #   gateway: fd00:0:0:0:27::1
volumes:
  portainer_data:

services:

  ####
  # HINT: use only ONE of the example "fhem:" service
  # definitions below !
  #

  # Example w/ custom environment variables
  fhem:
    image: fhem/fhem:latest
    restart: always
    networks:
      - net
    ports:
      - "8083:8083"
      - "7072:7072"
    volumes:
      - "./fhem/:/opt/fhem/"
      - "./fhem/contrib/configDB/configDB.conf:/opt/fhem/configDB.conf"
    environment:
      FHEM_UID: 6061
      FHEM_GID: 6061
      TIMEOUT: 10
      RESTART: 1
      TELNETPORT: 7072
      TZ: Europe/Berlin
      CONFIGTYPE: configDB
    depends_on:
      - mysql

  portainer:
    image: portainer/portainer:1.20.0
    restart: always
    command: -H unix:///var/run/docker.sock --no-auth
    networks:
      - net
    ports:
      - "9000:9000"
    environment:
      - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/portainer.crt
      - REGISTRY_HTTP_TLS_KEY=/certs/portainer.key
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
      - /home/pirate/certs/portainer.key:/certs/portainer.key
      - /home/pirate/certs/portainer.crt:/certs/portainer.crt

  mysql:
    image: mysql/mysql-server:5.7
    restart: always
    networks:
      - net
    expose:
      - "3306"
      - "33060"
    ports:
      - "3306:3306"
      - "33060:33060"
    volumes:
      - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init-sql
      - ./mysql/data:/var/lib/mysql
    environment:
      - MYSQL_RANDOM_ROOT_PASSWORD=yes

ManOki

Es ist egal, was für ein Hostsystem du hast. Entscheidend ist, von welchem Parent der Container abstammt. Du könntest auch SUSE oder ARCH als Host haben und trotzdem einen Debian-Container starten.

Ich vermute mal, du baust kein frisches FHEM neu auf im Container, sondern versuchst einen Umzug von deinem Hostsystem nach Docker. Dann musst du herausfinden, woher das Perl-Modul kommt und es im Container bereit stellen, entweder über ein APT-Package, dass du im Container installierst oder ein Perl-Modul, dass du auch im Container installierst. Es nützt nichts, wenn du es im Hostsystem hast.

Und das das Paket nicht passt, habe ich (wie geschrieben), billigend in Kauf genommen 8)

Wernieman

Der Server hat mit dem Container nichts zu tuen .... das ist doch gerade Sinn des Containers.

Ist denn das Packet im Container zu finden?
- 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

persching

Jetzt habt ihr geantwortet während ich mein Post editiert habe. Ich versuche verzweifelt rauszufinden, welches Paket diese Datei beinhaltet. Ich hab nun sicherlich schon 2 Std. gegoogled und finde nix was mir weiterhilft.