Je vais redemarrer de zero pour confirmer que j’ai bien les privileges , car j’ai tellement supprimer et remis de commandes, que je prefere reéssayer.
Mais je suis pratiquement sûr qu’a l’origine, j’ai pris la commande que tu m’as validé et donc pas de connexion du Node serial
voila la commande :
crw-rw---- 1 root dialout 188, 0 Feb 20 18:13 /dev/ttyUSB0
lrwxrwxrwx 1 root root 7 Feb 20 18:13 /dev/tty-usb-arduino-nano -> ttyUSB0
ça ne fonctionne pas
mais quand je donne les droits à « autre » pour le port USB0, avec cette commande :
pi@rasp3b:~ $ sudo chmod a+rw /dev/ttyUSB0
le node serial se connecte.
j’ai 2 ecrans sur mon PC et j’ai vu que dès que j’ai validé la commande chmod
le node serial s’est connecté immediatement et renvoie son message pour dire que le RFLINK est pret
donc pour moi --privileged \, ne donne pas tous les droits
et comme je t’ai dis quand on debranche le Rflink, les droits du port USB0 se réinitialisent.
@Psoy je viens de trouver ça (peut-être toi aussi) : Docker - a way to give access to a host USB or serial device? - Stack Overflow
Il faut descendre jusqu’à The Safe and Proper way of accessing tty devices without *--privileged* mode
En lisant le reste ça me semble pas mal mais je n’ai rien pour tester chez moi, à voir ce que ça donne sur ton host.
En gros, à chaque fois que tu replugges ton rflink, un script se lance pour le rattacher au bon endroit sur ton host.
Bonsoir @mutmut
Je nai pas vu, ce que tu as trouvé, j’ai travaillé avec Gemini pour comprendre pourquoi le node serial sur Node red ne se connectait pas au port USB, reponse « acces interdit », donc j’ai rechercher les droits des ports, (tout ce que j’explique plus haut).
J’ai lu ce que tu m’as envoyé, mais je pense entre un peu leger pour
modifier le docker run, dont il parle. En plus, je ne sais pas s’il faut modifier le fichier /etc/udev/rules.d/99-docker-tty.rules, qui existe deja dans Gladys ou bien faut-il l’adapter ou en créer un nouveau?
Effectivement ca parait etre une solution. Si tu maitrises le sujet, je veux bien que tu me fasses une trame pour m’aider à tester ça, si tu veux!
Mais d’abord il faudrait deja, que quand on ouvre Node-Red par Gladys, que les acces du port USB0 soit donner comme je l’ai mentionné.
Effectivement je ne tapais pas sudo devant docker run .
Donc j’ai retapé la commande docker run avec sudo devant, et j’ai refait trois fois la manip pour etre sûr, mais meme avec sudo les droits du port USB0 ne changent pas et reste tel quel
C’est normal, les droits du port USB0 sont sensés rester comme ça.
Les droits ici montre que l’utilisateur « root » est propriétaire de ce port USB, hors si tu as bien lancé ton container en tant que root, tu es censé du coup être propriétaire du port USB
Maintenant, là toi tu as juste lancé le container Gladys, et le container Node-RED a été lancé par Gladys. Peut-être que le container Node-RED n’est pas lancé en tant que root.
Est-ce que tu peux vérifier quel est l’utilisateur qui a lancé le container Gladys, et comparer avec l’utilisateur qui a lancé le container Node-RED ?
(Je te laisse t’aider de Google/IA pour trouver les bonnes commandes pour faire ça )
De ce que je viens de tester, toutes les commandes se font sur le host, pas dans le docker gladys.
D’abord il faut que ton docker Gladys et Node-red soit en route.
Ensuite pour voir si ça focntionne tu peux tester : docker ps -qf name=node-red
et ça doit te renvoyer un numéro/id (celui de ton docker node-red).
Si ce n’est pas bon, on ne va pas continuer et tu peux regarder si les docker sont en route avec docker ps
Donc sur le host, tu peux créer (avec ton éditeur de fichier préféré) : sudo nano /etc/udev/rules.d/99-docker-tty.rules
puis tu copies/colles :
Si c’est nano, tu fais ctrl+X et Y (ou O) et Enter pour sauvegarder et quitter.
Ensuite pour appliquer les rules :
sudo udevadm control --reload
Enfin il faut créer le script qui va monter et démonter automatiquement le device sur le port usb : sudo nano /usr/local/bin/docker_tty.sh
et tu colles :
#!/usr/bin/env bash
echo "Usb event: $1 $2 $3 $4" >> /tmp/docker_tty.log
if [ ! -z "$(docker ps -qf name=node-red)" ]
then
if [ "$1" == "added" ]
then
docker exec -u 0 env_dev mknod $2 c $3 $4
docker exec -u 0 env_dev chmod -R 777 $2
echo "Adding $2 to docker" >> /tmp/docker_tty.log
else
docker exec -u 0 env_dev rm $2
echo "Removing $2 from docker" >> /tmp/docker_tty.log
fi
fi
On met les droits d’exécution à ce script : sudo chmod +x /usr/local/bin/docker_tty.sh
Et là tu peux regarder ce qu’il se passe en branchant ton device usb (notamment dans /tmp/docker_tty.log).
Si rien n’est bon, il y une commande à passer mais je ne sais pas exactement ce qu’elle fait (j’ai mes limites ): docker run --device-cgroup-rule='c 188:* rmw' -itd --name my_container ubuntu
Et c’est ce que mon lien indique de faire en premier. Je pense que ça lance une ubuntu avec un container qui se nommera my_container et on lui passe un argument. Par contre je ne sais pas si il faut lancer cette commande sur le docker gladys ou sur le docker node-red, et sachant que le docker node-red sera lancé, je ne sais pas si ça fonctionne …
Bref, ça peut coincer à cet endroit.
Dis-moi en tout cas si les premiers tests sont concluants.
EDIT : après je serais tenté de te dire de ne pas passer par Gladys pour créer/lancer le docker node-red mais de t’en créer un à part et là tu pourras passer la commande bizarre dans ce docker.
Bonsoir @pierre-gilles@mutmut
Vous pouvez me confirmer que le nom de l’image du container de gladys- node-red, c’est bien nodered/node-red:3.1?
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
702448e6dba6 nodered/node-red:3.1 "./entrypoint.sh" 5 minutes ago Up 5 minutes (healthy) 0.0.0.0:1881->1880/tcp, :::1881->1880/tcp gladys-node-red
e000d717481c gladysassistant/gladys:node-red-usb-ports "docker-entrypoint.s…" 7 minutes ago Up 7 minutes gladys
c12621b8b474 containrrr/watchtower "/watchtower --clean…" 4 weeks ago Up 9 minutes (healthy) 8080/tcp watchtower
d’abord il faut que j’initialise les droits (avec CHMOD) car au lancement il ne sont pas bons
Je viens de tester plusieurs fois debranché et rebranché le rflink mais ça ne fonctionne pas,il ne se reconnecte pas tout seul.
Je te mets les logs de /tmp/docker_tty.log
pi@rasp3b:/tmp $ sudo nano docker_tty.log
GNU nano 5.4 docker_tty.log
Usb event: added /dev/tty14 4 14
Usb event: added /dev/tty15 4 15
Usb event: added /dev/tty16 4 16
Usb event: added /dev/tty17 4 17
Usb event: added /dev/tty18 4 18
Usb event: added /dev/tty20 4 20
Usb event: added /dev/tty2 4 2
Usb event: added /dev/tty22 4 22
Usb event: added /dev/tty24 4 24
Usb event: added /dev/tty19 4 19
Usb event: added /dev/tty21 4 21
Usb event: added /dev/tty23 4 23
Usb event: added /dev/tty25 4 25
Usb event: added /dev/tty26 4 26
Usb event: added /dev/tty27 4 27
Usb event: added /dev/tty29 4 29
Usb event: added /dev/tty28 4 28
Usb event: added /dev/tty3 4 3
Usb event: added /dev/tty30 4 30
Usb event: added /dev/tty31 4 31
Usb event: added /dev/tty32 4 32
Usb event: added /dev/tty33 4 33
Usb event: added /dev/tty34 4 34
Usb event: added /dev/tty35 4 35
Usb event: added /dev/tty36 4 36
Usb event: added /dev/tty37 4 37
Usb event: added /dev/tty38 4 38
Usb event: added /dev/tty39 4 39
Usb event: added /dev/tty4 4 4
Usb event: added /dev/tty40 4 40
Usb event: added /dev/tty41 4 41
Usb event: added /dev/tty42 4 42
Usb event: added /dev/tty43 4 43
Usb event: added /dev/tty44 4 44
Usb event: added /dev/tty45 4 45
Usb event: added /dev/tty46 4 46
Usb event: added /dev/tty47 4 47
Usb event: added /dev/tty48 4 48
Usb event: added /dev/tty49 4 49
Usb event: added /dev/tty5 4 5
Usb event: added /dev/tty50 4 50
Usb event: added /dev/tty51 4 51
Usb event: added /dev/tty52 4 52
Usb event: added /dev/tty53 4 53
Usb event: added /dev/tty54 4 54
Usb event: added /dev/tty55 4 55
Usb event: added /dev/tty56 4 56
Usb event: added /dev/tty57 4 57
Usb event: added /dev/tty58 4 58
Usb event: added /dev/tty59 4 59
Usb event: added /dev/tty6 4 6
Usb event: added /dev/tty60 4 60
Usb event: added /dev/tty61 4 61
Usb event: added /dev/tty62 4 62
Usb event: added /dev/tty63 4 63
Usb event: added /dev/tty7 4 7
Je ne vois pas de port ttyUSB, est ce que ça te parle?
j’ai debranché plusieurs fois mon Rflink.
j’ai tenter de passer cette commande --device-cgroup-rule='c 188:* rmw'dans le docker run, mais ça ne donne toujours pas les droits au ports usb.
Puis j’ai integré cette commande --device=/dev/ttyUSB0 \ au docker run et là, ça donne les droits au portUSB et le node serial se connecte bien.
Par contre toujours pareil quand on debranche le rflink le port USB perds ces droits et revient en crw-rw---- 1 root dialout 188, 0 Feb 21 22:52 /dev/ttyUSB0 au lieu de crw-rw-rw- 1 root dialout 188, 0 Feb 21 22:52 /dev/ttyUSB0