Acesso ao dispositivo usb a partir do contêiner systemd-nspawn

2

Eu quero acessar o dispositivo USB especial (não um simples flash drive) de dentro do contêiner. Eu vinculo /dev/bus/usb dentro do contêiner, lsusb lista USBs sem esforço:

$ lsusb
...
Bus 002 Device 002: ID 0a89:0009 
...

mas meu programa não pode interagir com este dispositivo.

    
por MadRunner 18.08.2016 / 16:45

1 resposta

6

O systemd-nspawn lida com permissões para dispositivos através de cgroups . Por padrão, qualquer contêiner é concedido com permissões apenas para dispositivos comuns como /dev/null , /dev/zero , etc e, além disso, para qualquer dispositivo transmitido diretamente para o argumento --bind , como --bind=/dev/vcs . Isso não funcionará com USB porque /dev/bus/usb é um diretório.

Para conceder permissão para o contêiner atualmente em execução chamado my_container (supostamente você começou com systemd-nspawn diretamente da linha de comando) execute como root:

$ echo 'c 189:* rwm' > \
 /sys/fs/cgroup/devices/machine.slice/machine-my_container/devices.allow

c 189:* rwm significa r ead w rite m odifica as permissões para qualquer dispositivo de caractere com tipo (identificador) 189 e qualquer subtipo. Você pode encontrar o tipo e o subtipo de dispositivo com file :

$ file /dev/bus/usb/002/002

Esta permissão durará apenas enquanto o contêiner estiver sendo executado.

Se você estiver usando [email protected] ou quiser manter permissões com ele, crie

/etc/systemd/system/[email protected]/override.conf

ou

/etc/systemd/system/systemd-nspawn@my_container.service.d/override.conf

(dependendo se você deseja acessar o USB de qualquer contêiner systemd-nspawn ou somente de my_container correspondentemente) com o seguinte conteúdo:

[Service]
DeviceAllow=char-usb_device rwm 

usb_device é um alias. Você pode encontrar outras em /proc/devices .

    
por 18.08.2016 / 16:45