Esta pergunta teve a resposta que eu necessário. Claro, eu usei lxc-device
em vez das definições do cgroup no arquivo de configuração. No entanto, no meu caso, eu só tenho o teclado para trabalhar em X, se eu começar em um tty diferente.
Estou tentando configurar minha máquina Linux para executar vários sistemas operacionais convidados, sendo um deles uma VM do Windows e outro um contêiner do Linux. O objetivo aqui é me impedir de bagunçar o sistema host, estando livre para operar o sistema operacional básico e brincar com o hardware host. Eventualmente, além de rodar minha área de trabalho no container, espero rodar simulações aceleradas por gráficos, etc. Como o Docker tem um bom controle de conteúdo de contêineres embutidos, pareceu uma boa idéia usá-lo. Talvez o libvirt funcionasse tão bem com o LXC, mas o modo privilegiado do docker torna mais fácil não ter que configurar dispositivos para o contêiner.
Eu fiz uma pequena pesquisa e já tenho algumas respostas, mas estou com problemas para juntar tudo.
Rodar X do LXC me ajudou a ver como eu posso configurar um container com (ie) :
lxc.cgroup.devices.allow = c 226:0 rwm
e usando
mknod -m 666 dri/card0 c 226 0
dentro do contêiner para se conectar ao dispositivo host.
De cuda - Usando a GPU de um contêiner docker , vi eu posso obtenha a mesma configuração para trabalhar no Docker com o backend do LXC.
Pareceu-me que, se um contêiner docker é executado no modo privilegiado, ele pode acessar a GPU normalmente sem essa configuração extra. Então, ativei um sistema básico, instalei drivers gráficos, xorg-server, xorg-xinit e um gerenciador de janelas para testá-lo.
# startx
Cannot run from a console (or some message like that)
Ok, achei que estava no tty2.
# tty
/dev/console
Isso não é o que eu esperava.
# chvt 2
# tty
/dev/tty2
Bem, parece que funcionou. Vamos tentar # startx
novamente. Começou o gerenciador de janelas, com o cursor no centro. Nenhuma resposta do mouse. Nenhuma resposta do teclado. Vamos tentar mudar o tty com Ctrl-Alt+F3
. Sem resposta. Bem, parece que vou ter que reiniciar o frio.
# tty
/dev/console
# chvt 2
# tty
/dev/console
O que? Eu não posso mudar isso agora?
Depois de tentar outra vez, consegui que mudasse tty e startx congelou o computador novamente.
Então, estou agora em um impasse. Eu realmente quero ser capaz de usar um contêiner - Docker preferido, LXC com libvirt também é aceitável - para executar como meu sistema operacional diário, mantendo um sistema operacional enxuto.
É melhor usar o Docker com o modo privilegiado aqui, ou usar o back-end explícito do LXC e experimentar as opções listadas acima?
Já estou planejando usar o libvirt (possivelmente sob vagrant-libvirt) para gerenciar meu Windows vm, então seria o mesmo para mim usar o libvirt ou o vagrant-LXC nesse caso?
Editar: lendo LXC vs. Docker , tenho a impressão de que, como os contêineres Docker e Docker são destinados para ambientes de aplicativo único, talvez seja melhor usar o LXC em vez do Docker para executar como meu sistema operacional diário. Pensamentos?
Edit: Descobri que, como o docker, existe um comando lxc-device que me permite ignorar as etapas de cgroups e mknod. Considerando que antes eu era capaz de obter x para iniciar e congelar o meu sistema, apenas erros agora. Talvez eu possa descobrir isso eventualmente, já que ninguém parece estar lá fora.
Atualização: tenho o mouse funcionando. No guest, eu instalei o xf86-input-mouse e o xf86-input-keyboard. No host, eu corri o seguinte:
# 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
Funciona!
Esta pergunta teve a resposta que eu necessário. Claro, eu usei lxc-device
em vez das definições do cgroup no arquivo de configuração. No entanto, no meu caso, eu só tenho o teclado para trabalhar em X, se eu começar em um tty diferente.