无法安装VIrtualbox,“指定KERN_DIR = <目录>” —将Virtual Box安装到Debian?


38

我收到此错误:

Makefile:181:***错误:无法找到当前Linux内核的源。指定KERN_DIR =并再次运行Make。停止。

基本上我在做:

$ sudo /etc/init.d/vboxdrv setup
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.
The missing package can be probably installed with
yum install kernel-devel-2.6.32-573.18.1.el6.x86_64

Building the main Guest Additions module                   [FAILED]
(Look at /var/log/vboxadd-install.log to find out what went wrong)

错误是:

Makefile:181:***错误:无法找到当前Linux内核的源。指定KERN_DIR =并再次运行Make。停止

这是什么错误以及如何解决?

Answers:


34

确保安装内核头文件包。

http://www.cyberciti.biz/faq/howto-install-kernel-headers-package

Make sure you have updated version

Type the following command
$ sudo apt-get update

OR as root user enter:
# apt-get update

Search for kernel version (optional)

Type the following command:
$ apt-cache search linux-headers-$(uname -r)

Install linux-header package under Debina or Ubuntu Linux

Type the following command:
$ sudo apt-get install linux-headers-$(uname -r)

OR as root user:
# apt-get install linux-headers-$(uname -r)

编辑:

我只是碰巧也需要在我自己的服务器上安装它,并在尝试在debian repos中使用virtualbox时遇到相同的错误。我继续添加VirtualBox存储库并从那里安装。这样会更好,因为它们是最新的。

作为根

$ nano /etc/apt/sources.list 

在下面添加行以进行挤压

deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free

然后添加适用于apt-secure的Oracle公钥

$ wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -

然后运行更新并安装最新的4.2

apt-get update
apt-get install virtualbox-4.2

安装dkms软件包以确保VirtualBox主机内核模块是最新的

apt-get install dkms

应该很好走。从VirtualBox的Linux网站上获得了这些说明,该说明目前似乎已关闭,但链接为https://www.virtualbox.org/wiki/Linux_Downloads


2
apt-cache search linux-headers-$(uname -r)即使执行了上述命令,该命令也不会为我返回任何内容。
hhh 2012年

@hhh我认为这个答案不错,应该接受。我不知道您要使用此** linux-headers-$(uname -r)**是什么。请解释或打开一个新问题。我认为该线程已完成。
莱奥列奥波尔德·赫兹준 영

@hhh有些发行版没有linux-header的存储库。:您可以检查这一项computingforgeeks.com/2015/08/...
warmblue

这些答案对我都不起作用,因为我下载的发行版的内核比存储库中可用的内核更旧。我不得不跑步apt-get update && apt-get -y dist-upgrade
柏拉图

29

如何为Fedora / CentOS修复此问题

首先,请确保您安装的软件包(尤其是内核)是最新的:

$ sudo yum update     

如果它更新了内核版本,则必须重新启动,以便uname -r与中的目录名称匹配/usr/src/kernels/。然后

$ sudo yum install kernel-devel gcc
$ echo export KERN_DIR=/usr/src/kernels/`uname -r` >> ~/.bashrc
$ source ~/.bashrc     # to set the variable in your current shell
$ sudo echo $KERN_DIR  # verify the value is set
$ sudo ls $KERN_DIR    # verify the directory exists 

编译完成后,VirtualBox内核模块应该可以正常工作。

资料来源:


1
完成上述步骤后,必须重新启动来宾系统,然后再次重新安装vbox来宾。
Reddy 2015年

这是要安装的正确软件包,但是重新编译内核模块需要root特权,并且在root用户中运行某些东西会丢失环境变量(包括KERN_DIR)。相反,我确实这样做了sudo -sexport KERN_DIR=/usr/src/kernels/XXX但是我确定有一种更好的方法将变量持久化为sudo模式
Migwell,2016年

就我而言(CentOS 6.7),[uname -r]是[2.6.32-573.el6.x86_64],但是[ls / usr / src / kernels /]打印[2.6.32-573.22.1.el6.x86_64]因此,请小心并使用实际的现有目录名
jnr

1
source ~/.bashrc无需重新启动即可在当前环境中设置KERN_DIR。
贾斯汀

我收到错误消息,它不是目录。请注意,它的末尾需要一个斜杠。.echo export KERN_DIR = / usr / src / kernels / uname -r/ >>〜/ .bashrc
Artjom Kurapov

2

@hhh您应该只搜索linux-headers并找到适合您的体系结构的好方案。就我而言:

# aptitude search linux-headers      
v   linux-headers                                                       -                                                                              
p   linux-headers-2.6-amd64                                             - Header files for Linux amd64 configuration (dummy package)                   
p   linux-headers-3.2.0-4-all                                           - All header files for Linux 3.2 (meta-package)                                
p   linux-headers-3.2.0-4-all-amd64                                     - All header files for Linux 3.2 (meta-package)                                
i A linux-headers-3.2.0-4-amd64                                         - Header files for Linux 3.2.0-4-amd64                                         
i A linux-headers-3.2.0-4-common                                        - Common header files for Linux 3.2.0-4                                        
p   linux-headers-3.2.0-4-common-rt                                     - Common header files for Linux 3.2.0-4-rt                                     
p   linux-headers-3.2.0-4-rt-amd64                                      - Header files for Linux 3.2.0-4-rt-amd64                                      
i   linux-headers-amd64                                                 - Header files for Linux amd64 configuration (meta-package)                    
p   linux-headers-rt-amd64                                              - Header files for Linux rt-amd64 configuration (meta-package)

因此,就我而言,我有一个64位体系结构,必须安装linux-headers-amd64

另一件事是apt-get add不存在。替换apt-getapt-key


2

我在CentOS中遇到了KERN_DIR错误。查看了shell安装脚本,发现将KERN_DIR设置为/ usr / src / kernels。然后“ uname -r”显示我运行的内核版本比/ usr / src / kernels下的源代码低。

我查看了/boot/grub/menu.lst ...,并确认内核不匹配。奇怪的。

因此修复方法是...“ yum -y更新内核”,然后重新启动。然后安装了VMWare工具。


1

尝试:

yum install kernel* dkms gcc

然后

yum install kernel-uek-devel

然后重启机器


Debian使用apt-get而不是yum
RobinJ 2014年

0

该错误意味着vboxdrv/ vboxadd找不到您的内核源。

该脚本期望该/lib/modules/$(uname -r)/build文件夹指向/usr/src/kernels/$(uname -r)应该在其中执行kernelrelease任务的Makefile ,以便可以与您当前安装的内核版本(uname -r)进行比较。

因此,如果此命令失败:

make -C /usr/src/kernels/$(uname -r)/build kernelrelease

您应该通过以下方式安装Linux标头:

sudo apt-get install linux-headers-$(uname -r)

有关更多详细信息,请检查此帖子


0

对于任何操作系统,您需要确保已安装所有必需的软件包。就我在Debian上的情况而言,我缺少dkms和linux-headers-generic软件包。

#apt-get install dkms build-essential linux-headers-generic linux-headers-$(uname -r)

有关完整说明,请参见VirtualBox论坛帖子

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.