질문:
그래서 저는 안정적인 시스템을 오염시키는 실험적 라이브러리에 대해 걱정할 필요 없이 개발할 수 있도록 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 규칙) 없이도 lxc
장치 노드는 컨테이너에 올바르게 생성되지만 c *:* m
lxc 컨테이너를 사용하려고 하면 장치에 대한 액세스가 거부되고 올바른 cgroup 권한이 없으면 작동하지 않습니다.
해결책은 추가하는 것입니다.
lxc.cgroup.devices.allow = c 189:* rwm
lxc.conf
귀하의 시스템과 관련이 있습니다.