lxc: executando o virtualbox dentro de um contêiner


9

Instalei o virtualbox dentro de um contêiner lxc. No entanto, quando tento iniciar uma VM, recebo a mensagem:

driver do kernel não acessível (rc = 1909) .... problema de permissão com / dev / vboxdrv.

Obviamente, isso parece um problema de segurança previsível.

Alguém sabe como posso conceder permissão ao contêiner para acessar este driver de dispositivo: '/ dev / vboxdrv'?

Qualquer ajuda ou sugestões muito apreciadas.

Respostas:


9

No seu host LXC (estou assumindo o Ubuntu aqui):

  1. Instale os virtualbox-dkms, linux-headers-generic, build-essentialpacotes e verificar o kernel módulos são carregados:

    myhost$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    
  2. Obtenha os números de dispositivo do VirtualBox (10, 55/56/57 no meu caso):

    myhost$ ls -la /dev | grep vbox
    crw-------  1 root root     10,  57 Feb 25 08:22 vboxdrv
    crw-------  1 root root     10,  56 Feb 25 08:22 vboxdrvu
    crw-------  1 root root     10,  55 Feb 25 08:22 vboxnetctl
    
  3. Pegue os números dos nós e adicione à sua configuração de convidado do LXC ( /var/lib/lxc/myguest/config):

    ## VirtualBox
    lxc.cgroup.devices.allow = c 10:57 rwm
    lxc.cgroup.devices.allow = c 10:56 rwm
    lxc.cgroup.devices.allow = c 10:55 rwm
    
  4. Reinicie seu convidado LXC, instale o virtualboxpacote e crie os nós do dispositivo:

    myguest$ sudo mknod -m 600 /dev/vboxdrv c 10 57
    myguest$ sudo mknod -m 600 /dev/vboxdrvu c 10 56
    myguest$ sudo mknod -m 600 /dev/vboxnetctl c 10 55
    
  5. Verifique se o VirtualBox no convidado pode ver os módulos do kernel:

    myguest$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    

Essa deve ser a resposta correta. Maioria das etapas importantes que todas as outras respostas falta são os passos 3 e 4.
Léo Lam

1

O driver do kernel do VirtualBox Linux (vboxdrv) não está carregado ou há um problema de permissão com / dev / vboxdrv. Reconfigure o módulo do kernel executando

 '/etc/init.d/vboxdrv setup'

como raiz. Usuários do Ubuntu ou Fedora devem instalar o pacote DKMS primeiro. Este pacote acompanha as alterações no kernel do Linux e recompila o módulo do kernel do vboxdrv, se necessário.


Esta é apenas uma citação da mensagem de erro. O driver está carregado, mas o contêiner não tem permissão para acessá-lo. Conforme a resposta de erro. Minha pergunta era: como alguém concede permissão para processos dentro de um contêiner para acessar dispositivos do kernel? Como faço para resolver o problema de permissões?
user108168

0

Você precisa /dev/vboxdrvpertencer ao grupo "vboxuser" e ao usuário que inicia o contêiner nesse grupo. Adicione o usuário ao grupo e verifique se há permissões de grupo (ou seja chmod 660 /dev/vboxdrv).


Olá Nathan C. Obrigado pela sua resposta. Onde estou fazendo isso? no ambiente host ou no contêiner?
user108168

O host assumindo que os drivers do kernel estão instalados lá (o que eles deveriam, pois o LXC depende do kernel do host).

Oi Nathan C Obrigado pelo esclarecimento. O dispositivo / dev / vboxdrv pertence ao root e estou iniciando o contêiner como root. Eu estava executando o virtualbox como outro usuário no contêiner, mas tentei executá-lo como raiz. Também modifiquei o dispositivo para definir o grupo como vboxusers e as permissões para 660. Ainda estou recebendo o erro. Tudo funciona bem no host para usuários raiz e não raiz. Não preciso colocar uma configuração no arquivo de configuração lxc para conceder permissões ao contêiner? Foi o que presumi, mas não sei o que são. Obrigado pela ajuda.
user108168

-1

Não deve ser necessário instalar o virtualbox em sua máquina host, desde que o seu contêiner compile o módulo do kernel, você poderá carregá-lo durante um script de pré-inicialização no contêiner LXC. Para maior segurança, você pode copiar os módulos do kernel do VBox para o seu host antes de carregar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.