2023-02-01 14:30:02 -08:00
|
|
|
{{- if eq .host.distro.family "linux" -}}
|
2023-01-31 21:18:59 -08:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
{{ includeTemplate "universal/profile" }}
|
|
|
|
{{ includeTemplate "universal/logg" }}
|
|
|
|
|
2023-02-01 14:30:02 -08:00
|
|
|
### Run logic if VMware is installed
|
2023-01-31 21:18:59 -08:00
|
|
|
if command -v vmware > /dev/null; then
|
2023-02-01 14:30:02 -08:00
|
|
|
### Build kernel modules if they are not present
|
|
|
|
if [ ! -f /lib/modules/$(uname -r)/misc/vmmon.ko || ! -f /lib/modules/$(uname -r)/misc/vmnet.ko ]; then
|
|
|
|
logg info 'Building VMware host modules'
|
2023-01-31 21:18:59 -08:00
|
|
|
if sudo vmware-modconfig --console --install-all; then
|
|
|
|
:
|
|
|
|
else
|
2023-02-01 14:30:02 -08:00
|
|
|
logg info 'Acquiring VMware version from CLI'
|
2023-01-31 21:18:59 -08:00
|
|
|
VMW_VERSION=$(vmware --version | cut -f 3 -d' ')
|
|
|
|
mkdir -p /tmp/vmw_patch
|
|
|
|
cd /tmp/vmw_patch
|
2023-02-01 14:30:02 -08:00
|
|
|
logg info 'Downloading VMware host module patches'
|
2023-01-31 22:56:51 -08:00
|
|
|
curl -sSL https://github.com/mkubecek/vmware-host-modules/archive/workstation-$VMW_VERSION.tar.gz -o /tmp/vmw_patch/workstation.tar.gz
|
2023-01-31 21:18:59 -08:00
|
|
|
tar -xzf /tmp/vmw_patch/workstation.tar.gz
|
2023-01-31 23:04:55 -08:00
|
|
|
cd vmware*
|
2023-01-31 22:56:51 -08:00
|
|
|
logg info 'Running `sudo make` and `sudo make install`'
|
2023-01-31 21:18:59 -08:00
|
|
|
sudo make
|
|
|
|
sudo make install
|
2023-02-01 14:30:02 -08:00
|
|
|
logg success 'Successfully configured VMware host module patches'
|
2023-01-31 21:18:59 -08:00
|
|
|
fi
|
|
|
|
|
2023-02-01 14:30:02 -08:00
|
|
|
### Sign VMware host modules if Secure Boot is enabled
|
|
|
|
if [ -f /sys/firmware/efi ]; then
|
|
|
|
logg info 'Signing host modules'
|
|
|
|
mkdir -p /tmp/vmware
|
|
|
|
cd /tmp/vmware
|
|
|
|
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VMware/"
|
|
|
|
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)
|
|
|
|
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)
|
|
|
|
echo '' | mokutil --import MOK.der
|
|
|
|
logg success 'Successfully signed VMware host modules. Reboot the host before powering on VMs'
|
|
|
|
fi
|
|
|
|
|
|
|
|
### Patch VMware with Unlocker
|
2023-01-31 22:56:51 -08:00
|
|
|
if [ ! -f /usr/lib/vmware/isoimages/darwin.iso ]; then
|
2023-02-01 14:30:02 -08:00
|
|
|
logg info 'Acquiring VMware Unlocker latest release version'
|
2023-01-31 22:56:51 -08:00
|
|
|
UNLOCKER_URL=$(curl -sSL https://api.github.com/repos/DrDonk/unlocker/releases/latest | jq -r '.assets[0].browser_download_url')
|
|
|
|
mkdir -p /tmp/vmware-unlocker
|
|
|
|
cd /tmp/vmware-unlocker
|
|
|
|
logg info 'Downloading unlocker.zip'
|
|
|
|
curl -sSL "$UNLOCKER_URL" -o unlocker.zip
|
|
|
|
unzip unlocker.zip
|
|
|
|
cd linux
|
|
|
|
logg info 'Running the unlocker'
|
|
|
|
echo "y" | sudo ./unlock
|
2023-02-01 14:30:02 -08:00
|
|
|
logg success 'Successfully unlocked VMware for macOS compatibility'
|
2023-01-31 22:56:51 -08:00
|
|
|
else
|
2023-02-01 14:30:02 -08:00
|
|
|
logg info '/usr/lib/vmware/isoimages/darwin.iso is already present on the system so VMware macOS unlocking will not be performed'
|
2023-01-31 22:56:51 -08:00
|
|
|
fi
|
2023-02-01 14:30:02 -08:00
|
|
|
else
|
|
|
|
logg info 'VMware host modules are present'
|
|
|
|
fi
|
2023-01-31 21:18:59 -08:00
|
|
|
else
|
2023-02-01 14:30:02 -08:00
|
|
|
logg warn 'VMware Workstation is not installed so the VMware Unlocker will not be installed'
|
2023-01-31 21:18:59 -08:00
|
|
|
fi
|
|
|
|
|
|
|
|
{{ end -}}
|