diff --git a/esxi/esxi-build.sh b/esxi/esxi-build.sh new file mode 100755 index 0000000..e1f5e1d --- /dev/null +++ b/esxi/esxi-build.sh @@ -0,0 +1,13 @@ +#!/bin/sh +set -e +#set -x + +# Ensure we only use unmodified commands +export PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# Copy patch to local.sh +rm -fv local.sh +cp local-prefix.sh local.sh +cat unlocker.py >> local.sh +cat local-suffix.sh >> local.sh +chmod +x local.sh diff --git a/esxi/esxi-install.sh b/esxi/esxi-install.sh new file mode 100755 index 0000000..6e53796 --- /dev/null +++ b/esxi/esxi-install.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -e +#set -x + +echo VMware Unlocker 2.1.0 +echo =============================== +echo Copyright: Dave Parsons 2011-17 + +# Ensure we only use unmodified commands +export PATH=/bin:/sbin:/usr/bin:/usr/sbin + +VER=$(uname -r) +if [ "$VER" == "6.0.0" ]; then + echo "Error - ESXi 6.0.0 is not supported!" +elif [ "$VER" == "6.5.0" ]; then + # Copy patch to local.sh + echo Installing local.sh + chmod +x local.sh + cp local.sh /etc/rc.local.d/local.sh + python esxiconfig.py on + backup.sh 0 + echo "Success - please now restart the server!" +else + echo "Unknown ESXi version" +fi + + + + diff --git a/esxi/esxi-smctest.sh b/esxi/esxi-smctest.sh new file mode 100755 index 0000000..bad83b1 --- /dev/null +++ b/esxi/esxi-smctest.sh @@ -0,0 +1,4 @@ +#!/bin/sh +grep -il \(c\)AppleComputerInc /bin/vmx* +vim-cmd hostsvc/hosthardware | grep smcPresent | cut -d ',' -f 1 | sed 's/^[ \t]*//' +grep useVmxSandbox /etc/vmware/hostd/config.xml | sed 's/^[ \t]*//' diff --git a/esxi/esxi-uninstall.sh b/esxi/esxi-uninstall.sh new file mode 100755 index 0000000..753e1d2 --- /dev/null +++ b/esxi/esxi-uninstall.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -e +#set -x + +echo VMware Unlocker 2.1.0 +echo =============================== +echo Copyright: Dave Parsons 2011-17 + +# Ensure we only use unmodified commands +export PATH=/bin:/sbin:/usr/bin:/usr/sbin + +echo Uninstalling local.sh +cp /etc/rc.local.d/.#local.sh /etc/rc.local.d/local.sh +python esxiconfig.py off +backup.sh 0 +echo Success - please now restart the server! diff --git a/esxi/esxiconfig.py b/esxi/esxiconfig.py new file mode 100755 index 0000000..67634c2 --- /dev/null +++ b/esxi/esxiconfig.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +""" +This is a simple method to modify the hostd XML file +Not using XML on ESXi Python as it does not preserve +formatting or comments. + +(This could be sed but cannot find a suitable regex.) + +""" +from __future__ import print_function +import sys + + +def testline(line, test): + sline = line.lstrip() + if sline == test: + return True + else: + return False + + +def main(): + vmsvc = '\n' + sandbox = 'false\n' + + with open('/etc/vmware/hostd/config.xml', 'r+') as f: + data = f.readlines() + + # Search for the relevant XML tags + i = 0 + vmsvcindex = 0 + sandboxindex = 0 + for line in data: + + if testline(line, vmsvc): + vmsvcindex = i + + if testline(line, sandbox): + sandboxindex = i + + # print(line, end='') + i += 1 + + # Simple toggle on or off depending if found + if sandboxindex != 0 and sys.argv[1] == 'off': + print('Removing useVmxSandbox') + del data[sandboxindex] + elif sandboxindex == 0 and sys.argv[1] == 'on': + print('Adding useVmxSandbox') + pad = len(data[vmsvcindex + 1]) - len(data[vmsvcindex + 1].lstrip()) + data.insert(vmsvcindex + 1, (" " * pad) + sandbox) + else: + pass + + # Rewrite the config.xml file + f.seek(0) + f.write(''.join(data)) + f.truncate() + f.close() + + +if __name__ == '__main__': + main() diff --git a/esxi/local-prefix.sh b/esxi/local-prefix.sh new file mode 100755 index 0000000..2476135 --- /dev/null +++ b/esxi/local-prefix.sh @@ -0,0 +1,65 @@ +#!/bin/sh +set -e +set -x + +echo VMware ESXi 6.x Unlocker 2.1.0 +echo =============================== +echo Copyright: Dave Parsons 2011-17 + +# Ensure we only use unmodified commands +export PATH=/bin:/sbin:/usr/bin:/usr/sbin + +# Exit if boot option specified +if bootOption -o | grep -q 'nounlocker'; then + logger -t unlocker disabled via nounlocker boot option + exit 0 +fi + +# Make sure working files are removed +if [ -d /unlocker ]; then + logger -t unlocker Removing current patches + rm -rfv /unlocker +fi + +# Create new RAM disk and map to /unlocker +logger -t unlocker Creating RAM disk +mkdir /unlocker +localcli system visorfs ramdisk add -m 200 -M 200 -n unlocker -p 0755 -t /unlocker +logger -t unlocker Stopping hostd daemon +/etc/init.d/hostd stop + +# Copy the vmx files +logger -t unlocker Copying vmx files +mkdir /unlocker/bin +cp /bin/vmx /unlocker/bin/ +cp /bin/vmx-debug /unlocker/bin/ +cp /bin/vmx-stats /unlocker/bin/ + +# Setup symlink from /bin +logger -t unlocker Setup vmx sym links +rm -fv /bin/vmx +ln -s /unlocker/bin/vmx /bin/vmx +rm -fv /bin/vmx-debug +ln -s /unlocker/bin/vmx-debug /bin/vmx-debug +rm -fv /bin/vmx-stats +ln -s /unlocker/bin/vmx-stats /bin/vmx-stats + +# Copy the libvmkctl.so files +logger -t unlocker Copying 32-bit lib files +mkdir /unlocker/lib +cp /lib/libvmkctl.so /unlocker/lib/ +logger -t unlocker Setup 32-bit lib sym links +rm -fv /lib/libvmkctl.so +ln -s /unlocker/lib/libvmkctl.so /lib/libvmkctl.so +if [ -f /lib64/libvmkctl.so ]; then + logger -t unlocker Copying 64-bit lib files + mkdir /unlocker/lib64 + cp /lib64/libvmkctl.so /unlocker/lib64/ + logger -t unlocker Setup 64-bit lib sym links + rm -fv /lib64/libvmkctl.so + ln -s /unlocker/lib64/libvmkctl.so /lib64/libvmkctl.so +fi + +# Patch the vmx files +logger -t unlocker Patching vmx files +python <