From 0490caf38b0625b612e050bff57d4ce92c87c2af Mon Sep 17 00:00:00 2001 From: Christian Rößler Date: Fri, 11 Sep 2015 17:29:54 +0200 Subject: [runvirt] [vmware] WARNING: Further testing needed! Two branches: Non-Legacy, Legacy. Big scripts vmchooser-run_virt and vmware runvirt include broken into includes, tidied. More cosmetics needed, but it works so far. --- .../data/opt/openslx/scripts/check_lpd.inc | 11 + .../openslx/scripts/check_runvirt_needed_files.inc | 53 ++ .../scripts/check_runvirt_xml_sanity_legacy.inc | 23 + .../data/opt/openslx/scripts/detect_legacy.inc | 25 + .../openslx/scripts/get_xml_file_dir_legacy.inc | 50 ++ .../opt/openslx/scripts/get_xml_file_variables.inc | 99 +++ .../scripts/get_xml_file_variables_legacy.inc | 120 ++++ .../openslx/scripts/print_runvirt_console_logo.inc | 12 + .../scripts/set_runvirt_hardware_variables.inc | 88 +++ .../set_runvirt_hardware_variables_legacy.inc | 89 +++ .../opt/openslx/scripts/set_runvirt_variables.inc | 14 + .../opt/openslx/scripts/setup_image_access.inc | 54 ++ .../data/opt/openslx/scripts/setup_printer_lpd.inc | 34 ++ .../data/opt/openslx/scripts/setup_sound.inc | 62 ++ .../opt/openslx/scripts/setup_virtual_floppy.inc | 21 + .../opt/openslx/scripts/setup_vm_hypervisor.inc | 19 + .../data/opt/openslx/scripts/start_pvs.inc | 11 + .../opt/openslx/scripts/start_windowmanager.inc | 18 + .../data/opt/openslx/scripts/systemd-run_virt_env | 2 + .../data/opt/openslx/scripts/vmchooser-run_virt | 678 +++------------------ .../scripts/vmchooser_runvirt_functions.inc | 45 ++ 21 files changed, 918 insertions(+), 610 deletions(-) create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/check_lpd.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_needed_files.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_xml_sanity_legacy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/detect_legacy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_dir_legacy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables_legacy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/print_runvirt_console_logo.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_hardware_variables_legacy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/set_runvirt_variables.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/setup_image_access.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/setup_printer_lpd.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/setup_sound.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/setup_virtual_floppy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/setup_vm_hypervisor.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/start_pvs.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/start_windowmanager.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/vmchooser_runvirt_functions.inc (limited to 'remote/modules/run-virt/data/opt/openslx/scripts') diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/check_lpd.inc b/remote/modules/run-virt/data/opt/openslx/scripts/check_lpd.inc new file mode 100644 index 00000000..8286bbaa --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/check_lpd.inc @@ -0,0 +1,11 @@ +############################################ +# Include: Checking whether lpd is running # +############################################ + +# Check if tcpsvd is running. Do this down here so we do not check +# immediately after trying to spawn it, as this could result in +# success even if it's not really working. + +if ! kill -0 "$PID_LPD"; then + slxlog "virt-lpd" "Could not start tcpsvd/lpd for virtual machine session" +fi diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_needed_files.inc b/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_needed_files.inc new file mode 100644 index 00000000..fbb0bc70 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_needed_files.inc @@ -0,0 +1,53 @@ +################################################################# +# Include: Check for important files used by vmchooser_run-virt # +################################################################# + +# WARNING: This is perhaps vestigial! + +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 +} diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_xml_sanity_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_xml_sanity_legacy.inc new file mode 100644 index 00000000..d331e1af --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/check_runvirt_xml_sanity_legacy.inc @@ -0,0 +1,23 @@ +####################################################### +# Include: check xml file for sanity (legacy, old way # +####################################################### + +# test if the xml file is valid +if ! [ -r "${xmlfile}" ]; then + writelog "${xmlfile} not a readable XML file!" + slxlog "virt-nonreadable-xml" "XML file not readable: $xmlfile" + exit 1 +fi + +# test if XML file +if ! grep -q '"${LOGFILE}" + fi +fi + +# 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" + +DO_PROFILE="$(grep -c -E -i '<\s*profile\s*param="?(true|yes)"?' "$xmlfile")" + diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables.inc new file mode 100644 index 00000000..90d59beb --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/get_xml_file_variables.inc @@ -0,0 +1,99 @@ +########################################### +# Include: Set hardware related variables # +########################################### + +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 "Enable 3D:\t\t${enable3d}" +writelog "VM config:" + +# # Name of the virt image +imgname=$(grep -io '> "${LOGFILE}" 2>&1 diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/setup_virtual_floppy.inc new file mode 100644 index 00000000..4b8e10aa --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/setup_virtual_floppy.inc @@ -0,0 +1,21 @@ +############################################## +# Include: Setup virtual floppy for drive b: # +############################################## + +# Copy guest configuration (with added information) config.xml to be accessed +# via virtual floppy +cp "$xmlfile" "$VMCHOOSER_DIR/fd-loop/config.xml" + +# Add another file with resolution information +xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' | grep -o -E '[0-9]+x[0-9]+' | head -n 1 > "$VMCHOOSER_DIR/fd-loop/hostres.txt" + +# Add our magic openslx binary that sets the correct guest resolution +cp "$VMCHOOSER_DIR/data/openslx.exe" "$VMCHOOSER_DIR/fd-loop/" +cp "$VMCHOOSER_DIR/data/SHARELWS.BAT" "$VMCHOOSER_DIR/fd-loop/" +rm "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" + +for SHARE in $(grep -o -E '^SLX_SHARE_.*_PATH' /opt/openslx/config); do + eval "echo -n \$${SHARE} | /opt/openslx/bin/tr '/' '\' " >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" + #eval echo -n " \$${SHARE%PATH}AUTH_PASS /user:\$${SHARE%PATH}AUTH_USER" >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" + echo -e '\r\n' >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" +done diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/setup_vm_hypervisor.inc b/remote/modules/run-virt/data/opt/openslx/scripts/setup_vm_hypervisor.inc new file mode 100644 index 00000000..b7bb8f01 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/setup_vm_hypervisor.inc @@ -0,0 +1,19 @@ +########################################################################## +# Include: Setup virtual machine hypervisor via vm-specific include file # +########################################################################## + +# Get all virtual machine specific stuff from the respective include file +if [ ! -e "$VMCHOOSER_DIR/$xmlvirt/run-virt.include" ] ; then + # TODO: Tell user + slxlog "virt-plugin-missing" "Could not find run-virt.include for $xmlvirt ($VMCHOOSER_DIR/$xmlvirt/run-virt.include)" + writelog "Failed because of missing ${xmlvirt} plugin." + cleanexit 1 +fi + + self="${xmlvirt}" + +# Now including the hypervisor specific include file: +if ! source "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then + slxlog "virt-plugin-error" "run-virt.include for $xmlvirt could not be sourced (contains syntax errors?)" "$xmlvirt" + writelog "Erroneous run-virt.include for $xmlvirt" +fi diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/start_pvs.inc b/remote/modules/run-virt/data/opt/openslx/scripts/start_pvs.inc new file mode 100644 index 00000000..90cd237b --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/start_pvs.inc @@ -0,0 +1,11 @@ +####################################################### +# Include: Starting PVS (Pool Video switch) if wanted # +####################################################### + +# 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 diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/start_windowmanager.inc b/remote/modules/run-virt/data/opt/openslx/scripts/start_windowmanager.inc new file mode 100644 index 00000000..a3149c24 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/start_windowmanager.inc @@ -0,0 +1,18 @@ +#################################################### +# Include: Start windowmanager for easier handling # +#################################################### + +# Some problems may arise with windows opening in background when +# using eg. vmware without a window manager. + +for dm in openbox kwin xfwm4 metacity blackbox twm 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 diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env index c39803cd..2d1ceb0f 100755 --- a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env +++ b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-run_virt_env @@ -53,6 +53,8 @@ mount -n -t msdos -o loop,umask=000 "${VMCHOOSER_DIR}/data/loopimg/fd.img" "${VM # setup more scratch space for virtual machines, if configured mkdir -p /tmp/virt /var/log/samba /run/samba +chmod +rwxt /tmp/virt + # enable normal users to setup the extended virtual machine redo file space # and image source via network block device (NBD only at the moment) # allow to start/stop samba on virtual devices (latter one ignores multiple diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt index 21c01df6..9845ead6 100755 --- a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt +++ b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt @@ -19,630 +19,91 @@ # fied virtualization tool. ################################################################################ -################################################################################ -### Define default dirs / get configs -################################################################################ - -VMCHOOSER_DIR="/opt/openslx/vmchooser" -VMCHOOSER_CONF_DIR="$VMCHOOSER_DIR/config" - -# include general configuration from vmchooser -[ -f "$VMCHOOSER_CONF_DIR/vmchooser.conf" ] && . "$VMCHOOSER_CONF_DIR/vmchooser.conf" -# load general virtualization information -[ -f "$VMCHOOSER_CONF_DIR/virtualization.conf" ] && . "$VMCHOOSER_CONF_DIR/virtualization.conf" -# Load general openslx config -[ -f "/opt/openslx/config" ] && . "/opt/openslx/config" - -################################################################################ -### Functions used throughout the script -################################################################################ - -# 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}" -} - -# Clean exit will be called at the end of this script -cleanexit () { - sleep 1 - # remove config dirs when exit - if echo "${RMDIRS}" 2>/dev/null | grep -q "${xmlvirt}"; then - writelog "${xmlvirt} exited. Cleaning up... \c" - rm -rf -- ${RMDIRS} >/dev/null 2>&1 - writelog "done" - fi - # Disconnect dnbd3 device - if [ -n "$dnbd3" ]; then - for timeout in 1 1 2; do - dnbd3-client -d "$dnbd3" -c -d "$dnbd3" -c && break - writelog "dnbd3 still busy...." - sleep "$timeout" - done - fi - # Kill LPD - kill "$PID_LPD" - # Remove spool directory for printjobs from VM - [ -n "${SPOOLDIR}" ] && rm -rf -- "${SPOOLDIR}" - - [ $# -gt 0 ] && exit "$1" - exit 129 # No exit code was given :/ -} - -function rv_clean_string () -{ - if [ "$#" -ge 1 ]; then - echo "$@" | tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9]' - else - tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9]' - fi -} - -trap cleanexit SIGINT SIGTERM - -# 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 -################################################################################ - -## Added for persistent support. -diskmode='nonpersistent' -if [[ "$(grep --extended-regexp \ - '< *short_description *param=".+ --persistent--"' "$1")" ]]; then - diskmode='persistent' - imageFilePath="$(grep -io '"${LOGFILE}" - fi -fi -## - -# 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" - -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!" - slxlog "virt-nonreadable-xml" "XML file not readable: $xmlfile" - exit 1 -fi - -# test if XML file -if ! grep -q '> "${LOGFILE}" 2>&1 - -# Start printer daemon -QUEUE="STANDARD" # This has to match the queue you configured in your VM -USER="$(/usr/bin/whoami)" -SPOOLDIR= -### Disabled: 100megs is not enough, some jobs are HUGE, try to use temp which should be on disk -## Try using user's tmpfs home first, as it gets wiped on logout -#if [ -n "${HOME}" ] && [ -w "${HOME}" ]; then -# SPOOLDIR="${HOME}/.spool" -# mkdir -p "${SPOOLDIR}/${QUEUE}" -#fi -# If failed, try to fall back to /tmp -if [ -z "${SPOOLDIR}" ] || [ ! -w "${SPOOLDIR}/${QUEUE}" ]; then - SPOOLDIR="/tmp/printergui-${USER}-$$-${RANDOM}" - rm -rf -- "${SPOOLDIR}" - if ! mkdir -p "${SPOOLDIR}/${QUEUE}"; then - slxlog "virt-spooldir" "Could not create spool directory ($SPOOLDIR) for $USER - printing will not work!" - # TODO: Warn user - fi - chmod 0700 "${SPOOLDIR}/${QUEUE}" -fi - -# Start the lpdaemon listening on the given port -# TODO: externalize with something like runtvirt.d (other parts might benefit from that too) -tcpsvd -E 192.168.101.1 5515 \ - lpd "$SPOOLDIR" \ - ash -c "/opt/openslx/cups/printergui '${USER}' \"${SPOOLDIR}/${QUEUE}/\$DATAFILE\"" & - -# PID to kill the process -PID_LPD="$!" - -# Copy guest configuration (with added information) config.xml to be accessed -# via virtual floppy -cp "$xmlfile" "$VMCHOOSER_DIR/fd-loop/config.xml" -# Add another file with resolution information -xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' | grep -o -E '[0-9]+x[0-9]+' | head -n 1 > "$VMCHOOSER_DIR/fd-loop/hostres.txt" -# Add our magic openslx binary that sets the correct guest resolution -cp "$VMCHOOSER_DIR/data/openslx.exe" "$VMCHOOSER_DIR/fd-loop/" -cp "$VMCHOOSER_DIR/data/SHARELWS.BAT" "$VMCHOOSER_DIR/fd-loop/" -rm "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" -for SHARE in $(grep -o -E '^SLX_SHARE_.*_PATH' /opt/openslx/config); do - eval "echo -n \$${SHARE} | /opt/openslx/bin/tr '/' '\' " >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" - #eval echo -n " \$${SHARE%PATH}AUTH_PASS /user:\$${SHARE%PATH}AUTH_USER" >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" - echo -e '\r\n' >> "$VMCHOOSER_DIR/fd-loop/SHARELW.CFG" -done - - -# Try to use dnbd3 to access the image -unset vm_diskfile -unset vm_revision -unset dnbd3 -unset dnbd3error -if [ -n "$SLX_DNBD3_SERVERS" -o -n "$SLX_DNBD3_PRIO_SERVERS" ] && [ "x$SLX_VM_DNBD3" = "xyes" ]; then - if [ -e "/dev/dnbd0" -a -e "/var/run/dnbd3.socket" ]; then - # Shuffle server list - [ -n "$SLX_DNBD3_SERVERS" ] && TMP_SERVERS=$(for SRV in $SLX_DNBD3_SERVERS; do echo "$RANDOM $SRV"; done | sort -u | sed -r 's/^[0-9]+ //') - for SRV in $SLX_DNBD3_PRIO_SERVERS $TMP_SERVERS; do - dnbd3=$(dnbd3-client -h "$SRV" -i "${imgrelpath}" -r 0) - RET=$? - if [ "$RET" = "0" ]; then - vm_revision=$(cat "/sys/block/${dnbd3#/dev/}/net/rid") - writelog "DNBD3: $vm_diskfile on $dnbd3 with rid $vm_revision" - vm_diskfile="$dnbd3" - vmpath="$vm_diskfile" - break - fi - dnbd3error="$dnbd3error ($RET/$dnbd3)" - usleep 200000 - done - if [ -z "$vm_diskfile" ]; then - slxlog "virt-dnbd3" "No dnbd3 server for ${imgrelpath} found ($SLX_DNBD3_PRIO_SERVERS $TMP_SERVERS $dnbd3error), trying NFS/CIFS..." - writelog "No working dnbd3 server found :-(" - fi - else - writelog "Won't use dnbd3 as it's not loaded, or the daemon is not running..." - fi -else - writelog "Won't use dnbd3 as no servers are given in config" -fi - -# $vm_diskfile will be empty if dnbd3 is not used or failed. Let's try to fall back to NFS/CIFS via file system -if [ -z "$vm_diskfile" ]; then - new_vmpath=$(ls "${vmpath}.r"* | grep -E -o '\.r[0-9]+$' | grep -o -E '[0-9]+' | sort -n | tail -1) - [ -n "$new_vmpath" ] && vmpath="${vmpath}.r${new_vmpath}" - vm_diskfile="$vmpath" -fi - -# Check if virtual machine container file exists -if ! [ -e "${vmpath}" ]; then - slxlog "virt-image-missing" "VM image $vmpath not found!" - writelog "Virtual machine image ${vmpath} not found!" - cleanexit 1 -fi - -writelog "Used diskfile: $vm_diskfile" - -# Get all virtual machine specific stuff from the respective include file -if [ ! -e "$VMCHOOSER_DIR/$xmlvirt/run-virt.include" ] ; then - # TODO: Tell user - slxlog "virt-plugin-missing" "Could not find run-virt.include for $xmlvirt ($VMCHOOSER_DIR/$xmlvirt/run-virt.include)" - writelog "Failed because of missing ${xmlvirt} plugin." - cleanexit 1 -fi - -self="${xmlvirt}" -if ! . "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then - slxlog "virt-plugin-error" "run-virt.include for $xmlvirt could not be sourced (contains syntax errors?)" "$xmlvirt" - writelog "Erroneous run-virt.include for $xmlvirt" -fi - -# start a windowmanager for easier handling -# (expect problems w/ windows opening in background w/ vmware without wm) -for dm in openbox kwin xfwm4 metacity blackbox twm 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 - -# Check if tcpsvd is running. Do this down here so we do not check immediately after trying to spawn it, -# as this could result in success even if it's not really working -if ! kill -0 "$PID_LPD"; then - slxlog "virt-lpd" "Could not start tcpsvd/lpd for virtual machine session" -fi - -# Configure and start samba service to provide user's home directory -#if [ -f /usr/sbin/smbd ] ; then -# sudo /opt/openslx/bin/sed -i /opt/openslx/vmchooser/smb.conf -e "s,USER,$USER," -# sudo /usr/sbin/nmbd -s /opt/openslx/vmchooser/config/smb.conf -# sudo /usr/sbin/smbd -s /opt/openslx/vmchooser/config/smb.conf -#fi # This will start the VM writelog "VM command: eval ${VIRTCMD} ${VIRTCMDOPTS}" + +# Transported from vmware-runvirt include +sync + eval ${VIRTCMD} ${VIRTCMDOPTS} -# writelog "Bye." # Postrun for commands after virtualization finishes @@ -650,7 +111,4 @@ if [ -n "${POSTRUN}" ]; then eval ${POSTRUN} >/dev/null 2>&1 fi - cleanexit 0 - - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser_runvirt_functions.inc b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser_runvirt_functions.inc new file mode 100644 index 00000000..7b64653c --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser_runvirt_functions.inc @@ -0,0 +1,45 @@ +####################################################### +# Include: Set functions needed by vmchooser-run_virt # +####################################################### + +# function to write to stdout and logfile +writelog() { + # write to stdout + echo -e "$1" + # log into file + echo -e "$1" >> "${LOGFILE}" +} + +# Clean exit will be called at the end of vmchooser-run_virt +cleanexit() { + sleep 1 + # remove config dirs when exit + if echo "${RMDIRS}" 2>/dev/null | grep -q "${xmlvirt}"; then + writelog "${xmlvirt} exited. Cleaning up... \c" +# rm -rf -- ${RMDIRS} >/dev/null 2>&1 + writelog "done" + fi + # Disconnect dnbd3 device + if [ -n "$dnbd3" ]; then + for timeout in 1 1 2; do + dnbd3-client -d "$dnbd3" -c -d "$dnbd3" -c && break + writelog "dnbd3 still busy...." + sleep "$timeout" + done + fi + # Kill LPD + [ -n "$PID_LPD" ] && kill "$PID_LPD" + # Remove spool directory for printjobs from VM + [ -n "${SPOOLDIR}" ] && rm -rf -- "${SPOOLDIR}" + + [ $# -gt 0 ] && exit "$1" + exit 129 # No exit code was given :/ +} + +rv_clean_string() { + if [ "$#" -ge 1 ]; then + echo "$@" | tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9]' + else + tr '[A-Z]' '[a-z]' | tr -d -c '[a-z0-9]' + fi +} -- cgit v1.2.3-55-g7522