HomeAssitant, docker rootless och ZigBee dongle

Permalänk
Medlem

HomeAssitant, docker rootless och ZigBee dongle

Hej,

Jag kör Docker "rootless" (av säkerhetsskäl vill jag slippa Docker "rootful") på en rpi och är på väg att sätta upp HomeAssistant. Att starta HA i docker rootless är inga problem. Dock får jag problem när jag försöker få min Docker-HA att prata med ZigBee-stickan. Docker-HA ser stickan och erbjuder sig att konfa upp ZHA med stickan, men får då till svar "Det gick inte att undersöka usb-enheten" (se bilder nedan).

Är detta något som är att vänta pga att jag kör Docker "rootless"? Min google-fu ger mig inga riktiga ledtrådar.

Tack på förhand!

Min docker-compose.yml är inklippt nedan.

version: '3' services: ha: container_name: ha #image: "ghcr.io/home-assistant/home-assistant:stable" image: "ghcr.io/home-assistant/home-assistant:2023.3.3" restart: unless-stopped volumes: - /opt/local/containers/home-assistant/storage:/config - /etc/localtime:/etc/localtime:ro ports: - "8123:8123" environment: - TZ=Europe/Stockholm devices: # Zigbee controller - /dev/serial/by-id/usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20220812150724-if00:/dev/ttyACM0 networks: default:

Visa signatur

stationär 2022: ryzen 7900x@65W, asus strix x670e-f, 32GB, rx6700xt
stationär 2012: i5-3570k@stock, asus p8z77-v le, 16GB, rtx2660s
laptop: ryzen 4800H, 16GB, rtx2060 (Legion 5 15ARH05H)
laptop: i5-2467M, 8GB
nas/server: i5-8400, asus WS C246M PRO/SE, 48GB

Permalänk
Medlem

Bra att du kör rootless! HomeAssistant-dokumentationen har ju (eller hade i alla fall häromveckan) i sin officiella dokumentation bara instruktioner på hur man skulle köra containern som privileged. *rys*
Anledningen till det tror jag är att ingen än så länge har orkat gå igenom vilka enheter och whatnot som HomeAssistant eventuellt vill ha kontakt med, och då är det bara bekvämare att blåsa på med privileged och blunda...
En variant skulle kunna vara att köra applikationen som vill konfigurera ZigBee-stickan med debugger och se vad det är den försöker komma åt när den misslyckas. Om källkoden är tillgänglig kanske läsa i den för att lista ut vad den behöver.
Eller tillåta containern en massa devicer och annat tills det funkar och sedan plocka bort en och en tills du har listat ut vilken som fattades.

Visa signatur

/Joakim

Permalänk
Medlem
Skrivet av d97jro:

Bra att du kör rootless! HomeAssistant-dokumentationen har ju (eller hade i alla fall häromveckan) i sin officiella dokumentation bara instruktioner på hur man skulle köra containern som privileged. *rys*
Anledningen till det tror jag är att ingen än så länge har orkat gå igenom vilka enheter och whatnot som HomeAssistant eventuellt vill ha kontakt med, och då är det bara bekvämare att blåsa på med privileged och blunda...
En variant skulle kunna vara att köra applikationen som vill konfigurera ZigBee-stickan med debugger och se vad det är den försöker komma åt när den misslyckas. Om källkoden är tillgänglig kanske läsa i den för att lista ut vad den behöver.
Eller tillåta containern en massa devicer och annat tills det funkar och sedan plocka bort en och en tills du har listat ut vilken som fattades.

Jo, det däringa "privileged" vill man slippa, likaså vill man köra så lite som root det bara är möjligt.

Docker-HA ser ju devicen, och lyckas lista ut vilken varisort (Sonoff ZBDongle-E, finns på HAs rekommendationslista).

Jag gissar att det är något med filrättigheterna när man importerar en device i rootless. Hittade denna (https://github.com/moby/moby/issues/43019) som verkar beskriva problemet, stämmer rätt bra med mina observationer. Ska testa med "group_add" i compose.yml i morgon alternativt som de beskriver på länken ovan. I värsta fall får jag väl gå "rootful" för verifieringens skull, förmodligen med "user" statement och matchande "group_add" i yaml-filen.

Visa signatur

stationär 2022: ryzen 7900x@65W, asus strix x670e-f, 32GB, rx6700xt
stationär 2012: i5-3570k@stock, asus p8z77-v le, 16GB, rtx2660s
laptop: ryzen 4800H, 16GB, rtx2060 (Legion 5 15ARH05H)
laptop: i5-2467M, 8GB
nas/server: i5-8400, asus WS C246M PRO/SE, 48GB

Permalänk
Medlem

Det verkar absolut som om Docker rootless (eller om det är HA i Docker rootless) inte fixar rättigheterna på /dev-filer på ett "juste" sätt (gruppmappningen mellan docker-instansen och hosten). Lyckades aktivera debug-loggar för ZHA och de komponenter den använder (pillar "configuration.yaml") och den spottade ur sig en massa "Permission Denied" (exempel nedan).

2023-03-14 10:40:23.647 DEBUG (MainThread) [bellows.ezsp] Unsuccessful radio probe of '/dev/ttyACM0' port Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/serial/serialposix.py", line 322, in open self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK) PermissionError: [Errno 13] Permission denied: '/dev/ttyACM0'

För att få någon ordning på detta gjorde jag enligt nedan. Nu så verkar initiering av ZHA och ZigBee-sticka lira.

  1. Stäng ned HA-docker instansen.

  2. Modifiera "/etc/subgid" på pi'en. Tyvärr påverkar detta alla docker-instanser som rullar för denna användare, men jag slipper i allafall köra docker i root-läge.

  3. Starta om dockerd (systemctl --user restart docker.service)

  4. Starta HA-docker (i rootless)

/etc/subgid:

pi:20:1 pi:100000:65536

docker-compose.yml

version: '3' services: ha: container_name: ha #image: "ghcr.io/home-assistant/home-assistant:stable" image: "ghcr.io/home-assistant/home-assistant:2023.3.3" restart: unless-stopped volumes: - /opt/local/containers/home-assistant/storage:/config - /etc/localtime:/etc/localtime:ro ports: - "8123:8123" environment: - TZ=Europe/Stockholm devices: # Zigbee controller - /dev/serial/by-id/usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20220812150724-if00:/dev/ttyACM0 networks: default:

Nästa steg kanske blir att köra med en användare per docker-applikation, t.ex. en unifi-user som kör unifi-controllern, en ha-user som kör home-assistant och så vidare. Men då börjar det kännas lite för osmidigt.

Visa signatur

stationär 2022: ryzen 7900x@65W, asus strix x670e-f, 32GB, rx6700xt
stationär 2012: i5-3570k@stock, asus p8z77-v le, 16GB, rtx2660s
laptop: ryzen 4800H, 16GB, rtx2060 (Legion 5 15ARH05H)
laptop: i5-2467M, 8GB
nas/server: i5-8400, asus WS C246M PRO/SE, 48GB