vboxdrv.sh: falhou: modprobe vboxdrv falhou. Por favor, use 'dmesg' para descobrir por que

53

Estou tendo problemas ao executar o VirtualBox no meu laptop Ubuntu. Meu laptop é de inicialização dupla e está em execução (Windows 10 - eu acho, não o utiliza há anos), além do Ubuntu 16.0.4 LTS.

Tenho a inicialização segura ativada nas configurações de BIOS do meu laptop.

Estou ciente de que há perguntas semelhantes postadas aqui, especificamente estas duas:

Eu segui todas as instruções fornecidas nas seções de respostas para essas duas perguntas - ainda assim, o problema permanece sem solução.

Aqui está a saída do console, quando tento executar o virtualbox:

me@YOURBOX:~$ virtualbox
WARNING: The vboxdrv kernel module is not loaded. Either there is no module
         available for the current kernel (4.4.0-47-generic) or it failed to
         load. Please recompile the kernel module and install it by

           sudo /sbin/vboxconfig

         You will not be able to start VMs until this problem is fixed.

Aqui está a saída do console quando executo /sbin/vboxconfigconforme sugerido:

me@YOURBOX:~$ sudo /sbin/vboxconfig  
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.

Aqui está o final da saída de dmesg:

[   44.319682] audit: type=1400 audit(1491313982.374:11): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/evince-previewer" pid=705 comm="apparmor_parser"
[   45.041433] cgroup: new mount options do not match the existing superblock, will be ignored
[   59.682936] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   59.697820] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   59.702008] IPv6: ADDRCONF(NETDEV_UP): enp2s0f0: link is not ready
[   60.267000] IPv6: ADDRCONF(NETDEV_UP): enp2s0f0: link is not ready
[   62.473044] IPv6: ADDRCONF(NETDEV_UP): wlp3s0: link is not ready
[   70.681706] audit_printk_skb: 60 callbacks suppressed
[   70.681709] audit: type=1400 audit(1491314008.734:32): apparmor="STATUS" operation="profile_load" profile="unconfined" name="docker-default" pid=2009 comm="apparmor_parser"
[   70.850936] aufs 4.x-rcN-20160111
[   75.407218] bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this.
[   75.408555] Bridge firewalling registered
[   75.427172] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
[   75.848416] ip_tables: (C) 2000-2006 Netfilter Core Team
[   76.703232] Initializing XFRM netlink socket
[   77.060003] IPv6: ADDRCONF(NETDEV_UP): docker0: link is not ready
[   80.101042] aufs au_opts_verify:1597:dockerd[1402]: dirperm1 breaks the protection by the permission bits on the lower branch
[  113.895236] wlp3s0: authenticate with 84:16:f9:77:e1:54
[  113.910483] wlp3s0: send auth to 84:16:f9:77:e1:54 (try 1/3)
[  113.912712] wlp3s0: authenticated
[  113.915101] wlp3s0: associate with 84:16:f9:77:e1:54 (try 1/3)
[  113.919397] wlp3s0: RX AssocResp from 84:16:f9:77:e1:54 (capab=0x1411 status=0 aid=1)
[  113.919516] wlp3s0: associated
[  113.919559] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready

Agora, não vou mentir - não tenho absolutamente nenhuma idéia do que o dmesg acabou de vomitar - e, tanto quanto posso dizer, não há mensagens de erro na saída do log - o que torna a situação ainda mais irritante.

Alguém já instalou o VirtualBox 5.x em um laptop executando o Ubuntu 16.0.4 LTS - mas com a inicialização segura ativada no BIOS ? - se sim, qual é a solução. ???!

Muitas pessoas têm esse problema - mesmo alguns anos atrás. é muito estranho que ninguém pareça ter uma solução para isso - ???

Homunculus Reticulli
fonte
2
"Tenho a inicialização segura ativada nas configurações do BIOS do meu laptop." - Isso pode ser parte do seu problema. Lembro-me de um tempo atrás ouvindo que a inicialização segura quebrou o VBox.
Android Dev
Outra pergunta semelhante: askubuntu.com/questions/760671/…
Dan Dascalescu

Respostas:

64

VirtualBox + Inicialização segura + Ubuntu = falha

O problema é o requisito de que todos os módulos do kernel sejam assinados por uma chave confiável pelo sistema UEFI, caso contrário, o carregamento falhará. O Ubuntu não assina os módulos do kernel vbox * de terceiros, mas oferece ao usuário a opção de desativar a Inicialização segura na instalação do pacote virtualbox. Eu poderia fazer isso, mas então eu veria uma mensagem irritante de "Inicializando em modo inseguro" toda vez que a máquina iniciar, e também a instalação de inicialização dupla do Windows 10 que eu tenho não funcionaria.

Ubuntu 16.04 em um Dell Latitude E7440 com BIOS A18 e com uma instalação de inicialização dupla do Windows 10.

O crédito vai para a fonte primária de informações que usei para resolver esse problema, que se aplica especificamente ao Fedora / Redhat: http://gorka.eguileor.com/vbox-vmware-in-secureboot-linux-2016-update/

E uma pergunta relevante ao Ubuntu: Não foi possível carregar o 'vboxdrv' após a atualização para o Ubuntu 16.04 (e quero manter a inicialização segura)

Etapas para fazê-lo funcionar, especificamente para Ubuntu / Debian

  1. Instale o pacote virtualbox. Se a instalação detectar que o Secure Boot está ativado, você receberá o problema em questão e terá a opção de desativar o Secure Boot. Escolha "Não".

  2. Crie um par de chaves RSA público / privado pessoal que será usado para assinar os módulos do kernel. Eu escolhi usar a conta root e o diretório / root / module-signature / para armazenar tudo relacionado à assinatura de módulos do kernel.

    $ sudo -i
    # mkdir /root/module-signing
    # cd /root/module-signing
    # openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"
    [...]
    # chmod 600 MOK.priv
    
  3. Use o utilitário MOK ("Chave do proprietário da máquina") para importar a chave pública para que ela possa ser confiável pelo sistema. Esse é um processo de duas etapas em que a chave é importada primeiro e, posteriormente, deve ser registrada quando a máquina for inicializada na próxima vez. Uma senha simples é boa o suficiente, pois é apenas para uso temporário.

    # mokutil --import /root/module-signing/MOK.der
    input password:
    input password again:
    
  4. Reinicie a máquina. Quando o carregador de inicialização é iniciado, o utilitário EFI do MOK manager deve iniciar automaticamente. Ele solicitará partes da senha fornecida na etapa 3. Escolha “Inscrever MOK” e, em seguida, você verá a chave importada na etapa 3. Conclua as etapas de inscrição e continue com a inicialização. O kernel do Linux registrará as chaves carregadas, e você poderá ver sua própria chave com o comando: dmesg|grep 'EFI: Loaded cert'

  5. Usando um utilitário de assinatura enviado com os arquivos de compilação do kernel, assine todos os módulos do VirtualBox usando a chave MOK privada gerada na etapa 2. Coloquei isso em um pequeno script /root/module-signing/sign-vbox-modules, para que ele possa ser executado facilmente quando novos kernels forem instalados como parte de atualizações regulares :

    #!/bin/bash
    
    for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
      echo "Signing $modfile"
      /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
                                    /root/module-signing/MOK.priv \
                                    /root/module-signing/MOK.der "$modfile"
    done
    

    E depois:

    # chmod 700 /root/module-signing/sign-vbox-modules
    
  6. Execute o script da etapa 5 como raiz. Você precisará executar o script de assinatura sempre que uma nova atualização do kernel for instalada, pois isso causará uma reconstrução dos módulos do VirtualBox de terceiros. Use o script somente após a inicialização do novo kernel, pois ele depende modinfo -ne uname -rinforma em qual versão do kernel assinar.

  7. Carregue o módulo vboxdrv e inicie o VirtualBox:

    # modprobe vboxdrv
    

O procedimento também pode ser usado para assinar outros módulos do kernel de terceiros, como os drivers gráficos da nvidia, se necessário. (Eu não testei isso sozinho.)

Nota: A resposta acima foi totalmente proveniente da postagem do blog de Øyvind Stegard, VirtualBox + Secure Boot + Ubuntu = fail .

Android Dev
fonte
11
Eu recebo um erro: vboxdrv.sh: failed: modprobe vboxnetflt failed. Please use 'dmesg' to find out why. dmesg:[70567.246789] vboxdrv: Found 2 processor cores [70567.267310] vboxdrv: TSC mode is Invariant, tentative frequency 2166734189 Hz [70567.267315] vboxdrv: Successfully loaded version 5.0.40_Ubuntu (interface 0x00240000)
marshy101 21/07
5
Nota sobre 18.04+: o grep sugerida deve ser: dmesg|grep 'EFI:'em vez dedmesg|grep 'EFI: Loaded cert'
gkephorus
3
Absolutamente não sei e entendo o que isso faz, mas funcionou.
Neri
11
Apenas no caso de alguns serem necessários: eu tive esse problema sem UEFI ou modo seguro. No meu caso, a instalação do virtualbox-dkms no 18.04.x ​​foi interrompida. Minha correção foi: apt purge virtualbox-dkms && apt install virtualbox-dkms && modprobe vboxdrv
gorlok 09/02
11
se você atualizar o virtualbox de 5.2 para 6.0, não esqueça de concluir as etapas 6 e 7 novamente.
voleger 11/02
12

A resposta acima provavelmente funciona bem, mas se você quiser um tempo mais fácil para isso:

Eu fui capaz de resolvê-lo

inicializando no BIOS e indo em> avançado (f7)> inicialização> role para baixo até "inicialização segura"> altere "modo EUFI do Windows" para "outro SO"

Minha caixa virtual agora funciona perfeitamente agora.

Lee Gildemeester
fonte
2
Existe uma razão para você não querer fazer isso?
Taegost
Devido a algum pico de energia ou algo que meu BIOS foi reiniciado, eu precisava fazer isso. Agora não recebo o erro acima.
jamadagni 26/01