ПРОБЛЕМА:
Поэтому я пытаюсь заставить 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
вашей системе.