Acceda al dispositivo usb desde el contenedor systemd-nspawn

Quiero acceder a un dispositivo USB especial (no a una simple unidad flash) desde el interior del contenedor. Enloop /dev/bus/usb dentro del contenedor, lsusb list los lsusb sin esfuerzo:

 $ lsusb ... Bus 002 Device 002: ID 0a89:0009 ... 

pero mi progtwig no puede interactuar con este dispositivo.

systemd-nspawn maneja los permissions para dispositivos a través de cgroups . Por defecto, a cualquier contenedor se le otorgan permissions solo para dispositivos comunes como /dev/null , /dev/zero , etc., y adicionalmente a cualquier dispositivo que pase directamente al argumento --bind=/dev/vcs como --bind=/dev/vcs . Esto no funcionará con USB porque /dev/bus/usb es un directory.

Para otorgar permiso para el contenedor actualmente en ejecución llamado my_container (supuestamente lo my_container con systemd-nspawn directamente desde la command-line) ejecuta como root:

 $ echo 'c 189:* rwm' > \ /sys/fs/cgroup/devices/machine.slice/machine-my_container/devices.allow 

c 189:* rwm significa permissions de escritura de acceso múltiple para cualquier dispositivo de caracteres con tipo (identificador) 189 y cualquier subtipo. Puede encontrar el tipo y subtipo de dispositivo con el file :

 $ file /dev/bus/usb/002/002 

Este permiso solo durará mientras el contenedor se está ejecutando.

Si está utilizando systemd-nspawn@.service o desea conservar los permissions con él, cree

 /etc/systemd/system/systemd-nspawn@.service.d/override.conf 

o

 /etc/systemd/system/systemd-nspawn@my_container.service.d/override.conf 

(dependiendo de si desea acceder a USB desde cualquier contenedor systemd-nspawn o solo desde my_container correspondientemente) con el siguiente contenido:

 [Service] DeviceAllow=char-usb_device rwm 

usb_device es un alias. Puede encontrar otros /proc/devices .