meta data for this page
This is an old revision of the document!
Google Coral USB in LXC
to Frigate container
Google Coral
After power-up Google Coral is in boot mode:
Bus 002 Device 005: ID 1a6e:089a Global Unichip Corp.
It needs software to run. So host or LXC must upload firmware. After successfull init Google Coral changes its USB id to:
Bus 002 Device 006: ID 18d1:9302 Google Inc.
Frigate contains Coral firmware and if access from LXC to USB dev is given it can init Google Coral upon startup.
docker-compose
- docker-compose.yml
devices: - /dev/bus/usb:/dev/bus/usb # Passes the USB Coral, needs to be modified for other versions - /dev/dri/renderD128:/dev/dri/renderD128 # For intel hwaccel, needs to be updated for your hardware
LXC config
- /etc/pve/lxc/307.conf
features: nesting=1 unprivileged: 1 lxc.cgroup2.devices.allow: c 226:128 rwm # iGPU lxc.cgroup2.devices.allow: c 189:* rwm # USB Coral TPU lxc.mount.entry: /dev/bus/usb/002 dev/bus/usb/002 none bind,optional,create=dir,mode=664 # USB Coral TPU lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file 0,0 # iGPU (u=root g=render) lxc.hook.pre-start: sh -c "chown 100000:111000 /dev/dri/renderD128" # create a host gid for lxc_gpu_shares lxc.hook.pre-start: sh -c "chown -R 100000:111002 /dev/bus/usb/002" # create a host gid for lxc_usb2_shares
In LXC shell:
groupadd -g 11000 lxc_gpu_shares groupadd -g 11002 lxc_usb2_shares usermod -aG lxc_gpu_shares,lxc_usb2_shares root
Issue:
lxc.hook
changes permission only once just before LXC starts. LXC must be restarted to triggerlxc.hook
Drawback:- Any further host USB reconnects / udevadm reload cause USB permisions change to default.
- any reinit of Coral device cause of the same device to appear on the same bus with new device ID, and new default permissions.
Fix for issue:
- Remove LXC config lines:
lxc.hook.pre-start:
- use udev to always set correct permissions:
On Proxmox host:
- /etc/udev/rules.d/71-coral.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a6e", ATTRS{idProduct}=="089a", MODE="0664", OWNER="100000", GROUP="111002" SUBSYSTEMS=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="9302", MODE="0664", OWNER="100000", GROUP="111002"
- /etc/udev/rules.d/99-igpu.rules
KERNEL=="renderD128", MODE="0664", OWNER="100000", GROUP="111000"
udevadm control --reload-rules && udevadm trigger