web-dev-qa-db-fra.com

Passage USB pour le conteneur LXD sur Ubuntu 16.04

Je dois exposer mon interface USB à mon conteneur LXD et j'utilise une machine Ubuntu 16.04. En exécutant "lsusb", je peux voir les mêmes interfaces à la fois sur mon hôte et sur mon conteneur.

Dans mon conteneur, j'utilise un logiciel qui exploite cette interface USB (et le périphérique connecté associé) mais lors de la phase d'exécution, un message disait:

"Échec d'ouverture USB: autorisations insuffisantes"

Comment ajouter en permanence le passthrough nécessaire?

Toute suggestion sera appréciée

Merci beaucoup

1
Damiano Manicone

N'oubliez pas que je suis un novice dans la réponse, modifiez-le si nécessaire.

Récemment, j’avais besoin d’ajouter un contrôleur PS3 à un conteneur et je pouvais le faire grâce aux éléments suivants:

Nous devons d’abord trouver les informations sur nos appareils. à savoir que c'est vendorid et productid alors lançons lsusb

Le résultat devrait ressembler à ceci:

Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 058f:6362 Alcor Micro Corp. Flash Card Reader/Writer
Bus 001 Device 006: ID 054c:0268 Sony Corp. Batoh Device / PlayStation 3 Controller

Pour notre conteneur, nous nous intéressons à la partie ID. Donc, dans mon cas, 054c:0268

Le 054c va être notre "vendorid" et le 0268 est notre "productid"

Donc, basé sur la documentation de configuration, nous devrions nous retrouver avec une commande comme celle-ci pour ajouter notre périphérique

lxc config device add \
<ContainerName> \
<DeviceName> \
usb \
vendorid=<vendorid>

C’est le minimum nécessaire pour ajouter un périphérique MAIS puisque seul l’identifiant de vendeur est spécifié, il ajoutera TOUS les appareils avec un identifiant de vendeur correspondant. si vous ne souhaitez utiliser qu'un seul périphérique, vous pouvez également spécifier le productid.

Donc, pour mon cas (pour montrer un exemple concret), j'ai:

lxc config device add \
pcsx2 \
ps3controllerblack \
usb \
vendorid=054c \
productid=0268

Comme indiqué, mon ContainerName est "pcsx2" et le DeviceName peut être tout ce que vous voulez, il ne doit pas correspondre à quoi que ce soit, le mien est donc réglé sur "ps3controllerblack", chose facile à retenir pour moi.

Une dernière chose à noter est que même avec le périphérique ajouté au conteneur, pour que mon contrôleur fonctionne correctement, je devais également ajouter son fichier de périphérique au conteneur.

Donc, pour moi, je devais trouver le fichier de périphérique, déterminer son type (unix-char ou unix-block), puis l'ajouter.

Mon contrôleur fournit un périphérique de caractères à /dev/input/js0 afin que ma commande soit la suivante:

lxc config device add \
pcsx2 \
joystickdevice \
unix-char \
path=/dev/input/js0

Et avec cela, je devrais avoir accès à mon périphérique USB. Il peut être nécessaire d’ajouter des éléments supplémentaires à la configuration et de spécifier le mode, uid ou gid, de manière à ce que les utilisateurs appropriés du conteneur puissent y accéder.

Si vous saisissez des informations erronées dans la commande et que vous devez les redéfinir, commencez par supprimer le périphérique, puis réessayez.

lxc config device remove <ContainerName> <DeviceName>

Exemple:

lxc config device remove pcsx2 ps3controllerblack
2
HelpfulGuest

Le LXD GitHub a beaucoup de documentation liée à la configuration.

https://github.com/lxc/lxd/blob/master/doc/configuration.md

Cherchez-y une clé USB et vous trouverez ce dont vous avez besoin.

devis: Configuration des appareils

LXD fournira toujours au conteneur les périphériques de base nécessaires au fonctionnement d’un système POSIX standard. Celles-ci ne sont pas visibles dans la configuration du conteneur ou du profil et ne peuvent pas être remplacées.

Ceux-ci comprennent:

/dev/null (character device)
/dev/zero (character device)
/dev/full (character device)
/dev/console (character device)
/dev/tty (character device)
/dev/random (character device)
/dev/urandom (character device)
/dev/net/tun (character device)
/dev/Fuse (character device)
lo (network interface)

Tout le reste doit être défini dans la configuration du conteneur ou dans l'un de ses profils. Le profil par défaut contient généralement une interface réseau destinée à devenir eth0 dans le conteneur.

Pour ajouter des périphériques supplémentaires à un conteneur, des entrées de périphérique peuvent être ajoutées directement à un conteneur ou à un profil.

Des périphériques peuvent être ajoutés ou supprimés pendant l'exécution du conteneur.

Chaque entrée de périphérique est identifiée par un nom unique. Si le même nom est utilisé dans un profil ultérieur ou dans la propre configuration du conteneur, la nouvelle définition remplace l'intégralité de l'entrée.

Les entrées de périphérique sont ajoutées via: lxc config device add [clé = valeur] ...

= = = end quote = = =

Un exemple de commande:

Le périphérique de profil lxc ajoute [clé = valeur] ...

De plus, si vous utilisez LXD, je vous recommande vivement de vous abonner à l'alias de messagerie de lxc-users, car les développeurs le surveillent et répondent à des questions/réponses quotidiennement.

https://lists.linuxcontainers.org/

Enfin, il existe un sous-reddit LXD sur Reddit (si vous utilisez Reddit?) Qui ne sert pas à l'assistance mais fournit beaucoup d'informations intéressantes sur LXD.

https://www.reddit.com/r/LXD/

0
bmullan