Offizielles FHEM Docker Basis Image für verschiedene Plattformen

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

Vorheriges Thema - Nächstes Thema

passibe

Irgendwann hat sich docker-compose doch auch zu docker compose geändert (also ohne Bindestrich, d.h. man benutzt direkt das docker-Kommando).

Vielleicht hast du schon die richtige docker-Version, aber eben noch eine alte docker-compose version; also vielleicht mal mit dem von Sidey geposteten Auszug
docker compose up -dprobieren.

ch.eick

Zitat von: passibe am 14 April 2025, 19:10:41Irgendwann hat sich docker-compose doch auch zu docker compose geändert (also ohne Bindestrich, d.h. man benutzt direkt das docker-Kommando).

Vielleicht hast du schon die richtige docker-Version, aber eben noch eine alte docker-compose version; also vielleicht mal mit dem von Sidey geposteten Auszug
docker compose up -dprobieren.

Leider klappt das auch nicht
root@raspberrypi:/docker/fhem_2025# docker compose up -d
unknown shorthand flag: 'd' in -d
See 'docker --help'.

< snip >

Ich habe wohl das aktuellste
root@raspberrypi:/docker/fhem_2025# apt-get install docker
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut... Fertig
Statusinformationen werden eingelesen... Fertig
docker ist schon die neueste Version (1.5-2).
Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
  avahi-utils gir1.2-handy-1 gir1.2-packagekitglib-1.0 gir1.2-polkit-1.0 libc++1-16 libc++abi1-16 libcamera0.3 libunwind-16 libwlroots12 lxplug-network
Verwenden Sie »apt autoremove«, um sie zu entfernen.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 9 nicht aktualisiert.
root@raspberrypi:/docker/fhem_2025# apt-get install docker-compose
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut... Fertig
Statusinformationen werden eingelesen... Fertig
docker-compose ist schon die neueste Version (1.29.2-3).
Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
  avahi-utils gir1.2-handy-1 gir1.2-packagekitglib-1.0 gir1.2-polkit-1.0 libc++1-16 libc++abi1-16 libcamera0.3 libunwind-16 libwlroots12 lxplug-network
Verwenden Sie »apt autoremove«, um sie zu entfernen.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 9 nicht aktualisiert.

Es scheint aber irgend etwas mit der Einrückung im .yml file geändert worden zu sein.
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

ch.eick

#2207
Das docker-compose von apt-get ist wohl zu alt :-)

root@raspberrypi:/docker/fhem_2025# docker-compose -version
docker-compose version 1.29.2, build unknown

Zitatdockerfile_inline
Requires: Docker Compose 2.17.0 and later

Es gibt da wohl das docker-compose-plugin, was dann den Befehl "docker compose up -d" ermöglicht.
Das ist aber wohl nicht im apt-get vorhanden
root@raspberrypi:/docker/fhem_2025# apt-get install docker-compose-plugin
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut... Fertig
Statusinformationen werden eingelesen... Fertig
E: Paket docker-compose-plugin kann nicht gefunden werden.
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

Otto123

#2208
docker compose war bei arm etwas speziell.
Offizielle Doku https://docs.docker.com/compose/install/linux/

ich denke unter arm musst Du immer noch manuell installieren.. https://docs.docker.com/compose/install/linux/#install-the-plugin-manually

Ich hatte für mich mal ein Script gemacht https://github.com/heinz-otto/raspberry/blob/48fc0e64cffbf0cc2acf705cb0c365bd9262c406/Docker/setupDockerComposeV2.sh
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

pink99panther

@ch.eick
schick doch dein .yml mal durch YAML Lint

das Stück yml aus dem Post #2200 von dir wirft dort schon 2 Fehler und
sagt auch wo und was falsch ist.

ch.eick

#2210
Zitat von: Otto123 am 14 April 2025, 20:43:04Ich hatte für mich mal ein Script gemacht https://github.com/heinz-otto/raspberry/blob/48fc0e64cffbf0cc2acf705cb0c365bd9262c406/Docker/setupDockerComposeV2.sh
Hmm,
zuerst war docker dann komplett weg, aber ich habe das setupDocker.sh dann auch gefunden :-)

root@raspberrypi:/docker/fhem_2025# docker compose version
Docker Compose version v2.34.0

YamLint gibt keinen Fehler mehr aus.

Beim compose kommt jedoch noch diese Meldung
oot@raspberrypi:/docker/fhem_2025# docker compose up -d
validating /docker/fhem_2025/docker-compose.yml: services.fhem.build must be a string

Und hier die bisherige docker-compose.yml
root@raspberrypi:/docker/fhem_2025# cat docker-compose.yml
# This is an example Docker Compose file to start your own Docker Stack

version: '3.3'

volumes:
  portainer_data:

services:

  fhem:
    build:
    context: .
    dockerfile_inline: |
      FROM ghcr.io/fhem/fhem-docker:latest
      RUN <<EOF
        LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get update
        LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends python3-pandas python3-pymysql python3-sqlalchemy python3-sklearn python3-sklearn-lib
        LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends libcrypt-openssl-aes libcrypt-openssl-random libcrypt-rijndael-perl
        LC_ALL=C apt-get autoremove -qqy && LC_ALL=C apt-get clean
        pip3 install --no-cache-dir vallox_websocket_api fhem beautifulsoup4 pandas pymysql sqlalchemy sklearn sklearn-lib
      EOF
    pull_policy: build

    restart: always
    network_mode: host
    privileged: true
#  devices:
#    - "/dev/ttyACM0:/dev/ttyACM0"
    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"

< snip >

Wo ist eigentlich der Unterschied zwischen
ghcr.io/fhem/fhem-docker:latest und fhem/fhem-docker:latest

VG  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

rob

Hi Christian.

Ganz schön zickig der Composer :) Was sagt er, wenn Du die Statements unter "build:" nochmal einrückst? Also so:
...
services:
  fhem:
    build:
      context: .
      dockerfile_inline: |
        FROM ghcr.io/fhem/fhem-docker:latest
        RUN <<EOF
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get update
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends python3-pandas python3-pymysql python3-sqlalchemy python3-sklearn python3-sklearn-lib
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends libcrypt-openssl-aes libcrypt-openssl-random libcrypt-rijndael-perl
          LC_ALL=C apt-get autoremove -qqy && LC_ALL=C apt-get clean
          pip3 install --no-cache-dir vallox_websocket_api fhem beautifulsoup4 pandas pymysql sqlalchemy sklearn sklearn-lib
        EOF
    pull_policy: build
    restart: always
...


Die Images von ghcr.io verstehe ich als mirror. Anstatt auf hub.docker.com eben via Github gehostet. Die Build-Targets müssten imho gleich sein.

VG
rob

ch.eick

Zitat von: rob am 15 April 2025, 11:15:27Ganz schön zickig der Composer :) Was sagt er, wenn Du die Statements unter "build:" nochmal einrückst? Also so:
...
services:
  fhem:
< snip >
    restart: always
...


Die Images von ghcr.io verstehe ich als mirror. Anstatt auf hub.docker.com eben via Github gehostet. Die Build-Targets müssten imho gleich sein.
Hey Rob,
danke, das mit der Einrückung war's dann soweit.
Nun kommen bereits Fehlermeldungen zu den Packages, die ich jetzt erstmal korrekt definieren muss.

Ich gebe ein Update, wenn es vollbracht ist :-)

Vielen Dank an alle beteidigten
      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

ch.eick

Hallo zusammen,
ich bin einen großen Schritt weiter, kann jedoch nicht diesen Fehler interpretieren
< snip >
39.02 Setting up python3-pythran (0.11.0+ds-7) ...
39.40 Setting up python3-scipy (1.10.1-2) ...
42.47 Setting up python3-sklearn (1.2.1+dfsg-1) ...
44.38 Processing triggers for libc-bin (2.36-9+deb12u10) ...
46.12 error: externally-managed-environment
46.12
46.12 × This environment is externally managed
46.12 ╰─> To install Python packages system-wide, try apt install
46.12     python3-xyz, where xyz is the package you are trying to
46.12     install.
46.12     
46.12     If you wish to install a non-Debian-packaged Python package,
46.12     create a virtual environment using python3 -m venv path/to/venv.
46.12     Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
46.12     sure you have python3-full installed.
46.12     
46.12     If you wish to install a non-Debian packaged Python application,
46.12     it may be easiest to use pipx install xyz, which will manage a
46.12     virtual environment for you. Make sure you have pipx installed.
46.12     
46.12     See /usr/share/doc/python3.11/README.venv for more information.
46.12
46.12 note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
46.12 hint: See PEP 668 for the detailed specification.
------
failed to solve: process "/bin/sh -c   LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get update\n  LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends python3-pandas python3-pymysql python3-sqlalchemy python3-sklearn python3-sklearn-lib libcrypt-rijndael-perl\n  LC_ALL=C apt-get autoremove -qqy && LC_ALL=C apt-get clean\n  LC_ALL=C DEBIAN_FRONTEND=noninteractive pip3 install --no-cache-dir vallox_websocket_api fhem beautifulsoup4\n" did not complete successfully: exit code: 1

Es geht um die pip3 installation, die apt-get installation läuft soweit und ohne das pip3 wird auch ein Container gestartet
       RUN <<EOF
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get update
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends python3-pandas python3-pymysql python3-sqlalchemy python3-sklearn python3-sklearn-lib libcrypt-rijndael-perl
          LC_ALL=C apt-get autoremove -qqy && LC_ALL=C apt-get clean
          pip3 install --no-cache-dir vallox_websocket_api fhem beautifulsoup4     <<< Bei diesem Aufruf tritt das Problem auf
        EOF
Leider scheint es die Pakete in der pip3 Zeile nicht als apt zu geben.
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

passibe

Kannst es mit --break-system-packages versuchen. Richtig(er) wäre es aber das – ich vermute – python-Skript zur Abfrage der Vallox-API in einen eigenen schlanken Container zu packen.
Alternativ auch ein VENV aber das ist vielleicht nervig, das im Dockerfile zu machen (wobei, geht wahrscheinlich, müsstest du mal googeln). Ändert aber auch nichts daran, dass sowas eigentlich nicht mehr in den Container gehört.

Otto123

Ich sage das hier öfters: Der Sinn von Containern ist NICHT in diesen fertigen Containern groß etwas zu verändern / zu installieren. Man verwendet die am Besten wie sie sind. Pro Anwendung ein Container.

Kann man diesen komischen Kram nicht in einem extra Standard debian Container installieren (oder sich einen mit docker-file bauen) und einfach mit dem fhem Container per Netzwerk koppeln? Das wäre meiner Meinung nach beherrschbarer, den manipuliert man einmal und lässt ihn so wie er ist.

Da war passibe schneller :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ch.eick

Danke euch zwei,
ich mag diese Manipulationen auch nicht.

Hier meine aktuelle Infiltration
        RUN <<EOF
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get update
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends python3-pandas python3-pymysql python3-sqlalchemy python3-sklearn python3-sklearn-lib
          LC_ALL=C apt-get autoremove -qqy && LC_ALL=C apt-get clean
          pip3 install fhem --break-system-packages
        EOF

Das fhem Package im Python klappt bereits mit dem pip3 und --break-system-packages

Diese beiden Pakete könnten sich dann jetzt erledigt haben

- vallox_websocket_api da habe ich schon eine docker Implementierung gefunden
- beautifulsoup4 das ist wohl bereits als python3-bs4 im Standard enthalten

Nun bleibt noch das cpan, was die Pakete für die enOcean Crypto liefert, jedoch kann ich micht nicht mehr wirklich erinnern,
wofür das hier alles war. Ich denke einfach mal weg lassen und suchen, wenn was beim Test nicht läuft.
 CPAN_PKGS: "Crypt::OpenSSL::AES XML::Bare XML::Bare Protocol::WebSocket::Handshake::Server Crypt::Rijndael Crypt::Random --verbose"


- Somit läuft bereits die PV Leistungsprognose mit KI im Python, was das wichtigste war.
- Auch die Authentifizierung zum Kostal WR läuft, somit müsste PBKDF2 bereits in irgend einem anderen Package im Standard sein.
- Die Vallox KWL hatte ich schon mal im Container mit mqtt begonne zu testen, das wird somit das nächste große Projekt.

Vielen Dank für eure unendliche Geduld
    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

Sidey

Zitat von: ch.eick am 15 April 2025, 17:22:48Hallo zusammen,
ich bin einen großen Schritt weiter, kann jedoch nicht diesen Fehler interpretieren

Debian bookworm möchte dich davor schützen, pakete über zwei verschiedene Paketmanager zu vermischen.
Du nutzt einmal apt und einmal pip.

PEP 668 ist eine Fehlermeldung um dich darauf aufmerksam zu machen.
Die von passibe vorgeschlagene Lösung solltest Du gut untersuchen, ob das sinnvoll ist.
Irgendwann wurde das mit den virtuellen python Umgebungen mal zu de facto standard.

Vielleicht kannst Du auch alles über pip installieren oder dafür einen separaten docker container verwenden, sofern eine Kommunikation über das Netzwerk möglich ist.

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

cbl

Ich baue mir ausgehend vom fhem-docker:5-threaded-bookworm-Image ein eigenes Image und ergänze bereits beim Bau einige Perl-Packages. Dazu habe ich in den letzten Monaten den im Git beispielhaften gezeigten Befehl verwendet:

cpm install --show-build-log-on-failure --configure-timeout=360 --workers=$(nproc) --local-lib-contained /usr/src/app/3rdparty/  << YOUR PAACKAGE NAME >>
Das hat super für diverse Pakete in den letzten Monaten geklappt, u.a. Math::Round, Math::Polygon::Calc und andere.
Vor einer Woche wollte ich ein weiteres Paket hinzufügen und beim Neubau das Images habe ich festgestellt, dass Docker beim Bauen über Abhängigkeitsfehler stolpert:

Installation failed. The direct cause of the failure comes from the following packages/distributions; you may want to grep this log file by them:

Die jeweils in der Folge genannten fehlenden Abhängigkeiten zieht sich cpm (und cpan) doch normalerweise selbst.


Konkretes Beispiel:


=> => # 2025-04-15T21:23:28,3195,SOAP-Lite-1.27| Failed to install distribution, because of installing some dependencies failed
=> => # 2025-04-15T21:23:28,3195| --
=> => # 2025-04-15T21:23:28,3195| Installation failed. The direct cause of the failure comes from the following packages/distributions; you may want to grep this log file by them:
 => => # 2025-04-15T21:23:28,3195|  * Net-SSLeay-1.94

Da auch das Dockerfile, mit dem ich erfolgreich im Februar das Image bauen konnte, nicht mehr funktioniert, hat sich etwas drumherum verändert. Die Frage ist, was? Beim erneuten Bauen wurde auch ein neues FHEM-Image gezogen. Hat sich darin etwas bezüglich cpm verändert?

Viele Grüße
Christian

rob

Zitat von: Sidey am 15 April 2025, 19:52:54...
Irgendwann wurde das mit den virtuellen python Umgebungen mal zu de facto standard.
...
Ja, sehe ich auch so.

Man liest häufig noch man solle zur Installation für Python-Package xy einfach "pip install xy" ausführen. Das scheitert aber mit obiger Fehlermeldung, wenn man kein aktives Environment verwendet, wie schon geschrieben wurde.

Aus diesem Grund gehe ich dann so vor:
apt install [python3 python3-dev] virtualenv
virtualenv [--python=python3.12] gewünschter_pfad/myvenv #die eckigen Klammern sind optional, falls ein Projekt eine konkrete Py-Version bräuchte
source gewünschter_pfad/myvenv/bin/activate
pip install xy whatever_you_want #in einem normalen cli zeigt der Prompt das aktive Environment an und führt darin pip und python aus
deactivate #wenn alles erl. ist
Gibt natürlich noch andere Wege. Über VSCode z.B. geht das etwas "geführter" vom UI aus; usw. etc. pp.

Müsste imho auch für die dockerfile_inline Shell-Anweisungen so klappen. Probiert/ gebraucht habe ich es dort aber bisher nicht.

Der Hinweis, dies möglichst in einen eigenen Container zu separieren, bleibt davon freilich unbenommen :)

Btw. In der pip Anweisung sehe ich fhem dabei stehen. Das sollte nicht nötig sein, wenn das Fhem-Image als Basis für build referenziert wird.

VG
rob