Come posso eseguire un comando in un contenitore di sistema LXC ogni volta che viene collegato un dispositivo USB specifico? Di solito, userei udev (cfr. 1 , 2 , 3 , 4 , 5 ), ma per quanto ne so, udev non può essere usato all'interno di un contenitore.
Più specificamente, ho un container di sistema LXC privilegiato che esegue Ubuntu 14.04 (Trusty) su un sistema host Ubuntu 16.04 (Xenial). Il dispositivo USB in questione (un cavo di piattaforma Xilinx USB II) richiede il caricamento di un firmware (tramite fxload).
Nel file di configurazione per il contenitore, ho
lxc.cgroup.devices.allow = c 189:* rwm
lxc.mount.entry = /dev/bus/usb dev/bus/usb none bind,optional,create=dir
Ciò mi consente di caricare manualmente il firmware dall'interno del contenitore e successivamente di utilizzare il dispositivo. Vorrei che il firmware fosse caricato automaticamente quando il dispositivo è collegato.
Come soluzione alternativa, attualmente uso udev sull'host per caricare automaticamente il firmware con la seguente regola:
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"
Tuttavia, vorrei raggiungere questo obiettivo dal contenitore; idealmente in un modo che non richiede alcuna modifica al sistema host (tranne, ovviamente, la configurazione del contenitore).