PROBLEM:
Ich habe also versucht, ein USB-Gerät (Primesense – die OEM-Referenz für Kinect) per Passthrough an einen LXC-Container anzuschließen, damit ich entwickeln kann, ohne mir Sorgen machen zu müssen, mein stabiles System mit experimentellen Bibliotheken zu verunreinigen.
Ich glaube, ich habe alles Notwendige getan, aber Anwendungen, die im Container ausgeführt werden, können nicht auf das Gerät zugreifen.
Ich verwende einen Ubuntu 12.04 x64-Host mit LXC 1.0.0, der Container wird aus der 12.04-Vorlage erstellt. (Ich bin auf Askubuntu aktiv, aber ich glaube, die Frage passt hier besser)
Frage:
Wie gelangen Sie über USB zu einem (privilegierten) LXC-Container?
Ergriffene Maßnahmen:
Meine Udev-Regeln für den Host und die Udev-Regeln für den Container sind gleich
SUBSYSTEM=="usb", ATTR{idProduct}=="0609", ATTR{idVendor}=="1d27",
MODE:="0666", OWNER:="root", GROUP:="video"
Auf dem Host ist der Geräteknoten wie folgt sichtbar:
$ ls -l /dev/bus/usb/001/015
crw-rw-rw- 1 root video 189, 14 Jun 18 15:27 /dev/bus/usb/001/015
Im Container ist der Geräteknoten wie folgt sichtbar:
$ ls -l /dev/bus/usb/001/015
crw-rw-rw- 1 root video 189, 14 Jun 18 22:07 /dev/bus/usb/001/015
Außerdem habe ich bestanden
sudo lxc-cgroup --n CN1 devices.allow "c 189:* rwm"
Um USB-Geräte für lxc auf die Whitelist zu setzen
Wenn ich versuche, eine Anwendung auf dem Host auszuführen, wird das Gerät leider erkannt und funktioniert wie erwartet. Wenn ich dieselbe Anwendung im Container ausführe (mit denselben relevanten Bibliotheken), kann die Anwendung das Gerät nicht finden, selbst wenn ich die URI explizit übergebe.
Ich versuche, das Problem entweder auf einen Bibliotheksfehler einzugrenzen (den ich beheben könnte, aber ich möchte mich noch nicht in dieses tiefe Detail vertiefen) oder auf etwas, das mir bei den Berechtigungen für LXC-Container fehlt.
Antwort1
Das Hinzufügen einer Whitelist-Regel lxc-cgroup
ist nicht dauerhaft. Beim Testen meiner LXC-Container habe ich den Container irgendwann zurückgesetzt und die Regel nicht erneut hinzugefügt. Der Geräteknoten wird im Container auch ohne lxc
Whitelist korrekt erstellt ( c *:* m
ist eine Standard-LXC-Regel), aber dem LXC-Container wird der Zugriff auf das Gerät verweigert, wenn er versucht, es zu verwenden. Ohne die richtigen Cgroup-Berechtigungen funktioniert es nicht.
Um dies zu umgehen, fügen Sie Folgendes hinzu
lxc.cgroup.devices.allow = c 189:* rwm
lxc.conf
auf die für Ihr System relevanten .