LXC USB 设备直通

red*_*ger 5 usb lxc

我正在尝试创建一个运行 mythtv (server) 的 LXC 容器......它需要访问 USB 调谐器

似乎缺乏关于如何将 USB 设备传递到 LXC 容器的信息

这篇文章讨论了适当设置 cgroups 的必要性 https://unix.stackexchange.com/questions/137931/usb-passthrough-for-lxc-containers

主机是 Ubuntu 14.04 (Trusty),它成功运行了其他无特权的 LXC 容器,这些容器通过 X2Go 访问并直接连接到 X11(每种类型的 1 个“永久”运行并且运行良好)。基本配置已(仅)更改为将容器存储放置在自定义位置(专用 LVM 分区)。

有问题的容器是 (a) 特权 (b) 运行 Ubuntu Trusty AMD64 (c) 在配置文件“lxc.cgroup.devices.allow = c 189:* rwm”中设置了 cgroups,考虑到主要/次要使用“ls -la /dev/bus/usb/003/”找到相关USB设备的ID

Apparmor 似乎不是主要问题(尽管我可能是错的)我尝试设置“lxc.aa_profile = unconfined”,这似乎没有帮助。我还创建了一个自定义 Apparmor 配置文件,这导致了一系列 cgroup 错误。我被难住了,甚至不知道从哪里开始——谷歌搜索出现了关于基于 Libvirt 的 USB 直通和 LXC USB 直通补丁的讨论,但没有针对非 Libvirt 情况的说明

有人可以建议如何解决这个问题。

谢谢

red*_*ger 3

基本上答案是——

  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=主要的“主要”部分:次要ID使用ls -la /dev/dvb.....212用于DVB或189用于USB(在我的系统上),因此对于我的情况,DVB访问是通过授予lxc.cgroup.devices.allow = c 212:* rwm

Apparmor 更改是不必要的.. 绑定挂载和 cgroup 条目足以启用容器对 DVB 设备的访问(恰好是 USB 设备,但也没有必要启用对“USB”设备的访问...只是 DVB 设备在/dev/dvb中)