Passagem USB para contêineres LXC

3

PROBLEMA:

Estou tentando obter um dispositivo USB (primesense - a referência OEM para o Kinect) para passar 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 é necessário, mas os aplicativos em execução no contêiner não podem acessar o dispositivo.

Estou usando o host Ubuntu 12.04 x64 com o LXC 1.0.0, o contêiner é criado a partir do modelo 12.04. (Eu estou ativo no askubuntu, mas acredito que a questão se encaixa 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 na lista branca dispositivos usb para lxc

Infelizmente, quando tento executar um aplicativo no host, o dispositivo é reconhecido e funciona como esperado. Executar o mesmo aplicativo no contêiner (com as mesmas bibliotecas relevantes) faz com que o aplicativo não consiga encontrar o dispositivo, mesmo quando eu explicitamente passar o URI.

Estou tentando restringir o problema a um bug da biblioteca (que eu poderia consertar, mas não quero comprometer esse buraco ainda) ou algo que estou perdendo com as permissões para os contêineres do LXC.

    
por crasic 19.06.2014 / 01:03

1 resposta

2

A adição de uma regra de lista de desbloqueio através de lxc-cgroup nã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 lxc white-list ( 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 de cgroup corretas não funciona

A solução alternativa é adicionar

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

para o lxc.conf relevante para o seu sistema.

    
por 19.06.2014 / 01:38