总结:正在运行的内核版本比 VirtualBox 尝试安装时找到的内核源版本要旧。无需自行构建源;最终解决方案是实际删除较新版本的内核源,并安装在 中找到的匹配版本uname -r
,直至yum
。
历史:
当我尝试在新的 CentOS 服务器上安装 VirtualBox-4.2 时,我收到以下信息:
在 /lib/modules/2.6.32-358.6.2.el6.x86_64/build 或 /lib/modules/2.6.32-358.6.2.el6.x86_64/source 中找不到内核 2.6.32-358.6.2.el6.x86_64 的内核头文件。
因此按照 CentOS 上的说明我需要内核源代码我尝试获取源代码,现在有~/rpmbuild/SOURCES/kernel-2.6.32-358.6.2.el6
2 个文件夹:linux-x
和vanilla-x
。
我尝试再次安装 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
答案1
不用感谢那些投反对票的人,我能够解决这个问题并使这个过程变得更容易,不需要手动构建源代码。
对我来说,问题是安装了较新版本的内核/头文件,我必须先删除它们,然后才能安装与正在运行的内核匹配所需的旧版本:
首先删除 18.1(我发现只需要删除“headers”,“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 一切正常。
答案2
错误:内核配置无效。
include/linux/autoconf.h or include/config/auto.conf are missing.
Run 'make oldconfig && make prepare' on kernel src to fix it.
我就从那开始。