VMWare Workstation vmmon не работает на Ubuntu 18.04
Я обновился до Ubuntu 18.04 и vmmon.ko
модуль для VMWare Workstation 12.5.9 теперь не может быть собран.
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c: In function ‘LinuxDriverInitTSCkHz’:
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:268:22: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
tscTimer.function = LinuxDriverEstimateTSCkHzDeferred;
^
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:270:12: error: ‘struct timer_list’ has no member named ‘data’
tscTimer.data = 0;
^
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c: In function ‘init_module’:
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:312:4: error: implicit declaration of function ‘init_timer’; did you mean ‘init_timers’? [-Werror=implicit-function-declaration]
init_timer(&linuxState.pollTimer);
^~~~~~~~~~
init_timers
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:313:24: error: ‘struct timer_list’ has no member named ‘data’
linuxState.pollTimer.data = 0;
^
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:314:34: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
linuxState.pollTimer.function = LinuxDriverPollTimeout;
Это кажется незначительным изменением, приводящим к сбою компиляции vmmon, возможно, что структуры данных изменились между версиями ядра?
Редактировать: Кажется, что в ядре Linux v4.15 init_timer()
интерфейс был удален
uname -a
Linux hostnema 4.15.0-22-generic #24-Ubuntu SMP Wed May 16 12:15:17 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Любые предложения о том, как я мог бы начать это исправить?
4 ответа
Я нашел решение и создал файл сценария на основе исходников mkucebek на github.
Вы должны создать файл с этим содержимым и запускать его каждый раз, когда это необходимо:
#!/bin/bash
VMWARE_VERSION=workstation-12.5.9
TMP_FOLDER=/tmp/patch-vmware
rm -fdr $TMP_FOLDER
mkdir -p $TMP_FOLDER
cd $TMP_FOLDER
git clone https://github.com/mkubecek/vmware-host-modules.git
cd $TMP_FOLDER/vmware-host-modules
git checkout $VMWARE_VERSION
git fetch
make
sudo make install
sudo rm /usr/lib/vmware/lib/libz.so.1/libz.so.1
sudo ln -s /lib/x86_64-linux-gnu/libz.so.1
/usr/lib/vmware/lib/libz.so.1/libz.so.1
sudo /etc/init.d/vmware restart
Затем вам просто нужно запустить VMware Workstation без сборки модулей.
Используя предложенный Чарли скрипт, я смог собрать необходимые модули для ядра 4.15.0-29-generic на 16.04 LTS. В конце скрипта есть опечатка, между строкой не должно быть возврата sudo ln -s /lib/x86_64-linux-gnu/libz.so.1
а также /usr/lib/vmware/lib/libz.so.1/libz.so.1
Еще одно дополнение, которое я бы порекомендовал, это добавить sudo /etc/init.d/vmware restart
Команда до конца приведенного выше сценария.
Таким образом, настоящий сценарий решения с настройками:
#!/bin/bash
VMWARE_VERSION=workstation-12.5.9
TMP_FOLDER=/tmp/patch-vmware
rm -fdr $TMP_FOLDER
mkdir -p $TMP_FOLDER
cd $TMP_FOLDER
git clone https://github.com/mkubecek/vmware-host-modules.git
cd $TMP_FOLDER/vmware-host-modules
git checkout $VMWARE_VERSION
git fetch
make
sudo make install
sudo rm /usr/lib/vmware/lib/libz.so.1/libz.so.1
sudo ln -s /lib/x86_64-linux-gnu/libz.so.1 /usr/lib/vmware/lib/libz.so.1/libz.so.1
sudo /etc/init.d/vmware restart
`` `
Извините, это не комментарий к ответу Чарли, у меня нет репутации в этом аккаунте.
Обратите внимание, что это будет работать только для Workstation 12.5.9
, вы можете легко сказать, какая у вас версия, запустив vmware --version
Я столкнулся с той же проблемой в Ubuntu 18.04 при установке новой рабочей станции vmware (14.1.3 build-9474260) и после обновления ядра. Кажется, это проблема с импортом модулей в ядро на машине с безопасной загрузкой, поэтому на основе этой статьи я сделал этот скрипт bash:
#!/bin/bash
sudo vmware-modconfig --console --install-all
echo "signing vmmon module"
sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv
./MOK.der $(modinfo -n vmmon)
echo "signing vmnet module"
sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv
./MOK.der $(modinfo -n vmnet)
echo "importing MOK cert"
mokutil --import MOK.der
Еще одно дополнение к этому исправлению в Ubuntu 20.04 LTS и Ubuntu 22.04 LTS : похоже, что VMware аварийно завершает работу с исключением (ошибка сегментации) в этих новых версиях ОС даже после того, как вы выполните все шаги, описанные здесь!
Однако это все еще можно легко исправить, просто это не очень интуитивно понятно — вам просто нужно вызвать vmplayer, используя полный путь к appLoader!
Вот так ужасно вылетает:
ubuntu@ubuntu:~$ vmplayer
... (harmless errors and warnings)
/usr/bin/vmplayer: line 106: 28048 Segmentation fault (core dumped) "$BINDIR"/vmware-modconfig --appname="VMware Player" --icon="vmware-player"
Но если загрузить вот так, то запускается отлично!:
ubuntu@ubuntu:~$ /usr/lib/vmware/bin/vmplayer
Чтобы значок работал, просто отредактируйте файл рабочего стола в/usr/share/applications
чтобы вызвать vmplayer с таким полным путем, и теперь он также запустится из графического интерфейса.
Кстати, вы можете установить vmplayer в другое место, кроме /usr/lib. Например, чтобы установить вместо этого каталог /opt , просто добавьте аргумент--set-setting vmware-installer libdir /opt
при запуске установочного пакета.
Теперь с нетерпением жду новых проблем с запуском VMware Player в более поздней версии Ubuntu, но рад, что он все еще работает даже в 2022 году (а также в чем-то старом, в 2008 году, с еще одной небольшой поправкой в Hardy).