systemd-nspawn 컨테이너에서 USB 장치에 액세스

systemd-nspawn 컨테이너에서 USB 장치에 액세스

컨테이너 내부에서 특수 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

관련 정보