web-dev-qa-db-ja.com

LXCコンテナ用のUSBパススルー

問題:

そのため、安定したシステムを実験ライブラリで汚染することを心配せずに開発できるように、USBデバイス(primesense-KinectのOEMリファレンス)をLXCコンテナーにパススルーさせようとしています。

必要なことはすべて行ったと思いますが、コンテナー内で実行されているアプリケーションはデバイスにアクセスできません。

LXC1.0.0でUbuntu12.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コンテナーの権限が不足しているものに絞り込もうとしています。

3
crasic

lxc-cgroupを介してホワイトリストルールを追加することは永続的ではありません。LXCコンテナーをテストする際に、ある時点でコンテナーをリセットし、ルールを再追加しませんでした。デバイスノードは、lxcホワイトリストがなくてもコンテナ内に正しく作成されます(c *:* mはデフォルトのlxcルールです)が、lxcコンテナは、デバイスを使用しようとすると、デバイスへのアクセスを拒否されます。正しく機能しないcgroup権限

回避策は追加することです

  lxc.cgroup.devices.allow = c 189:* rwm

システムに関連するlxc.confに。

2
crasic