USB-Passthrough für LXC-Container

USB-Passthrough für LXC-Container

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-cgroupist 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 lxcWhitelist korrekt erstellt ( c *:* mist 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.confauf die für Ihr System relevanten .

verwandte Informationen