Skip to content
Snippets Groups Projects
vbox2template 2 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/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
    
    
    ulisse's avatar
    ulisse committed
    [ "$#" -eq 2 ] || usage_vbox2template "Error: missing arguments."
    
    ulisse's avatar
    ulisse committed
    IN_FILE=$1
    VM_ID=$2
    
    
    # include settings
    . $SRC_DIR/settings/settings
    
    
    ulisse's avatar
    ulisse committed
    # 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}"
    
    
    ulisse's avatar
    ulisse committed
    # 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}"
    
    ulisse's avatar
    ulisse committed
    # 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}"
    
    ulisse's avatar
    ulisse committed
    # 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}"