私は初めて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
これで、コンテナ(/dev/sde)内のUSBを検出/接続する必要があります。私はudevについてある程度の知識があり、同じ問題に関する複数のスタック質問を見ましたが、これを行う明確な手順はありません。誰でも私に指示を与えることができますか?
答え1
この質問はかなり古いですが、今日同じユースケースを偶然発見し、おそらく7ヶ月前には存在しなかった非常に簡単な解決策を見つけました。
これに協会より多くの情報を見つけることができますが、本質的には次のようになります。
モデムデバイス(ATコマンド)と/ dev / ttyUSB2に「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
権限のないコンテナを使用している場合は、デバイスに正しい権限を設定することができます...私の経験によれば、コンテナでWebカメラを使用しようとしたときにこのような状況がありました...多分それも役に立ちます。
lxc 構成デバイスの追加コンテナー名 yourNameForTheDevice unix-char パス=/path/to/device
lxc 構成デバイスセットコンテナ名 yourNameForTheDevice モード 666
また、Stephan Graberが説明したように、USBパススルーはlxd 2.5以降でのみ動作します。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にアップデートできます。