非常に敏感なボックスにvirtualboxをインストールしようとしています。ずっと文句が出ますね。
/etc/init.d/vboxdrv KERN_DIR=/root/linux-2.6.18.5 設定
実行し、次のエラーが発生します。
Attempting to install using DKMS
Creating symlink /var/lib/dkms/vboxhost/4.1.0/source ->
/usr/src/vboxhost-4.1.0
DKMS: add Completed.
You can use the --kernelsourcedir option to tell DKMS where it's located.
Failed to install using DKMS, attempting to install without
make KBUILD_VERBOSE=1 SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -C /root/linux-2.6.18.5 modules
test -e include/linux/autoconf.h -a -e include/config/auto.conf || ( \
echo; \
echo " ERROR: Kernel configuration is invalid."; \
echo " include/linux/autoconf.h or include/config/auto.conf are missing."; \
echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
echo; \
/bin/false)
ERROR: Kernel configuration is invalid.
include/linux/autoconf.h or include/config/auto.conf are missing.
Run 'make oldconfig && make prepare' on kernel src to fix it.
mkdir -p /tmp/vbox.0/.tmp_versions
rm -f /tmp/vbox.0/.tmp_versions/*
WARNING: Symbol version dump /root/linux-2.6.18.5/Module.symvers
is missing; modules will have no dependencies and modversions.
make -f scripts/Makefile.build obj=/tmp/vbox.0
gcc -m32 -Wp,-MD,/tmp/vbox.0/linux/.SUPDrv-linux.o.d -nostdinc -isystem /usr/lib/gcc/i386-redhat-linux/4.1.2/include -D__KERNEL__ -Iinclude -include include/linux/
autoconf.h -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -pipe -msoft-float -mpreferred-stack-boundary=2 -ffreestanding -Iincl
ude/asm-i386/mach-default -fomit-frame-pointer -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h
-I/root/linux-2.6.18.5/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -I/tmp/vbox.0/vboxdrv/ -I/tmp/vbox.0/vboxdrv/include -I/tmp/vbox.0/vboxd
rv/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DCONFIG_VBOXDRV_AS_MISC -DRT_ARCH_X86
-DVBOX_WITH_64_BITS_GUESTS -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(SUPDrv_linux)" -D"KBUILD_MODNAME=KBUILD_STR(vboxdrv)" -c -o /tmp/vbox.0/linu
x/SUPDrv-linux.o /tmp/vbox.0/linux/SUPDrv-linux.c
cc1: error: include/linux/autoconf.h: No such file or directory
この問題を解決するのに役立つLinuxカーネル(およびVirtualbox)のコンパイル経験がある人はいますか?
答え1
カーネルを直接コンパイルしましたか?カーネルソースツリー(in /root/linux-2.6.18.5
)をモジュールコンパイルシステムに渡すようです。しかし、今の段階ではそのようなものは必要ありません。外部モジュールをコンパイルするには複数のファイルが必要です。そのうちのいくつかはカーネルソースコードから直接インポートされ、他のものはカーネルのコンパイルプロセス中に生成されます。これらのファイルのほとんどはCヘッダーファイル(.h
このようなファイルinclude/linux/autoconf.h
)ですがModule.symvers
。
直接コンパイルしたカーネルを実行する場合は、コンパイルツリーの一部を保存する必要があります。最も簡単な方法は何も削除しないことですが、スペースが制限されているか、他の理由で、少なくとも名前が含まれているすべてのファイルと*.h
カーネルKbuild
ソースMakefile
ツリーのルートにあるいくつかのファイル.config
(、.kernelvariables
および)を保持する必要がありますModule.symvers
。
ディストリビューションで提供されたカーネルを実行している場合は、そのカーネルヘッダーを含むパッケージをインストールするだけです(CentOSではそうですkernel-devel
)。そしてインストーラに値を渡さないでくださいKERNEL_DIR
。デフォルトの場所で値を見つけることができるはずです。
答え2
CentOS 6.3にVBゲストアドインをインストールしようとしましたが、「誤ったカーネル構成」と同じエラーが発生しました。私に合った解決策を見つけました。上記のようにシンボリックリンクを作成する必要はありません。 yum install gcc kernel-devel kernel-headers dkmsでyum groupinstall "開発ツール"を実行すると
問題が解決しました。これがなければ、ゲスト追加はインストールされません。