Offizielles FHEM Docker Basis Image für verschiedene Plattformen

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

Vorheriges Thema - Nächstes Thema

Kurt77

Zitat von: Loredo am 16 September 2018, 13:20:10Für die Einbindung von USB Geräten muss der Container im Privileged Modus laufen. Das ist aber Docker spezifisch und hat nichts mit dem Image ansich zu tun.
In der docker-compose Beispieldatei sind dazu bereits ein entsprechende Einträge vorhanden, die man nur einkommentieren muss:

# privileged: true
   [...]
# - /dev/ttyUSB0:/dev/ttyUSB0


Ich habe bei mir allerdings alles auf IP laufen und brauche daher kein USB mehr.
Hallo,
verstehe ich das richtig, dass es eine Möglichkeit gibt, ein USB-Gerät über IP anzusprechen?
Wenn ja, wie geht das?

Danke und Gruß,
Kurt

passibe

Wie meinst du "über IP anzusprechen"? Hängt das Gerät an einem anderen Computer? Dann könnte das relativ einfach gehen (Google spuckt z.B. das hier aus https://github.com/git-developer/rudy).

Aber mit Docker hat das an sich wenig zu tun, Docker kann (jedenfalls meines Wissens nach) nicht "einfach so" USB-Geräte über IP ansprechen.

Ansonsten gibt es noch spezialisierte Hardware, die USB über Ethernet verschickt. Kommt aber auch auf das jeweilige USB-Gerät an, ob sich das eignet und wie man das am besten umsetzt.

Kurt77

Zitat von: passibe am 29 Oktober 2024, 17:42:41Wie meinst du "über IP anzusprechen"? Hängt das Gerät an einem anderen Computer? Dann könnte das relativ einfach gehen (Google spuckt z.B. das hier aus https://github.com/git-developer/rudy).

Aber mit Docker hat das an sich wenig zu tun, Docker kann (jedenfalls meines Wissens nach) nicht "einfach so" USB-Geräte über IP ansprechen.

Ansonsten gibt es noch spezialisierte Hardware, die USB über Ethernet verschickt. Kommt aber auch auf das jeweilige USB-Gerät an, ob sich das eignet und wie man das am besten umsetzt.
Hallo passive,
danke, das ist eine Möglichkeit, die ich gesucht habe und wenn ich mir die Site angucke, sollte das mit Docker auch funktionieren.
offensichtlich hat aber Loredo eine andere Möglichkeit gefunden, weil sein Hinweis wesentlich älter als das Github-Projekt ist.
Mit Docker hat das wohl tatsächlich nichts zu tun, aber der Hinweis kam bei diesem Thema.

Gruß Kurt

passibe

Vermutlich handelt es sich bei Loredo um Sensoren o.ä., die USB nur für RS-232 benutzen (deshalb auch /dev/ttyUSB0). Deshalb auch mein Hinweis, dass es auf das jeweilige USB-Gerät ankommt, wie sich das am besten umsetzen lässt. Evtl. reicht nämlich ein einfaches RS-232 -> Ethernet/WiFi Modul.

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

fettgu

Guten Abend,

ich kämpfe ein wenig mit pre-start.sh Dateien.

Bei diesem Eintrag in docker-compose.yml
- "./fhem_config/pre-start.sh:pre-start.sh"
erscheint bei
sudo docker compose up -d
ZitatError response from daemon: invalid volume specification: '/docker/home/fhem_config/pre-start.sh:rw' invalid mount config for type "bin": invalid moutn path: 'pre-start.sh' mount path must be absolute

Wenn ich stattdessen das in docker-compose.yml schreibe... - ein / nach dem :
- "./fhem_config/pre-start.sh:/pre-start.sh"
lande ich nach
sudo docker compose up -d
hier
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/docker/home/fhem_config/pre-start.sh" to rootfs at "/pre-start.sh": mount /docker/home/fhem_config/pre-start.sh:/pre-start.sh (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
Noch eine Frage: sollte eigentlich pre-start auch bei folgendem Kommando laufen sudo docker compose up -d oder wirklich nur bei start?

Viele Grüße
Guido

PS: Ich mache das eigentlich alles nur, um google assistant zum laufen zu bekommen...


passibe

#2061
Was gibt denn ein
ls -la /docker/home/fhem_config/pre-start.sh? Docker sagt ja recht klar "not a directory: unknown [...] Check if the specified host path exists and is the expected type.", d.h. ich vermute stark, dass der Dateipfad irgendwie falsch ist? In welchem Ordner ist denn dein compose-file? Denn von dort aus startest du ja mit dem relativen Pfad ./fhem_config ...

Ansonsten sagt die Doku:
ZitatThis script will be run every time the container starts
, d.h. pre-start sollte (im Unterschied zu pre-init) immer laufen, wenn der Container startet, also auch bei compose up -d.

Edit: Was genau brauchst du denn für Google Assistant? Wenn es darum geht, Pakete zu installieren, dann ist wie in der Doku beschrieben der Weg über ein eigenes Image der richtige(re).

fettgu

Danke für das Feedback.

Zitatls -la /docker/home/fhem_config/pre-start.sh

ergibt

Zitat-rwxr-xr-x 1 root root 62 Oct 31 18:25 /docker/home/fhem_config/pre-start.sh

Zitat? Docker sagt ja recht klar "not a directory: unknown [...] Check if the specified host path exists and is the expected type.", d.h. ich vermute stark, dass der Dateipfad irgendwie falsch ist?

Das glaube ich auch. Die Frage ist ja was da falsch sein soll. Ich habe einiges rumprobiert und mir gehen die Ideen aus.

ZitatIn welchem Ordner ist denn dein compose-file? Denn von dort aus startest du ja mit dem relativen Pfad ./fhem_config ...

Das compose-file liegt im Ordner drüber.

ZitatEdit: Was genau brauchst du denn für Google Assistant? Wenn es darum geht, Pakete zu installieren, dann ist wie in der Doku beschrieben der Weg über ein eigenes Image der richtige(re).

Meine Hoffnung(!) ist ich brauche nur
Zitatsudo npm install -g gassistant-fhem --unsafe-perm

Das könnte so sein, oder auch nicht. Insgesamt, gibt es wenig Fragen zu google assistant und Docker hier im Forum: entweder ist es also sehr einfach oder sehr exotisch.

Viele Grüße
Guido Fett

passibe

Hm, keine Ahnung dann. Vielleicht mal schauen, dass der Container komplett gelöscht ist und dann neu erstellen.

Aber, wie gesagt, pre-start ist nicht der Weg, um Pakete nachzuinstallieren. Die Doku sagt:
ZitatSee more examples in our docker-compose.yml file.

Dort findet sich:
  # example with extending npm packages to your image
  fhem:
    build:
      context: .
      dockerfile_inline: |
        FROM ghcr.io/fhem/fhem-docker:4-bullseye
        RUN <<EOF
          npm install -g --unsafe-perm --production <NPM PACKAGENAME>
          npm cache clean --force
        EOF
      pull_policy: build
    restart: always
    networks:
      - net
    ports:
      - "8083:8083"
    volumes:
      - "./fhem/:/opt/fhem/"

fettgu

Danke pre-start macht dann wohl keiner... - obwohl es in der Doku steht.

Ich habe das andere auch probiert:

validating /docker/home/docker-compose.yml: services.fhem.build Additional property pull_policy is not allowed

Da gibt es dann auch eine Fehlermeldung...

Viele Grüße
Guido Fett

passibe

Ah, die pull_policy ist einfach nur falsch eingerückt. Die gehört eine Ebene höher. Also zwei der Leerzeichen davor löschen.

fettgu

ZitatAh, die pull_policy ist einfach nur falsch eingerückt. Die gehört eine Ebene höher. Also zwei der Leerzeichen davor löschen.

Stimmt, danke. Jetzt passiert was bei
Zitatsudo docker compose up -d

Trotzdem läuft gassistant nicht. Dann lasse ich das halt.

Viele Grüße
Guido Fett

passibe

Wieso so genervt?
Gib uns halt ein paar mehr Infos. Wird das npm-Paket denn erfolgreich installiert? Steht irgendwo was im Log? Was heißt "läuft gassistant nicht"?

fettgu

ZitatWieso so genervt?

Danke, alles gut.

Hier ein paar weitere Details:

Ich habe es mit diesem Eintrag in docker-compose.yaml probiert.

build:
      context: .
      dockerfile_inline: |
        FROM ghcr.io/fhem/fhem-docker:4-threaded-bullseye
        RUN <<EOF
          npm install -g --unsafe-perm --production gassistant-fhem
          npm cache clean --force
        EOF
      pull_policy: build
    #image: ghcr.io/fhem/fhem-docker:4-threaded-bullseye

und bekomme diese Zeilen im Terminalfenster

+] Building 0.1s (7/7) FINISHED                                 docker:default
 => [fhem internal] load build definition from Dockerfile                  0.0s
 => => transferring dockerfile: 252B                                       0.0s
 => [fhem internal] load metadata for ghcr.io/fhem/fhem-docker:4-threaded  0.0s
 => [fhem internal] load .dockerignore                                     0.0s
 => => transferring context: 2B                                            0.0s
 => [fhem 1/2] FROM ghcr.io/fhem/fhem-docker:4-threaded-bullseye           0.0s
 => CACHED [fhem 2/2] RUN <<EOF (npm install -g --unsafe-perm --productio  0.0s
 => [fhem] exporting to image                                              0.0s
 => => exporting layers                                                    0.0s
 => => writing image sha256:34a60b154ee0da7805531f3110f967052dda6e108b866  0.0s
 => => naming to docker.io/library/home-fhem                               0.0s
 => [fhem] resolving provenance for metadata file                          0.0s
[+] Running 4/4

Nach folgendem Kommando in Fhem
define gassistant  gassistant
steht folgendes im FHEM Event log

2024.11.03 11:42:30 2: gassistant: gassistant-fhem not installed. install with 'sudo npm install -g gassistant-fhem --unsafe-perm
Also einmal das Kommando in docker-compose.yaml geändert:

build:
      context: .
      dockerfile_inline: |
        FROM ghcr.io/fhem/fhem-docker:4-threaded-bullseye
        RUN <<EOF
          npm install -g --unsafe-perm --production gassistant-fhem
          npm cache clean --force
        EOF
      pull_policy: build

Dann habe ich folgende Zeilen im Terminalfenster

=> => transferring dockerfile: 303B                                       0.0s
 => [fhem internal] load metadata for ghcr.io/fhem/fhem-docker:4-threaded  0.0s
 => [fhem internal] load .dockerignore                                     0.0s
 => => transferring context: 2B                                            0.0s
 => CACHED [fhem 1/2] FROM ghcr.io/fhem/fhem-docker:4-threaded-bullseye    0.0s
 => [fhem 2/2] RUN <<EOF (npm install -g gassistant-fhem --unsafe-perm..  24.8s
 => [fhem] exporting to image                                              0.3s
 => => exporting layers                                                    0.3s
 => => writing image sha256:654c35e6f197171475fd4ce35d3dfa2b68f44da5736c0  0.0s
 => => naming to docker.io/library/home-fhem                               0.0s
 => [fhem] resolving provenance for metadata file                          0.0s
[+] Running 4/4

Ich habe aber auch weiter Einträge gesehen, die sich selbst überschrieben haben. Weiß nicht, wo die hin sind (im fhem log sind sie nicht). Da stand etwas von weiteren Abhängigkeiten...

In Fhem  führt
define gassistant  gassistant zur altbekannten Fehlermeldung.

Ich hätte mich für den google assistant auf Docker interessiert, wenn es einfach gegangen wäre. Falls nicht (und so sieht es für mich aus), lasse ich das.

Viele Grüße
Guido Fett

passibe

Ah ok. Habe es eben selbst mal probiert, die Installation schlägt tatsächlich fehl (eigentlich sollte dann auch der build-prozess abbrechen, aber irgendwie tut er das nicht).

Wenn man sich nach Start des Containers das Log anschaut (in /root/.npm/_logs/), sieht man:
npm error node-pre-gyp http GET https://node-precompiled-binaries.grpc.io/grpc/v1.24.11/node-v108-linux-x64-glibc.tar.gz
npm error node-pre-gyp ERR! install response status 404 Not Found on https://node-precompiled-binaries.grpc.io/grpc/v1.24.11/node-v108-linux-x64-glibc.tar.gz
npm error node-pre-gyp WARN Pre-built binaries not installable for grpc@1.24.11 and node@18.20.4 (node-v108 ABI, glibc) (falling back to source compile with node-gyp)
[...]
npm error make: g++: No such file or directory

Eine der Abhängigkeiten ist nicht mehr vorkompiliert verfügbar, sodass npm versucht, das lokal zu kompilieren. Das schlägt aber fehl, weil g++ nicht installiert ist. (Eigentlich ist hier der Maintainer von gassistant schuld, weil da eine sehr alte Version von grpc verwendet wird.)

Deshalb muss man dem Container noch build-essential hinzufügen, dann funktioniert die lokale Kompilierung:
    build:
      context: .
      dockerfile_inline: |
        FROM ghcr.io/fhem/fhem-docker:4-threaded-bullseye
        RUN <<EOF
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get update
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends build-essential
          LC_ALL=C apt-get autoremove -qqy && LC_ALL=C apt-get clean
        EOF
        RUN <<EOF
          npm install -g --unsafe-perm --production gassistant-fhem
          npm cache clean --force
        EOF

Dauert ein wenig, bis das durchläuft, also nicht wundern ... danach sollte gassistant aber funktionieren.