总结
- 我的 Linux 服务器上连接了两个软件无线电设备。
- 我有一个在 Linux 服务器上运行的 LXC 容器。
- 两种软件无线电具有相同的productid和vendorid。
- 如何将其中一个软件无线电附加到 LXC 容器?
为什么?
因为我想!
更严肃的回答:我让不太信任的用户访问 LXC 容器,而不是 LXD 主机。我希望这些用户只能看到其中一个软件无线电。
调试
完整性检查
- 我正在运行第三方实用程序,该实用程序通过 USB 刷新无线电
- 我首先将 USB 连接至两个无线电
- 命令:
lxc config device add my-container usrpUSB usb productid=6010 vendorid=0403
- 命令:
- 我运行了刷新实用程序,它起作用了
- 我断开了 USB
- 命令:
lxc config device remove my-container usrpUSB
- 命令:
- 我运行了刷新实用程序,但失败了
- 结论:lxc USB 连接器按预期工作
查找发生的变化
lxc config
想法:如果我能找到容器上发生了变化的文件,也许我可以手动完成,所以:- 连接 USB(参见上面的命令)
- 列出容器文件
find / -ls > /tmp/find_with_usb.txt
- 断开 USB(参见上面的命令)
- 列出容器文件
find / -ls > /tmp/find_without_usb.txt
- 比较两者
- 有一百多个新文件
- 它们都不是
/dev/ttyUSB*
设备 - 文件主要位于
/var/lib/lxcfs
和/sys/fs/cgroup
目录中 - 我不确定 LXD 系统上这些的来源是什么
- 结论:手动路径/字符设备映射将不起作用。
所以?
- 还有其他方法可以做到这一点吗?
- 我没有看到任何进一步限制 USB 设备的选项(来源)
答案1
由于 lxc autodev 不会自动配置您想要的设备,因此您必须配置节点。尝试使用控制组来区分设备和/或使用钩子在容器启动之前创建设备节点(尽管,通过错误配置检查 TOCTTOU)。或者钩子脚本在适当的时候处理节点设备创建,无论是其文件系统的“预挂载”,还是“预启动”以在容器启动之前在主机的命名空间中运行脚本。
参考:https://linuxcontainers.org/lxc/manpages/man5/lxc.container.conf.5.html • /DEV 目录 • 控制组 (“CGROUPS”)