Erro ao construir o módulo do kernel virtualbox pci-passthrough - o que deu errado?

0

Estou tentando fazer com que o virtualbox funcione na minha máquina com a extensão pci-passthrough. Ao tentar executar uma VM, recebi esta mensagem de erro:

Kernel driver not installed (rc=-1908)
[message asking me to install the vboxdrv kernel driver
by executing /sbin/vboxconfig as root]

Então eu fiz isso e recebi isso:

vboxdrv.sh: Stopping VirtualBox services.
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.

Olhando para o dmesg, a instalação não adicionou novas entradas.

Olhando para o arquivo de log, ele falhou no último módulo:

Building the main VirtualBox module.
Building the net filter module.
Building the net adaptor module.
Building the PCI pass-through module.

significa que este é o código que falha em /usr/lib/virtualbox/vboxdrv.sh , chamado de /sbin/vboxconfig :

log "Building the PCI pass-through module."
if ! myerr='$BUILDINTMP \
    --use-module-symvers /tmp/vboxdrv-Module.symvers \
    --module-source "$MODULE_SRC/vboxpci" \
    --no-print-directory install 2>&1'; then
    log "Error building the module:"
    module_build_log "$myerr"
    failure "Look at $LOG to find out what went wrong"
fi

onde $BUILDINTMP aponta para o arquivo executável /usr/share/virtualbox/src/vboxhost/build_in_tmp

Isso é o quão longe eu cheguei na solução de problemas, não sei o que fazer a seguir.

Algumas informações:

  • O IOMMU / VT-D está ativado
  • a versão do kernel é 4.10.0-38-generic
  • o SO é o Linux Mint 18.3
  • até onde eu sei, os cabeçalhos do kernel estão instalados, "até onde eu sei" significando que o caminho /lib/modules/4.10.0-38-generic/build/include/linux existe e está cheio de arquivos .h e outros subdiretórios
  • O Virtualbox é a versão 5.2.20
  • quando instalei a extensão de passagem PCI para VBox, ele indicou uma instalação bem-sucedida
por sisisisi 12.11.2018 / 15:13

1 resposta

0

A partir dos comentários da pergunta:

modprobe: ERROR: could not insert 'vboxdrv': Required key not available

Isso indica que o módulo já foi criado, mas não foi assinado para satisfazer os requisitos de inicialização segura.

A solução mais simples seria apenas desabilitar o Secure Boot. Isto é especialmente verdade com o VirtualBox 5.2, porque:

  • ele usa seu próprio sistema de compilação de módulos em vez de DKMS e
  • até onde eu sei, não tem recursos para adicionar comandos de assinatura de módulo ao seu procedimento de compilação de módulo

(Eu realmente espero que versões futuras do VirtualBox passem a usar o DKMS ou, pelo menos, forneçam ganchos para permitir a vinculação de scripts personalizados ao procedimento de instalação do módulo do VirtualBox.)

A correção "adequada" para esse problema seria criar sua própria chave de Inicialização Segura e usá-la para assumir o controle total da Inicialização Segura no firmware do sistema ou registrá-la como uma Chave do Proprietário da Máquina (um bootloader- extensão de nível para inicialização segura), se isso não for possível ou for muito difícil.

Isso nunca pode ser totalmente automatizado, já que essa automação seria considerada um dispositivo de proteção de inicialização segura e seria incluída na lista de revogação de UEFI pelo fórum UEFI. Essa lista é incorporada às novas versões de firmware UEFI. Felizmente, a inscrição é um processo único.

Quando a chave for inscrita no Secure Boot, você poderá usar essa chave para assinar os módulos para torná-los aceitáveis para o sistema. Você teria que repetir a assinatura do módulo toda vez que o kernel ou o VirtualBox fosse atualizado.

De acordo com a documentação do Ubuntu, você deve ser capaz de criar uma chave adequada com sudo update-secureboot-policy --new-key e então registrá-la como uma chave de proprietário de máquina (MOK) com sudo update-secureboot-policy --enroll-key e reinicialização. Na reinicialização, o shim.efi deve iniciar automaticamente o programa MokManager, o que exigirá que você confirme o registro da Chave do Proprietário da Máquina, pois somente no momento da inicialização pode verificar com certeza se a entrada vem do usuário e em nenhum outro lugar. Isso é feito para garantir que qualquer personalização das chaves de inicialização segura ocorra com o controle explícito do proprietário / administrador do sistema.

A reinstalação do sistema operacional não removerá a MOK das variáveis de firmware UEFI, mas uma atualização de firmware UEFI ou a reinicialização de todas as configurações de firmware UEFI para os padrões poderão fazer isso. Nesse caso, você precisaria refazer o procedimento de inscrição.

Uma vez que o MOK tenha sido registrado com sucesso, a chave deve ser automaticamente passada para o kernel pelo firmware, e pode ser usada para assinar os módulos. O VirtualBox 5.2 instala seus módulos no diretório /lib/modules/<kernel version number>/misc/ . Para assinar os módulos lá, você usaria o comando kmodsign . Por exemplo, para assinar o módulo vboxdrv.ko :

cd /lib/modules/$(uname -r)/misc
kmodsign sha512 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der vboxdrv.ko

Repita isso para cada módulo que você encontrará neste diretório. Deve haver pelo menos quatro deles: vboxdrv.ko , vboxnetadp.ko , vboxnetflt.ko e vboxpci.ko .

    
por 14.11.2018 / 08:31