Criando módulos do VirtualBox no Gentoo

0

Eu tenho uma instalação do gentoo, onde eu anteriormente emiti make mrproper dentro de /usr/src/linux .

Eu queria instalar os módulos do VirtualBox, então copiei /boot/System.map e /boot/config para /usr/src/linux (a configuração foi copiada para /usr/src/linux/.config).

Eu então corri:

 emerge -1 =app-emulation/virtualbox-modules-4.3.32

que emitiu o seguinte aviso:

make[3]: Entering directory '/usr/src/linux-3.18.25-gentoo-r1'
test -e include/generated/autoconf.h -a -e include/config/auto.conf || (        \
echo >&2;                           \
echo >&2 "  ERROR: Kernel configuration is invalid.";       \
echo >&2 "         include/generated/autoconf.h or include/config/auto.conf are missing.";\
echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";  \
echo >&2 ;                          \
/bin/false)
mkdir -p /var/tmp/portage/app-emulation/virtualbox-modules-4.3.32/work/vboxpci/.tmp_versions ; rm -f /var/tmp/portage/app-emulation/virtualbox-modules-4.3.32/work/vboxpci/.tmp_versions/*

  WARNING: Symbol version dump ./Module.symvers
           is missing; modules will have no dependencies and modversions.

emerge não falhou, mas quando terminou, falhei ao carregar o módulo:

 # modprobe -v vboxdrv
insmod /lib/modules/3.18.25-gentoo-r1-09-07-2015/misc/vboxdrv.ko 
modprobe: ERROR: could not insert 'vboxdrv': Exec format error

Alguém pode me dar um conselho sobre como resolver esse problema?

    
por Oz123 16.08.2016 / 12:15

1 resposta

1

você provavelmente tem a opção de assinatura de módulo ativada no kernel. Os módulos do VirtualBox não são assinados automaticamente e, toda vez que eu construo um novo kernel, eu reconstruo os módulos e os assino.

Se este é o caso - digite no terminal o seguinte (se você incorporou a configuração do kernel no proc):

zcat /proc/config.gz | grep CONFIG_MODULE_SIG

Se você não incorporou a configuração do kernel, encontre a configuração do seu kernel - ela pode estar em /usr/src/linux/.config ou /etc/kernels/kernel-config-<the-corresponding-kernel-version>

Por exemplo, você deve ver a seguinte saída ou similar (YMMV):

CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_ALL=y
# CONFIG_MODULE_SIG_SHA1 is not set
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
CONFIG_MODULE_SIG_SHA512=y
CONFIG_MODULE_SIG_HASH="sha512"
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"

Dependendo da função hash escolhida, você deve usar a mesma função hash para assinar seus módulos. Existe um utilitário chamado sign-file .
Nas versões anteriores, esse sign-file estava localizado em /usr/src/linux/ , já que para 4.5 kernels agora está localizado em /usr/src/linux/scripts/ (novamente YMMV).

Ter módulos assinados ativados e, na verdade, inicializar um sistema com módulos assinados should geralmente significa que você já tem uma chave gerada e um arquivo x509 (você mesmo pode gerar uma chave de assinatura).

Executando o seguinte comando:

/usr/src/linux/scripts/sign-file sha512 /usr/src/linux/certs/signing_key.pem /usr/src/linux/certs/signing_key.x509 /lib/modules/<your-kernel-version>/misc/vboxdrv.ko

deve assinar seus módulos com eficiência e deve estar pronto para modprobe .

Localize o arquivo x509 e sua chave de assinatura e substitua os caminhos no comando acima.

  • FYI existem quatro módulos de caixa virtual que precisam ser assinados - vboxdrv , vboxnetflt , vboxnetadp e vboxpci .

Link para o artigo oficial de assinatura do Módulo Gentoo

    
por 12.09.2016 / 09:49