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.

Les commentaires sont fermés.