我正在尝试创建一个运行 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”中设置了 cgroups,这似乎是合适的,因为使用“ls -la /dev/bus/usb/003/”可以找到所讨论的 USB 设备的主要/次要 ID
Apparmor 似乎不是主要问题(虽然我可能错了)我尝试设置“lxc.aa_profile = unconfined”,但似乎没有帮助。我还创建了一个自定义 Apparmor 配置文件,这导致了一系列 cgroup 错误。我不知所措,甚至不知道从哪里开始 - Google 搜索出现了关于基于 Libvirt 的 USB 直通和 LXC USB 直通补丁的讨论,但没有针对非 Libvirt 情况的说明
有人可以建议如何解决这个问题吗?
谢谢
答案1
基本上答案是 -
您需要绑定安装您想要访问的主机设备,例如。
mount --bind /dev/dvb /path_to_your_container/rootfs/dev/dvb
....记得先创建目标目录
owner
确保您使用的是特权容器,或者您已授予非特权容器的主机 对您上面安装的设备的访问权限- 在容器配置文件(或
/etc/lxc/lx.conf
所有特权容器)中添加相关的 cgroup 条目,即,lxc.cgroup.devices.allow = c xxx:* rwm
其中xxx
= 使用以下方式找到的 major:minor id 的“主要”部分ls -la /dev/dvb
.....DVB 为 212,USB 为 189(在我的系统上),因此,就我的情况而言,dvb 访问权限是通过以下方式授予的lxc.cgroup.devices.allow = c 212:* rwm
Apparmor 更改是不必要的...绑定挂载和 cgroup 条目足以使容器能够访问 DVB 设备(恰好是 USB 设备,但没有必要启用对“USB”设备的访问...只是 /dev/dvb 中的 DVB 设备)