Estou tentando configurar minha máquina Linux para executar vários sistemas operacionais convidados, um deles sendo uma VM do Windows e outro um contêiner do Linux. O objetivo aqui é impedir que eu atrapalhe o sistema host, enquanto estiver livre para operar o sistema operacional base e jogar com o hardware host. Eventualmente, além de executar minha área de trabalho no contêiner, espero executar simulações aceleradas por gráficos, etc. Como o Docker possui uma versão git agradável dos contêineres incorporada, pareceu uma boa idéia usá-lo. Talvez a libvirt faria o mesmo com o LXC, mas o modo privilegiado do docker facilita a configuração dos dispositivos no contêiner.
Eu fiz uma pequena pesquisa e já encontrei algumas respostas, mas estou tendo problemas para montar tudo.
Formação em LXC
A execução do X no LXC me ajudou a ver como eu posso configurar um contêiner 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 conectar-se ao dispositivo host.
Docker
De cuda - Usando a GPU em um contêiner de docker , vi que a mesma configuração pode funcionar no Docker com o back-end do LXC.
Pareceu-me que, se um contêiner de docker for executado no modo privilegiado, ele poderá acessar a GPU normalmente sem essa configuração extra. Então, iniciei um sistema básico, instalei drivers gráficos, xorg-server, xorg-xinit e um gerenciador de janelas para testá-lo.
Primeira tentativa
# startx
Cannot run from a console (or some message like that)
Ok, eu pensei que estava no tty2.
# tty
/dev/console
Não era o que eu esperava.
# chvt 2
# tty
/dev/tty2
Bem, parece que isso funcionou. Vamos tentar de # startx
novo. Iniciou o gerenciador de janelas, com o cursor no centro. Nenhuma resposta do mouse. Sem resposta do teclado. Vamos tentar mudar o tty com Ctrl-Alt+F3
. Sem resposta. Bem, parece que vou ter que reiniciar a frio.
Segunda tentativa
# tty
/dev/console
# chvt 2
# tty
/dev/console
O que? Eu não posso mudar isso agora?
Contínuo
Depois de tentar outra vez, consegui alterar tty e o startx congelou o computador novamente.
E agora?
Então, agora estou em um impass. Eu realmente quero poder usar um contêiner - o Docker preferido, o LXC com libvirt também é aceitável - para executar como meu sistema operacional diário, mantendo um SO host enxuto.
É melhor usar o Docker com modo privilegiado aqui ou usar o back-end explícito do LXC e tentar as opções listadas acima?
Já estou pensando em usar a libvirt (possivelmente no vagrant-libvirt) para gerenciar meu Windows vm, então seria o mesmo para mim usar libvirt ou vagrant-LXC nesse caso?
Edit: lendo LXC vs. Docker , tenho a sensação de que, como os contêineres Docker e Docker são destinados a ambientes de aplicativo único, talvez seja melhor usar o LXC em vez do Docker para executar como meu sistema operacional diário. Pensamentos?
Edit: Eu descobri que, como o docker, existe um comando lxc-device que me permite ignorar as etapas cgroups e mknod. Enquanto 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: Eu tenho o mouse funcionando. No convidado, instalei o xf86-input-mouse e o xf86-input-keyboard. No host, executei 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
Trabalho!
startx
comexec twm
, mas a coisa toda foi congelado da minha perspectiva. Nenhuma resposta ao teclado ou mouse.Respostas:
Esta pergunta teve a resposta que eu precisava. Claro, eu usei em
lxc-device
vez de definições de cgroup no arquivo de configuração. No entanto, no meu caso, só consegui que o teclado funcionasse no X se o iniciar em um tty diferente.fonte