Paso USB para contenedores LXC

Paso USB para contenedores LXC

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-cgroupno 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 lxcla lista blanca ( c *:* mes 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.confpara su sistema.

información relacionada