PROBLEMA:
Así que he estado intentando conseguir que un dispositivo USB (primesense, la referencia OEM para Kinect) pase a un contenedor LXC para poder desarrollar sin preocuparme por contaminar mi sistema estable con bibliotecas experimentales.
Creo que hice todo lo necesario, pero las aplicaciones que se ejecutan dentro del contenedor no pueden acceder al dispositivo.
Estoy usando el host Ubuntu 12.04 x64 con LXC 1.0.0, el contenedor se crea a partir de la plantilla 12.04. (Estoy activo en Askubuntu, pero creo que la pregunta encaja más aquí)
Pregunta:
¿Cómo se pasa a través de USB a un contenedor LXC (privilegiado)?
Acciones tomadas:
Mis reglas udev para el host y las reglas udev para el contenedor son las mismas
SUBSYSTEM=="usb", ATTR{idProduct}=="0609", ATTR{idVendor}=="1d27",
MODE:="0666", OWNER:="root", GROUP:="video"
En el host, el nodo del dispositivo es visible como:
$ ls -l /dev/bus/usb/001/015
crw-rw-rw- 1 root video 189, 14 Jun 18 15:27 /dev/bus/usb/001/015
En el contenedor, el nodo del dispositivo es visible como:
$ ls -l /dev/bus/usb/001/015
crw-rw-rw- 1 root video 189, 14 Jun 18 22:07 /dev/bus/usb/001/015
Además he pasado
sudo lxc-cgroup --n CN1 devices.allow "c 189:* rwm"
Para incluir dispositivos USB en la lista blanca para lxc
Desafortunadamente, cuando intento ejecutar una aplicación en el Host, el dispositivo se reconoce y funciona como se esperaba. Ejecutar la misma aplicación en el contenedor (con las mismas bibliotecas relevantes) hace que la aplicación no encuentre el dispositivo incluso cuando paso explícitamente el URI.
Estoy tratando de reducir el problema a un error de la biblioteca (que podría solucionar pero no quiero cometer esa madriguera todavía) o algo que me falta con los permisos para los contenedores LXC.
Respuesta1
Agregar una regla de lista blanca lxc-cgroup
no es persistente; al probar mis contenedores LXC, restablecí el contenedor en algún momento y no volví a agregar la regla. El nodo del dispositivo se crea correctamente en el contenedor incluso sin lxc
la lista blanca ( c *:* m
es una regla lxc predeterminada), pero al contenedor lxc se le niega el acceso al dispositivo cuando intenta usarlo, sin los permisos correctos de cgroup no funciona
La solución es agregar
lxc.cgroup.devices.allow = c 189:* rwm
al relevante lxc.conf
para su sistema.