컨테이너 내부에서 특수 USB 장치(단순 플래시 드라이브가 아님)에 액세스하고 싶습니다. USB를 쉽게 나열하기 위해 /dev/bus/usb
컨테이너 내부에 바인딩합니다 .lsusb
$ lsusb
...
Bus 002 Device 002: ID 0a89:0009
...
하지만 내 프로그램은 장치와 상호 작용할 수 없습니다.
답변1
systemd-nspawn
[cgroups][1]을 통해 장치 권한을 처리합니다. 기본적으로 모든 컨테이너에는 인수(예: ) 에 직접 전달된 장치 /dev/null
외에 일반 장치(예: )에 대해서만 권한이 부여됩니다 . 디렉토리이기 때문에 USB에서는 작동하지 않습니다 ./dev/zero
--bind
--bind=/dev/vcs
/dev/bus/usb
현재 실행 중인 컨테이너에 권한을 부여하려면 my_container
( systemd-nspawn
명령줄에서 직접 시작했다고 가정) 루트로 실행합니다.
$ echo 'c 189:* rwm' > \
/sys/fs/cgroup/devices/machine.slice/machine-my_container/devices.allow
c 189:* rwm
방법아르 자형전자헤드승의식쌀유형(식별자) 189의 모든 장치에 대한 knod 권한 및 모든 문자의 하위 유형. 또한보십시오:https://kernel.org/doc/html/latest/admin-guide/cgroup-v1/devices.html
다음 명령을 사용하여 장치의 유형과 하위 유형을 찾을 수 있습니다 file
.
$ file /dev/bus/usb/002/002
이 권한은 컨테이너가 실행되는 동안에만 지속됩니다.
해당 권한을 사용 중이 [email protected]
거나 유지하려면
/etc/systemd/system/[email protected]/override.conf
또는
/etc/systemd/system/systemd-nspawn@my_container.service.d/override.conf
systemd-nspawn
(모든 컨테이너에서 USB에 액세스할지 아니면 해당 컨테이너에서만 USB에 액세스할지에 따라 my_container
) 내용은 다음과 같습니다.
[Service]
DeviceAllow=char-usb_device rwm
usb_device
별칭입니다. 에서 추가 콘텐츠를 찾을 수 있습니다 /proc/devices
. [1]:https://wiki.archlinux.org/index.php/cgroups