diff options
author | Simon Rettberg | 2013-07-22 19:27:28 +0200 |
---|---|---|
committer | Simon Rettberg | 2013-07-22 19:27:28 +0200 |
commit | 66ee3a882e9f3af9510017bb207460776ef7bf58 (patch) | |
tree | 09e4b443b58e645f8335d16ed770422be5420afe /remote | |
parent | [dnbd3] Add dnbd3 client + kernel module (diff) | |
download | tm-scripts-66ee3a882e9f3af9510017bb207460776ef7bf58.tar.gz tm-scripts-66ee3a882e9f3af9510017bb207460776ef7bf58.tar.xz tm-scripts-66ee3a882e9f3af9510017bb207460776ef7bf58.zip |
[vmchooser] fix indentation of run-virt.sh, add profiling option to xml
Diffstat (limited to 'remote')
-rwxr-xr-x | remote/modules/vmchooser/data/opt/openslx/bin/run-virt.sh | 368 |
1 files changed, 185 insertions, 183 deletions
diff --git a/remote/modules/vmchooser/data/opt/openslx/bin/run-virt.sh b/remote/modules/vmchooser/data/opt/openslx/bin/run-virt.sh index 5dd5d4a4..473dfbc7 100755 --- a/remote/modules/vmchooser/data/opt/openslx/bin/run-virt.sh +++ b/remote/modules/vmchooser/data/opt/openslx/bin/run-virt.sh @@ -26,10 +26,10 @@ PLUGINCONFROOT=/etc/opt/openslx/plugins PLUGINCONFDIR=/etc/opt/openslx/plugins/vmchooser # include general configuration from vmchooser [ -f /etc/openslx/vmchooser/vmchooser.conf ] && \ - . /etc/openslx/vmchooser/vmchooser.conf +. /etc/openslx/vmchooser/vmchooser.conf # load general virtualization information [ -f /etc/openslx/vmchooser/virtualization.conf ] && \ - . /etc/openslx/vmchooser/virtualization.conf +. /etc/openslx/vmchooser/virtualization.conf ################################################################################ ### Functions used throughout the script @@ -38,72 +38,72 @@ PLUGINCONFDIR=/etc/opt/openslx/plugins/vmchooser # function to write to stdout and logfile LOGFILE=/var/log/openslx/run-virt.${USER}.$$.log writelog () { - # write to stdout - echo -e "$1" - # log into file - echo -e "$1" >> ${LOGFILE} + # write to stdout + echo -e "$1" + # log into file + echo -e "$1" >> ${LOGFILE} } # remove config dirs when exit cleanexit () { - if echo "${RMDIRS}" 2>/dev/null | grep -q ${xmlvirt}; then - writelog "${xmlvirt} exited. Cleanning up... \c" - rm -rf ${RMDIRS} >/dev/null 2>&1 - writelog "done" - fi - - exit "$1" + if echo "${RMDIRS}" 2>/dev/null | grep -q ${xmlvirt}; then + writelog "${xmlvirt} exited. Cleanning up... \c" + rm -rf ${RMDIRS} >/dev/null 2>&1 + writelog "done" + fi + + exit "$1" } # check for important files used filecheck () { - filecheck=$(LANG=us ls -lh ${diskfile} 2>&1) - writelog "Filecheck:\n${filecheck}\n" - noimage=$(echo ${filecheck} | grep -i "no such file or directory" | wc -l) - rightsfile=${diskfile} - - # check if link - if [ -L "${diskfile}" ]; then - # take link target - rightsfile=$(ls -lh ${diskfile} 2>&1 | awk -F '-> *' '{print $2}') - rightsfile=${vmdir}/${rightsfile} - filecheck=$(LANG=us ls -lh ${rightsfile} 2>&1) - fi - - # does file exist - if [ "${noimage}" -ge "1" ]; then - writelog "Virtual Machine Image Problem:\c " - writelog "\tThe image you've specified doesn't exist." - writelog "Filecheck says:\c " - writelog "\t\t${diskfile}:\n\t\t\tNo such file or directory" - writelog "Hint:\c " - writelog "\t\t\tCompare spelling of the image with your options.\n" - exit 1 - fi - - # readable by calling user - if ! [ -r "${diskfile}" >/dev/null 2>&1 \ - -o -r "${diskfile}" >/dev/null 2>&1 ]; then - writelog "Vmware Image Problem:\c " - writelog "\tThe image you've specified has wrong rights." - writelog "Filecheck says:\t\t$(echo ${filecheck} \ - | awk '{print $1" "$3" "$4}') ${rightsfile}" - writelog "Hint:\t\t\tChange rights with: chmod a+r ${rightsfile}\n" - exit 1 - fi - - # writable (for persistent-mode)? - if ! [ -w "${diskfile}" >/dev/null 2>&1 \ - -o -w "${diskfile}" >/dev/null 2>&1 ] \ - && [ "${np}" = "independent-persistent" ]; then - writelog "Vmware Image Problem:\c " - writelog "\tThe image you have specified has wrong rights." - writelog "Filecheck says:\t\t$(echo ${filecheck} \ - | awk '{print $1" "$3" "$4}') ${rightsfile}" - writelog "Hint:\t\t\tUse nonpersistent-mode or change rights to rw\n" - exit 1 - fi + filecheck=$(LANG=us ls -lh ${diskfile} 2>&1) + writelog "Filecheck:\n${filecheck}\n" + noimage=$(echo ${filecheck} | grep -i "no such file or directory" | wc -l) + rightsfile=${diskfile} + + # check if link + if [ -L "${diskfile}" ]; then + # take link target + rightsfile=$(ls -lh ${diskfile} 2>&1 | awk -F '-> *' '{print $2}') + rightsfile=${vmdir}/${rightsfile} + filecheck=$(LANG=us ls -lh ${rightsfile} 2>&1) + fi + + # does file exist + if [ "${noimage}" -ge "1" ]; then + writelog "Virtual Machine Image Problem:\c " + writelog "\tThe image you've specified doesn't exist." + writelog "Filecheck says:\c " + writelog "\t\t${diskfile}:\n\t\t\tNo such file or directory" + writelog "Hint:\c " + writelog "\t\t\tCompare spelling of the image with your options.\n" + exit 1 + fi + + # readable by calling user + if ! [ -r "${diskfile}" >/dev/null 2>&1 \ + -o -r "${diskfile}" >/dev/null 2>&1 ]; then + writelog "Vmware Image Problem:\c " + writelog "\tThe image you've specified has wrong rights." + writelog "Filecheck says:\t\t$(echo ${filecheck} \ + | awk '{print $1" "$3" "$4}') ${rightsfile}" + writelog "Hint:\t\t\tChange rights with: chmod a+r ${rightsfile}\n" + exit 1 + fi + + # writable (for persistent-mode)? + if ! [ -w "${diskfile}" >/dev/null 2>&1 \ + -o -w "${diskfile}" >/dev/null 2>&1 ] \ + && [ "${np}" = "independent-persistent" ]; then + writelog "Vmware Image Problem:\c " + writelog "\tThe image you have specified has wrong rights." + writelog "Filecheck says:\t\t$(echo ${filecheck} \ + | awk '{print $1" "$3" "$4}') ${rightsfile}" + writelog "Hint:\t\t\tUse nonpersistent-mode or change rights to rw\n" + exit 1 + fi } ################################################################################ @@ -113,55 +113,54 @@ filecheck () ## Added for persistent support. diskmode='nonpersistent' xmlfile="$1" -if [[ "$(grep --extended-regexp '< *persistent *param=".+"' "$1")" ]]; then - imageFilePath=$(grep -io '<image_name param=.*"' "$1" \ - | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }') - diskmode='persistent' && \ - # TODO path shouldn't be hardcoded. - xmlfile="/var/lib/virt/vmware/$(sed 's/-persistent$//g' <<< "$(sed 's/vmdk$/xml/g' <<< "$(basename "$imageFilePath")")")" && \ - # NOTE: We have to make sure that this folder is present to prevent - # getting an empty string by "readlink". - mkdir --parents ~/.persistentVirtualMachines/ && \ - userBranchFilePath="$(readlink --canonicalize ~/.persistentVirtualMachines/$(basename "$imageFilePath"))" - # Create linked clone if not exists. - if [ ! -f "$userBranchFilePath" ]; then - # TODO path shouldn't be hardcoded. - /opt/openslx/plugin-repo/vmchooser/clc.bash "$xmlfile" \ - "$userBranchFilePath" --debug --verbose - fi +if [[ "$(grep --extended-regexp '< *persistent *param=".+"' "$xmlfile")" ]]; then + imageFilePath="$(grep -io '<image_name param=.*"' "$xmlfile" | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')" + diskmode='persistent' + # TODO path shouldn't be hardcoded. + xmlfile="$(basename "$imageFilePath" | sed 's/vmdk$/xml/g;s/-persistent//g')" + # NOTE: We have to make sure that this folder is present to prevent + # getting an empty string by "readlink". + mkdir --parents ~/.persistentVirtualMachines/ + userBranchFilePath="$(readlink --canonicalize ~/.persistentVirtualMachines/$(basename "$imageFilePath"))" + # Create linked clone if not exists. + if [ ! -f "$userBranchFilePath" ]; then + # TODO path shouldn't be hardcoded. + /opt/openslx/plugin-repo/vmchooser/clc.bash "$xmlfile" "$userBranchFilePath" --debug --verbose + fi fi ## # absolute or relative path? if ls "${xmlfile}" 2>/dev/null | grep '/' >/dev/null 2>&1; then - xmlpath=$(dirname "${xmlfile}") - xmlfile=$(basename "${xmlfile}") + xmlpath=$(dirname "${xmlfile}") + xmlfile=$(basename "${xmlfile}") else - xmlpath=${vmchooser_xmlpath} + xmlpath=${vmchooser_xmlpath} fi # full path xmlfile="${xmlpath}/${xmlfile%.xml}.xml" +DO_PROFILE="$(grep -c -E -i '<\s*profile\s*param="?(true|yes)"?' "$xmlfile")" + ################################################################################ ### Sanity checks ################################################################################ # test if the xml file is valid if ! [ -r "${xmlfile}" ]; then - writelog "${xmlfile} not a readable XML file!" - exit 1 + writelog "${xmlfile} not a readable XML file!" + exit 1 fi # test if XML file if ! grep '<?xml' "${xmlfile}" >/dev/null 2>&1; then - writelog \ - "Submitted configuration file ${xmlfile} seems to have wrong XML format" - exit 1 + writelog "Submitted configuration file ${xmlfile} seems to have wrong XML format" + exit 1 fi # check for running in graphical environment otherwise no much use here [ -z "$DISPLAY" ] && echo -e "\n\tStart only within a graphical desktop!\n" \ - && exit 1 +&& exit 1 ################################################################################ ### Logo for console @@ -190,42 +189,42 @@ writelog "VM config:" # Name of the virt image imgname=$(grep -io '<image_name param=.*"' "${xmlfile}" \ - | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }') +| sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }') ## Added for persistent support. if [[ "$userBranchFilePath" ]]; then - imgname="$userBranchFilePath" + imgname="$userBranchFilePath" fi ## # Imagename /w full path if echo "${imgname}" 2>/dev/null | grep -q '^/' >/dev/null 2>&1; then - imgpath="$(dirname "${imgname}")" - imgname="$(basename "${imgname}")" - vmpath="${imgpath}/${imgname}" -# If old vmchooser binary stuff -# We do not need folder name as it is already included by vmchooser -elif echo "${xmlfile}" 2>/dev/null | grep -q '^/tmp/' >/dev/null 2>&1; then - vmpath="$imgname" - imgname="$(basename "${imgname}")" -## Added for persistent support. -elif [[ "$userBranchFilePath" ]]; then - vmpath="$userBranchFilePath" -## -# Else use same path as xml + imgpath="$(dirname "${imgname}")" + imgname="$(basename "${imgname}")" + vmpath="${imgpath}/${imgname}" + # If old vmchooser binary stuff + # We do not need folder name as it is already included by vmchooser + elif echo "${xmlfile}" 2>/dev/null | grep -q '^/tmp/' >/dev/null 2>&1; then + vmpath="$imgname" + imgname="$(basename "${imgname}")" + ## Added for persistent support. + elif [[ "$userBranchFilePath" ]]; then + vmpath="$userBranchFilePath" + ## + # Else use same path as xml else - imgpath="${xmlpath}" - vmpath="${imgpath}/${imgname}" + imgpath="${xmlpath}" + vmpath="${imgpath}/${imgname}" fi # Check if virtual machine container file exists if ! [ -e "${vmpath}" ]; then - writelog "Virtual machine image ${vmpath} not found!" - exit 1 + writelog "Virtual machine image ${vmpath} not found!" + exit 1 fi # Name of the virt machine, sed because of Windows formatting vm_name=$(grep -o 'short_description param=.*"' "${xmlfile}" \ - | sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}') +| sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}') # If ${vm_name} not defined use ${xmlfile} vm_name="${vm_name:-${xmlfile%.xml}}" @@ -235,71 +234,71 @@ vm_shortname="$(basename "${xmlfile%.xml}" | sed -e "s, ,-,g")" # vm_name = displayname, define for old scripts displayname="${vm_name}" -# image is for the following virtual machine +# image is for the following virtual machine xmlvirt=$(grep -o 'virtualmachine param=.*"' "${xmlfile}" \ - | sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}') +| sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}') # choose the proper virtualization/emulator plugin [ "x${xmlvirt}" != "x" -a "x${xmlvirt}" != "xqemukvm" -a \ - "x${xmlvirt}" != "xvirtualbox" -a "x${xmlvirt}" != "xvmware" ] && \ - xmlvirt="emufe" +"x${xmlvirt}" != "xvirtualbox" -a "x${xmlvirt}" != "xvmware" ] && \ +xmlvirt="emufe" # make a guess from the filename extension if ${xmlvirt} is empty # (not set within the XML file) # TODO: implement possibility to submit own configuration files if [ -z "${xmlvirt}" ] && [ -n "${additional_config}" ]; then - writelog "No virtual machine parameter defined in ${xmlfile}" - writelog "Trying to guess VM...\c" - case "$(cat ${additional_config} | tr \"[A-Z]\" \"[a-z]\")" in - *config.version*|*virtualhw.version*|*independent-nonpersistent*|*vmdk*) - xmlvirt="vmware" - ;; - *innotek*|*virtualbox*) - xmlvirt="virtualbox" - ;; - *qemu*|*kvm*) - xmlvirt="qemukvm" - ;; - *) - xmlvirt="none" - ;; - esac -elif [ -z "${xmlvirt}" ]; then - case "$(echo ${imgname##*.} | tr \"[A-Z]\" \"[a-z]\")" in - vmdk) - xmlvirt="vmware" - ;; - vbox|vdi) - xmlvirt="virtualbox" - ;; - qcow*) - xmlvirt="qemukvm" - ;; - *) - xmlvirt="emufe" - ;; - esac - writelog "result:\t${xmlvirt}" + writelog "No virtual machine parameter defined in ${xmlfile}" + writelog "Trying to guess VM...\c" + case "$(cat ${additional_config} | tr \"[A-Z]\" \"[a-z]\")" in + *config.version*|*virtualhw.version*|*independent-nonpersistent*|*vmdk*) + xmlvirt="vmware" + ;; + *innotek*|*virtualbox*) + xmlvirt="virtualbox" + ;; + *qemu*|*kvm*) + xmlvirt="qemukvm" + ;; + *) + xmlvirt="none" + ;; + esac + elif [ -z "${xmlvirt}" ]; then + case "$(echo ${imgname##*.} | tr \"[A-Z]\" \"[a-z]\")" in + vmdk) + xmlvirt="vmware" + ;; + vbox|vdi) + xmlvirt="virtualbox" + ;; + qcow*) + xmlvirt="qemukvm" + ;; + *) + xmlvirt="emufe" + ;; + esac + writelog "result:\t${xmlvirt}" fi # Definition of the client system vmostype=$(grep -io '<os param=.*"' "${xmlfile}" | awk -F '"' '{ print $2 }' |\ - tr "[A-Z]" "[a-z]") +tr "[A-Z]" "[a-z]") # Definition of the networking the client system is connected to network_kind=$(grep -io '<network param=.*"' "${xmlfile}" \ - | awk -F '"' '{ print $2 }' | tr "[A-Z]" "[a-z]") +| awk -F '"' '{ print $2 }' | tr "[A-Z]" "[a-z]") network_card=$(grep -io '<netcard param=.*"' "${xmlfile}" \ - | awk -F '"' '{ print $2 }'| tr "[A-Z]" "[a-z]") +| awk -F '"' '{ print $2 }'| tr "[A-Z]" "[a-z]") # Set redirects to 0, see vmgrid if you want to define some redirects=0 # Serial/parallel ports defined (e.g. "ttyS0" or "autodetect") serial=$(grep -io '<serialport param=.*"' "${xmlfile}" \ - | awk -F '"' '{ print $2 }') +| awk -F '"' '{ print $2 }') parallel=$(grep -io '<parport param=.*"' "${xmlfile}" \ - | awk -F '"' '{ print $2 }') +| awk -F '"' '{ print $2 }') writelog "\tVirtualization:\t\t$xmlvirt" writelog "\tVM name:\t\t$vm_name" @@ -319,9 +318,9 @@ cpu_cores=${cpu_cores:-"1"} # Amount of memory for the VM. Be generous if diff is written to HDD if mount | grep -q '^/dev/sd.*on.*/tmp'; then - reserve=16 - min=512 - max=1024 + reserve=16 + min=550 + max=1024 else reserve=65 min=768 @@ -337,12 +336,12 @@ reserve="$[ ( $totalmem * $reserve ) / 100 ]" # Get a result which can be divided by 4 mem="$[ ( ( $totalmem - $reserve ) / 4 ) * 4 ]" if [ -n "$mainvirtmem" ]; then - forcemem="$[ "$mainvirtmem" / 4 * 4 ]" - mem="$forcemem" + forcemem="$[ "$mainvirtmem" / 4 * 4 ]" + mem="$forcemem" fi hostmem="$[ $totalmem - $mem ]" -# Configuring ethernet mac address: first 3 bytes are fixed (00:50:56) +# Configuring ethernet mac address: first 3 bytes are fixed (00:50:56) # 4th byte is the VM-ID (0D) # last two bytes are taken from the bridge of the host # define one MAC per guest @@ -379,7 +378,7 @@ remotedesktopport="590${VM_ID}" # Enable 3D enable3d=$(grep -i "<enable3d param=.*" ${xmlfile} 2>/dev/null | \ - awk -F '=' {'print $2'} | tr "[A-Z]" "[a-z]") +awk -F '=' {'print $2'} | tr "[A-Z]" "[a-z]") # Add rw share sharepath="${HOME}" @@ -422,42 +421,45 @@ xrandr | grep -o -E 'current\s*[0-9]+\s*x\s*[0-9]+' | cut -c 8- | sed -r 's/(\s| # Get all virtual machine specific stuff from the respective include file if [ -e /etc/openslx/"${xmlvirt}"/run-virt.include ] ; then - self="${xmlvirt}" - . /etc/openslx/"${xmlvirt}"/run-virt.include - # start a windowmanager for easier handling - # (expect problems /w windows opening in background /w vmware without wm) - for dm in twm xfwm4 metacity openbox blackbox kwin fvwm2 ; do - if which $dm >/dev/null 2>&1 ; then - if [ "$dm" = "fvwm2" ] ; then - echo "EdgeScroll 0 0" > ${redodir}/fvwm - fvwm2 -f ${redodir}/fvwm >/dev/null 2>&1 & - else - $dm >/dev/null 2>&1 & - fi - break - fi - done - # Start poolvideoswitch if we find the autostarter file - #if [ -e /etc/xdg/autostart/pvsgui.desktop ]; then - # /usr/local/bin/pvsgui -p 2 -b >/dev/null 2>&1 & - #fi - eval ${VIRTCMD} ${VIRTCMDOPTS} - writelog "Bye." - - # Postrun for commands after virtualization finishes - if [ -n "${POSTRUN}" ]; then - eval ${POSTRUN} >/dev/null 2>&1 - fi - - cleanexit 0 + self="${xmlvirt}" + . /etc/openslx/"${xmlvirt}"/run-virt.include + # start a windowmanager for easier handling + # (expect problems /w windows opening in background /w vmware without wm) + for dm in twm xfwm4 metacity openbox blackbox kwin fvwm2 ; do + if which $dm >/dev/null 2>&1 ; then + if [ "$dm" = "fvwm2" ] ; then + echo "EdgeScroll 0 0" > ${redodir}/fvwm + fvwm2 -f ${redodir}/fvwm >/dev/null 2>&1 & + else + $dm >/dev/null 2>&1 & + fi + break + fi + done + # Start poolvideoswitch if we find the autostarter file + #if [ -e /etc/xdg/autostart/pvsgui.desktop ]; then + # /usr/local/bin/pvsgui -p 2 -b >/dev/null 2>&1 & + #fi + if [[ "$DO_PROFILE" -ge "1" ]]; then + wget "http://132.230.8.113/profile/do.php?action=start" + fi + eval ${VIRTCMD} ${VIRTCMDOPTS} + writelog "Bye." + + # Postrun for commands after virtualization finishes + if [ -n "${POSTRUN}" ]; then + eval ${POSTRUN} >/dev/null 2>&1 + fi + + cleanexit 0 else - writelog "Failed because of missing ${xmlvirt} plugin." - cleanexit 1 + writelog "Failed because of missing ${xmlvirt} plugin." + cleanexit 1 fi # Postrun for commands after virtualization finishes if [ -n "${POSTRUN}" ]; then - eval ${POSTRUN} >/dev/null 2>&1 + eval ${POSTRUN} >/dev/null 2>&1 fi cleanexit 0 |