コンテナ内で特別な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
コマンドラインから直接起動したと仮定)、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