Da Vmware wegen Kernelaktualisierungen sich nicht mehr so leicht auf aktuellen Kerneln > 2.6.20 installieren lässt oder Probleme enstehen. Diese Anleitung gilt als Hilfestellung, um dieses Problem zu lösen.
Folgende Punkte bereiten Probleme:
- aktuelle (Debian) Kernel haben im Gegensatz zu alten Kerneln viele tolle neue Sachen, Treiber und vor allem Änderungen. Da kommen Vmware Versionen nicht bei und das ist auch nicht Sinn der Sache. Aus diesem Grund enstanden die vmware-any-any patches, die dieses und andere Probleme versuchen zu lösen.
- Wird ein original Debian Kernel auf dem Linux System benutzt, so entstehen weitere Probleme. Die Kernel enthalten Änderungen zu dem generischen Linux Kernel, die meistens nicht gravierend sind (bei Suse kommt es schon öfters vor), aber trotzdem Abweichungen bedeuten, die den Entwicklern von externen Modulen Probleme bereiten. Kommt bei vmware sehr selten vor, aber lieber warne ich mal davor.
- Bei so genannten „testing“ und „unstable“ Installationen befindet sich oft ein aktuellerer Compiler, als der für den Kernel verwendete Compiler. Soche Module nimmt der Kernel nur selten (wenn überhaupt) an. Aus diesem Grund muss die selber Compilerversion auf dem System existieren, mit der der Kernel erstellt wurde.
- Mit neuem Kernel ist der Benutzer oft gezwungen eine aktuelle Vmware Version zu verwenden, da die alte Version zum Kernel oder Bibliotheken passt. Dieses Problem besteht aber bei fast jeder Software! Dieses Problem ist nur mit standardisierten Schnittestellen zu lösen, die sich nicht oft ändern dürfen.
Jetzt gehen wir mal an die Lösung der Probleme. Folgende Sachen werden benötigt:
- Eine aktuelle Vmware Version
- Den aktuellen Vmware-any-any Patch
- Die Version mit der der Kernel compiliert wurde, muss bekannt sein
- Für vmware wird der Compiler gcc (für Kernelmodule) und g++ für weitere Teile benötigt.
- Passende Linux-headers zu dem Kernel
Im ersten Schritt wird eine einzige Shell benötigt, die für die vollständige Installation von Vmware verwendet werden soll.
Im ersten Schritt muss die Kernel Version gefunden werden, mit der der Kernel installiert wurde. Diese erfolgt z.B. mit dem Befehl: dmesg
Gan am Anfang wird eine Zeile wie diese stehen:
Linux version 2.6.24-1-686 (Debian 2.6.24-4) (waldi@debian.org) (gcc version 4.1.3 20080114 (prerelease) (Debian 4.1.2-19))
Daraus ist zu erkennen, dass der Kernel mit der Version 4.1.3 für das Erstellen des Kernels verwendet wurde.
Auf einem im Moment aktuellen Version wird aber schon eine höhere Kernel Version verwendet. So könnte die Ausgabe aussehen:
$ gcc --version
gcc (GCC) 4.2.3 (Debian 4.2.3-1)
Das bedeutet für die Installation muss der ältere gcc-4.1 Compiler verwendet werden. Die Umschaltung erfolgt über den folgenden Befehl:
export CC=gcc-4.1
Allerdings gilt es nur für die gewählte Shell (deswegen die Beschränkung auf eine Shell).
Im nächsten Schritt soll auch die g++-Version festgelegt werden. Dies erfolgt über die Variable CXX mit dem Befehl
export CXX=g++-4.1
Info am Rande: Natürlich müssen die gewählten Compiler Versionen auch auf demSystem installiert sein.
Nachdem die Einstellungen erfolgt sind, kann jetzt vmware in der Grundversion installiert werden. Die vmware-any-any Patches müssen nach der Installation durchgeführt werden. Diese Prozedur erfolgt meistens ohne Probleme. Allerdings sollte von der Konfiguration abgesehen werden, da sie höchst wahrscheinlich nicht funktionieren wird (kernel 2.6.22-2.6.24 ist es definitiv der Fall für Vmware 6.X Workstation).
Für einen aktuellen Kernel (2.6.24) müssen zusätzlich die vmware-any-any patches gepatcht werden (was für eine Freude 🙂 ). Im ersten Schritt sollte das Tar Archiv in dem vmware-any-any-update115 mit dem Namen vmmon.tar entpackt werden:
tar xf vmmon.tar
Jetzt müssen zwei Dateien gepatcht werden, bevor das ganze wieder zu einem Paket gepackt wird.
Folgende Zeilen müssen geändert werden:
In der Datei vmmon-only/include/iocontrols_compat.h muss die folgende Zeile von:
#define VMMON_VERSION_V6 (161 << 16 | 0)
nach
#define VMMON_VERSION_V6 (167 << 16 | 0)
verändert werden.
In der Datei vmmon-only/include/iocontrols.h muss die folgende Zeile von:
#define VMMON_VERSION (161 << 16 | 0)
nach
#define VMMON_VERSION (167 << 16 | 0)
verändert werden.
In der Datei vmmon-only/include/vcpuset.h muss die folgende Zeile von:
#include "asm/bitops.h"
nach
#include "linux/bitops.h"
verändert werden.
Anschließend muss natürlich der Ordner „vmmon“ mit dem folgenden Befehl „tar cvvf vmmon.tar vmmon-only/“ wieder in tar-Archiv verwandelt werden, da sonst das Skript „runme.pl“ nicht angewendet werden kann. (Diesen Schritte habe ich vegessen zu erwähnen. Danke an „Wolf“ für die Korrektur. Ich nehme Verbesserungsvorschläge gern entgegen.)
Jetzt kann hoffentlich über „runme.pl“ Vmware mit den vmware-any-any patches installiert und zum „laufen“ gebracht werden.
Folgende Ausgabe erscheint, wenn die vmware-any-any patches für den Kernel 2.6.24 oder höher nicht korrigiert sind:
Unknown VMware Workstation 6.0.2 build 59824 detected. Building for Workstation 6.0.0. Using 2.6.x kernel build system. make: Entering directory \`/tmp/vmware-config2/vmmon-only\' make -C /lib/modules/2.6.24-1-686/build/include/.. SUBDIRS=$PWD SRCROOT=\$PWD/. modules make[1]: Entering directory \`/usr/src/linux-headers-2.6.24-1-686\' CC [M] /tmp/vmware-config2/vmmon-only/linux/driver.o CC [M] /tmp/vmware-config2/vmmon-only/linux/driverLog.o CC [M] /tmp/vmware-config2/vmmon-only/linux/hostif.o CC [M] /tmp/vmware-config2/vmmon-only/common/comport.o CC [M] /tmp/vmware-config2/vmmon-only/common/cpuid.o In file included from include/asm/bitops.h:2, from /tmp/vmware-config2/vmmon-only/./include/vcpuset.h:74, from /tmp/vmware-config2/vmmon-only/./include/modulecall.h:23, from /tmp/vmware-config2/vmmon-only/common/vmx86.h:19, from /tmp/vmware-config2/vmmon-only/common/hostif.h:18, from /tmp/vmware-config2/vmmon-only/common/cpuid.c:15: include/asm/bitops_32.h:9:2: error: #error only
can be included directly make[2]: *** [/tmp/vmware-config2/vmmon-only/common/cpuid.o] Error 1 make[1]: *** [_module_/tmp/vmware-config2/vmmon-only] Error 2 make[1]: Leaving directory \`/usr/src/linux-headers-linux2.6.24-1-686
\' make: *** [vmmon.ko] Error 2 make: Leaving directory \`/tmp/vmware-config2/vmmon-only\' Unable to build the vmmon module. For more information on how to troubleshoot module-related problems, please visit our Web site at "http://www.vmware.com/download/modules/modules.html" and "http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html". Execution aborted.Folgender Fehler deutet darauf hin, dass g++ nicht in der richtigen Version installiert oder gesetzt ist:gcc: error trying to exec 'cc1plus': execvp: No such file or directory
error: command 'gcc' failed with exit status 1
Das war nicht gerade kurz und vor allem einfach, aber mit dieser Unterstützung und ein paar Quellen und weiteren Informationen sollte es funktionieren:
PS: Linux ist nicht so kompliziert, wie es hier raus kommt. Es gibt so Leute (wie ich), die sich das Leben künstlich schwer machen.