LXD 컨테이너에 USB를 표시하는 방법

LXD 컨테이너에 USB를 표시하는 방법

저는 LXD Conatiners를 처음 접했습니다. 호스트 우분투 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

권한이 없는 컨테이너를 사용하는 경우 장치에 대한 올바른 권한을 설정할 수도 있습니다... 내 경험에 따르면 컨테이너에서 웹캠을 사용하려고 할 때 이런 경우가 있었습니다... 어쩌면 그것도 도움이 될 수 있습니다...

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로 업데이트할 수 있습니다.

관련 정보