Offizielles FHEM Docker Basis Image für verschiedene Plattformen

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

Vorheriges Thema - Nächstes Thema

passibe

#1485
0644 ist rw-r--r--, also für den owner nur read und write, kein execute.
Die fhem.pl muss ja aber ausgeführt werden, braucht also auch die execute permission.
Du müsstest das wenn dann also auf 744 ändern (oder 755, wenn sie nicht dem Benutzer gehört, der sie ausführt).
Ob ggfs. noch weitere Dateien die execute permission brauchen, oder dort 640 "genug" ist, weiß ich nicht, müsstest du dann testen, wenn FHEM einmal läuft.

Edit: Sorry, ich sollte das echt genauer lesen. Deine fhem.pl hat ja schon 7xx, das passt.
Aber er sagt ja auch
"cd: /opt/fhem: Permission denied"
das "cd"-Kommando erzeugt also schon den Fehler.
Deshalb 0644 vom Ordner mindestens auf 0744 stellen, dann passts.

antonwinden

#1486
die einzig ausführbare hat ja 0740 - ist also für den besitzer ausführbar und 0640 reicht im allgmeinen auch sonst würde das image fhem/fhem ja nicht laufen und das tut es immerhin schon seit knapp 2 Jahren...

und den Ordner fhem auf 744 zu ändern hat auch nicht funktioniert da das start script die rechte wieder auf 2750 ändert. Wobei die 2 Stelle mit 2*7*50 ja sowieso ausführbar ist für den Besitzer...

ich bleib wohl besser bei buster unter fhem/fhem...
gruß Anton
KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...

antonwinden

und woweit ich es verstehe ändert das startup script die Dateirechte so das es eigentlich laufen sollte - tut es aber nicht...
mein docker-compose.yml
version: '3'

services:

###fhem

   fhem:
     container_name: fhem
     restart: always
     privileged: true
#     image: ghcr.io/fhem/fhem/fhem-docker:bullseye   # geht nicht außer fhem ordner auf 0740 stellen
     image: fhem/fhem
#     image: ghcr.io/fhem/fhem/fhem-minimal-docker:buster
     ports:
       - "8083:8083"
       - "8084:8084"
       - "8087:8087"
       - "1882:1882"
     networks:
       - datenbank
       - traefik_proxy
     volumes:
       - /mnt/1/SSDA/fhem:/opt/fhem
     devices:
       - /dev/bus/usb/001/002
     environment:
     # test 17-10-21
#        - NPM_PKGS: "npm@8.1.0"
# die Variablen werden allerdings nicht ausgewertet!!!
      - PUID=1000
      - PGID=1000
      - FHEM_PERM_DIR=0644
      - FHEM_PERM_FILE=0644
#       - APT_PKGS="libjson-perl libmp3-info-perl libnet-upnp-perl"
#       - CPAN_PKGS="MP3::Info"
     labels:
       - "autoheal=true"
       - "traefik.enable=true"
       - "traefik.backend=fhem"
       - "traefik.frontend.rule=Host:fhem.xxx.xy"
       - "traefik.port=8083"
       - "traefik.docker.network=traefik_proxy"
       - "traefik.frontend.headers.SSLRedirect=true"
       - "traefik.frontend.headers.STSSeconds=315360000"
       - "traefik.frontend.headers.browserXSSFilter=true"
       - "traefik.frontend.headers.contentTypeNosniff=true"
       - "traefik.frontend.headers.forceSTSHeader=true"
       - "traefik.frontend.headers.SSLHost=xxx.xy"
       - "traefik.frontend.headers.STSIncludeSubdomains=true"
       - "traefik.frontend.headers.STSPreload=true"
       - "traefik.frontend.headers.frameDeny=true"

networks:
  datenbank:
    external: true
  traefik_proxy:
    external: true

obiges funktioniert problemlos so wie es dasteht aber sobald ich fhem/fhem auskommentiere und eines der beiden anderen nehme läuft es nicht mehr...
gruß anton
KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...

passibe

#1488
Also ohne jetzt genau zu wissen, ob entry.sh etwas bei den jeweiligen images unterschiedlich macht:

Es ergibt für mich keinen Sinn, dass deine Env-Variable
FHEM_PERM_DIR=0644
auf 0644 steht.


entry.sh wendet 0750 nur dann an, wenn das nicht von dir über die Env-Variable überschrieben wird.
Siehe hier https://github.com/fhem/fhem-docker/blob/dev/src/entry.sh Zeile 21:
FHEM_PERM_DIR="${FHEM_PERM_DIR:-0750}"

Deshalb: Kommentier FHEM_PERM_DIR mal aus oder setz es auf 0750. Was passiert dann?

Edit:
Das was Zeile 21 da macht nennt sich anscheinend Shell Parameter Expansion, siehe hier: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
${parameter:-word}
If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.

passibe

Vielleicht noch etwas zum Verständnis, weil du schreibst

Zitat von: antonwinden am 02 April 2022, 17:38:05die einzig ausführbare hat ja 0740

Das stimmt so nicht ganz – denn fhem.pl ist nicht das einzige, was ausführbar sein muss.
Directories müssen in der Regel auch ausführbar sein, damit man z.B. "rein" cd-en kann, oder darin ls ausführen kann.
Siehe https://unix.stackexchange.com/questions/150449/what-does-execute-permission-mean-on-a-folder.

Wenn das fehlt geht z.B. cd nicht, was entry.sh aber auf Zeile 164 ausführt.
Deshalb auch die Fehlermeldung in deinem ersten Beitrag
bash: line 1: cd: /opt/fhem: Permission denied

antonwinden

KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...

Dirk070

Hallo zusammen,

ich hoffe, ihr könnt mir helfen. FHEM läuft auf der Syno mit diesem Docker Container.
Leider sind die Möglichkeiten auf der Syno recht eingeschränkt.

Ein Beispiel, für einen USB-Lesekopf (hier im Forum um den Stromzähler auszulesen) wäre ein Paramter für das Run-Command nötig gewesen:
o --device=/dev/bus/usb/001/002

--device ist hier leider nicht zulässig, siehe http://blog.pavelsklenar.com/how-to-install-and-use-docker-on-synology/
Ich habe dann die Settings exportiert und in der JSON den Teil hinzugefügt, das hat funktioniert.

devices" : [
       {
           "pathOnHost": "/dev/ttyUSB0",
           "PathInContainer": "/dev/ttyUSB0",
           "CgroupPermissions": "rwm"
       }
   ],


So, nun möchte ich hier aus dem Forum das Modul für die e-Paper-Displays nutzen (ESPEInk) und dazu braucht es GD for Perl https://metacpan.org/pod/GD
Laut Doku https://github.com/fhem/fhem-docker/ sollte es so gehen:

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

Laut einem Hinwies geht es auf der Syno so https://stackoverflow.com/questions/56833111/how-to-pass-command-parameters-with-arguments-for-e-g-param1-arg1-to-docker

execname --param1\=arg1

Also habe ich das entsprechend umgesetzt auf

execname --CPAN_PKGS\=App::GD

Container gestartet und im Log geschaut - keine Meldung, weder Success noch Error.

Wie kann ich kontrollieren, ob GD nun im Container verfügbar ist und kennt sich auf der Syno jemand mit dem korrekten Prozedere aus?
Wie man merkt habe ich noch eher wenig Erfahrung mit Docker.....Danke Euch daher vorab!!

Schöne Grüße
Dirk

Wernieman

Kannst Du Dich auf der Syno in den Container einloggen?

Normalerweise geht es mit:
docker exec -it <Containername> /bin/bash
<Containername> und eventuell /bin/bash bitte anpassen.
Hinweis:
Bitte normalerweise nicht benutzen, aber für Debugzwecke sehr hilfreich
- 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

Dirk070

Danke für Deine Unterstützung, schaue ich mir an.
Ich habe jetzt auch Portainer auf der Syno installiert, um die Limitierungen der Syno-App zu umgehen.

In Portainer müsste man doch nun eine environment variable setzen, nach diesem Aufbau:
CPAN_PKGS="App::Name1

Also dann in name:
CPAN_PKGS

Und in value:
App::GD

Wäre das so in Portainer korrekt?

Wernieman

Guuuute Frage, kenne den FHEM Container und Portainer nicht. Bin ein "Shell-Futzi"
- 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

Dirk070

#1495
Danke Wernieman für Deine Hilfe.

In Portainer kommt man auch auf ein bin/bash Terminal.

Ein Hinweis, um die installierte Version von GD herauszufinden war: cpan -D GD

Das bringt folgendes Ergebnis:

Loading internal logger. Log::Log4perl recommended for better logging
Reading '/root/.cpan/Metadata'
  Database was generated on Fri, 15 Apr 2022 15:29:03 GMT
GD
-------------------------------------------------------------------------
        (no description)
        R/RU/RURBAN/GD-2.76.tar.gz
        /usr/lib/x86_64-linux-gnu/perl5/5.28/GD.pm
        Installed: 2.71
        CPAN:      2.76  Not up to date
        Reini Urban (RURBAN)
        reini.urban@gmail.com


Im ersten Moment dachte ich also, dass die Installation im Container mit der environment variable funktioniert hat.
Dann habe ich aber das selbe Kommando in meinem ursprünglichen Container (also ohne die envrionment variable) abgesetzt und bekam das identische Ergebnis.

Also entweder ist GD schon im Standard-Container enthalten oder ich prüfe mit dem Kommando nicht nur auf die Version, sondern installiere GD damit.

Könnte mir jemand helfen, hier Licht ins Dunkel zu bringen? Sorry, ich bin diesbezüglich (leider noch) Anfänger.....

EDIT:
habe gerade ein "cpan -l | grep GD" probiert und dies als Ergebnis bekommen:
GD      2.71
GD::Group       1
GD::Image       2.71
GD::Polygon     2.71
GD::Polyline    0.2
GD::Simple      undef


Also scheint tatsächlich GD bereits im Standard dabei zu sein, bis auf GD::Simple (wenn ich das undef richtig interpretiere).
Stimmt meine Vermutung?

Lässt sich das GD denn mit der enviroment variable updaten (auf 2.76) oder passiert dabei nichts, weil GD schon installiert ist?

Danke vorab und vielel Grüße
Dirk

Wernieman

undef heist nur, das er zum installierten kein Versionsnummer hat ... jedenfalls interpretier ich es so.

Wie Du per cpan updates .... mir nicht bekannt. Versuche aus "historischen Gründen" cpan zu vermeiden ...
- 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

Superposchi

Hallo,

ich bräuchte mal Hilfe beim Update meines Fhem-Dockers.
Und zwar versuche ich vergebens npm und nodejs auf einen aktuellen Stand zu bringen.

Alles was ich bisher dazu gelesen habe hat mich mehr verwirrt als geholfen.
Dazu kommt, dass der Docker auf einem QNAP-NAS läuft und nur über dieses kleine Terminal-Fenster Einzelbefehle annimmt.

Otto123


Ich weiß, das reicht Dir nicht, aber mehr Info ergibt mehr Info :)
hast Du docker compose oder per docker "pur" ?

Docker compose ist recht einfach:
docker-compose.yml die Zeile image: fhem/fhem ändern in image: ghcr.io/fhem/fhem/fhem-docker:bullseye
docker-compose up -d
fertig.

docker pur etwas mehr :
docker stop ...
docker rm ...
docker pull ghcr.io/fhem/fhem/fhem-docker:bullseye
In Deiner docker Start Zeile den Image Namen austauschen z.B. von fhem/fhem:latest nach ghcr.io/fhem/fhem/fhem-docker:bullseye
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

Superposchi

#1499
docker Container "zerstören"
quelle für image ändern
neues Image ziehen ghcr.io/fhem/fhem/fhem-docker:bullseye
container starten
fertig


Es muss doch eine andere Möglichkeit geben als diese.
Dieses Prozedere habe ich in den letzten beiden Jahren aus verschiedenen Gründen schon mehrfach durch exerziert.

Mein Problem ist doch eigentlich nur, dass ich die beiden Devices "Fhem Installer Status" und "Node.js Package Update Status" nicht aktualisiert bekomme. Wofür gibt es diese Dinger wenn sie nicht funktionieren. Oder funktionieren Sie nur wegen dem NAS nicht?

Wenn ich dir mehr Informationen geben könnte, würde ich das gerne tun, aber beispielsweise sagt mir Docker compose und Docker pur rein gar nichts. Ich habe zwar in HTML und anderen Programmiermöglichkeiten Grunderfahrungen aber bin trotzdem nur ein einfacher Anwender ohne tiefergehende Kenntnisse.
Soll heißen: Ich wüsste weder den Unterschied, noch wie ich diesen herausfinden kann und schon gar nicht wie ich ggf. die genannte Datei finden sollte. Besonders wichtig, dass ich immer wieder nicht verstehe wie bzw. wo ein Befehl gerade eingegeben werden muss.

Wenn du spezielle Informationen brauchst versuche ich gerne diese beizubringen, aber ich brauche eine Info was genau und am besten wo genau ich es finde.