TL; DR:実行中のカーネルバージョンは、VirtualBoxがインストールしようとしたときに検出したカーネルソースよりも古いものでした。ソースを自分で作成する必要はありません。最終的な解決策は、実際に新しいバージョンのカーネルソースを削除し、uname -r
にある一致するバージョンをすべてyum
にインストールすることでした。
歴史:
新しいCentOSサーバーにVirtualBox-4.2をインストールしようとすると、次のようになりました。
カーネル2.6.32-358.6.2.el6.x86_64のカーネルヘッダーは、/ lib/modules/2.6.32-358.6.2.el6.x86_64/buildまたは/lib/modules/2.6.32-358.6にありません。 2.el6.x86_64/source。
したがって、CentOSの指示に従うと カーネルソースが必要です ソースを取得しようとしましたが、~/rpmbuild/SOURCES/kernel-2.6.32-358.6.2.el6
とlinux-x
およびVanilla-x
の2つのフォルダーがあります。
VirtualBoxを再度インストールしようとしましたが、カーネルソースが見つからないというエラーが発生したため、次のシンボリックリンクも設定する必要がありました。
/lib/modules/2.6.32-358.6.2.el6.x86_64/build-> /usr/src/kernels/2.6.32-358.6.2.el6.x86_64 /usr/src/kernels/2.6.32-358.6 .2.el6.x86_64-> /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6
しかし、VirtualBoxをインストールしようとすると、makeを実行する必要があるというエラーが表示されます。
/ var/log/vbox-install.log
Uninstalling modules from DKMS
Attempting to install using DKMS
Creating symlink /var/lib/dkms/vboxhost/4.2.18/source ->
/usr/src/vboxhost-4.2.18
DKMS: add completed.
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area...
make KERNELRELEASE=2.6.32-358.6.2.el6.x86_64 -C /lib/modules/2.6.32-358.6.2.el6.x86_64/build M=/var/lib/dkms/vboxhost/4.2.18/build...(bad exit status: 2)
Failed to install using DKMS, attempting to install without
make KBUILD_VERBOSE=1 SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 CONFIG_MODULE_SIG= -C /lib/modules/2.6.32-358.6.2.el6.x86_64/build 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)
mkdir -p /tmp/vbox.0/.tmp_versions ; rm -f /tmp/vbox.0/.tmp_versions/*
WARNING: Symbol version dump /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Module.symvers
is missing; modules will have no dependencies and modversions.
make -f scripts/Makefile.build obj=/tmp/vbox.0
gcc -Wp,-MD,/tmp/vbox.0/linux/.SUPDrv-linux.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/4.4.7/include -Iinclude -I/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include -include include/linux/autoconf.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -fno-stack-protector -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-dwarf2-cfi-asm -fconserve-stack -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -I/lib/modules/2.6.32-358.6.2.el6.x86_64/build/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/vboxdrv/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_AMD64 -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/linux/SUPDrv-linux.o /tmp/vbox.0/linux/SUPDrv-linux.c
In file included from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/unistd.h:5,
from include/linux/unistd.h:7,
from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/seccomp_64.h:4,
from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/seccomp.h:4,
from include/linux/seccomp.h:8,
from include/linux/sched.h:80,
from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:92,
from /tmp/vbox.0/linux/SUPDrv-linux.c:32:
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/unistd_64.h:719:29: error: asm/asm-offsets.h: No such file or directory
make[2]: *** [/tmp/vbox.0/linux/SUPDrv-linux.o] Error 1
make[1]: *** [_module_/tmp/vbox.0] Error 2
make: *** [vboxdrv] Error 2
1)これらのmakeコマンドをどこで実行するのか正確にはわかりません
2)各BUILD/kernel-x/Vanilla&linuxフォルダーでコマンドを実行しようとしましたが、Vanillaフォルダーで実行するとエラーが発生しました。
[dirt@loki kernel-2.6.32-358.6.2.el6]$ cd linux-2.6.32-358.6.2.el6.x86_64/
[dirt@loki linux-2.6.32-358.6.2.el6.x86_64]$ make oldconfig && make prepare
scripts/kconfig/conf -o Arch/x86/Kconfig
#
# configuration written to .config
#
scripts/kconfig/conf -s Arch/x86/Kconfig
CHK include/linux/version.h
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-x86
CALL scripts/checksyscalls.sh
[dirt@loki linux-2.6.32-358.6.2.el6.x86_64]$ cd ../Vanilla-2.6.32-358.6.2.el6/
[dirt@loki Vanilla-2.6.32-358.6.2.el6]$ make oldconfig && make prepare
scripts/kconfig/conf -o Arch/x86/Kconfig
#
# configuration written to .config
#
scripts/kconfig/conf -s Arch/x86/Kconfig
CHK include/linux/version.h
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-x86
CC Arch/x86/kernel/asm-offsets.s
In file included from include/linux/fs.h:424,
from include/trace/events/kmem.h:8,
from include/linux/kmemtrace.h:12,
from include/linux/slub_def.h:13,
from include/linux/slab.h:162,
from include/linux/percpu.h:5,
from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:4,
from include/linux/module.h:20,
from include/linux/crypto.h:21,
from Arch/x86/kernel/asm-offsets_64.c:8,
from Arch/x86/kernel/asm-offsets.c:4:
include/linux/percpu-rwsem.h:11: error: expected specifier-qualifier-list before 'local_t'
include/linux/percpu-rwsem.h: In function 'percpu_down_read':
include/linux/percpu-rwsem.h:19: error: 'struct percpu_rw_semaphore' has no member named 'locked'
include/linux/percpu-rwsem.h:21: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h:23: error: implicit declaration of function 'local_inc'
include/linux/percpu-rwsem.h:23: error: implicit declaration of function 'this_cpu_ptr'
include/linux/percpu-rwsem.h:23: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:25: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h:29: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h: In function 'percpu_up_read':
include/linux/percpu-rwsem.h:49: error: implicit declaration of function 'local_dec'
include/linux/percpu-rwsem.h:49: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h: At top level:
include/linux/percpu-rwsem.h:53: error: expected ')' before '*' token
include/linux/percpu-rwsem.h: In function 'percpu_down_write':
include/linux/percpu-rwsem.h:66: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h:67: error: 'struct percpu_rw_semaphore' has no member named 'locked'
include/linux/percpu-rwsem.h:69: error: implicit declaration of function '__percpu_count'
include/linux/percpu-rwsem.h:69: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h: In function 'percpu_up_write':
include/linux/percpu-rwsem.h:76: error: 'struct percpu_rw_semaphore' has no member named 'locked'
include/linux/percpu-rwsem.h:77: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h: In function 'percpu_init_rwsem':
include/linux/percpu-rwsem.h:83: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:83: error: implicit declaration of function 'alloc_percpu'
include/linux/percpu-rwsem.h:83: error: 'local_t' undeclared (first use in this function)
include/linux/percpu-rwsem.h:83: error: (Each undeclared identifier is reported only once
include/linux/percpu-rwsem.h:83: error: for each function it appears in.)
include/linux/percpu-rwsem.h:84: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:87: error: implicit declaration of function 'local_set'
include/linux/percpu-rwsem.h:87: error: implicit declaration of function 'per_cpu_ptr'
include/linux/percpu-rwsem.h:87: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:88: error: 'struct percpu_rw_semaphore' has no member named 'locked'
include/linux/percpu-rwsem.h:89: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h: In function 'percpu_free_rwsem':
include/linux/percpu-rwsem.h:95: error: implicit declaration of function 'free_percpu'
include/linux/percpu-rwsem.h:95: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:96: error: 'struct percpu_rw_semaphore' has no member named 'counters'
cc1: warnings being treated as errors
In file included from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:4,
from include/linux/module.h:20,
from include/linux/crypto.h:21,
from Arch/x86/kernel/asm-offsets_64.c:8,
from Arch/x86/kernel/asm-offsets.c:4:
include/linux/percpu.h: At top level:
include/linux/percpu.h:168: error: conflicting types for 'free_percpu'
include/linux/percpu-rwsem.h:95: note: previous implicit declaration of 'free_percpu' was here
In file included from include/linux/module.h:20,
from include/linux/crypto.h:21,
from Arch/x86/kernel/asm-offsets_64.c:8,
from Arch/x86/kernel/asm-offsets.c:4:
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:19: error: conflicting types for 'local_inc'
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:19: error: static declaration of 'local_inc' follows non-static declaration
include/linux/percpu-rwsem.h:23: note: previous implicit declaration of 'local_inc' was here
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:25: error: conflicting types for 'local_dec'
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:25: error: static declaration of 'local_dec' follows non-static declaration
include/linux/percpu-rwsem.h:49: note: previous implicit declaration of 'local_dec' was here
make[1]: *** [Arch/x86/kernel/asm-offsets.s] Error 1
make: *** [prepare0] Error 2
反対票のおかげで、私はこれを理解し、プロセスをはるかに簡単にすることができました。手動でソースを作成する必要はありません。
(私にとっての)問題は、新しいバージョンのカーネル/ヘッダーがインストールされていて、実行中のカーネルと一致させるために必要な古いバージョンをインストールする前に、それらを削除する必要があったことでした。
最初に18.1を削除します(削除する必要があるのは「ヘッダー」だけです。「開発者」は新しいバージョンと古いバージョンを並べて使用できます):
Sudo yum remove kernel-headers-2.6.32-358.18.1.el6.x86_64
次に6.2をインストールします。
Sudo yum install kernel-headers-2.6.32-358.6.2.el6.x86_64
Sudo yum install kernel-devel-2.6.32-358.6.2.el6.x86_64
これで、VirtualBoxをインストールすると、すべてがうまくいきます。