Page 1 of 1

Permission-Problem mit RevPiPyLoad

Posted: 04 Nov 2020, 11:15
by acolomb
Hallo!

Ich habe ein an sich funktionierendes Skript, was nicht nur per RevPiModIO2 die Hardware steuert, sondern zusätzlich noch über /dev/ttyRS485 kommuniziert. Wenn ich dieses von der Konsole aus mit dem Benutzer "pi" starte, klappt der Zugriff. Entsprechende Rechte sind gesetzt:

Code: Select all

pi@RevPi40606:~/src/bsp $ ls -l /dev/ttyRS485 /dev/ttyUSB0
lrwxrwxrwx 1 root root         7 Nov  3  2016 /dev/ttyRS485 -> ttyUSB0
crw-rw---- 1 root dialout 188, 0 Nov  4 10:37 /dev/ttyUSB0
pi@RevPi40606:~/src/bsp $ grep dialout /etc/group
dialout:x:20:pi
pi@RevPi40606:~/src/bsp $ 
Jetzt starte ich dasselbe Skript über RevPiPyLoad, liegt unterhalb von /var/lib/revpipyload/. Sämtliche Python-Abhängigkeiten funktionieren auch, lediglich der Zugriff auf RS485 wird verweigert:

Code: Select all

[Errno 13] could not open port /dev/ttyRS485: [Errno 13] Permission denied: '/dev/ttyRS485'
Das kommt aus dem Modul "serial" der Python-Standardbibliothek. Das Skript läuft unter dem Interpreter python3.5, der auch offenbar als User "pi" ausgeführt wird (gemäß Standardkonfiguration plcuid=1000).

Woher kommt der Unterschied zwischen Konsolenstart und RevPiPyLoad bezüglich der Zugriffsrechte auf RS485? Wo könnte ich weiter nach Hinweisen suchen?

Herzlichen Dank im Voraus.
André

Re: Permission-Problem mit RevPiPyLoad

Posted: 04 Nov 2020, 12:20
by RevPiModIO
Moni André!

Das ist leider ein kleines Problem in RevPiPyLoad, welches du da gefunden hast!

Ursache: RevPiPyLoad startet den Prozess mit uid=1000 und gid=1000 aber keinen weiteren Gruppen! Dementsprechend, gehört die ID von dialout nicht zu dem Prozess und er hat keinen Zugriff.

Den Fehler muss ich unbedingt beseitigen!!!

Als Workaround könntest du vorerst vielleicht den Parameter "plcgid" in revpipyload.conf auf die ID von dialout (in deinem Beispiel die 20) setzen und einmal testen? Würde mich interessieren!

Vielen Dank!
Sven

Re: Permission-Problem mit RevPiPyLoad

Posted: 04 Nov 2020, 17:57
by acolomb
Hallo Sven!

Vielen Dank für die schnelle Antwort. Gut zu wissen, dass es eine systematische Ursache gibt :-)

Tatsächlich funktioniert der Zugriff mit dem entsprechenden Eintrag:

Code: Select all

plcgid = 20
Ein Glück, dass sonst nichts mit entsprechenden Rechten über andere Gruppen nötig ist, da ich ja nur eine setzen kann.

Für einen ordentlichen Fix in in RevPiPyLoad wäre ich jedenfalls sehr dankbar! Wann würde der voraussichtlich in die revpi-Raspbian-Paketquellen aufgenommen?

Schöne Grüße
André

Re: Permission-Problem mit RevPiPyLoad

Posted: 04 Nov 2020, 22:16
by RevPiModIO
Moin André!

Das Update ist quasi schon fertig :D !

Magst du es evtl. mal testen?

Du müsstest es einmal per "Hand" installieren, das schadet deinem System aber nicht und wenn die nächste Version in den Repositories ist, wird das Update ganz normal weiter laufen!

Am einfachsten direkt vom Pi auf der CLI:

Code: Select all

wget http://revpimodio.org/dnl/revpipyload_0.9.2d-1_all.deb
sudo dpkg -i revpipyload_0.9.2d-1_all.deb

Wäre cool, wenn du die gid in der revpipyload.conf wieder auf 1000 stellst und mal schaust, ob dein Programm dann funktioniert. Durch das Update werden jetzt alle "weiteren Gruppen" des Benutzers mit an den python3 Prozess übergeben und er sollte alle Gruppenberechtigungen haben!

Vielen Dank!

Sven

Re: Permission-Problem mit RevPiPyLoad

Posted: 05 Nov 2020, 11:32
by acolomb
Hallo Sven,

habe das Update installiert und die plcgid zurück auf 1000 gestellt, dann revpipyload.service neu gestartet.

Die Anwendung läuft jetzt tadellos mit Zugriff auf RS485. Herzlichen Dank für die schnelle Abhilfe!

Gruß
André