VMware Workstation vmmon quebrado no Ubuntu 18.04

3

Eu atualizei para o Ubuntu 18.04 e o módulo vmmon.ko para o VMWare Workstation 12.5.9 agora não foi criado.

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

Isso parece uma pequena alteração que faz com que a compilação vmmon falhe, possivelmente que as estruturas de dados tenham mudado entre as versões do kernel?

Edit: Parece que no kernel Linux v4.15 init_timer() interface foi removida

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

Alguma sugestão de como eu poderia começar a corrigir isso?

    
por user1330734 04.06.2018 / 08:27

3 respostas

2

Eu encontrei uma solução e criei um arquivo de script baseado nas fontes do mithelbek no github.

Você deve criar um arquivo com este conteúdo e executá-lo sempre que necessário:

#!/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

Então, você só precisa iniciar o VMware Workstation sem criar módulos.

    
por 13.06.2018 / 10:10
1

Usando o script sugerido por Charly, consegui criar os módulos necessários para o kernel 4.15.0-29-generic no 16.04 LTS. Há um erro de digitação no final do script, não deve haver um retorno de linha entre sudo ln -s /lib/x86_64-linux-gnu/libz.so.1 e /usr/lib/vmware/lib/libz.so.1/libz.so.1

Outra adição que recomendo é adicionar o comando sudo /etc/init.d/vmware restart ao final do script acima.

Assim, o script de solução real com ajustes é:

#!/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

'' '

Desculpe, este não é um comentário sobre a resposta de Charly, eu não tenho a reputação nesta conta.

Observe que isso funcionará apenas para Workstation 12.5.9 , você pode facilmente saber qual versão você tem executando vmware --version

    
por 24.07.2018 / 17:29
0

Eu estava enfrentando o mesmo problema no Ubuntu 18.04 em uma nova instalação de vmware (14.1.3 build-9474260) e após uma atualização do kernel. Parece ser um problema com a importação de módulos para o kernel em uma máquina com inicialização segura, portanto, com base neste artigo Eu fiz este script 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
    
por 18.09.2018 / 10:26