web-dev-qa-db-ja.com

Ubuntu 18.04でVMWare Workstation vmmonが壊れている

Ubuntu 18.04にアップグレードしたところ、VMWare Workstation 12.5.9の_vmmon.ko_モジュールがビルドできなくなりました。

vmmon compilation failure output

_/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
_

これを修正し始める方法についての提案はありますか?

6
user1330734

私は解決策を見つけ、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を起動するだけです。

5
Charly

Charlyの推奨スクリプトを使用して、16.04 LTSでカーネル4.15.0-29-genericに必要なモジュールを構築できました。スクリプトの最後にタイプミスがあります。Sudo ln -s /lib/x86_64-linux-gnu/libz.so.1/usr/lib/vmware/lib/libz.so.1/libz.so.1の間に改行を入れないでください

私がお勧めするもう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を実行すると、使用しているバージョンを簡単に確認できます。

1
NeoGeek

Ubuntu 18.04で、新しいvmwareの動作(14.1.3 build-9474260)のインストール時とカーネルの更新後に同じ問題に直面していました。セキュアブートを備えたマシンのカーネルにモジュールをインポートすることには問題があるようですので、これに基づいて article 作成しました this 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
0
James Dube