#!/bin/bash
#
# Start-up VM and wait until VM has started
# This is not a perfect science as there is really
# not a good way for VB to know that the Guest is
# completed with the 'startup'
# Ok to break out of script!
#
#
if [ "$UID" -eq 0 ]
then echo "This script should NOT be run as root."
exit 1
fi
#
# Source config file
if [ ! -f ~/.vbconfig ]; then
echo "Config File ~/.vbconfig not found!"
echo "Run: set-folders to create .vbconfig"
exit 1
fi
. ~/.vbconfig
#
if [[ ! ("$#" == 1) ]]; then
echo "Usage for $0 : VM Name required as argument."
exit 1
fi
VB_VM_NAME=$1
# The ITERA and SLEEP parameters determine polling duration and interval
# to check if the VM has been powered down
VM_POWER_ON_ITERA=60
VM_POWER_ON_SLEEP=5
#
# Check if VM is already running
VM_POWERED_ON=`VBoxManage list runningvms|grep -c '^"'${VB_VM_NAME}'"'`
if [ $VM_POWERED_ON -eq 1 ]; then
echo "VM $VB_VM_NAME is already up!"
exit 0
else
VBoxManage startvm "${VB_VM_NAME}" --type headless
echo "You can Ctrl-break from this script at any time ..."
fi
#
VM_LOG_FOLDER=`VBoxManage showvminfo ${VB_VM_NAME} | \
grep "Log folder" | cut -d ":" -f2 | sed 's/^[ ]*//'`
VM_LOG_FILE=${VM_LOG_FOLDER}/VBox.log
VM_GA_LOADED="0"
COUNTER=1
until [ $VM_GA_LOADED -gt 0 ]; do
sleep $VM_POWER_ON_SLEEP
VM_GA_LOADED=`grep -c "Guest Additions" ${VM_LOG_FILE}`
echo "Waiting $VM_POWER_ON_SLEEP additional seconds for VM to fully power on"
echo " - Iteration ${COUNTER}/${VM_POWER_ON_ITERA} ..."
let COUNTER+=1
if [ $COUNTER -gt $VM_POWER_ON_ITERA ]; then
echo "VM does not seem to be powering on!"
echo "Or Guest Additions is not installed to defect a full Power on"
echo "Exiting ..."
exit 1
fi
done
if [ $COUNTER -gt 1 ]; then
SECS_TO_POWERON=$(echo "${VM_POWER_ON_SLEEP}*${COUNTER}" | bc)
echo "Guest Additions started in approximately $SECS_TO_POWERON seconds."
fi
VM_POWER_ON_WAIT=$SECS_TO_POWERON
echo "Waiting an additional $VM_POWER_ON_WAIT seconds ..."
sleep $VM_POWER_ON_WAIT
#
echo "Check and display Errors:"
grep -v "AIOMgr: Flush failed" $VM_LOG_FILE | grep -i 'VERR_\|error\|failed'
#
echo "IP address of VM:"
$VB_BIN_LOC/060-get-vm-ip.bash $VB_VM_NAME
exit