Como posso executar um comando em um contêiner do sistema LXC sempre que um dispositivo USB específico estiver conectado? Normalmente, eu usaria o udev (cf. 1 , 2 , 3 , 4 , 5 ), mas pelo que sei, o udev não pode ser usado dentro de um container.
Mais especificamente, tenho um contêiner do sistema LXC privilegiado executando o Ubuntu 14.04 (Trusty) em um sistema host Ubuntu 16.04 (Xenial). O dispositivo USB em questão (um cabo Xilinx Platform USB II) requer o carregamento de um firmware (por meio de fxload).
No arquivo de configuração do container, eu tenho
lxc.cgroup.devices.allow = c 189:* rwm
lxc.mount.entry = /dev/bus/usb dev/bus/usb none bind,optional,create=dir
Isso permite que eu carregue o firmware manualmente de dentro do contêiner e, subsequentemente, use o dispositivo. Eu gostaria de ter o firmware carregado automaticamente quando o dispositivo está conectado.
Como solução alternativa, atualmente uso o udev no host para carregar o firmware automaticamente com a seguinte regra:
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0013", RUN+="/sbin/fxload -v -t fx2lp -I /opt/Xilinx/firmware/xusb_xp2.hex -D $tempnode"
No entanto, gostaria de conseguir isso de dentro do contêiner; idealmente de uma forma que não requer qualquer modificação no sistema host (exceto, é claro, a configuração do container).