Sto cercando di configurare la mia macchina Linux per eseguire più SO guest, uno dei quali è una macchina virtuale Windows e un altro un contenitore Linux. L'obiettivo qui è impedirmi di rovinare il sistema host, pur essendo libero di utilizzare il sistema operativo di base e giocare con l'hardware host. Alla fine, oltre a far funzionare il mio desktop nel container, spero di eseguire simulazioni con accelerazione grafica, ecc. Dato che Docker ha un tale versioning dei container integrato, mi è sembrata una buona idea usarlo. Forse libvirt farebbe altrettanto bene con LXC, ma la modalità privilegiata della docker rende più semplice non dover configurare i dispositivi sul contenitore.
Ho fatto una piccola ricerca e ho già trovato alcune risposte, ma ho problemi a mettere tutto insieme.
Sfondo in LXC
L'esecuzione di X da LXC mi ha aiutato a vedere come posso configurare un contenitore con (es.):
lxc.cgroup.devices.allow = c 226:0 rwm
e usando
mknod -m 666 dri/card0 c 226 0
all'interno del contenitore per connettersi al dispositivo host.
docker
Da cuda - Usando la GPU da un contenitore docker , ho visto che posso ottenere la stessa configurazione per funzionare in Docker con il backend LXC.
Mi è sembrato che se un container docker viene eseguito in modalità privilegiata, può accedere normalmente alla GPU senza questa configurazione aggiuntiva. Quindi, ho avviato un sistema di base, ho installato driver di grafica, xorg-server, xorg-xinit e un gestore di finestre per testarlo.
Primo tentativo
# startx
Cannot run from a console (or some message like that)
Ok, pensavo di essere su tty2.
# tty
/dev/console
Non è quello che mi aspettavo.
# chvt 2
# tty
/dev/tty2
Bene, sembra che abbia funzionato. Proviamo # startx
di nuovo. Ha avviato il gestore delle finestre, con il cursore al centro. Nessuna risposta del mouse. Nessuna risposta da tastiera. Proviamo a cambiare il tty con Ctrl-Alt+F3
. Nessuna risposta. Bene, sembra che dovrò riavviare a freddo.
Secondo tentativo
# tty
/dev/console
# chvt 2
# tty
/dev/console
Che cosa? Non posso cambiarlo ora?
Continua
Dopo aver provato un'altra volta, sono riuscito a cambiare tty e startx ha bloccato di nuovo il computer.
E adesso?
Quindi, ora sono impassibile. Voglio davvero essere in grado di usare un container - Docker preferito, anche LXC con libvirt è accettabile - per funzionare come il mio sistema operativo quotidiano mantenendo un sistema operativo host snello.
È preferibile utilizzare Docker con modalità privilegiata qui o utilizzare il back-end LXC esplicito e provare le opzioni sopra elencate?
Sto già pensando di usare libvirt (possibilmente sotto vagrant-libvirt) per gestire il mio vm di Windows, quindi sarebbe lo stesso per me usare libvirt o vagrant-LXC in questo caso?
Modifica: leggendo LXC vs. Docker , ho la sensazione che poiché i contenitori Docker e Docker sono pensati per ambienti a singola applicazione, forse sarebbe meglio usare LXC invece di Docker per funzionare come il mio sistema operativo quotidiano. Pensieri?
Modifica: ho scoperto che, come la finestra mobile, esiste un comando lxc-device che mi consente di bypassare i passaggi di cgroups e mknod. Considerando che prima ero in grado di avviare x e bloccare il mio sistema, ora è solo un errore. Forse alla fine riuscirò a capirlo, dal momento che nessuno sembra essere là fuori.
Aggiornamento: ho il mouse funzionante. Sul guest, ho installato xf86-input-mouse e xf86-input-keyboard. Sull'host, ho eseguito il seguente:
# 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
Lavori!
startx
con exec twm
, ma il tutto stato congelato dal mio punto di vista. Nessuna risposta alla tastiera o al mouse.