GentooでVirtualBoxモジュールを作成する

GentooでVirtualBoxモジュールを作成する

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モジュールがあります - vboxdrvvboxnetfltおよび。vboxnetadpvboxpci

Gentooモジュールの公式署名記事リンク

関連情報