Preparation
-
In open Ubuntu 18.04 machine click Parallels Actions -> "Install Parallels Tools"
-
A "Parallels Tools" CD will popup on your Ubuntu desktop.
-
Open it by double mouse click, copy all the content to a new, empty directory on a desktop, name it for e.g. "parallels_fixed"
-
Open terminal, change directory to parallels_fixed (
cd ~/Desktop/parallels_fixed
) -
Make command line installer executable (
chmod +x install
) -
Change directory to "installer" (
cd installer
) -
Make few other scripts executable:
chmod +x installer.* *.sh prl_*
We have to modify some files:
- Go to kmods directory (
cd ~/Desktop/parallels_fixed/kmods
) and extract the files (tar -xzf prl_mod.tar.gz
) - Remove prl_mod.tar.gz file from that directory (
rm prl_mod.tar.gz
)
Changing file 1/3
- Go to "prl_eth/pvmnet/" (
cd ~/Desktop/parallels_fixed/kmods/prl_eth/pvmnet
) directory - Open "pvmnet.c" file in a text editor
- Edit line 438:
MODULE_LICENSE("Parallels");
to
MODULE_LICENSE("GPL");
- Save
Changing file 2/3
- Go to "prl_tg/Toolgate/Guest/Linux/prl_tg/" (
cd ~/Desktop/parallels_fixed/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg
) directory - Open "prltg.c" file in a text editor
- Edit line 1535:
MODULE_LICENSE("Parallels");
to
MODULE_LICENSE("GPL");
- Save
Changing file 3/3
- Go to "prl_fs_freeze/Snapshot/Guest/Linux/prl_freeze/" (
cd ~/Desktop/parallels_fixed/kmods/prl_fs_freeze/Snapshot/Guest/Linux/prl_freeze
) - Open "prl_fs_freeze.c" file in a text editor
- in line 212 you will find a function "thaw_timer_fn":
void thaw_timer_fn(unsigned long data)
{
struct work_struct *work = (struct work_struct *)data;
schedule_work(work);
}
Change it to:
void thaw_timer_fn(unsigned long data)
{
struct work_struct *work = (struct work_struct *)data;
schedule_work(work);
}
void thaw_timer_fn_new_kernel(struct timer_list *data)
{
struct work_struct *work = data->expires;
schedule_work(work);
}
Then change a line 220 from:
DEFINE_TIMER(thaw_timer, thaw_timer_fn, 0, (unsigned long)&(thaw_work));
to
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
DEFINE_TIMER(thaw_timer, thaw_timer_fn_new_kernel);
#else
DEFINE_TIMER(thaw_timer, thaw_timer_fn, 0, (unsigned long)&(thaw_work));
#endif
Zip it back
- Go to kmods directory (
cd ~/Desktop/parallels_fixed/kmods
) and zip:tar -zcvf prl_mod.tar.gz . dkms.conf Makefile.kmods
- Now you should see "prl_mod.tar.gz" file in this directory
Install!
- Go one level up (
cd ../
orcd ~/Desktop/parallels_fixed
) and install it by runningsudo ./install
In case of problems with Sharing Folder try to sudo chmod +x /usr/bin/prlfsmountd
. (Suggested by @macdoor - Thanks!)
First two changes are hacks, changing licensing type and i cannot post complete, built package. Third file change was needed as backward incompatible changes were released in version 4.15 of the Linux kernel, on November 2017 by Linus. https://github.com/torvalds/linux/blob/master/include/linux/time.h
I'm having the next log with macOS Catalina 10.15, Parallels 14.0.1 and Ubuntu 18.04.03
019-10-26T23:43:36-0500:
Parallels Tools 14.0.1-45154 Installer started.
2019-10-26T23:43:36-0500: Failed to setup console printk level.
2019-10-26T23:43:42-0500: execCmd: ./installer/pm.sh --check gtools [0]
Started installation of Parallels Guest Tools version '14.0.1.45154'
Error during report about start installation of parallels tools.
Sat Oct 26 23:43:47 CDT 2019
Start installation or upgrade of Guest Tools
new version of parallels tools
Installed Guest Tools were not found
Perform installation into the /usr/lib/parallels-tools directory
tar (child): /usr/lib/parallels-tools/kmods/prl_mod.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
make: Entering directory '/usr/lib/parallels-tools/kmods'
Will use compiler CC="cc".
Compiler version "cc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0"
cd prl_eth/pvmnet && make CC=cc
make[1]: Entering directory '/usr/lib/parallels-tools/kmods/prl_eth/pvmnet'
make -C /lib/modules/5.0.0-32-generic/build M=/usr/lib/parallels-tools/kmods/prl_eth/pvmnet CC=cc
make[2]: Entering directory '/usr/src/linux-headers-5.0.0-32-generic'
CC [M] /usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.o
/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.c:194:3: error: 'struct ethtool_ops' has no member named 'get_settings'; did you mean 'get_strings'?
.get_settings = pvmnet_get_settings,
^~~~~~~~~~~~
get_strings
/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.c:194:28: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.get_settings = pvmnet_get_settings,
^~~~~~~~~~~~~~~~~~~
/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.c:194:28: note: (near initialization for 'pvmnet_ethtool_ops.get_drvinfo')
cc1: some warnings being treated as errors
scripts/Makefile.build:284: recipe for target '/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.o' failed
make[3]: *** [/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.o] Error 1
Makefile:1614: recipe for target 'module/usr/lib/parallels-tools/kmods/prl_eth/pvmnet' failed
make[2]: *** [module/usr/lib/parallels-tools/kmods/prl_eth/pvmnet] Error 2
make[2]: Leaving directory '/usr/src/linux-headers-5.0.0-32-generic'
/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/Makefile.v26:11: recipe for target 'all' failed
make[1]: Leaving directory '/usr/lib/parallels-tools/kmods/prl_eth/pvmnet'
make[1]: *** [all] Error 2
Makefile.kmods:49: recipe for target 'compile' failed
make: *** [compile] Error 2
make: Leaving directory '/usr/lib/parallels-tools/kmods'
Error: could not build kernel modules
Error during report about failed installation of parallels tools.
Error: failed to install Parallels Guest Tools!
2019-10-26T23:43:48-0500: Started installation of Parallels Guest Tools version '14.0.1.45154'
Error during report about start installation of parallels tools.
Sat Oct 26 23:43:47 CDT 2019
Start installation or upgrade of Guest Tools
tar (child): /usr/lib/parallels-tools/kmods/prl_mod.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.c:194:3: error: 'struct ethtool_ops' has no member named 'get_settings'; did you mean 'get_strings'?
.get_settings = pvmnet_get_settings,
^~~~~~~~~~~~
get_strings
/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.c:194:28: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.get_settings = pvmnet_get_settings,
^~~~~~~~~~~~~~~~~~~
/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.c:194:28: note: (near initialization for 'pvmnet_ethtool_ops.get_drvinfo')
cc1: some warnings being treated as errors
make[3]: *** [/usr/lib/parallels-tools/kmods/prl_eth/pvmnet/pvmnet.o] Error 1
make[2]: *** [module/usr/lib/parallels-tools/kmods/prl_eth/pvmnet] Error 2
make[1]: *** [all] Error 2
make: *** [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!
2019-10-26T23:43:48-0500: execCmd: ./install --install [167]
2019-10-26T23:43:48-0500: Error: An error occurred when installing Parallels Tools. Please go to /var/log/parallels-tools-install.log for more information.
2019-10-26T23:44:04-0500: Exiting with code 1