Passagem USB para contêineres LXC

Passagem USB para contêineres LXC

PROBLEMA:

Então, estou tentando fazer com que um dispositivo USB (primesense - a referência OEM para o Kinect) passe para um contêiner LXC para que eu possa desenvolver sem me preocupar em poluir meu sistema estável com bibliotecas experimentais.

Acho que fiz tudo o que era necessário, mas os aplicativos executados dentro do contêiner não conseguem acessar o dispositivo.

Estou usando o host Ubuntu 12.04 x64 com LXC 1.0.0, o contêiner é criado a partir do modelo 12.04. (Sou ativo no askubuntu, mas acredito que a pergunta cabe mais aqui)

Pergunta:

Como você passa pelo usb para um contêiner LXC (privilegiado).

Ações tomadas:

Minhas regras do udev para o host e as regras do udev para o contêiner são as mesmas

SUBSYSTEM=="usb", ATTR{idProduct}=="0609", ATTR{idVendor}=="1d27",
MODE:="0666", OWNER:="root", GROUP:="video"

No host, o nó do dispositivo é visível 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

No contêiner, o nó do dispositivo é visível 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

Além disso, passei

sudo lxc-cgroup  --n CN1 devices.allow "c 189:* rwm"

Para colocar dispositivos USB na lista de permissões para lxc

Infelizmente, quando tento executar uma aplicação no Host, o dispositivo é reconhecido e funciona conforme o esperado. A execução do mesmo aplicativo no contêiner (com as mesmas bibliotecas relevantes) faz com que o aplicativo não consiga encontrar o dispositivo, mesmo quando eu passo explicitamente o URI.

Estou tentando restringir o problema a um bug de biblioteca (que eu poderia consertar, mas não quero confirmar essa toca do coelho ainda) ou algo que estou faltando nas permissões para contêineres LXC.

Responder1

Adicionar uma regra de lista de permissões lxc-cgroupnão é persistente. Ao testar meus contêineres LXC, redefini o contêiner em algum momento e não adicionei novamente a regra. O nó do dispositivo é criado no contêiner corretamente, mesmo sem a lxclista branca ( c *:* mé uma regra lxc padrão), mas o contêiner lxc tem acesso negado ao dispositivo quando tenta usá-lo, sem as permissões corretas do cgroup ele não funciona

A solução alternativa é adicionar

  lxc.cgroup.devices.allow = c 189:* rwm

para o relevante lxc.confpara o seu sistema.

informação relacionada