Virtualbox

在 Gentoo 中建構 VirtualBox 模組

  • September 12, 2016

我有一個 gentoo 安裝,我之前make mrproper在裡面發布了/usr/src/linux.

我想安裝 VirtualBox 模組,所以我複制/boot/System.map並複製/boot/config/usr/src/linux(配置複製到 /usr/src/linux/.config)。

然後我跑了:

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

其中發出以下警告:

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.

出現並沒有失敗,但是當它完成時,我無法載入模組:

# 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

誰能給我一個建議如何解決這個問題?

您很可能在核心中啟用了模組簽名選項。VirtualBox 模組不會自動簽名,每次建構新核心時,我都會重新建構模組並對其進行簽名。

如果是這種情況 - 在終端中輸入以下內容(如果您在 proc 中嵌入了核心配置):

zcat /proc/config.gz | grep CONFIG_MODULE_SIG

如果您沒有嵌入核心配置,請找到您的核心配置 - 它可能位於/usr/src/linux/.config/etc/kernels/kernel-config-<the-corresponding-kernel-version>

例如,您應該看到以下或類似的輸出 (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"

根據選擇的散列函式,您應該使用相同的散列函式來簽署您的模組。有一個實用程序叫做sign-file.

在早期版本中,它sign-file位於 中/usr/src/linux/,至於4.5核心,它現在位於/usr/src/linux/scripts/(同樣是 YMMV)。

啟用簽名模組並實際啟動帶有簽名模組的系統should通常意味著您已經擁有生成的密鑰和 x509 文件(您可以自己生成簽名密鑰)。

執行以下命令:

/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

應該有效地簽署您的模組,並且應該準備好使用modprobe.

找到 x509 文件和您的簽名密鑰,然後替換上述命令中的路徑。

  • 僅供參考,有 4 個 virtualbox 模組需要簽名 - vboxdrvvboxnetflt和.vboxnetadp``vboxpci

連結到官方的 Gentoo 模組簽名文章

引用自:https://unix.stackexchange.com/questions/303689