kali linux 2021.1安装parallels tools踩坑记录

首先点击右上角的黄色叹号,桌面会出现安装光盘,选择在此处打开Terminal
在这里插入图片描述
但是这里文件系统是只读的,我们无法执行install,可以复制出去运行,我这里是复制到root目录

mkdir -p /root/pt
cp -r /media/cdrom0/ /root/pt/
cd /root/pt/kmods
tar -zxvf prl_mod.tar.gz 

现在处于kmods目录下,要编辑几个文件。
首先会报一个下面这样的错误(我的版本是5.10,下面报错找的别人的贴上的)

Sat Dec 12 23:14:50 EST 2020
Start installation or upgrade of Guest Tools
/usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c: In function 'init_buffer_descriptor':
/usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:58:31: error: implicit declaration of function 'segment_eq' [-Werror=implicit-function-declaration]
   58 |  bd->user = (user == 0) ? 0 : segment_eq(get_fs(), USER_DS) ? 1 : 0;
      |                               ^~~~~~~~~~
cc1: some warnings being treated as errors
make[4]: *** [/usr/src/linux-headers-5.9.0-kali4-common/scripts/Makefile.build:288: /usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.o] Error 1
make[3]: *** [/usr/src/linux-headers-5.9.0-kali4-common/Makefile:1796: /usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs] Error 2
make[2]: *** [/usr/src/linux-headers-5.9.0-kali4-common/Makefile:185: __sub-make] Error 2
make[1]: *** [Makefile:36: all] Error 2
make: *** [Makefile.kmods:33: compile] Error 2
Error: could not build kernel modules
Error during report about failed installation of parallels tools.
Error: failed to install Parallels Guest Tools!
2020-12-12T23:14:55-0500: execCmd: ./install --install [167]
2020-12-12T23:14:55-0500: Error: An error occurred when installing Parallels Tools. Please go to /var/log/parallels-tools-install.log for more information.
2020-12-12T23:19:58-0500: 

具体报错的代码就是这一句

bd->user = (user == 0) ? 0 : segment_eq(get_fs(), USER_DS) ? 1 : 0;

原因就是找不到segment_eq函数,所以我们需要编辑prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c,看网上都是加上一行#define segment_eq(a,b) ((a).seg == (b).seg),但是对于kali 2021.1并不生效,我google了半天,最后终于在社区讨论中找到原因

The instructions from electrifye earlier in the thread say to modify prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c and add the line “#define segment_eq(a, b) ((a).seg == (b).seg)” to the top. This is no longer enough, as the get_fs() and set_fs() macros have been removed in kernel 5.10, and this file uses get_fs to determine whether the thread is running as root or as a user.

意思就是说在kernel版本大于等于5.10时,get_fs函数被移除了,但是不影响,我们可以自己定义一下来防止函数未定义错误,在开头加上

#define segment_eq(a, b) (b)
#define USER_DS 1

这样上面的segment_eq(get_fs(), USER_DS)就必返回1,虽然也没加上get_fs,但能正常执行并且不会报错了。编辑完之后加了这两行
在这里插入图片描述
然后重新打包一下就完事,依旧是在kmods目录下

rm prl_mod.tar.gz
tar -zcvf prl_mod.tar.gz .  dkms.conf Makefile.kmods

然后切到installer目录,命令行安装一波

cd ../installer
chmod 777 *.sh
sudo ./install-cli.sh -i --verbose

安装完成
1
重启如果白屏,则是因为开了3D加速,需要关掉
在这里插入图片描述

ps:如果上面结束有问题

可以参考这篇文章试试

也就是同时做下面2个编辑

  1. prl_fs_freeze/Snapshot/Guest/Linux/prl_freeze/prl_fs_freeze.c文件中,第一行加入#include <linux/blkdev.h>
  2. 在文件prl_fs/SharedFolders/Guest/Linux/prl_fs/Makefile和文件 prl_vid/Video/Guest/Linux/kmod/Makefile中,第一行加入KBUILD_EXTRA_SYMBOLS := /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/Module.symvers

然后重新打包安装一下,实测成功。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值