Skip to content

Instantly share code, notes, and snippets.

@corbtastik
Last active April 8, 2022 15:46
Show Gist options
  • Save corbtastik/f145a6e9a856c6a63d1be9f7d00c3043 to your computer and use it in GitHub Desktop.
Save corbtastik/f145a6e9a856c6a63d1be9f7d00c3043 to your computer and use it in GitHub Desktop.
VMWare Fusion Headless VM execution on OSX

Symlink VMs Folder

Create symlink to where VMware Fusion stores VM images, use this symbolic path instead default spacey path. On my OSX dev machine that folder is $HOME/Virtual\ Machines.localized.

# symlink path $HOME/vms
ln -s Virtual\ Machines.localized vms

Create a folder for VMware Fusion stuff

mkdir $HOME/vmware-fusion
# add an export to .bashrc or .zshrc
export VMWARE_FUSION_HOME=$HOME/vmware-fusion

Symlink VMWare Fusion Library folder

Another symlink to VMWare Fusion's Library folder for easy access to binaries.

cd $VMWARE_FUSION_HOME
ln -s /Applications/VMware\ Fusion.app/Contents/Library lib

# add the lib folder to your PATH in .bashrc or .zshrc
export PATH=$VMWARE_FUSION_HOME/lib:$PATH

Check Setup

# vms symlink
cd $HOME
ls -al
lrwxr-xr-x    1 corbs    vms -> Virtual Machines.localized

# lib symlink
cd $VMWARE_FUSION_HOME
corbs@corbspro:~/vmware-fusion|⇒  ls -al
lrwxr-xr-x    1 corbs    lib -> /Applications/VMware Fusion.app/Contents/Library

VM script

cd $VMWARE_FUSION_HOME
mkdir bin
cd bin
# create vm script (see below) then set perms
chmod u+x vm

vm start/stop script

#!/bin/bash

function start {
  ${VMWARE_FUSION_HOME}/lib/vmrun start ~/vms/${1}.vmwarevm/${1}.vmx nogui 
}

function stop {
  ${VMWARE_FUSION_HOME}/lib/vmrun stop ~/vms/${1}.vmwarevm/${1}.vmx nogui 
}

function list {
  ${VMWARE_FUSION_HOME}/lib/vmrun list
}

function suspend {
  ${VMWARE_FUSION_HOME}/lib/vmrun suspend ~/vms/${1}.vmwarevm/${1}.vmx nogui   
}

function pause {
  ${VMWARE_FUSION_HOME}/lib/vmrun pause ~/vms/${1}.vmwarevm/${1}.vmx nogui   
}

function unpause {
  ${VMWARE_FUSION_HOME}/lib/vmrun unpause ~/vms/${1}.vmwarevm/${1}.vmx nogui   
}

function reset {
  ${VMWARE_FUSION_HOME}/lib/vmrun reset ~/vms/${1}.vmwarevm/${1}.vmx nogui   
}

function usage {
  echo "-----------------------------------------------------------------------------"
  echo "Usage - options are: start | stop | suspend | pause | unpause | reset | list"
  echo "-----------------------------------------------------------------------------"
}

if [ $# -lt 1 ]; then
  usage
  exit 1
fi

case "$1" in
    start)
        if [ $# -lt 2 ]; then
          echo "Usage: vm start [name-of-vm]"
          exit 1
        fi 
        echo "starting vm ${2}..."
        start ${2}
        ;;
    stop)
        if [ $# -lt 2 ]; then
          echo "Usage: vm stop [name-of-vm]"
          exit 1
        fi
        echo "stopping vm ${2}..."
        stop ${2}
        ;;
    suspend)
        if [ $# -lt 2 ]; then
          echo "Usage: vm suspend [name-of-vm]"
          exit 1
        fi    
        echo "suspend vm ${2}..."
        suspend ${2}
        ;;
    pause)
        if [ $# -lt 2 ]; then
          echo "Usage: vm pause [name-of-vm]"
          exit 1
        fi
        echo "pause vm ${2}..."
        pause ${2}
        ;;
    unpause)
        if [ $# -lt 2 ]; then
          echo "Usage: vm unpause [name-of-vm]"
          exit 1
        fi    
        echo "unpause vm ${2}..."
        unpause ${2}
        ;;
    reset)
        if [ $# -lt 2 ]; then
          echo "Usage: vm reset [name-of-vm]"
          exit 1
        fi        
        echo "reset vm ${2}..."
        reset ${2}
        ;;                             
    list)
        echo "listing vms..."
        list
        ;;
    *)
      usage
      exit 1
esac

Use

corbs@corbspro:~/vmware-fusion/bin|⇒  ./vm start ubuntu-dev1
starting vm ubuntu-dev1...
corbs@corbspro:~/vmware-fusion/bin|⇒  ./vm stop ubuntu-dev1
stopping vm ubuntu-dev1...

Optionally set $VMWARE_FUSION_HOME/bin on your path to run the vm script from anywhere on your box.

export PATH=$VMWARE_FUSION_HOME/lib:$VMWARE_FUSION_HOME/bin:$PATH
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment