web-dev-qa-db-ja.com

LXC USBデバイスのパススルー

Mythtv(サーバー)を実行するLXCコンテナを作成しようとしています。これはUSBチューナーにアクセスする必要があります。

USBデバイスをLXCコンテナーに渡す方法に関する情報が不足しているようです

この投稿では、cgroupを適切に設定する必要性について説明します https://unix.stackexchange.com/questions/137931/usb-passthrough-for-lxc-containers

ホストはUbuntu 14.04(Trusty)であり、X2Go経由でアクセスし、X11に直接アクセスする他の非特権LXCコンテナーを正常に実行しています(各タイプの1つが「永続的に」実行され、正常に動作しています)。基本構成は、コンテナストレージをカスタムの場所(専用LVMパーティション)に配置するように(のみ)変更されました。

問題のコンテナは(a)特権がある(b)Ubuntu Trusty AMD64を実行している(c)構成ファイル「lxc.cgroup.devices.allow = c 189:* rwm」にcgroupが設定されている問題のUSBデバイスのIDは、「ls -la/dev/bus/usb/003 /」を使用して検出されます

Apparmorは主要な問題ではないようです(間違っている可能性があります)。「lxc.aa_profile = unconfined」を設定しようとしましたが、役に立たなかったようです。また、一連のcgroupエラーが発生したカスタムApparmorプロファイルも作成しました。私は困惑しており、どこから始めてもわからない-Google検索では、LibvirtベースのUSBパススルーの議論とLXC USBパススルーのパッチが表示されますが、非Libvirtの状況に関する指示はありません

誰かがこれについてどうやって行くかアドバイスしてください。

ありがとう

5
redger

基本的に答えはそれです-

  1. たとえば、アクセスしたいホストデバイスをバインドマウントする必要があります。

    mount --bind /dev/dvb /path_to_your_container/rootfs/dev/dvb

....最初にターゲットディレクトリを作成することを忘れないでください

  1. 特権コンテナを使用していること、またはホストのownerの非特権コンテナに上記でマウントしたデバイスへのアクセスを許可していることを確認してください
  2. コンテナ設定ファイル(またはすべての特権コンテナの場合は/etc/lxc/lx.conf)に関連するcgroupエントリを追加します。 lxc.cgroup.devices.allow = c xxx:* rwmここでxxx = ls -la /dev/dvb say .....を使用して見つかったmajor:minor idの「メジャー」部分は、DVBの場合は212、USB(システム上)の場合は189です。私の場合、lxc.cgroup.devices.allow = c 212:* rwmを介してdvbアクセスが許可されます

装甲の変更は不要です..バインドマウントとcgroupエントリは、DVBデバイスへのコンテナーアクセスを可能にするのに十分でした(USBデバイスである場合がありますが、「USB」デバイスへのアクセスを有効にする必要はありません... DVBデバイスのみ/ dev/dvb内)

3
redger