問題:
そこで、安定したシステムを実験的なライブラリで汚染することを心配せずに開発できるように、USB デバイス (Kinect の OEM リファレンスである primesense) を 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
システムに関連します。