TL; DR:正在运行的内核版本比VirtualBox在尝试安装时find的内核源要旧。 没有必要自己build造源代码。 最终的解决scheme是实际删除较新版本的内核源代码,并通过yum安装在uname -rfind的匹配版本。
历史:
当试图在新的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.6find。 2.el6.x86_64 /源。
所以在下面的CentOS上的说明我需要内核源码我试着得到源,我现在有~/rpmbuild/SOURCES/kernel-2.6.32-358.6.2.el6与2文件夹: linux-x和vanilla-x 。
我尝试再次安装VirtualBox,但它错误地找不到内核源,所以我也不得不build立这些符号链接:
/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.od -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
不用感谢低调的选民,我能够弄清楚这一点,使得这个过程变得更加简单,不需要手动build立源代码。
这个问题(对我来说)是内核/头文件的更新版本被安装,我必须删除它们才能安装我需要匹配正在运行的内核的旧版本:
首先删除18.1(我发现只有'header'是你需要删除的,'devel'可以有更新和更旧的版本并排):
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的时候一切都很好。
错误:内核configuration无效。
include/linux/autoconf.h or include/config/auto.conf are missing. Run 'make oldconfig && make prepare' on kernel src to fix it.
我会从那开始的。