Estoy tratando de configurar mi máquina Linux para ejecutar múltiples sistemas operativos invitados, uno de los cuales es una VM de Windows y otro un contenedor de Linux. El objetivo aquí es evitar que estropee el sistema host, al mismo tiempo que soy libre de operar el sistema operativo base y jugar con el hardware del host. Eventualmente, además de ejecutar mi escritorio en el contenedor, espero ejecutar simulaciones aceleradas por gráficos, etc. Dado que Docker tiene una versión tan buena de los contenedores incorporados, me pareció una buena idea usarlo. Quizás libvirt sería igual de bueno con LXC, pero el modo privilegiado de Docker hace que sea más fácil no tener que configurar dispositivos en el contenedor.
He investigado un poco y ya tengo algunas respuestas, pero tengo problemas para reunirlo todo.
Antecedentes en LXC
Ejecutar X desde LXC me ayudó a ver cómo puedo configurar un contenedor con (es decir):
lxc.cgroup.devices.allow = c 226:0 rwm
y usando
mknod -m 666 dri/card0 c 226 0
dentro del contenedor para conectarse al dispositivo host.
Estibador
Desde cuda: al usar la GPU desde un contenedor docker , vi que puedo obtener la misma configuración para trabajar en Docker con el back-end LXC.
Me pareció que si un contenedor acoplable se ejecuta en modo privilegiado, entonces puede acceder a la GPU normalmente sin esta configuración adicional. Entonces, encendí un sistema base, instalé controladores gráficos, xorg-server, xorg-xinit y un administrador de ventanas para probarlo.
Primer intento
# startx
Cannot run from a console (or some message like that)
Bien, pensé que estaba en tty2.
# tty
/dev/console
Eso no es lo que esperaba.
# chvt 2
# tty
/dev/tty2
Bueno, parece que eso funcionó. Intentemos de # startx
nuevo. Comenzó el administrador de ventanas, con el cursor en el centro. Sin respuesta del mouse. No hay respuesta del teclado. Intentemos cambiar el tty con Ctrl-Alt+F3
. Ninguna respuesta. Bueno, parece que tendré que reiniciar en frío.
Segundo intento
# tty
/dev/console
# chvt 2
# tty
/dev/console
¿Qué? No puedo cambiarlo ahora?
Continuado
Después de intentarlo otra vez, conseguí cambiar tty, y startx congeló la computadora nuevamente.
¿Ahora que?
Entonces, ahora estoy en un punto muerto. Realmente quiero poder usar un contenedor (Docker prefiere, LXC con libvirt también es aceptable) para ejecutarlo como mi sistema operativo diario mientras mantengo un sistema operativo host magro.
¿Es mejor usar Docker con modo privilegiado aquí, o usar el backend LXC explícito y probar las opciones enumeradas anteriormente?
Ya estoy planeando usar libvirt (posiblemente bajo vagrant-libvirt) para administrar mi VM de Windows, ¿sería lo mismo para mí usar libvirt o vagrant-LXC en este caso?
Editar: al leer LXC frente a Docker , tengo la sensación de que, dado que los contenedores Docker y Docker están destinados a entornos de una sola aplicación, tal vez sería mejor usar LXC en lugar de Docker para ejecutarlo como mi sistema operativo diario. Pensamientos?
Editar: descubrí que, como Docker, hay un comando lxc-device que me permite omitir los pasos cgroups y mknod. Mientras que antes era capaz de hacer que x comenzara y congelara mi sistema, ahora solo se produce un error. Quizás pueda resolver esto eventualmente, ya que nadie parece estar ahí afuera.
Actualización: tengo el mouse funcionando. En el invitado, instalé xf86-input-mouse y xf86-input-keyboard. En el host, ejecuté lo siguiente:
# lxc-device -n g1 add /dev/input/mice
# lxc-device -n g1 add /dev/dri/card0
# lxc-device -n g1 add /dev/dri/controlD64
# lxc-device -n g1 add /dev/dri/renderD128
# lxc-device -n g1 add /dev/fb0
# lxc-device -n g1 add /dev/tty2
¡Trabajos!
startx
conexec twm
, pero todo estaba congelado desde mi perspectiva. No hay respuesta al teclado o al mouse.Respuestas:
Esta pregunta tenía la respuesta que necesitaba. Por supuesto, usé en
lxc-device
lugar de definiciones de cgroup en el archivo de configuración. Sin embargo, en mi caso, solo he conseguido que el teclado funcione en X si lo inicio en un tty diferente.fuente