Al igual que acontece con otras opciones de virtualización, en lxc podemos realizar una oeración de device passthrough. Esto es, trasladar un dispositivo a un contenedor de manera uqe sea gestionado en forma transparente por este, en lugar de por el anfitrión.
Como ejemplo de cómo realizar una configuración de este tipo tenemos un contenedor de nombre legacy al que se desea traspasar el dispositivo /dev/ttyS1
.
-
- Conectados al anfitrión, tomamos los parámetros type, major y minor que identifican unívocamente al dispositivo:
# ls -la /dev/ttyS1 crw------- 1 root root 4, 65 Jun 25 10:48 /dev/ttyS1
En este caso, el type es
c
(dispositivo tipo caracter), el major es4
y el minor es65
. - Editamos el fichero
config
del contenedor agregando una línea con:lxc.cgroup.devices.allow = c 4:65 rwm
Eventualmente, podemos transferir todos los dispositivos que existan bajo un mismo major reemplazando el valor de minor por un asterisco:
lxc.cgroup.devices.allow = c 4:* rwm
- Por más que hemos transferido el dispositivo, el contenedor no tendrá constancia de su existencia hasta que se cree el device node dentro del propio contenedor.Tenemos que realizar la operación de creación del device node con cada inicio del contenedor, para lo cual podríamos por ejemplo crear un script de arranque con los comandos respectivos.La creación del device node se reduce a ejecutar
mknod
con los parámetros del dispositivo, como se muestra a continuación:# lxc-attach -n legacy root@legacy:~# mknod /dev/ttyS1 c 4 65 root@legacy:~# ls -la /dev/ttyS1 crw-r--r-- 1 root root 4, 65 Jun 25 09:03 /dev/ttyS1 root@legacy:~# setserial /dev/ttyS1 /dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
- Conectados al anfitrión, tomamos los parámetros type, major y minor que identifican unívocamente al dispositivo: