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_containersystemd-nspawnコマンドラインから直接起動したと仮定)、rootとして実行します。

$ 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

関連情報