質問:
そこで、私は安定したシステムを汚染する実験的ライブラリを心配することなく開発できるように、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
あなたのシステムに関連しています。