#!/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." IN_FILE=$1 VM_ID=$2 # 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}" exit 0