Skip to content

Instantly share code, notes, and snippets.

@rudolfratusinski
Last active November 24, 2024 02:13
Show Gist options
  • Save rudolfratusinski/a4d9e3caff11a4d9d81d2e84abc9afbf to your computer and use it in GitHub Desktop.
Save rudolfratusinski/a4d9e3caff11a4d9d81d2e84abc9afbf to your computer and use it in GitHub Desktop.
Parallels Tools fix for Ubuntu 18.04 and other Linux distributions with Kernel version >= 4.15

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 ../ or cd ~/Desktop/parallels_fixed) and install it by running sudo ./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

@dennsporcic
Copy link

I have success installing on Ubuntu 19.04 with only one file change.

  • Follow the preparation step as described at top of this page
  • Edit kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/super.c
  • Simply add an extra include
    #include <uapi/linux/mount.h>
  • and run the install script. :) Happy days !

@fcgreg
Copy link

fcgreg commented Jul 20, 2019

Regarding the update from @dennsporcic -

I have success installing on Ubuntu 19.04 with only one file change.

  • Follow the preparation step as described at top of this page
  • Edit kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/super.c
  • Simply add an extra include
    #include <uapi/linux/mount.h>
  • and run the install script. :) Happy days !

I'm just confirming for everyone that on newer versions of Ubuntu (e.g. 19.04), this single file change is the ONLY change required to get Parallels Tools to install. Ignore the other file modification steps. A few other clarifications:

  • In addition to following the steps in the "Preparation" section, you will also need to follow the steps in the section "We have to modify some files" and later in the section "Zip it back" (e.g. extract the archive prl_mod.tar.gz, modify the "super.c" file, and re-archive the file prl_mod.tar.gz).

Enjoy!

@shred86
Copy link

shred86 commented Aug 11, 2019

Thanks @dennsporcic! That's all I had to update as well to install Ubuntu 19.04 using Parallels 14.

@fefas
Copy link

fefas commented Sep 5, 2019

For Ubuntu 18.04, the fix suggested by @dennsporcic and @fcgreg worked just fine. Thanks!

@DrummerKH
Copy link

For Ubuntu 18.04, the fix suggested by @dennsporcic worked also, thanks

@yfdandy
Copy link

yfdandy commented Oct 6, 2019

@dennsporcic thanks!

@Javihache
Copy link

I have success installing on Ubuntu 19.04 with only one file change.

  • Follow the preparation step as described at top of this page
  • Edit kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/super.c
  • Simply add an extra include
    #include <uapi/linux/mount.h>
  • and run the install script. :) Happy days !

Great thanks a lot!!!

@indapublic
Copy link

Regarding the update from @dennsporcic -

I have success installing on Ubuntu 19.04 with only one file change.

  • Follow the preparation step as described at top of this page
  • Edit kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/super.c
  • Simply add an extra include
    #include <uapi/linux/mount.h>
  • and run the install script. :) Happy days !

I'm just confirming for everyone that on newer versions of Ubuntu (e.g. 19.04), this single file change is the ONLY change required to get Parallels Tools to install. Ignore the other file modification steps. A few other clarifications:

  • In addition to following the steps in the "Preparation" section, you will also need to follow the steps in the section "We have to modify some files" and later in the section "Zip it back" (e.g. extract the archive prl_mod.tar.gz, modify the "super.c" file, and re-archive the file prl_mod.tar.gz).

Enjoy!

Just modify file without re-archive. Parallels 14, Ubuntu 18.04

@abrahamortiz
Copy link

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

@kkayal
Copy link

kkayal commented Oct 30, 2019

@abrahamortiz: Those errors are related to the gcc compiler version. I installed clang version 9 (default in Ubuntu 19.10) and changed the symbilc link cc from gcc to clang. After that, the guest additions copiled and shared folders worked.

@boy1583
Copy link

boy1583 commented Nov 17, 2019

If someone also get errors below:

error: ‘struct ethtool_ops’ has no member named ‘get_settings’; did you mean ‘get_strings’

and further error:

/usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/super.c:119:21: error: 'MS_RDONLY' undeclared (first use in this function); did you mean 'IS_RDONLY'?

or something like that:
you can ref these two links to solve:

https://gist.github.com/mag911/1a5583a766467d6023584d738cee0d98

acooks/tn40xx-driver#9

@abderra7mane
Copy link

I have success installing on Ubuntu 19.04 with only one file change.

  • Follow the preparation step as described at top of this page
  • Edit kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/super.c
  • Simply add an extra include
    #include <uapi/linux/mount.h>
  • and run the install script. :) Happy days !

Thanks !!!

@AshinTheAnvil
Copy link

@dennsporcic I am using a parallels 14.1 with ubuntu 18.04.I followed your steps for installing parallel tools but even though i modify the prl folder,super.c file...the error persists and i am unable to install pls help.

@ronijati
Copy link

ronijati commented Aug 2, 2020

after many times trying various ways including this method and it did not work, finally tried a simple and successful way namely installing Ubuntu from the Parallels desktop program. Don't download the ISO file and install it on Parallels.

@ashleyharvey
Copy link

@Jedliu
Copy link

Jedliu commented Dec 9, 2020

after many times trying various ways including this method and it did not work, finally tried a simple and successful way namely installing Ubuntu from the Parallels desktop program. Don't download the ISO file and install it on Parallels.

Thank you very much! This does help me a lot!

@shinnlu
Copy link

shinnlu commented Dec 18, 2020

i am installing ElementaryOS 5.4 with parallels desktop 13.3.0 with many error, after fix , i still stuck on one problem.
the installation stop for a long time, when i check the log, it asking the questions:

scripts/kconfig/conf --syncconfig Kconfig
* Restart config
*Timers sybsystem
Timer tick handling
1. Periodic timer ticks(constant rate, no dynticks)(HZ_PERIODIC)
2. Idle synticks system (tickless idle) (NO_HZ_IDLE)
3. FULL dynticks system (tickless) (NO_HZ_FULL) (NEW)
choice[1-3?]:

but there is no responding when i input 1 ~ 3 to install screen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment