核心提示:
检查/lib/module/{内核版本号}/kernel/目录下的文件(符号链接) header,及source是否有效,它们应该链到你的内核编译目录里
使用centos 6.x的linux,嫌自带内核太老,自己编译的内核3.0.32.
virtualbox长期没更新,今天更新一下,到vbox官方下载安装包VirtualBox-4.2.12-84980-Linux_x86.run,sh 运行之,但得到提示:
[root@fsc download]# sh VirtualBox-4.2.12-84980-Linux_x86.run
Verifying archive integrity... All good.
Uncompressing VirtualBox for Linux installation............
VirtualBox Version 4.2.12 r84980 (2013-04-12T10:19:13Z) installer
Please install the build and header files for your current Linux kernel.
The current kernel version is 3.0.32
Problems were found which would prevent VirtualBox from installing.
Please correct these problems and try again.
印象中编译内核时安装装过header,要不然上次是不可能安装成功的。
思考原因,是否因为内核某些地方出错了原因,如某些环境变量或者什么东西,实在不想再次重新编译内核,麻烦,好像还得另外下载并编译网卡驱动。于是考虑找个别人编译好的rpm包装上,找到了一个叫 ELRepo 的项目,提供一系列的内核rpm包 http://elrepo.org/linux/kernel/el6/i386/RPMS/ 看上去还是相当不错的,可以安装他们的yum源。
正准备下载,突然想到,机器换固态硬盘了,是直接使用cp带-p参数拷过来的,而家目录里的很多文件在机械硬盘上,通过符号链接链到~/opdata,当时的内核文件就在其中。联想到/lib/module/`uname -r`/目录里有两个符号链接,是链接到编译内核的目录里的。是否安装kernel-header其实并没有将相应文件拷到某个目录里,而只是符号链接过去。去检查一下。
[root@fsc download]# cd /lib/modules/3.0.32/kernel/
[root@fsc kernel]# ls -alh ..
总用量 3.8M
drwxr-xr-x. 4 root root 4.0K 12月 2 11:05 .
dr-xr-xr-x. 16 root root 4.0K 6月 2 10:47 ..
lrwxrwxrwx. 1 root root 39 5月 26 2012 build -> /home/feng/software/kernel/linux-3.0.32
drwxr-xr-x. 12 root root 4.0K 6月 24 2012 kernel
......
-rw-r--r--. 1 root root 964K 12月 2 11:05 modules.usbmap
lrwxrwxrwx. 1 root root 39 6月 24 2012 source -> /home/feng/software/kernel/linux-3.0.32
果然,build, source两个链接文件,还是链接到原来的位置,而且被shell以红背景提示是“死链接”。
删除这两个链接文件,并重建有效的链接
rm build source
ln -s /home/feng/optdata/software/kernel/linux-3.0.32/ build
ln -s /home/feng/optdata/software/kernel/linux-3.0.32/ source
再次运行sh VirtualBox-4.2.12-84980-Linux_x86.run,virtualbox顺利安装。