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.

user108168
fonte

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.
    
rcoup
fonte
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.

Abhishek Anand Amralkar
fonte
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).

Nathan C
fonte
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.

user190601
fonte