summaryrefslogtreecommitdiffstats
path: root/remote
diff options
context:
space:
mode:
authorSimon Rettberg2013-07-22 19:27:28 +0200
committerSimon Rettberg2013-07-22 19:27:28 +0200
commit66ee3a882e9f3af9510017bb207460776ef7bf58 (patch)
tree09e4b443b58e645f8335d16ed770422be5420afe /remote
parent[dnbd3] Add dnbd3 client + kernel module (diff)
downloadtm-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-xremote/modules/vmchooser/data/opt/openslx/bin/run-virt.sh368
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