对过程不感兴趣的朋友可以拉到最后看最终解决方法
从官网下载VMware安装包之后先安装内核头文件
我的kali是64位的,用“uname -r”查看内核版本是 4.3.0-kali1-amd64
直接安装头文件
apt-get install linux-headers-$(uname -r)
会提示找不到软件包
root@wangsansan:~# apt-get install linux-headers-4.3.0-kalil-amd64
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
E: 无法定位软件包 linux-headers-4.3.0-kalil-amd64
E: 无法按照 glob ‘linux-headers-4.3.0-kalil-amd64’ 找到任何软件包
E: 无法按照正则表达式 linux-headers-4.3.0-kalil-amd64 找到任何软件包
建议是先更新一遍或者直接安装4.6.0-kali1-amd64的内核头文件
A:更新
先添加源,然后执行下面的命令
apt-get update
apt-get dist-upgrade
具体过程就不说了,这个过程很漫长,我更新了一个下午。
更新完之后可能会进不了桌面,开机的时候进恢复模式执行一下这条命令
apt-get install xorg
B:直接安装4.6.0的内核头文件
添加源之后执行下面的语句
apt-get update
apt-get install linux-headers-4.6.0-kali1-amd64
内核头文件安装完成之后就可以装VMware了
VMware的安装过程就不说了,在安装完成之后启动VMware会出现这个窗口
VMware Kernel Module Updater
到最后一部启动服务就出错了,然后会弹出一个这样的对话框
根据提示查看日志文件
跳到最后一行
W110: Failed to build vmnet. Failed to execute the build command.
vmnet编译失败
点确定
大概意思是说运行VMware之前,需要编译一些模块到内核中运行。
我们现在就看看具体是怎么回事,我们先进他的模块的源码目录,把源码解压之后make,在终端中查看到底是什么问题。
**模拟编译过程**
#cd进那些模块的源码目录
cd /usr/lib/vmware/modules/source/
#把vmnet.tar解压出来
tar zxvf vmnet.tar
#进入解压出来的那个目录
cd vmnet-only
#模拟编译一下
make
编译失败,返回的信息如下
/usr/src/linux-headers-4.6.0-kali1-common/scripts/Makefile.build:296: recipe for target ‘/usr/lib/vmware/modules/source/vmnet-only/userif.o’ failed
make[4]: * [/usr/lib/vmware/modules/source/vmnet-only/userif.o] Error 1
/usr/src/linux-headers-4.6.0-kali1-common/Makefile:1446: recipe for target ‘module/usr/lib/vmware/modules/source/vmnet-only’ failed
make[3]: * [module/usr/lib/vmware/modules/source/vmnet-only] Error 2
Makefile:146: recipe for target ‘sub-make’ failed
make[2]: * [sub-make] Error 2
Makefile:8: recipe for target ‘all’ failed
make[1]: * [all] Error 2
make[1]: Leaving directory ‘/usr/src/linux-headers-4.6.0-kali1-amd64’
Makefile:120: recipe for target ‘vmnet.ko’ failed
make: * [vmnet.ko] Error 2
百度搜索关键词“vmnet-only/userif.o’ failed”没有找到和这个问题匹配的文章。
然后上谷歌搜索同样的关键词,找到一篇文章
http://alouche.net/blog/2012/06/22/patching-vmware-vmnet-module-linux-3-2/
这篇文章只给了一条命令
wget https://github.com/alouche/vmware-vmnet-3.2-kernel/tarball/3.2.0 -O - | tar -xzf - --transform 's/alouche-vmware-vmnet-3.2-kernel-0dcdbb9/vmnet-only/' && tar cvf vmnet.tar vmnet-only
这条命令的意思是下载一个vmnet.tar的包,解压出来再打包里面的源文件,放到vmnet-only文件夹,再打包为vmnet.tar,最后替换掉/usr/lib/vmware/modules/source/目录下的vmnet.tar
如果上面的链接失效了这里提供一个百度云的资源
http://pan.baidu.com/s/1csUG5w
尝试这个方法,还是不能编译vmnet这个模块,再重复上面的步骤模拟make编译vmnet
/usr/src/linux-headers-4.6.0-kali1-common/scripts/Makefile.build:296: recipe for target ‘/usr/lib/vmware/modules/source/vmnet-only/driver.o’ failed
make[4]: * [/usr/lib/vmware/modules/source/vmnet-only/driver.o] Error 1
/usr/src/linux-headers-4.6.0-kali1-common/Makefile:1446: recipe for target ‘module/usr/lib/vmware/modules/source/vmnet-only’ failed
make[3]: * [module/usr/lib/vmware/modules/source/vmnet-only] Error 2
Makefile:146: recipe for target ‘sub-make’ failed
make[2]: * [sub-make] Error 2
Makefile:8: recipe for target ‘all’ failed
make[1]: * [all] Error 2
make[1]: Leaving directory ‘/usr/src/linux-headers-4.6.0-kali1-amd64’
Makefile:126: recipe for target ‘vmnet.ko’ failed
make: * [vmnet.ko] Error 2
这一次又以“vmnet-only/driver.o’ failed”为关键词搜索,这次搜索到的修复方案就比较多的,我参照的是这个
http://www.justfbt.com/2015/08/28/Unable-to-run-Vmware-workstation-11-failed-to-build-vmnet/
这篇文章提供的最终修复方案如下:
#apt-get install build-essential
#curl http://pastie.org/pastes/9934018/download -o /tmp/vmnet-3.19.patch
#cd /usr/lib/vmware/modules/source
#tar -xf vmnet.tar
#patch -p0 -i /tmp/vmnet-3.19.patch
#tar -cf vmnet.tar vmnet-only
#rm -r *-only
#vmware-modconfig --console --install-all
这个方案是下载一个vmnet的补丁文件,更改的文件是driver.c
如果上面的链接失效,百度云链接
http://pan.baidu.com/s/1cKEZcq
这个方案还是没能解决我的问题,接着又再一次make
这次的错误如下:
/usr/src/linux-headers-4.6.0-kali1-common/scripts/Makefile.build:296: recipe for target ‘/tmp/modconfig-0f4RRy/vmnet-only/hub.o’ failed
make[4]: * [/tmp/modconfig-0f4RRy/vmnet-only/hub.o] Error 1
/usr/src/linux-headers-4.6.0-kali1-common/Makefile:1446: recipe for target ‘module/tmp/modconfig-0f4RRy/vmnet-only’ failed
make[3]: * [module/tmp/modconfig-0f4RRy/vmnet-only] Error 2
Makefile:146: recipe for target ‘sub-make’ failed
make[2]: * [sub-make] Error 2
Makefile:8: recipe for target ‘all’ failed
make[1]: * [all] Error 2
make[1]: Leaving directory ‘/usr/src/linux-headers-4.6.0-kali1-amd64’
Makefile:126: recipe for target ‘vmnet.ko’ failed
make: * [vmnet.ko] Error 2
make: Leaving directory ‘/tmp/modconfig-0f4RRy/vmnet-only’
Unable to install all modules. See log for details.
这次搜了好久,都没找到有人和我一样错误。
看到这么一个标题的文章
“Workstation 12.1 does not compile on kernel 4.6.0-1”
https://communities.vmware.com/thread/536705?start=0&tstart=0
vmware社区的解决方案(最终解决方案):
after kernel 4.4 (VMWare Workstation 12) need some changes in c code:
/usr/lib/vmware/modules/source
1) vmmon.tar
- untar
- change ./vmmon-only/linux/hostif.c
- replace all:
“get_user_pages” to “get_user_pages_remote”
- tar and replace original
2) vmnet.tar
- untar
- change ./vmnet-only/userif.c
- replace all:
“get_user_pages” to “get_user_pages_remote”
- tar and replace original
在kernel4.4内核中需要修改两个源文件的code
1)vmmon.tar
把vmmon-only/linux/hostif.c文件里的“get_user_pages”全都替换成“get_user_pages_remote”,我这里用的vim编辑器,不习惯用vim的也可以用其他编辑器替换字符串
cd /usr/lib/vmware/modules/source
tar xf vmmon.tar
cd vmmon-only/linux/
vim hostif.c
:%s/get_user_pages/get_user_pages_remote/g
:wq
cd ../..
tar cvf vmmon.tar vmmon-only
2)vmnet.tar
把/vmnet-only/userif.c文件里的“get_user_pages”全都替换成“get_user_pages_remote”,方法和修改vmmon.tar一样的
cd /usr/lib/vmware/modules/source
tar xf vmnet.tar
cd vmnet-only
vim userif.c
:%s/get_user_pages/get_user_pages_remote/g
:wq
cd ../..
tar cvf vmnet.tar vmnet-only
现在再运行一遍vmware,可以成功运行了
附上一张熟悉的启动界面
前两个错误有人用上面的方法成功解决了问题,不过我没有,如果有朋友遇到同样的错误可以尝试一下这些解决办法。
写在最后:学习一款软件或一个操作系统,最好的方法就是不断的遇到问题并自己去解决问题。当你成功解决了你的问题的时候,你的兴奋无可言喻。要体会这种兴奋,你将会花费很多时间和精力,去相遇无数次failed和error。
(去TM的鸡汤)