网络知识 娱乐 Vmware Unable to install all modules 解决方法

Vmware Unable to install all modules 解决方法

在Debian中安装了vmware workstation-16.2.3,在启动时,第一次报找不到内核头文件。
升级内核后,启动时需要编译vmmon和vmnet,在编译这两个modules出现了错误。
下面是解决方案

输入以下面的命令

git clone https://github.com/mkubecek/vmware-host-modules.git
#上面的GitHub地址有可能用不了,使用下面GitHub的镜像网站
git clone https://hub.fastgit.org/mkubecek/vmware-host-modules.git
cd vmware-host-modules
git checkout workstation-16.2.3  #VMware对应的版本号
make
make install

注:Debian 安装时需要下载kernel headers文件
输入命令 sudo apt-cache search linux-headers 查找所需版本的kernel headers
若存在对应的版本 直接下载即可

安装成功后,打开VMware Workstation,开启一台虚拟机验证一下是否真的安装成功。
开启虚拟机时,若出现

  “Cannot open /dev/vmmon: No such file or directory. Please make sure that the kernel module vmmon’ is loaded”

提示,查看以下解决措施。
出错原因

我们在进入BIOS界面中的启动选项时,可能会注意到有一个 ”secure boot“ 选项,而这就是出现问题的原因。简单来讲,这个 “secure boot” 就是在计算机主板上设置的一个安全保护措施,任何在主板上加载的操作系统或者硬件驱动程序运行时,都必须经过一个安全验证,而开启虚拟机时,VMware驱动器(其中的vmmon和vmnet组件)无法通过这个安全验证,不能运行,这就导致了虚拟机无法启动。
解决措施
措施一:简单粗暴法

我们知道了导致错误的原因是开启了"secure boot",那么最简单粗暴的方法就是在BIOS中禁止“secure boot”选项(往往是在BIOS中的启动或者安全选项中),但是这种方法的弊端也显而易见,降低了电脑的安全性,如果不想破坏电脑的安全性,则可以采取另一种方法。
措施二:添加“安全密钥”

首先要清楚“sercure boot”的安全验证是通过“安全密钥”机制来实现的,即每个操作系统或驱动程序必须对应一个“密钥对”,其中的“公钥”是内置与主板中的,“私钥”则附在自身上,只有”公钥“和“私钥”能够对应上,该程序才可以执行。我们要想让VMware驱动器运行,也必须为它创建“密钥对”。具体操作如下:

    为vmmon和vmnet组件生成密钥对

openssl req -new -x509 -newkey rsa:2048 -keyout VMW.priv -outform DER -out VMW.der -nodes -days 36500 -subj "/CN=VMware/"

    1VMW.der 是公钥,VMW.priv是私钥
(其中的“VMW”是密钥的名字,也可以改成别的)

    为vmmon和vmnet组件附上生成的密钥

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./VMW.priv ./VMW.der $(modinfo -n vmmon)

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./VMW.priv ./VMW.der $(modinfo -n vmnet)


  将公钥插入系统的MOK列表中

sudo mokutil --import VMW.der


这一步会让你创建一个密码,记住这个密码,一会儿有用。

    重启电脑
    重启时会进入到一个类似于BIOS的界面(UEFI界面),根据界面上的说明进行选择,完成密钥的插入(最后让输入的密码即为上一步设置的密码)。开启电脑后,VMware就能正常运行了。