make mrproper
以前に公開したGentooインストールがあります/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.
emergeは失敗しませんが、完了するとモジュールをロードできません。
# 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
この問題を解決する方法についてアドバイスできる人はいますか?
答え1
カーネルでモジュール署名オプションを有効にした可能性があります。 VirtualBoxモジュールは自動的に署名されないため、新しいカーネルを構築するたびにモジュールを再構築して署名します。
この場合、端末に次のように入力します(プロセスにカーネル構成が組み込まれている場合)。
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/
の場合(再びYMMV)にあります。4.5
/usr/src/linux/scripts/
署名モジュールを有効にして実際に署名モジュールを使用してシステムを起動することは、通常、生成された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モジュールがあります -
vboxdrv
、vboxnetflt
および。vboxnetadp
vboxpci