我对 LXD Conatiners 还很陌生。我有一台正在运行的主机 ubuntu 16.04 机器,它有一个容器:
root@ubuntu-blade1:/etc/udev/rules.d# lxc list
+-------------+---------+----------------------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------+---------+----------------------+------+------------+-----------+
| nish-ubuntu | RUNNING | 10.20.186.185 (eth0) | | PERSISTENT | 0 |
+-------------+---------+----------------------+------+------------+-----------+
root@ubuntu-blade1:/etc/udev/rules.d#
我有一个连接到主主机系统的 USB 设备:
Disk /dev/sde: 14.7 GiB, 15795748864 bytes, 30851072 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0527cd14
lsusb 输出如下:
root@ubuntu-blade1:/etc/udev/rules.d# lsusb
Bus 002 Device 005: ID 8564:1000 Transcend Information, Inc. JetFlash
Bus 002 Device 004: ID 0424:2512 Standard Microsystems Corp. USB 2.0 Hub
Bus 002 Device 003: ID 0424:2512 Standard Microsystems Corp. USB 2.0 Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 0624:0251 Avocent Corp. Virtual Mass Storage
Bus 001 Device 004: ID 0624:0249 Avocent Corp. Virtual Keyboard/Mouse
Bus 001 Device 003: ID 0624:0248 Avocent Corp. Virtual Hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
现在我需要检测/连接容器内的 USB (/dev/sde)。我对 udev 有一些了解,并看到了关于同一问题的几个堆栈问题,但没有一个有明确的程序来执行此操作。有人可以指导一下吗?
答案1
这个问题已经很老了,但我今天偶然发现了同样的用例,我发现了一个非常简单的解决方案,可能 7 个月前还没有。
在这关联人们可以找到更多信息,但本质上是这样的:
假设我们在 /dev/ttyUSB2 上有一个调制解调器设备(AT 命令)和一个容器“xenial1”,可以使用以下命令将 ttyUSB2 添加到容器中:
$ lxc config device add xenial1 ttyUSB2 unix-char path=/dev/ttyUSB2
容器是否运行并不重要
此配置永久保存在容器的默认配置文件中:
$ lxc config show xenial1
architecture: x86_64
config:
security.privileged: "true"
volatile.base_image: <numbers>
volatile.eth0.hwaddr: xx:xx:xx:xx:xx:xx
volatile.idmap.base: "0"
volatile.idmap.next: '[]'
volatile.last_state.idmap: '[]'
volatile.last_state.power: RUNNING
devices:
root:
path: /
type: disk
ttyUSB1:
path: /dev/ttyUSB1
type: unix-char
ttyUSB2:
path: /dev/ttyUSB2
type: unix-char
ephemeral: false
profiles:
- default
要删除设备,请使用“删除”命令代替“添加”命令。
注意:我的容器是“特权”的,因此此解决方案可能不适用于非特权容器
答案2
如果您使用的是非特权容器,您还可以为该设备设置正确的权限...我的经验是,当我尝试在容器中使用网络摄像头时就是这种情况...也许这也有帮助.. 。
lxc config device add containerName yourNameForTheDevice unix-char path=/path/to/device
lxc 配置设备集容器名称 yourNameForTheDevice 模式 666
另请注意,USB 直通仅适用于 lxd 2.5 或更高版本,正如 Stephan Graber 在https://stgraber.org/(向下滚动到容器中的 USB 设备)。所以也许您还需要从 lxd-developers 添加存储库......此时,“正常”ubuntu-xenial 存储库只有 lxd-version 2.0.9
检查您拥有的版本
dpkg -l lxd
查看此页面并考虑使用该存储库: https://launchpad.net/~ubuntu-lxc/+archive/ubuntu/lxd-stable
如果你这样做,你可以将其更新到版本 2.15