summaryrefslogtreecommitdiffstats
path: root/os-plugins/plugins/vmchooser/files/run-virt.sh
diff options
context:
space:
mode:
authorMichael Janczyk2010-08-22 10:44:16 +0200
committerMichael Janczyk2010-08-22 10:44:16 +0200
commit6c51d303782b52c1540f74d383f41ba7a311268a (patch)
tree675ad612ef875bb576045eb70f8b8b82ca1f07c6 /os-plugins/plugins/vmchooser/files/run-virt.sh
parentMerge branch 'master' of openslx.org:openslx/core (diff)
downloadcore-6c51d303782b52c1540f74d383f41ba7a311268a.tar.gz
core-6c51d303782b52c1540f74d383f41ba7a311268a.tar.xz
core-6c51d303782b52c1540f74d383f41ba7a311268a.zip
vbox changes for vmchooser and var adaption
Diffstat (limited to 'os-plugins/plugins/vmchooser/files/run-virt.sh')
-rw-r--r--os-plugins/plugins/vmchooser/files/run-virt.sh413
1 files changed, 256 insertions, 157 deletions
diff --git a/os-plugins/plugins/vmchooser/files/run-virt.sh b/os-plugins/plugins/vmchooser/files/run-virt.sh
index df2a7404..a79d0d88 100644
--- a/os-plugins/plugins/vmchooser/files/run-virt.sh
+++ b/os-plugins/plugins/vmchooser/files/run-virt.sh
@@ -1,7 +1,7 @@
#!/bin/bash
# -----------------------------------------------------------------------------
-# Copyright (c) 2007..2009 - RZ Uni FR
-# Copyright (c) 2007..2009 - OpenSLX GmbH
+# Copyright (c) 2007..2010 - RZ Uni FR
+# Copyright (c) 2007..2010 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
@@ -16,110 +16,271 @@
# The idea is to setup a set of variables used by at least two different
# tools and then include the specific plugin which configures the speci-
# fied virtualization tool.
-# -----------------------------------------------------------------------------
+################################################################################
-# include default directories
. /etc/opt/openslx/openslx.conf
+
+################################################################################
+### Define default dirs / get configs
+################################################################################
+
PLUGINCONFROOT=${OPENSLX_DEFAULT_CONFDIR}/plugins
PLUGINCONFDIR=${PLUGINCONFROOT}/vmchooser
+# include general configuration from vmchooser
+[ -f ${PLUGINCONFROOT}/vmchooser/vmchooser.conf ] && \
+ . ${PLUGINCONFROOT}/vmchooser/vmchooser.conf
# load general virtualization information
[ -f ${PLUGINCONFROOT}/virtualization/virtualization.conf ] && \
. ${PLUGINCONFROOT}/virtualization/virtualization.conf
-# Sanity checks
################################################################################
+### Functions used throughout the script
+################################################################################
+
+# function to write to stdout and logfile
+LOGFILE=${OPENSLX_DEFAULT_LOGDIR}/run-virt.${USER}.$$.log
+writelog () {
+ # 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"
+}
+
+# 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
+}
+
+################################################################################
+### Get XML file and dir
+################################################################################
+
+# absolute or relative path?
+xmlfile=$1
+if ls ${xmlfile} 2>/dev/null | grep '/' >/dev/null 2>&1; then
+ xmlpath=$(dirname ${xmlfile})
+ xmlfile=$(basename ${xmlfile})
+else
+ xmlpath=${vmchooser_xmlpath}
+fi
+# full path
+xmlfile="${xmlpath}/${xmlfile%.xml}.xml"
+
+################################################################################
+### Sanity checks
+################################################################################
+
+# test if the xml file is valid
+if ! [ -r "${xmlfile}" ]; then
+ 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
+fi
# Theck for running in graphical environment otherwise no much use here
[ -z "$DISPLAY" ] && echo -e "\n\tStart only within a graphical desktop!\n" \
&& exit 1
-# Test if the xml path/file is valid (gotten via commandline first parameter)
-xml=$1
-[ -e "${xml}" ] || { echo -e "\n\tNo XML file given!\n"; exit 1; }
+################################################################################
+### Logo for console
+################################################################################
-# Read needed variables from XML file
+cat <<EOL
+ __ __
+ .----.--.--.-----.___.--.--.|__|.----.| |_
+ | _| | | |___| | || || _|| _|
+ |__| |_____|__|__| \___/ |__||__| |____|
+ OpenSLX virtual machine environment preparation script ...
+
+EOL
+
+################################################################################
+### Read needed variables from XML file
################################################################################
-# File name of the image
-imgname=$(grep -io "<image_name param=.*\"" ${xml} | \
- awk -F "\"" '{ print $2 }')
-
-case ${xml} in
- /tmp/*)
- # we do not need folder name as it is already included by vmchooser
- diskfile=$imgname
- imgname=$(basename ${imgname})
- ;;
- *)
- # Path to the image
- # (readlink produces the absolute path if called relatively)
- [ -z $imgpath ] && \
- { imgpath=$(readlink -f $xml); imgpath=${imgpath%/*.xml}; }
- # Diskfile is file including absolute path to it
- diskfile=$imgpath/$imgname
- ;;
-esac
-# TODO: change to new var vmpath, remove diskfile afterwards
-vmpath=$diskfile
-
-[ -e $diskfile ] || { echo -e "\n\tImage file $diskfile not found!"; exit 1; }
-
-# Short description of the image (as present in the vmchooser menu line)
-vm_name=$(grep -o "short_description param=.*\"" ${xml} | \
- sed -e "s/&.*;/; /g" | awk -F "\"" '{print $2}')
-# If ${short_description} not defined use ${image_name}
-# if ${vm_name} not defined use ${imgname}
-vm_name=${vm_name:-"${imgname%.*}"}
+writelog "Starting configuration..."
+writelog "\tLogfile:\t\t${LOGFILE}"
+writelog "\t/tmp info:\t\t$(df -h | grep " /tmp$" | awk '{print $2}') \c"
+writelog "$(grep "/tmp " /proc/mounts | awk '{print $1" "$2" "$3" "$4}')"
+writelog "\tVM XML dir:\t\t$(dirname ${xmlfile})"
+writelog "\tXML file:\t\t${xmlfile}"
+writelog "VM config:"
+
+# name of the virt image
+imgname=$(grep -io '<image_name param=.*"' ${xmlfile} \
+ | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }')
+
+# 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})
+# else use same path as xml
+else
+ 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
+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}')
+# if ${vm_name} not defined use ${xmlfile}
+vm_name=${vm_name:-${xmlfile%.xml}}
+
# define vm_shortname since vm_name can be very long
-vm_shortname=$(echo ${imgname%.*} | sed -e "s, ,-,g")
-displayname=${vm_name}
-# remove blanks
-vm_name=$(echo ${vm_name} | sed -e "s, ,-,g")
+vm_shortname=$(basename ${xmlfile%.xml} | sed -e "s, ,-,g")
-# Type of virtual machine to run
-virt_mach=$(grep -o "virtualmachine param=.*\"" ${xml} | \
- sed -e "s/&.*;/; /g" | awk -F "\"" '{print $2}')
+# vm_name = displayname, define for old scripts
+displayname=${vm_name}
-# Make a guess from the filename extension if ${virt_mach} is empty (not set
-# within the xml file)
-if [ -z ${virt_mach} ] ; then
- case "$(echo ${imgname##*.}|tr [A-Z] [a-z])" in
- vmdk)
- virt_mach="vmware"
+# image is for the following virtual machine
+xmlvirt=$(grep -o 'virtualmachine param=.*"' ${xmlfile} \
+ | sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}')
+
+# 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"
;;
- img|qcow*)
- virt_mach="qemukvm"
+ *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)
- virt_mach="virtualbox"
+ xmlvirt="virtualbox"
+ ;;
+ img|qcow*)
+ xmlvirt="qemukvm"
;;
*)
- echo "Unknown image type, bailing out"
+ xmlvirt="none"
;;
esac
+ writelog "result:\t${xmlvirt}"
fi
-# Definition of the client system
-vmostype=$(grep -io '<os param=.*"' ${xml} | awk -F '"' '{ print $2 }')
+# definition of the client system
+vmostype=$(grep -io '<os param=.*"' ${xmlfile} | awk -F '"' '{ print $2 }' \
+ | 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])
+network_card=$(grep -io '<netcard param=.*"' ${xmlfile} \
+ | awk -F '"' '{ print $2 }'| tr [A-Z] [a-z])
-# Definition of the networking the client system is connected to
-network_kind=$(grep -io '<network param=.*"' ${xml} | awk -F '"' '{ print $2 }')
-network_card=$(grep -io '<netcard param=.*"' ${xml} | awk -F '"' '{ print $2 }')
+# 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=.*"' ${xml} | awk -F '"' '{ print $2 }')
-parallel=$(grep -io '<parport param=.*"' ${xml} | awk -F '"' '{ print $2 }')
+serial=$(grep -io '<serialport param=.*"' ${xmlfile} \
+ | awk -F '"' '{ print $2 }')
+parallel=$(grep -io '<parport param=.*"' ${xmlfile} \
+ | awk -F '"' '{ print $2 }')
+
+writelog "\tVirtualization:\t\t$xmlvirt"
+writelog "\tVM name:\t\t$vm_name"
+writelog "\tVM short name:\t\t$vm_shortname"
-# Declaration of default variables
+###############################################################################
+### Declaration of default variables
###############################################################################
-# VM-ID static (0D)
+# VM-ID static (00)
VM_ID="00"
-# cpu cores
-cpu_cores="${cpu_cores}"
-
-# check for CPU virtualization flags
+# make sure cpu_cores is not empty
+cpu_cores=${cpu_cores:-"1"}
# total amount of memory defined in stage 3
permem=60
@@ -134,8 +295,6 @@ mem=$(expr ${totalmem} / 100 \* ${permem} / 4 \* 4)
macguestpart="00:50:56:${VM_ID}"
machostpart=$(echo ${hostmacaddr} | awk -F ":" '{print $(NF-1)":"$NF}')
macaddr=$(echo "${macguestpart}:${machostpart}" | tr [a-z] [A-Z])
-#TODO: remove when vmware modified
-mac=${machostpart}
# virtual fd/cd/dvd and drive devices, floppy b: for configuration
# if $floppy_0 from run-virt.include set then fdtest="TRUE"
@@ -160,96 +319,29 @@ cdrom1=${cdtest:-"FALSE"}
ide="TRUE"
scsi="FALSE"
hddrv="ide"
-
-# add rw share
-sharepath="${HOME}"
-sharename="home"
+remotedesktopport="590${VM_ID}"
# Display resolution within the host system
hostres=$(xvidtune -show 2>/dev/null| grep -ve "^$")
xres=$(echo "${hostres}" | awk '{print $3}')
yres=$(echo "${hostres}" | awk '{print $7}')
-# Set hostname: using original hostname and adding string "-vm"
-hostname="VM-${HOST}"
+# enable 3D
+enable3d=$(grep -i "<enable3d param=.*" ${xmlfile} 2>/dev/null | \
+ awk -F '=' {'print $2'})
-# Functions used throughout the script
-###############################################################################
-
-# 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
-}
+# add rw share
+sharepath="${HOME}"
+sharename="home"
-# Function to write to stdout and logfile
-writelog ()
-{
- # Write to stdout
- echo -e "$1"
+# set hostname: using original hostname and adding string
+hostname="virt-$(hostname)"
- # Log into file
- echo -e "$1" >> ${OPENSLX_DEFAULT_LOGDIR}/run-virt.${USER}.$$.log
-}
+writelog "\tVM Hostname:\t\t$hostname"
-# Setup the rest of the environment and run the virtualization tool just confi-
-# gured
################################################################################
-
-# Logo for console
-cat <<EOL
- __ __
- .----.--.--.-----.___.--.--.|__|.----.| |_
- | _| | | |___| | || || _|| _|
- |__| |_____|__|__| \___/ |__||__| |____|
- OpenSLX virtual machine environment preparation script ...
-
-EOL
+### Setup the rest of the environment and run the configured vm
+################################################################################
# Adjust sound volume
writelog "Unmuting sound...\c "
@@ -266,15 +358,15 @@ writelog "finished\n"
# fixme -> to be changed (vmchooser adapts the file content!?)
#TODO: wozu echo?
#echo "Please fix the config.xml generation"
-cp ${xml} ${PLUGINCONFDIR}/fd-loop/config.xml
+cp ${xmlfile} ${PLUGINCONFDIR}/fd-loop/config.xml
# Check if virtual machine container file exists
#filecheck
# Get all virtual machine specific stuff from the respective include file
-if [ -e ${PLUGINCONFROOT}/${virt_mach}/run-virt.include ] ; then
- self=${virt_mach}
- . ${PLUGINCONFROOT}/${virt_mach}/run-virt.include
+if [ -e ${PLUGINCONFROOT}/${xmlvirt}/run-virt.include ] ; then
+ self=${xmlvirt}
+ . ${PLUGINCONFROOT}/${xmlvirt}/run-virt.include
# start a windowmanager for easier handling
# (expect problems /w windows opening in background /w vmware without wm)
for dm in xfwm4 metacity openbox blackbox kwin fvwm2 ; do
@@ -290,9 +382,16 @@ if [ -e ${PLUGINCONFROOT}/${virt_mach}/run-virt.include ] ; then
done
${VIRTCMD} ${VIRTCMDOPTS}
writelog "Bye."
- exit 0
+ cleanexit 0
else
- writelog "Failed because of missing ${virt_mach} plugin."
- exit 1
+ writelog "Failed because of missing ${xmlvirt} plugin."
+ cleanexit 1
+fi
+
+# postrun for scripts after virtualization finishes
+if [ -n "${POSTRUN}" ]; then
+ eval ${POSTRUN} >/dev/null 2>&1
fi
+cleanexit 0
+exit 0