找不到内核 3.10.0-229.el7.x86_64 的内核头文件

找不到内核 3.10.0-229.el7.x86_64 的内核头文件

当我在 CentOS 7 终端中键入命令时service vboxdrv setup,出现以下错误:

Your kernel headers for kernel 3.10.0-229.el7.x86_64 cannot be found  

我该如何解决这个错误?

当我通过键入打开日志文件时vi /var/log/vbox-install.log,内容为:

Uninstalling modules from DKMS
  removing old DKMS module vboxhost version  5.0.4

------------------------------
Deleting module version: 5.0.4
completely from the DKMS tree.
------------------------------
Done.
Attempting to install using DKMS

Creating symlink /var/lib/dkms/vboxhost/5.0.4/source ->
                 /usr/src/vboxhost-5.0.4

DKMS: add completed.
Failed to install using DKMS, attempting to install without
Makefile:185: *** Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=<directory> and run Make again.  Stop.

使用以下命令安装 VirtualBox 5.0.4 的过程中发生该错误本教程中的说明。总而言之,到目前为止,我有:

vi /etc/yum.repos.d/virtualbox.repo

添加以下文本,然后保存并退出:

[virtualbox]
name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
enabled=1
gpgcheck=1
gpgkey=http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc

然后在命令提示符下键入:

# rpm -Uvh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# yum install gcc make patch  dkms qt libgomp 
# yum install kernel-headers kernel-devel fontforge binutils glibc-headers glibc-devel
...
Complete!  
# cd /usr/src/kernels
# ls -al
total 12
drwxr-xr-x.  3 root root 4096 Sep 25 16:14 .
drwxr-xr-x.  4 root root 4096 Sep 25 14:17 ..
drwxr-xr-x. 22 root root 4096 Sep 25 16:14 3.10.0-229.14.1.el7.x86_64
# export KERN_DIR=/usr/src/kernels/3.10.0-229.14.1.el7.x86_64
# yum install VirtualBox-5.0
...
Complete!  
# service vboxdrv setup
Stopping VirtualBox kernel modules                         [  OK  ]
Uninstalling old VirtualBox DKMS kernel modules            [  OK  ]
Removing old VirtualBox pci kernel module                  [  OK  ]
Removing old VirtualBox netadp kernel module               [  OK  ]
Removing old VirtualBox netflt kernel module               [  OK  ]
Removing old VirtualBox kernel module                      [  OK  ]
Trying to register the VirtualBox kernel modules using DKMSError! echo
Your kernel headers for kernel 3.10.0-229.el7.x86_64 cannot be found at
/lib/modules/3.10.0-229.el7.x86_64/build or /lib/modules/3.10.0-229.el7.x86_64/source.
                                                       [FAILED]
(Failed, trying without DKMS)
Recompiling VirtualBox kernel modules                      [FAILED]
(Look at /var/log/vbox-install.log to find out what went wrong)

内容见上文vi /var/log/vbox-install.log

出于好奇,我查了一下/lib/modules/,发现了以下内容:

[root@localhost kernels]# cd /lib/modules
[root@localhost modules]# ls -al
total 16
drwxr-xr-x.  4 root root 4096 Sep 25 15:58 .
dr-xr-xr-x. 30 root root 4096 Sep 25 16:23 ..
drwxr-xr-x.  7 root root 4096 Sep 25 15:59 3.10.0-229.14.1.el7.x86_64
drwxr-xr-x.  8 root root 4096 Sep 25 16:24 3.10.0-229.el7.x86_64

根据 @EricRenouf 的建议,我输入uname -a,终端回复:

Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

我没有重启过机器,但是教程没有说重启。

答案1

解决方案很可能会找到在这个问题上简短的版本是,运行

sudo yum install "kernel-devel-uname-r == $(uname -r)"

这将为您当前运行的内核版本安装内核头文件。

我怀疑您在某个时候做了yum update类似的操作,并且实际上安装了新内核,但您尚未开始运行它。可能发生的情况是,当您执行yum install问题中的步骤时,它会查看最新安装的版本并获取其标题。但是,当您启动时,vboxdrv它会查看正在运行的内核并尝试查找其标头。

您正在运行的内核和已安装的内核不同步(这通常不是一个大问题),但您发现了一个很重要的情况。

答案2

此问题在 Virtualbox 6.1 和 Fedora 32 上仍然出现。我当前的内核版本与uname -r内核头版本不匹配。

# uname -r 
5.10.17-100.fc32.x86_64+debug

# yum list installed kernel-devel kernel-headers kernel
Installed Packages
kernel.x86_64                                         5.10.17-100.fc32                                  @updates
kernel-devel.x86_64                                   5.10.17-100.fc32                                  
@updates
*kernel-headers.x86_64                                 5.10.13-100.fc32*

您可以通过更改虚拟框脚本来解决此问题/usr/lib/virtualbox/check_module_dependencies.sh

就我而言,我更改了 fedora 部分以反映我已安装的标头的当前版本,它与我正在运行的内核版本匹配,但与uname -r. IE。 (我已经把原来的行删掉了)

case "${UNAME}" in *.fc*.i686|*.fc*.x86_64)  # Fedora
        BASE_PACKAGE="kernel-devel"
        ###VERSIONED_PACKAGE="kernel-devel-${UNAME}"
        VERSIONED_PACKAGE="kernel-devel-5.10.13-100"

将来如果有新发布的内核版本与标头版本匹配,您可以随时删除,这是您的 VirtualBox 再次停止

相关内容