USB-переход для контейнеров LXC

USB-переход для контейнеров LXC

ПРОБЛЕМА:

Поэтому я пытаюсь заставить USB-устройство (Primesense — OEM-код Kinect) передавать данные в контейнер LXC, чтобы я мог заниматься разработкой, не беспокоясь о загрязнении моей стабильной системы экспериментальными библиотеками.

Думаю, я сделал все необходимое, но приложения, работающие внутри контейнера, не могут получить доступ к устройству.

Я использую хост Ubuntu 12.04 x64 с LXC 1.0.0, контейнер создан из шаблона 12.04. (Я активен на askubuntu, но считаю, что вопрос больше подходит сюда)

Вопрос:

Как передать данные через USB в (привилегированный) контейнер LXC.

Предпринятые действия:

Мои правила udev для хоста и правила udev для контейнера одинаковы.

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

На хосте узел устройства виден как:

$ ls -l /dev/bus/usb/001/015
crw-rw-rw- 1 root video 189, 14 Jun 18 15:27 /dev/bus/usb/001/015

В контейнере узел устройства отображается как:

$ ls -l /dev/bus/usb/001/015 
crw-rw-rw- 1 root video 189, 14 Jun 18 22:07 /dev/bus/usb/001/015

Кроме того, я прошел

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

Чтобы добавить USB-устройства в белый список для lxc

К сожалению, когда я пытаюсь запустить приложение на Host, устройство распознается и работает так, как и ожидалось. Запуск того же приложения в контейнере (с теми же соответствующими библиотеками) приводит к тому, что приложение не может найти устройство, даже когда я явно передаю URI.

Я пытаюсь сузить круг проблем до ошибки в библиотеке (которую я мог бы исправить, но пока не хочу ввязываться в это) или чего-то, чего я не понимаю в разрешениях для контейнеров LXC.

решение1

Добавление правила белого списка через lxc-cgroupне является постоянным, при тестировании моих контейнеров LXC я сбросил контейнер в какой-то момент и не добавлял правило повторно. Узел устройства создается в контейнере правильно даже без lxcбелого списка ( c *:* mэто правило lxc по умолчанию), но контейнер lxc получает отказ в доступе к устройству, когда он пытается его использовать, без правильных разрешений cgroup он не работает

Обходной путь — добавить

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

к соответствующим lxc.confвашей системе.

Связанный контент