震惊!增强功能安装失败,百般瞎折腾无效,没想到只需要一个小操作就能完美解决?
记录一下我曲折的增强功能安装路程,并总结一下安装增强功能的步骤。我的是centos7,vbox5.28
目录
报错情况
解决
安装步骤
1.确认增强包iso版本。
2.其次,需要装好需要用到的全套大礼包
2.1 安装Development Tools
2.2 安装gcc环境
3.kernel相关安装
3.1 kernel相关版本及安装
3.2 重启centos
4.额外的补充命令
5.最后,安装增强功能并重启
附:kernel版本不一致的报错
先来看一下我的报错。
起初,在运行安装增强功能包的过程中,没有提示错误,但也未提示安装成功,重启后发现并未安装成功。后来在我一顿操作折腾下,多了句提示,提示我看vboxadds-setup.log文件中其出现的错误。
这是在查看/var/log/vboxadds-setup.log时,中间的某段,(没想到能解决,就没来得及存文字,从别处找了个类似的报错)。在我的log记录中,中间运行多段都是这样,提示ERROR: Kernel configuration is invalid.";
make[1]: warning: -jN forced in submake: disabling jobserver mode.
test -e include/generated/autoconf.h -a -e include/config/auto.conf || ( \
echo >&2; \
echo >&2 " ERROR: Kernel configuration is invalid."; \
echo >&2 " include/generated/autoconf.h or include/config/auto.conf are missing.";\
echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
echo >&2 ; \
/bin/false)
不过从log文件可以看出,这也没使得安装中断,最后中断的关键报错是类似于下面这种(又是找了个类似报错,相似点在于标红的报错)
In file included from /tmp/vbox.0/vboxvideo_guest.h:32:0,
from /tmp/vbox.0/modesetting.c:27:
/tmp/vbox.0/vbox_drv.h:195:21: error: field ‘base’ has incomplete type
struct drm_encoder base;
^
make[2]: *** [/tmp/vbox.0/modesetting.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /tmp/vbox.0/hgsmi_base.c:27:0:
/tmp/vbox.0/vbox_drv.h:195:21: error: field ‘base’ has incomplete type
struct drm_encoder base;
^
make[2]: *** [/tmp/vbox.0/hgsmi_base.o] Error 1
make[1]: *** [_module_/tmp/vbox.0] Error 2
make: *** [vboxvideo] Error 2
基于第一个,我曾尝试按照提示,企图执行 make oldconfig && make prepare,但此句命令出错。基于第二个,百度后,会发现这是一个c++相关报错。然后我试着安装gcc环境,然而并没什么用。在我一顿瞎折腾后仍然无果,我又谷歌了一下,发现几个解决办法。在vitualbox论坛某帖子 下有提到,可以将RHEL内核换成UEK内核(不过因 有人没能成功 等原因,我没有进行尝试)。最后,centos里一切所需组件等都安装齐全但仍未果,而就在我一筹莫展的时候,又突然想尝试一下,更换了centos的VBoxGuestAddition增强功能包。点此处下载相应版本的包 我的vbox版本是5.28,所以我下了VBoxGuestAdditions_5.0.28.iso。选中vbox虚拟机列表中的centos虚拟机,在 设置 中的 存储中将IDE控制器磁盘选择为刚才下载的磁盘,再次运行,成功安装!如下图。(之前安装失败,就只是少了This may take a while及往后的三行语句)
根据我期间的搜索和瞎折腾,总结了一下如何规避潜在报错的步骤
首先一定要确认好,自己的GuestAddition.iso是和自己的vbox版本匹配的!!(不然就会像我一样TAT)点此处下载相应版本的包
如果在安装centos时,没有安装Development Tools,可以先安装。
yum -y groupinstall "Development Tools"
一定要安装gcc相关环境
yum -y install gcc*
或者如下只安装c++
yum -y install gcc-c++
先确认一下,自己的kernel-headers和kernel-devel是否版本对应一致。以下两个命令可以输出各自版本号,由此对比查看是否一致。
rpm -qa | grep kernel-devel
uname -r
3.1.1不一致的话,需要将其统一为同一版本。(不然的话,安装中会出现报错(报错见最后一个标题“kernel版本不一致的报错”))。注意,需要前面执行过uname -r,在运行第二句时,才能找到对应的devel-CURRENT_KERNEL。
uname -r
sudo yum install kernel-devel-CURRENT_KERNEL
上面两句也可直接换作
yum install "kernel-devel-uname-r == $(uname -r)"
当然以上 3.1.1步骤,也可以简单粗暴地直接用下面两句,默认下载安装最新版本
yum install kernel-headers
yum install kernel-devel
3.1.2一致但安装仍有问题的话,有可能是因为kernel版本过低;其某些配置文件的存放位置与记录的不符,故安装失败,这种情况下可 更新kernel(使用上文install的两句) 或 进行文件间的软连接(如下)
ln -s /usr/src/kernels/3.10.0-957.el7.x86_64 /usr/src/linux
ln -s /usr/include/drm/drm.h drm.h
ln -s /usr/include/drm/drm_sarea.h drm_sarea.h
ln -s /usr/include/drm/drm_mode.h drm_mode.h
ln -s /usr/include/drm/drm_fourcc.h drm_fourcc.h
或使用下面这句,忽视此种错误提示
export MAKE='/usr/bin/gmake -i'
另外,注意更新内核后重启一下,内核信息才会更新。
此外,还有一些别的安装(不过或许不那么重要,不一定要全部执行)
yum update
yum install make bzip2
yum -y install yum-plugin-priorities
yum install epel-release --enablerepo=extras
yum --enablerepo epel install dkms
第一句是一个系统所有组件的更新,第二个是安装了make和bzip。最后一句的运行,需要有前一句的运行(即epel的安装),最后这个是为了使得以后每次更新,guestAddition都能保持当前增强功能作用,而不用再次安装增强功能。
通过vbox菜单中找到,安装增强功能,或通过在虚拟机设置中的存储中添加相应的增强包iso,使得虚拟机中含有增强包。
然后启动centos,可直接点开光盘,并选择运行为软件。
或者,通过shell运行:
cd /run/media/用户名
cd VBox_GAs_5.2.8 (可输入到VB后,直接tab键自动填充)
sh ./VBoxLinuxAdditions.run (或直接./VBoxLinuxAdditions.run)
最后运行成功,reboot重启!会发现增强功能安装成功。
Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=
and run Make again. Stop.
解决方案见前面,安装步骤中的3。