Newer
Older
#!/bin/bash
#############################################
# VirtualBox vbox => template converter v0.1
# by ulisse aka A. Livio Beccaria
#
# It replaces some info in a vbox file to
# make it suitable to be used as a template
#############################################
# source folder
SRC_DIR="$(dirname $(readlink -f $0))"
#include common code
. ${SRC_DIR}/settings/common
[ "$#" -eq 2 ] || usage_vbox2template "Error: missing arguments."
# include settings
. $SRC_DIR/settings/settings
# override settings variables
TMP_DIR="/var/tmp/vbox-user"
#IMG_HOME="/opt/test"
#SF_LINUX_TARGET="/home/target"
#SF_MEDIA_TARGET="/media/usb"
TPL_FILE=`basename -s .vbox ${IN_FILE}`-tpl.vbox
# prepare template
cp "$1" "${TPL_FILE}"
# SharedFolder
#sed -i 's:\(SharedFolder.*name="'"`echo "${SF_LINUX_NAME}"`"'".*hostPath="\)\([^"]*\)\("\):\1'"`echo "${SF_LINUX_TARGET}"`"'\3:g' "${TPL_FILE}"
perl -pi -e 's:(SharedFolder.*name="'"`echo "${SF_LINUX_NAME}"`"'".*hostPath=")(.*?)("):$1'"`echo "${SF_LINUX_TARGET}"`"'$3:g' "${TPL_FILE}"
#sed -i 's:\(SharedFolder.*name="'"`echo "${SF_MEDIA_NAME}"`"'".*hostPath="\)\([^"]*\)\("\):\1'"`echo "${SF_MEDIA_TARGET}"`"'\3:g' "${TPL_FILE}"
perl -pi -e 's:(SharedFolder.*name="'"`echo "${SF_MEDIA_NAME}"`"'".*hostPath=")(.*?)("):$1'"`echo "${SF_MEDIA_TARGET}"`"'$3:g' "${TPL_FILE}"
# Machine snapshotFolder
perl -pi -e 's:(Machine.*?snapshotFolder=")(.+?)("):$1'`echo "${TMP_DIR}"`'$3:g' "${TPL_FILE}"
# MACAddress
perl -pi -e 's:(MACAddress=")(.+?)("):$1'`echo ""`'$3:g' "${TPL_FILE}"
# stateFile
#perl -pi -e 's:(stateFile=")(.*)(/)(.*\.sav)("):$1'`echo "${IMG_HOME}/${VM_ID}/"`'$4$5:g' "${TPL_FILE}"
perl -pi -e 's:(stateFile=")([/]+.*[/]+)(.*?\.sav"):$1'`echo "${IMG_HOME}/${VM_ID}/"`'$3:g' "${TPL_FILE}"
# HardDisks
perl -pi -e 's:(HardDisk.*?location=")([/]+.*[/]+)(.*?\.vdi"):$1'`echo "${IMG_HOME}/${VM_ID}/"`'$3:g' "${TPL_FILE}"
echo "Please check harddisks locations:"
perl -ln -e 'BEGIN{undef $/} while (/<HardDisks>(.*?)<\/HardDisks>/sg){print $1}' "${TPL_FILE}"