exec kann kein python ausführen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

FrankH1
Beiträge: 35
Registriert: 22. Sep 2020 17:03
Answers: 0

exec kann kein python ausführen

Beitrag von FrankH1 »

Hallo,
ich habe für ein bestehendes System OH 4.3.2 frisch installiert, Bindings installiert, die configuration geladen. Habe ein Problem mit dem Aufruf eines Python scripts, welches einen Temperatursensor über I2C ausliest.
Der script läuft in der Konsole:

Code: Alles auswählen

openhabian@openhabian:~ $ python meinbme280.py
{"BME280":{"Temperature": 20.24 ,"Pressure": 1000.5851855131036 ,"Humidity": 50.706432961952224 }}
In exec.whitelist habe ich den Befehlsaufruf

Code: Alles auswählen

/usr/bin/python /home/openhabian/meinbme280.py
Der Code des Things in Openhab ist

Code: Alles auswählen

UID: exec:command:InnenTempauslese
label: Innen Temperatur Auslese
thingTypeUID: exec:command
configuration:
  transform:
    - REGEX((.*))
  interval: 900
  autorun: false
  command: /usr/bin/python /home/openhabian/meinbme280.py
  timeout: 15
channels:
  - id: output
    channelTypeUID: exec:output
    label: Rückgabewert
    description: Rückgabewert der Befehlsausführung
    configuration: {}
  ...
    configuration: {}
Die Ausführung bringt einen Fehler:

Code: Alles auswählen

2025-01-26 12:43:20.481 [WARN ] [ofiles.JSonPathTransformationProfile] - Could not transform state '/usr/bin/python: can't open file '/home/openhabian/meinbme280.py': [Errno 13] Permission denied
/usr/bin/python: can't open file '/home/openhabian/meinbme280.py': [Errno 13] Permission denied' with function '$.BME280.Humidity' and format '%s'
2025-01-26 12:43:20.483 [WARN ] [ofiles.JSonPathTransformationProfile] - Could not transform state '/usr/bin/python: can't open file '/home/openhabian/meinbme280.py': [Errno 13] Permission denied
/usr/bin/python: can't open file '/home/openhabian/meinbme280.py': [Errno 13] Permission denied' with function '$.BME280.Temperature' and format '%s'
Habe das ganze auf meinem vorherigen System am laufen und bin jetzt wieder mal ratlos.....
Was kann die Ursache sein?
OH 4.3.2 + Deconz auf Raspi 4B mit Conbee-II Stick,
Shellys, 8266 basierende Anwendungen (Tasmota),
Zigbee Sensoren und Lampen

nw378
Beiträge: 295
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: exec kann kein python ausführen

Beitrag von nw378 »

Permission denied
Versuch's mal mit:

Code: Alles auswählen

command: sudo /usr/bin/python /home/openhabian/meinbme280.py
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

FrankH1
Beiträge: 35
Registriert: 22. Sep 2020 17:03
Answers: 0

Re: exec kann kein python ausführen

Beitrag von FrankH1 »

Sudo braucht dann wohl ein passwort....

Code: Alles auswählen

[Errno 13] Permission denied to sudo: a terminal is required to read the password; either use the -S option to read class="afterFrom marked"> from standard input or configure an askpass helper
OH 4.3.2 + Deconz auf Raspi 4B mit Conbee-II Stick,
Shellys, 8266 basierende Anwendungen (Tasmota),
Zigbee Sensoren und Lampen

nw378
Beiträge: 295
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: exec kann kein python ausführen

Beitrag von nw378 »

Versuch das mal so zu umgangen:

Auf der SSH Konsole

Code: Alles auswählen

sudo visudo -f /etc/sudoers.d/010_pi-nopasswd
und dort ergänzen:

Code: Alles auswählen

openhab ALL=(ALL) NOPASSWD: /usr/bin/python
alternativ:

Code: Alles auswählen

sudo -u openhab /bin/bash
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

FrankH1
Beiträge: 35
Registriert: 22. Sep 2020 17:03
Answers: 0

Re: exec kann kein python ausführen

Beitrag von FrankH1 »

Hmm,
muss ich morgen mal probieren , bin erstmal auf mein funktionierendes System zurück.
Ist mir aber irgendwie unklar - es brauchte nie das sudo und der script geht ja auch in der konsole ohne sudo.
Kann es vielleicht irgendeine Berechtigung für Openhab sein die fehlt?? Oder hat sich was in Python geändert?
OH 4.3.2 + Deconz auf Raspi 4B mit Conbee-II Stick,
Shellys, 8266 basierende Anwendungen (Tasmota),
Zigbee Sensoren und Lampen

Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: exec kann kein python ausführen

Beitrag von Quautiputzli »

Hi,
also ich habe ja einige scripte laufen, die über exec ausgeführt werden. Aber bei mir sind die alle im Ordner:
"/etc/openhab/scripts" bzw.
"/srv/openhab-conf/scripts" was wohl derselbe Ordner ist.

Dieser Ordner gehört doch für solche Sachen. Vielleicht klappt es dann auch mit den Rechten.
Servus

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: exec kann kein python ausführen

Beitrag von udo1toni »

Stopp!
Bzw.: Das was Quautiputzli schon andeutet...

Linux ist kein Selbstbedienungsladen, man muss schon die Erlaubnis haben, an ein Regal zu gehen.
In diesem Fall befindet sich Dein Script im privaten Ordner des Users openhabian.
openHAB läuft allerdings unter dem User openhab. Das ist also so, als ob Du als Kunde in die Privatwohnung des Ladeninhabers gehst, um Dir eine Packung Mehl zu nehmen :)

Alle Scripte gehören entweder in einen der üblichen Ordner für Systemprogramme (/usr/bin/, /usr/share/bin/...) oder in einen Ordner, der dem User openhab gehört, sinnvoll wäre hier der home-Ordner des Users openhab, welcher (gaaanz zufällig... ;) ) dem Pfad $OPENHAB_USERDATA/ (bzw. /var/lib/openhab/) entspricht.
Am besten legst Du dort ein Unterverzeichnis für Deine Scripte an, z.B. userscripts oder etwas ähnliches, die Hauptsache ist dabei, dass der Pfad noch nicht existiert und somit von openHAB bei Updates/Upgrades garantiert nicht überschrieben wird.
Anschließend kannst Du dann den neuen kompletten Pfad angeben, um das Script als User openhab erfolgreich ausführen zu können - oder wahlweise auch relativ zu ~/ (das ist identisch mit $OPENHAB_USERDATA/).
Und natürlich sollte das Script als Python Script markiert und ausführbar mindestens für den owner (openhab, nicht openhabian) und gewöhnlich auch für Group Member und alle anderen sein, Rechte also 755, Besitz openhab:openhab)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

FrankH1
Beiträge: 35
Registriert: 22. Sep 2020 17:03
Answers: 0

Re: exec kann kein python ausführen

Beitrag von FrankH1 »

So einen Stockfehler hatte ich vermutet....
Verzeichnis erstellt, files reinkopiert, chown auf openhab; things und whitelist geändert und jetzt läuft es!
Vielen Dank!!
Wenn ich so die Openhab Foren durchstöbere nach dem ssh Zugang finde ich bei einigen Beiträgen openhab und bei anderen openhabian als user - als Laie freut man sich dann wenn man drin ist und ein Home-Verzeichnis findet was zu dem beschriebenen Verhalten führt :cry:
Mir ist trotzdem nicht klar wie es bei mir bisher (immerhin schon einige Jahre und Versionen seit OH 2.x) funktioniert hat, aber das ist jetzt auch müßig
OH 4.3.2 + Deconz auf Raspi 4B mit Conbee-II Stick,
Shellys, 8266 basierende Anwendungen (Tasmota),
Zigbee Sensoren und Lampen

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: exec kann kein python ausführen

Beitrag von udo1toni »

ssh ist das nächste weite Feld (komplett unabhängig vom Script-Problem, selbst falls das Script was mit ssh zu tun hätte).

Aber im Grunde sind die Basics wichtig, wenn man die komplett verinnerlicht, ergeben sich daraus fast automatisch die notwendigen Schritte.
  1. Das Betriebssystem hat heutzutage einen User, mit dem man sich anmelden kann/muss.
  2. openHAB muss (unabhängig vom verwendeten Betriebssystem) ohne Anmeldung am System laufen.
    Das bedeutet, dass es als Dienst laufen muss (was wiederum fast gleichbedeutend damit ist, dass es unter einem besonderen User läuft, der, wenn es gut läuft, extra dafür definiert wurde - openhab).
Daraus folgt, dass es zwei unterschiedliche User gibt, und man muss sich bei jeder Aktion auf Betriebssystemebene überlegen, welcher User betroffen ist, und was das für die Aktion bedeutet.

Wenn es um User geht, geht es sehr häufig auch um Rechte.
Es gibt Situationen, da braucht man erweiterte Rechte, aber man kann davon ausgehen, wenn ein Befehl an einer Stelle ohne root-Rechte funktioniert (sudo), dann funktioniert er grundsätzlich immer und überall ohne sudo, man muss allenfalls die Rahmenbedingungen anpassen (z.B. den aufrufenden User einer bestimmten Gruppe zuweisen, bestimmte Flags setzen, bestimmte Dateien an einen anderen Ort speichern usw.)

Bei ssh kommen an vielen Stellen Rechte ins Spiel, teilweise ist das Verhalten überraschend, manchmal kommt man erst drauf, wenn man genauer in die Logs schaut :)
Beispiel: ich habe im home-Verzeichnis von openhab einen Ordner .ssh/ angelegt und in diesem Ordner eine Datei authorized_keys mit passendem Inhalt (ein Public Key). Der Ordner .ssh/ muss dem korrekten User gehören und er sollte die Berechtigung 700 haben, so dass nur der User selbst den Ordner betreten und dort Dateien nutzen darf. Die Dateien im Ordner sollten ebenfalls dem User gehören und restriktive Rechte eingestellt haben (600).
Nur hat das nicht gereicht, um sich erfolgreich als User openhab per ssh anzumelden.
Erst die exakte Fehlermeldung (die nur im Log stand) verriet, wo das Problem lag, das waren die allgemeinen Schreibrechte auf das übergeordnete Verzeichnis (also das home-Verzeichnis selbst). Das war von openHABian geöffnet worden, weil das home-Verzeichnis des Users openhab identisch mit dem Verzeichnis $OPENHAB_USERDATA/ ist. Allerdings gibt es überhaupt keinen Grund, warum irgendein User Schreibrechte auf dieses Verzeichnis haben sollte (außer natürlich, wenn man Dateien verändern möchte, aber dafür kann man ja sudo verwenden).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

FrankH1
Beiträge: 35
Registriert: 22. Sep 2020 17:03
Answers: 0

Re: exec kann kein python ausführen

Beitrag von FrankH1 »

Huh - die Basics haben mir echt gefallen (und gefehlt).
Also vereinfacht darf User openhabian das Drumherum und die Bestandteile ( Backup, mqtt etc) meines openhab-smarthomes bestimmen und User openhab den inneren Aufbau - also Things und Rules etc aber auch externe Aktionen wie die Ausführung eines Python-Scripts.
OH 4.3.2 + Deconz auf Raspi 4B mit Conbee-II Stick,
Shellys, 8266 basierende Anwendungen (Tasmota),
Zigbee Sensoren und Lampen

Antworten