VMware Player or Workstation: Patching for Linux kernel 3.12 (or so)
For a reason not so clear to me, VMware doesn’t keep its drivers up to date with newer kernels, so they fail to compile against newer kernels. Consequently, there’s an insane race to patch them up. It starts with a compilation failure at the GUI level, and sooner or later it becomes clear that there’s no choice but to get down to work.
The procedure, if you don’t want to install VMware on the computer you’re working on, is to first extract the files with something like (as a non-root user)
$ bash VMware-Player-6.0.2-1744117.x86_64.bundle --extract newplayer
which just writes the files into a new directory newplayer/.
Next step is to untar the relevant directories into a fresh working directory. May I suggest:
for i in /path/to/newplayer/vmware-vmx/lib/modules/source/*.tar ; do tar -xvf $i ; done
This creates five new directories, each containing a Makefile and kernel module sources. In principle, the goal is to type “make” in all five and not have an error.
That’s where the headache is. I’ve packed up a set of patches that took me from Player 6.0.2 (or Workstation 10.0.2) to kernel 3.12 (in a rather messy way, but hey, nothing about it is really in order): Here they are as a tarball.
Once that is done, wrap it all up with
$ for i in vmblock vmci vmmon vmnet vsock ; do tar -cf $i.tar $i-only ; done
and copy the *.tar files into /usr/lib/vmware/modules/source/ (actually, replace the existing files) in an existing installation.
And then just run VMware as usual, and behave nicely when it wants to install modules.
Or if you want to see it with your own eyes (as root):
# vmware-modconfig --console --install-all
VMCI issues
As if it wasn’t enough as is, there was a problem with running the VMCI:
Starting VMware services:
Virtual machine monitor [ OK ]
Virtual machine communication interface [FAILED]
VM communication interface socket family [ OK ]
Blocking file system [ OK ]
Virtual ethernet [ OK ]
VMware Authentication Daemon [ OK ]
And of course, so virtual machine would agree to run this way.
After a lot of messing around, it turned out that for some reason, the module wasn’t installed. Go figure.
The solution was to go back to the vmci-only directory (one of the untarred one above), compile it with “make” (it should work by now, after all), and then copy it to the running kernel’s module repository:
# cp vmci.ko /lib/modules/$(uname -r)/kernel/drivers/misc/ # depmod -a
Or maybe just create a kernel/drivers/vmware directory and copy all *.ko files that were compiled, and depmod.
I. Never. Want. To hear. About. This. Again.