总结

总结

总结

  • 我的 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”)

相关内容