Je me suis pas mal battu pour y arriver, alors si ça peut servir à quelqu’un d’autre…
Le contexte :
- Le serveur hôte est sous Ubuntu 14.04
- Le conteneur est aussi sous Ubuntu (template download, paramètres « -d ubuntu -r trusty -a amd64″)
- Un périphérique USB est connecté sur l’hôte (un jeelink pour être précis) il apparait en tant que /dev/ttyUSB0
- Je veux monter ce périphérique dans le conteneur
En premier lieu on doit trouver le numéro majeur et mineur du périphérique USB, pour cela un simple ls suffit sur l’hôte :
$ sudo ls -la /dev/ttyUSB0 crw-rw---- 1 root dialout 188, 0 sept. 1 16:08 /dev/ttyUSB0
Le périphérique a ici le numéro 188,0
Il faut ensuite autoriser ce périphérique dans le conteneur (cgroups), cela se fait dans le fichier de config de ce dernier (/var/lib/lxc/[conteneur]/config).
On ajoute simplement la ligne suivante :
lxc.cgroup.devices.allow = c 188:0 rwm
On peut dès lors démarrer le conteneur et monter le périphérique dans le conteneur avec la commande suivante :
sudo lxc-device -n [conteneur] add /dev/ttyUSB0
C’est déjà pas mal mais on peut faire mieux et monter automatiquement le périphérique au démarrage du conteneur, pour cela au fichier de config du dit conteneur on ajoutera :
lxc.autodev = 1 lxc.hook.autodev=/var/lib/lxc/[conteneur]/autodev
On appelle un script (nommé autodev) en se branchant sur un hook de LXC, ce script contient les commandes nécessaire pour monter le périphérique :
#!/bin/bash cd ${LXC_ROOTFS_MOUNT}/dev mknod ttyUSB0 c 188 0 chmod 0666 ttyUSB0
Il faut rendre ce script exécutable :
$ sudo chmod +x /var/lib/lxc/[conteneur]/autodev
Et à chaque démarrage le script est joué (au bon moment) et le périphérique monté dans le conteneur.