문제:
그래서 저는 USB 장치(primesense - Kinect의 OEM 참조)를 LXC 컨테이너로 통과시켜 실험 라이브러리로 안정적인 시스템을 오염시키는 것에 대한 걱정 없이 개발할 수 있도록 노력해 왔습니다.
필요한 모든 작업을 완료한 것 같지만 컨테이너 내부에서 실행 중인 애플리케이션이 장치에 액세스할 수 없습니다.
LXC 1.0.0과 함께 Ubuntu 12.04 x64 호스트를 사용하고 있으며 컨테이너는 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"
lxc용 USB 장치를 화이트리스트에 추가하려면
불행하게도 호스트에서 애플리케이션을 실행하려고 하면 장치가 인식되고 예상대로 작동합니다. 동일한 관련 라이브러리를 사용하여 컨테이너에서 동일한 애플리케이션을 실행하면 명시적으로 URI를 전달하는 경우에도 애플리케이션이 장치를 찾지 못합니다.
문제의 범위를 라이브러리 버그(고칠 수는 있지만 아직은 토끼 구멍을 만들고 싶지 않음) 또는 LXC 컨테이너에 대한 권한에서 누락된 문제로 좁히려고 합니다.
답변1
화이트리스트 규칙을 추가하는 것은 lxc-cgroup
지속되지 않습니다. LXC 컨테이너를 테스트할 때 어느 시점에서 컨테이너를 재설정하고 규칙을 다시 추가하지 않았습니다. 장치 노드는 lxc
화이트리스트( c *:* m
기본 lxc 규칙) 없이도 컨테이너에 올바르게 생성되지만 lxc 컨테이너는 장치를 사용하려고 할 때 장치에 대한 액세스가 거부되고 올바른 cgroup 권한이 없으면 작동하지 않습니다.
해결 방법은 추가하는 것입니다.
lxc.cgroup.devices.allow = c 189:* rwm
귀하의 시스템과 관련이 있습니다 lxc.conf
.