Parallels with Ubuntu 15.10

At work, I don’t have a proper Linux computer yet, and am a bit reticent to install Linux on the Mac I have.  So I’ve been using Parallels.  It’s ok for an emulated experience, but not great: it crashes regularly, runs out of memory, and I still occasionally hit some key combinations that rudely drop me back into the world of Mac from Linux.  But it’s still a heck of a lot better than having to use Mac OS.

Today though, Ubuntu asked if I’d like to upgrade to 15.10, I said yes, and things really got ugly – after upgrading, I could no longer boot into a graphical environment.  Looking at the error logs a bit, it looked like there may have been a problem with “Parallel Tools”, the stuff you install in the guest OS to make it run.

I tried to reinstall that, but there were various compilation errors in the kernel modules…. uh oh.

It turns out the fix was not that hard, although it required reading up on some Linux kernel changes.  And I don’t know if it’s actually correct – but it was enough to get my Ubuntu instance up and running again.

Here’s what I did:

  • Open the kmods/prl_mod.tar.gz file directly, with Emacs, in order to edit the files within.
  • Make the following modifications:
diff -ru parallels2/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c parallels/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c
--- parallels2/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 2015-07-09 06:22:30.000000000 -0700
+++ parallels/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 2015-07-09 06:22:30.000000000 -0700
@@ -650,12 +650,21 @@
 return tgt_path;
+#define compat_follow_link_t char*
 #define compat_follow_link_t void*
 #define compat_follow_link_t int
+static compat_follow_link_t prlfs_follow_link(struct dentry *dentry,
+ void **cookie, struct nameidata *nd)
+ return *cookie = do_read_symlink(dentry);
 static compat_follow_link_t prlfs_follow_link(struct dentry *dentry,
 struct nameidata *nd)
@@ -671,6 +680,7 @@
 return vfs_follow_link(nd, do_read_symlink(dentry));
 static int prlfs_readlink(struct dentry *dentry, char *buf, int buflen)
Binary files parallels2/prl_mod.tar.gz and parallels/prl_mod.tar.gz differ
diff -ru parallels2/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c parallels/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c
--- parallels2/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c 2015-07-09 06:22:30.000000000 -0700
+++ parallels/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c 2015-07-09 06:22:30.000000000 -0700
@@ -21,6 +21,7 @@
 #include <linux/pagemap.h>
 #include <linux/proc_fs.h>
 #include <linux/hash.h>
+#include <linux/vmalloc.h>
 #include <asm/uaccess.h>
 #include <asm/atomic.h>
 #include <asm/io.h>