From 7c70ebde186c9589bd6e56f04d9f9bab682a3c14 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 19 Oct 2016 15:07:25 +0200 Subject: [run-virt] More cleanup; kill legacy support, rename and move includes, kill dead code --- .../data/opt/openslx/scripts/includes/TEST.sh | 6 - .../opt/openslx/scripts/includes/check_lpd.inc | 13 - .../includes/check_runvirt_needed_files.inc | 53 ---- .../includes/check_runvirt_xml_sanity_legacy.inc | 26 -- .../opt/openslx/scripts/includes/detect_legacy.inc | 34 --- .../scripts/includes/get_xml_file_dir_legacy.inc | 50 ---- .../scripts/includes/get_xml_file_variables.inc | 103 ------- .../includes/get_xml_file_variables_legacy.inc | 120 -------- .../includes/print_runvirt_console_logo.inc | 12 - .../includes/set_runvirt_hardware_variables.inc | 102 ------- .../set_runvirt_hardware_variables_legacy.inc | 87 ------ .../scripts/includes/set_runvirt_variables.inc | 26 -- .../openslx/scripts/includes/setup_firewall.inc | 12 - .../scripts/includes/setup_image_access.inc | 71 ----- .../openslx/scripts/includes/setup_printer_lpd.inc | 33 --- .../opt/openslx/scripts/includes/setup_sound.inc | 64 ----- .../scripts/includes/setup_virtual_floppy.inc | 101 ------- .../scripts/includes/setup_vm_hypervisor.inc | 22 -- .../scripts/includes/start_windowmanager.inc | 27 -- .../opt/openslx/scripts/includes/usb_detector.inc | 77 ----- .../includes/vmchooser_runvirt_functions.inc | 76 ----- .../data/opt/openslx/scripts/vmchooser-run_virt | 116 +------- .../check_runvirt_needed_files.inc | 53 ++++ .../vmchooser/run-virt-includes/detect_legacy.inc | 34 +++ .../run-virt-includes/get_xml_file_variables.inc | 103 +++++++ .../set_runvirt_hardware_variables.inc | 102 +++++++ .../run-virt-includes/set_runvirt_variables.inc | 26 ++ .../vmchooser/run-virt-includes/setup_firewall.inc | 12 + .../run-virt-includes/setup_image_access.inc | 71 +++++ .../run-virt-includes/setup_printer_lpd.inc | 46 +++ .../vmchooser/run-virt-includes/setup_sound.inc | 65 +++++ .../run-virt-includes/setup_virtual_floppy.inc | 101 +++++++ .../run-virt-includes/setup_vm_hypervisor.inc | 34 +++ .../run-virt-includes/start_windowmanager.inc | 27 ++ .../vmchooser/run-virt-includes/usb_detector.inc | 77 +++++ .../vmchooser_runvirt_functions.inc | 79 ++++++ .../data/opt/openslx/vmchooser/vmchooser-run_virt | 116 ++++++++ .../includes/create_vmware_config_file_legacy.inc | 316 --------------------- .../vmware/includes/log_config_summary.inc | 62 ++++ .../openslx/vmchooser/vmware/includes/logging.inc | 64 ----- .../vmware/includes/set_hardware_legacy.inc | 152 ---------- .../vmware/includes/write_config_files_legacy.inc | 29 -- .../opt/openslx/vmchooser/vmware/run-virt.include | 35 +-- 43 files changed, 1021 insertions(+), 1814 deletions(-) delete mode 100755 remote/modules/run-virt/data/opt/openslx/scripts/includes/TEST.sh delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/check_lpd.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_needed_files.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_xml_sanity_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/detect_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_dir_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/print_runvirt_console_logo.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/set_runvirt_hardware_variables.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/set_runvirt_hardware_variables_legacy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/set_runvirt_variables.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_firewall.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_printer_lpd.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_sound.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_vm_hypervisor.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/start_windowmanager.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc delete mode 100644 remote/modules/run-virt/data/opt/openslx/scripts/includes/vmchooser_runvirt_functions.inc mode change 100755 => 120000 remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/set_runvirt_hardware_variables.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/set_runvirt_variables.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_firewall.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_printer_lpd.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_sound.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_virtual_floppy.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/start_windowmanager.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/usb_detector.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc create mode 100755 remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file_legacy.inc create mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/logging.inc delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_hardware_legacy.inc delete mode 100644 remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files_legacy.inc diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/TEST.sh b/remote/modules/run-virt/data/opt/openslx/scripts/includes/TEST.sh deleted file mode 100755 index fd5f755d..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/TEST.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -. usb_detector.inc - -get_usb_devices "bla=%VENDOR% kacke=%PRODUCT%" 0:6 0:7 0:e 0:10 - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_lpd.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_lpd.inc deleted file mode 100644 index cfaf811e..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_lpd.inc +++ /dev/null @@ -1,13 +0,0 @@ -############################################ -# 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" - notify_user "Durcksystem" "Das Drucksystem konnte nicht initialisiert werden. Druckfunktion nicht verfügbar." -fi - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_needed_files.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_needed_files.inc deleted file mode 100644 index fbb0bc70..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_needed_files.inc +++ /dev/null @@ -1,53 +0,0 @@ -################################################################# -# 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/includes/check_runvirt_xml_sanity_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_xml_sanity_legacy.inc deleted file mode 100644 index 0e720a06..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/check_runvirt_xml_sanity_legacy.inc +++ /dev/null @@ -1,26 +0,0 @@ -####################################################### -# 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" - error_user "Die XML-Datei der gewählten Sitzung ist nicht lesbar oder existiert nicht" - exit 1 -fi - -# test if XML file -if ! grep -q '/dev/null >&2; then - writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}. Triggering legacy mode." - else - writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID} successful." - if [ ! -s "$TMPCONFIG" ]; then - writelog "Server sent zero byte virtual machine description file. Triggering legacy mode." - else - writelog "Triggering current (non-legacy) mode." - LEGACY= # everything worked - clear legacy mode variable (so we use the "current" mode) - fi - fi -fi - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_dir_legacy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_dir_legacy.inc deleted file mode 100644 index c3c6f7b3..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_dir_legacy.inc +++ /dev/null @@ -1,50 +0,0 @@ -######################################################### -# Include: Get xml file and directory (legacy, old way) # -######################################################### - -## 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")" - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables.inc deleted file mode 100644 index b7ed648c..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/get_xml_file_variables.inc +++ /dev/null @@ -1,103 +0,0 @@ -########################################### -# 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 ' "$LOGF" 2>&1 - RET=$? - if [ "$RET" != "0" ]; then - slxlog "runvirt-firewall" "Error setting up firewall rules for lecture $IMGUUID (Exit code $RET)" "$LOGF" - fi - return 0 -} diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc deleted file mode 100644 index 3c4ed330..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_image_access.inc +++ /dev/null @@ -1,71 +0,0 @@ -########################################################### -# Include: Setup dnbd for image access, nfs/cifs fallback # -########################################################### - -writelog "Now in setup_image_access.inc ..." - -# Try to use dnbd3 to access the image -unset vm_diskfile -unset vm_revision -unset dnbd3_fuse_mount_point -unset dnbd3_tmplog -if ! which dnbd3-fuse; then - writelog "Can't use dnbd3 as dnbd3-fuse binary is not in PATH" -elif [ -z "$SLX_DNBD3_SERVERS" ] || [ "x$SLX_VM_DNBD3" != "xyes" ]; then - writelog "Can't use dnbd3 as no servers are given in config, or SLX_VM_DNBD3 is not set to yes" -else - # Mount path for images mounted with dnbd3-fuse - dnbd3_fuse_mount_point="$TMPDIR/dnbd3fuse.mnt" - mkdir -p "${dnbd3_fuse_mount_point}" - # start dnbd3-fuse in subshell - dnbd3_tmplog="$TMPDIR/dnbd3fuse.log" - dnbd3_exitflag="$TMPDIR/dnbd3exit$RANDOM" - rm -f -- "$dnbd3_exitflag" - ( - dnbd3-fuse -f -o allow_other,max_readahead=262144 -h "$SLX_DNBD3_SERVERS" -i "${imgrelpath}" "${dnbd3_fuse_mount_point}" > "$dnbd3_tmplog" 2>&1 - RET=$? - touch "$dnbd3_exitflag" - if [ "$RET" != "0" ]; then - writelog "dnbd3-fuse stopped working (Exit code $RET)" - slxlog "virt-dnbd3-fuse" "dnbd3-fuse stopped/refused serving '${imgrelpath}' from '${SLX_DNBD3_SERVERS}' with error code: $RET" "${dnbd3_tmplog}" - fi - ) & - # give it a bit of time - usleep 250000 - # check if we have the image - for TIMEOUT in 0.5 1 1 OUT; do - if [ -r "${dnbd3_fuse_mount_point}/img" ]; then - vm_revision="$(grep -m 1 "^Revision:" "${dnbd3_fuse_mount_point}/status" | cut -d" " -f2)" - vm_diskfile="${dnbd3_fuse_mount_point}/img" - writelog "DNBD3: $imgrelpath on $vm_diskfile with rid $vm_revision" - vmpath="$vm_diskfile" - break - fi - [ "$TIMEOUT" = "OUT" -o -e "$dnbd3_exitflag" ] && break - sleep "$TIMEOUT" - done - - if [ -z "$vm_diskfile" ]; then - slxlog "virt-dnbd3" "No dnbd3 server for ${imgrelpath} found, trying NFS/CIFS..." "$dnbd3_tmplog" - writelog "No working dnbd3 server found :-(" - fi -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 -n 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!" - error_user "Das Image für die gewählte Virtuelle Maschine konnte nicht gefunden werden. -Versuchen Sie zunächst, den Computer komplett neu zu starten. Sollte das Problem bestehen bleiben, wenden Sie sich bitte an den Support." - cleanexit 1 -fi - -writelog "Virtual machine disk file: $vm_diskfile" - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_printer_lpd.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_printer_lpd.inc deleted file mode 100644 index ee0b2c70..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_printer_lpd.inc +++ /dev/null @@ -1,33 +0,0 @@ -##################################### -# Include: Setup printer daemon LPD # -##################################### - -QUEUE="STANDARD" # This has to match the queue you configured in your VM -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="${TMPDIR}/printergui-${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 runvirt.d (other parts might benefit from that too) -tcpsvd -E 192.168.101.1 5515 \ - lpd "$SPOOLDIR" \ - ash -c "/opt/openslx/scripts/run-virt_print '${USER}' \"${SPOOLDIR}/${QUEUE}/\$DATAFILE\"" & - -# PID to kill the process -PID_LPD="$!" diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_sound.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_sound.inc deleted file mode 100644 index 201c0ff5..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_sound.inc +++ /dev/null @@ -1,64 +0,0 @@ -######################## -# Include: Setup sound # -######################## -# 8086:1e20: Sound card in bwPX4 - -writelog "Starting sound setup ..." - -if lspci -n | grep -E -i '8086:1e20( |$)'; then - VOL="100%" # bwPC 4: Speaker too quiet :-( -else - VOL="85%" -fi - -if true; then - # detecting which card is to be used - writelog "Detecting which sound card to use ..." - PROC="/proc/asound/cards" - if [ ! -r "$PROC" ]; then - writelog "'${PROC}' not found or not readable." - SOUND_CARD_INDEX=0 - SOUND_CARD_COUNT=1 - else - # Try to filter HDMI cards first - SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1) - # If empty, try again with all - [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1) - if [ -z "${SOUND_CARD_INDEX}" ]; then - writelog "No sound card found." - SOUND_CARD_INDEX=0 - fi - SOUND_CARD_COUNT=$(grep -E '^[[:space:]]{0,2}[0-9]+[[:space:]]+' "${PROC}" | wc -l) - fi - - SOUND_CARD_INDEX="$(grep -E -o '[0-9]+' <<<$SOUND_CARD_INDEX)" - writelog "Detected sound card index is: $SOUND_CARD_INDEX" - writelog "Sound card count: $SOUND_CARD_COUNT" - - # Adjust sound volume (playback)... Random mixer names we have encountered during testing - writelog "Setting up volume..." - amixer -q -c "$SOUND_CARD_INDEX" sset 'Master' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'PCM' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'CD' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Headphone' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Front' "$VOL" unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Speaker' "$VOL" unmute - # Recording. It seems that (most) devices need the volume set to 0, so you - # don't hear your own mic input, but should be unmuted. Also on some cards, - # you need to set the cap option on the mic you want to use, while other cards - # will just ignore that option. - # Plus, most cards have a Capture mixer, which needs to be set to cap too, and - # have its volume turned up. (There'll probably be some cards that need yet - # another setup, but this works for now on 4 tested cards) - amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic Boost' "50%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic' "0%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic Boost' "50%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic' "0%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic Boost' "50%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic' "0%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Capture' "100%" cap unmute - amixer -q -c "$SOUND_CARD_INDEX" sset 'Input Source' 'Front Mic' # Let's hope nobody uses rear mic... - # fix random static noise when starting vmplayer when module snd_pcsp (not pcspkr) is loaded - amixer -q -c pcsp sset Master "0%" mute - writelog "Done setting up volume." -fi >> "${LOGFILE}" 2>&1 diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc deleted file mode 100644 index d9ae052c..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_virtual_floppy.inc +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/bash -############################################## -# Include: Setup virtual floppy for drive b: # -############################################## - -declare -rg FLOPPYIMG="${TMPDIR}/floppy.img" -declare -rg TMPHOME="${HOME}" -declare -rg RUNSCRIPT="${TMPDIR}/runscript.tmp" - -wget -T 6 -O "${RUNSCRIPT}" "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}/runscript" > /dev/null & -WGET=$! - -dd "if=/dev/zero" "of=${FLOPPYIMG}" count=1440 bs=1024 -chmod 0600 "${FLOPPYIMG}" -mkfs.fat "${FLOPPYIMG}" || mkfs.vfat "${FLOPPYIMG}" || mkdosfs "${FLOPPYIMG}" - -# Create file with resolution information etc. -. "/opt/openslx/inc/shares" -if [ -z "$SHARE_REMAP_MODE" ]; then - SHARE_REMAP_MODE_INI="0" - SHARE_REMAP_MODE="3" -else - SHARE_REMAP_MODE_INI="$SHARE_REMAP_MODE" -fi -[ -z "$SHARE_CREATE_MISSING_REMAP" ] && SHARE_CREATE_MISSING_REMAP="1" -declare -rg RESOLUTION=$(xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' \ - | grep -o -E -m1 '[0-9]+x[0-9]+') - -# Legacy: HOSTRES.TXT -cat > "${TMPDIR}/HOSTRES.TXT" <<-HIER -${RESOLUTION} -HIER - -# Create file for network shares to mount -declare -rg SHARES="${TMPDIR}/shares.dat" -touch "${SHARES}" -chmod 0600 "${SHARES}" -if ! pwdaemon --query "${TMPHOME}/.pwsocket" > "${SHARES}"; then - slxlog "virt-pwdaemon" "Could not start pwdaemon" -else - sed -i 's/^/192.168.101.1\t/' "${SHARES}" # TODO: Depending on nettype (in case we have != nat some day) - if [ "${SHARE_REMAP_MODE}" = 1 -o "${SHARE_REMAP_MODE}" = 2 ] && [ -e "${TMPHOME}/.home" ]; then - NETHOME=$(cat "${TMPHOME}/.home") - [ -z "$SHARE_HOME_DRIVE" ] && SHARE_HOME_DRIVE="H:" - # Tab between items, so spaces can be used! - echo "${NETHOME} ${SHARE_HOME_DRIVE} Home-Verzeichnis" >> "${SHARES}" - fi - for VAR in ${!SHARE_LINE_*}; do - echo "${!VAR}" >> "${SHARES}" - done -fi - -wait "$WGET" - -# Check downloaded runscript, handle extension marker -EXT= -if [ -s "$RUNSCRIPT" ]; then - EXT=$(head -n 1 "$RUNSCRIPT" | grep -o -i '^EXT=.*$' | cut -d '=' -f 2-) - [ -n "$EXT" ] && [ "x${EXT:0:1}" != "x." ] && EXT=".$EXT" -fi - -# Write info file -UNAME= -[ -s "${HOME}/.account" ] && UNAME=$(cat "${HOME}/.account") -[ -z "${UNAME}" ] && UNAME=$(whoami) -cat > "${TMPDIR}/openslx.ini" <<-HIER -[openslx] -username=${UNAME} -resolution=${RESOLUTION} -createMissingRemap=${SHARE_CREATE_MISSING_REMAP} -remapMode=${SHARE_REMAP_MODE_INI} -homeDrive=${SHARE_HOME_DRIVE} -scriptExt=${EXT} - -[remap] -documents=${SHARE_DOCUMENTS} -downloads=${SHARE_DOWNLOADS} -desktop=${SHARE_DESKTOP} -media=${SHARE_MEDIA} -other=${SHARE_OTHER} -HIER - -# Copy all them there filez into floppy image -mcopy -i "${FLOPPYIMG}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" "${SHARES}" "::/" -mcopy -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/openslx.exe" "::/" -# Copy guest configuration (with added information) config.xml to be accessed -# via virtual floppy -mcopy -i "${FLOPPYIMG}" "$xmlfile" "::/config.xml" - -# Copying linux directory: -mcopy -s -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/linux" "::/" - -# User supplied runscript -if [ -n "$EXT" ]; then - sed -i '1d' "${RUNSCRIPT}" - mcopy -i "${FLOPPYIMG}" "${RUNSCRIPT}" "::/runscript${EXT}" -fi - -rm -f -- "${SHARES}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" -unset SHARES VAR NETHOME UNAME - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_vm_hypervisor.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_vm_hypervisor.inc deleted file mode 100644 index 33fd363b..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/setup_vm_hypervisor.inc +++ /dev/null @@ -1,22 +0,0 @@ -########################################################################## -# 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 - 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." - error_user "Konnte den Virtualisierer '$xmlvirt' nicht finden. Starten der Virtuellen Maschine fehlgeschlagen. - Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." - 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" - error_user "Das Start-Script für den Virtualisierer '$xmlvirt' ist fehlerhaft. - Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." -fi diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/start_windowmanager.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/start_windowmanager.inc deleted file mode 100644 index da43f341..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/start_windowmanager.inc +++ /dev/null @@ -1,27 +0,0 @@ -#################################################### -# Include: Start windowmanager for easier handling # -#################################################### - -# Some problems may arise with windows opening in background when -# using eg. vmware without a window manager. - -FOUND_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 - writelog "Starting fvwm2." - fvwm2 -f ${redodir}/fvwm >/dev/null 2>&1 & - else - writelog "Starting ${dm}." - $dm >/dev/null 2>&1 & - fi - FOUND_WM=1 - break - fi -done - -if [ -z "$FOUND_WM" ]; then - slxlog "virt-windowmanager" "Could not find any window manager to use!" - notify_user "Konnte keinen Window Manager finden. (Das ist schlecht!)" -fi diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc deleted file mode 100644 index a2d442e4..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/usb_detector.inc +++ /dev/null @@ -1,77 +0,0 @@ -# Helper function that will scan /dev/bus/usb for devices matching specific classes -# and then output the corresponding device ids. This can be used for selective -# handover of devices to a virtual machine - -declare -rg PASSTHROUGH_USB_DEVICES="2 0:5 0:6 0:7 0:14 0:16 0:17 239" - -# $1: expression to fill with device information. -# valid placeholders are: -# %VENDOR% - device vendor id -# %PRODUCT% - device product id -# $2-n: device classes to include in output -get_usb_devices_int() { - [ -z "$TMPDIR" ] && TMPDIR="/tmp" - local EXP=$1 - shift - if [ -z "$EXP" ]; then - writelog --quiet "No ouput expression template passed to get_usb_devices" - cleanexit 1 - fi - if [ $# -eq 0 ]; then - writelog --quiet "No device classes given to get_usb_devices" - cleanexit 1 - fi - local MATCH=';' - while [ $# -gt 0 ]; do - MATCH+="$1;" - [[ "$1" != *:* ]] && MATCH+="0:$1;" - shift - done - local dev= - local key value trailing - trailing= - local tmp="${TMPDIR}/lsusb.$$.$RANDOM" - for dev in /dev/bus/usb/*/*; do - if ! lsusb -D "$dev" > "$tmp" 2>/dev/null; then - writelog --quiet "Cannot lsusb $dev" - continue - fi - local DC= - local OK= - local VENDOR= - local PRODUCT= - while read -r key value trailing || [ -n "$key" ]; do - if [[ "$key" == "idVendor" ]]; then - [[ "$value" == 0x* ]] && VENDOR="${value:2}" - elif [[ "$key" == "idProduct" ]]; then - [[ "$value" == 0x* ]] && PRODUCT="${value:2}" - elif [ -z "$DC" ]; then - # No bDeviceClass seen yet - if [[ "$key" == "bDeviceClass" ]]; then - DC="$value" - [[ "$MATCH" == *";${DC};"* ]] && OK=yo - fi - else - # #DeviceClass is generic, look at sub class - if [[ "$key" == "bInterfaceClass" ]]; then - [[ "$MATCH" == *";${DC}:${value};"* ]] && OK=yo - fi - fi - if [ -n "$OK" -a -n "$VENDOR" -a -n "$PRODUCT" ]; then - echo "$EXP" | sed "s/%VENDOR%/${VENDOR}/g;s/%PRODUCT%/${PRODUCT}/g" - break - fi - done < "$tmp" - done - rm -f -- "$tmp" -} - -get_usb_devices() { - if which lsusb 2>/dev/null >&2 && lsusb --help 2>&1 | grep -q -- '-D' 2>/dev/null; then - [ $# -eq 1 ] && set -- "$1" $PASSTHROUGH_USB_DEVICES # no quotes here! - get_usb_devices_int "$@" | sort -u - else - writelog --quiet "Cannot scan usb bus: lsusb not found or doesn't support -D" - fi -} - diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/includes/vmchooser_runvirt_functions.inc b/remote/modules/run-virt/data/opt/openslx/scripts/includes/vmchooser_runvirt_functions.inc deleted file mode 100644 index af9758e2..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/includes/vmchooser_runvirt_functions.inc +++ /dev/null @@ -1,76 +0,0 @@ -####################################################### -# Include: Set functions needed by vmchooser-run_virt # -####################################################### - -# function to write to stdout and logfile -writelog() { - local DATE=$(date +%Y-%m-%d-%H-%M-%S) - # write to stdout? - if [ "x$1" = "x--quiet" ]; then - shift - else - echo -e "$DATE: $@" - fi - # log into file - echo -e "$DATE: $@" >> "${LOGFILE}" -} - -notify_user() { - local TOPIC="$1" - shift - notify-send -u normal "$TOPIC" "$@" - writelog "Notify: **${TOPIC}**: $*" -} - -error_user() { - local TOPIC="$1" - shift - local MSG TITLE BODY - if [ $# -gt 0 ]; then - MSG=" $TOPIC -$*" - TITLE="$TOPIC" - BODY="$*" - else - MSG="$TOPIC" - TITLE="ERROR" - BODY="$TOPIC" - fi - /opt/openslx/cups/printergui --error "$MSG" && return - # printergui might not exist, try fallback here - # unfortunately, i can only think of notify+sleep right now - notify-send -u critical "$TITLE" "$BODY" - sleep 10 -} - -# Clean exit will be called at the end of vmchooser-run_virt -cleanexit() { - sleep 1 - # Ummount dnbd3-fuse - if [ -n "$dnbd3_fuse_mount_point" ] && [ -e "$dnbd3_fuse_mount_point/img" ]; then - for timeout in 1 1 1 FAIL; do - fusermount -u "$dnbd3_fuse_mount_point" && break - writelog "dnbd3 still busy...." - [ "$timeout" = "FAIL" ] && break - sleep "$timeout" - done - fi - # Kill LPD - [ -n "${PID_LPD}" ] && kill "${PID_LPD}" - - # If we're not in debug mode, remove all temporary files - if [ -n "${TMPDIR}" -a -z "$SLX_DEBUG" ]; then - rm -rf -- "${TMPDIR}" - fi - - [ $# -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 -} 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 deleted file mode 100755 index ea3cfe8e..00000000 --- a/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -# Full bash required -# ----------------------------------------------------------------------------- -# Copyright (c) 2007..2010 - RZ Uni FR -# Copyright (c) 2007..2013 - OpenSLX GmbH -# -# This program is free software distributed under the GPL version 2. -# See http://openslx.org/COPYING -# -# If you have any feedback please consult http://openslx.org/feedback and -# send your suggestions, praise, or complaints to feedback@openslx.org -# -# General information about OpenSLX can be found at http://openslx.org/ -# ----------------------------------------------------------------------------- -# run-virt.sh -# - This is the generic wrapper for the several virtualization solutions. -# 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. -################################################################################ - -RUNVIRTINCLUDEDIR=/opt/openslx/scripts/includes -xmlfile="$1" - -# Functions needed by vmchooser-run_virt (writelog(), cleanexit(), rv_clean_string()) -source ${RUNVIRTINCLUDEDIR}/vmchooser_runvirt_functions.inc && trap 'trap "" SIGINT SIGTERM; cleanexit' SIGINT SIGTERM -# Define default dirs / get configs -source ${RUNVIRTINCLUDEDIR}/set_runvirt_variables.inc -# Function to detect whether we can use the new way (vmx via http) or the old way (legacy): -source ${RUNVIRTINCLUDEDIR}/detect_legacy.inc # This yields LEGACY, IMGUUID, IMGVMX -# For scanning for certain usb classes -source "${RUNVIRTINCLUDEDIR}/usb_detector.inc" - -if [ "$LEGACY" ]; then - # check for important files used (filecheck()) - vestigial? - source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc - # Get XML file and dir, legacy (old way) - source ${RUNVIRTINCLUDEDIR}/get_xml_file_dir_legacy.inc # xmlfile=$1 - # xml file sanity checks, legacy - source ${RUNVIRTINCLUDEDIR}/check_runvirt_xml_sanity_legacy.inc - # print console logo - source ${RUNVIRTINCLUDEDIR}/print_runvirt_console_logo.inc - # Read needed variables from XML file - source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables_legacy.inc - # Declaration of hardware relatedt variables - source ${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables_legacy.inc - # Sound setup the rest of the environment and run the configured vm - source ${RUNVIRTINCLUDEDIR}/setup_sound.inc - # Start printer daemon - source ${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc - # Setup virtual floppy b: for windows guests with config.xml, openslx.exe etc. - source ${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc - # Try to use dnbd3 to access the image, nfs/cifs fallback - source ${RUNVIRTINCLUDEDIR}/setup_image_access.inc - # Get all virtual machine specific stuff from the respective include file - source ${RUNVIRTINCLUDEDIR}/setup_vm_hypervisor.inc - # start a windowmanager for easier handling - source ${RUNVIRTINCLUDEDIR}/start_windowmanager.inc - # Check if tcpsvd is running. Do not check immediately after spawning, - # as this could result in success even if it's not really working. - source ${RUNVIRTINCLUDEDIR}/check_lpd.inc -else - # check for important files used (filecheck()) - vestigial? - # This include does not currently work. TODO. - # source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc && filecheck - - # Firewall - source "${RUNVIRTINCLUDEDIR}/setup_firewall.inc" || writelog "Could not source setup_firewall" - setup_firewall || writelog "Could not run setup_firewall" - - # Read needed variables from XML file - source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables.inc - - # Sound setup the rest of the environment and run the configured vm - source ${RUNVIRTINCLUDEDIR}/setup_sound.inc - - # Declaration of hardware relatedt variables - source ${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables.inc - - # Start printer daemon - source ${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc - - # Setup virtual floppy b: for windows guests with config.xml, openslx.exe etc. - source ${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc - - # Get all virtual machine specific stuff from the respective include file - source ${RUNVIRTINCLUDEDIR}/setup_image_access.inc - - # start a windowmanager for easier handling - source ${RUNVIRTINCLUDEDIR}/setup_vm_hypervisor.inc - - # Try to use dnbd3 to access the image, nfs/cifs fallback - source ${RUNVIRTINCLUDEDIR}/start_windowmanager.inc - - # Check if tcpsvd is running. Do not check immediately after spawning, - # as this could result in success even if it's not really working. - source ${RUNVIRTINCLUDEDIR}/check_lpd.inc - -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 -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-run_virt b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt new file mode 120000 index 00000000..447f98bc --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/scripts/vmchooser-run_virt @@ -0,0 +1 @@ +/opt/openslx/vmchooser/vmchooser-run_virt \ No newline at end of file diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/check_runvirt_needed_files.inc new file mode 100644 index 00000000..fbb0bc70 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/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/vmchooser/run-virt-includes/detect_legacy.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc new file mode 100644 index 00000000..8bdfd8b1 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/detect_legacy.inc @@ -0,0 +1,34 @@ +######################################################## +# Include: Detect, whether runvirt runs in legacy mode # +######################################################## + +# Legacy mode: As runvirt has been before. +# New mode: uuid in xml _and_ vmx given via http. + +writelog "Detecting current/legacy mode ..." + +# First, let's try to extract an imguuid from xmlfile: +declare -rg IMGUUID=$(grep -i -o '/dev/null >&2; then + writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}. Triggering legacy mode." + else + writelog "wget ${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID} successful." + if [ ! -s "$TMPCONFIG" ]; then + writelog "Server sent zero byte virtual machine description file. Triggering legacy mode." + else + writelog "Triggering current (non-legacy) mode." + LEGACY= # everything worked - clear legacy mode variable (so we use the "current" mode) + fi + fi +fi + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc new file mode 100644 index 00000000..b7ed648c --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/get_xml_file_variables.inc @@ -0,0 +1,103 @@ +########################################### +# 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 ' "$LOGF" 2>&1 + RET=$? + if [ "$RET" != "0" ]; then + slxlog "runvirt-firewall" "Error setting up firewall rules for lecture $IMGUUID (Exit code $RET)" "$LOGF" + fi + return 0 +} diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc new file mode 100644 index 00000000..3c4ed330 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_image_access.inc @@ -0,0 +1,71 @@ +########################################################### +# Include: Setup dnbd for image access, nfs/cifs fallback # +########################################################### + +writelog "Now in setup_image_access.inc ..." + +# Try to use dnbd3 to access the image +unset vm_diskfile +unset vm_revision +unset dnbd3_fuse_mount_point +unset dnbd3_tmplog +if ! which dnbd3-fuse; then + writelog "Can't use dnbd3 as dnbd3-fuse binary is not in PATH" +elif [ -z "$SLX_DNBD3_SERVERS" ] || [ "x$SLX_VM_DNBD3" != "xyes" ]; then + writelog "Can't use dnbd3 as no servers are given in config, or SLX_VM_DNBD3 is not set to yes" +else + # Mount path for images mounted with dnbd3-fuse + dnbd3_fuse_mount_point="$TMPDIR/dnbd3fuse.mnt" + mkdir -p "${dnbd3_fuse_mount_point}" + # start dnbd3-fuse in subshell + dnbd3_tmplog="$TMPDIR/dnbd3fuse.log" + dnbd3_exitflag="$TMPDIR/dnbd3exit$RANDOM" + rm -f -- "$dnbd3_exitflag" + ( + dnbd3-fuse -f -o allow_other,max_readahead=262144 -h "$SLX_DNBD3_SERVERS" -i "${imgrelpath}" "${dnbd3_fuse_mount_point}" > "$dnbd3_tmplog" 2>&1 + RET=$? + touch "$dnbd3_exitflag" + if [ "$RET" != "0" ]; then + writelog "dnbd3-fuse stopped working (Exit code $RET)" + slxlog "virt-dnbd3-fuse" "dnbd3-fuse stopped/refused serving '${imgrelpath}' from '${SLX_DNBD3_SERVERS}' with error code: $RET" "${dnbd3_tmplog}" + fi + ) & + # give it a bit of time + usleep 250000 + # check if we have the image + for TIMEOUT in 0.5 1 1 OUT; do + if [ -r "${dnbd3_fuse_mount_point}/img" ]; then + vm_revision="$(grep -m 1 "^Revision:" "${dnbd3_fuse_mount_point}/status" | cut -d" " -f2)" + vm_diskfile="${dnbd3_fuse_mount_point}/img" + writelog "DNBD3: $imgrelpath on $vm_diskfile with rid $vm_revision" + vmpath="$vm_diskfile" + break + fi + [ "$TIMEOUT" = "OUT" -o -e "$dnbd3_exitflag" ] && break + sleep "$TIMEOUT" + done + + if [ -z "$vm_diskfile" ]; then + slxlog "virt-dnbd3" "No dnbd3 server for ${imgrelpath} found, trying NFS/CIFS..." "$dnbd3_tmplog" + writelog "No working dnbd3 server found :-(" + fi +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 -n 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!" + error_user "Das Image für die gewählte Virtuelle Maschine konnte nicht gefunden werden. +Versuchen Sie zunächst, den Computer komplett neu zu starten. Sollte das Problem bestehen bleiben, wenden Sie sich bitte an den Support." + cleanexit 1 +fi + +writelog "Virtual machine disk file: $vm_diskfile" + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_printer_lpd.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_printer_lpd.inc new file mode 100644 index 00000000..2fb9310a --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_printer_lpd.inc @@ -0,0 +1,46 @@ +##################################### +# Include: Setup printer daemon LPD # +##################################### + +QUEUE="STANDARD" # This has to match the queue you configured in your VM +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="${TMPDIR}/printergui-${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 runvirt.d (other parts might benefit from that too) +tcpsvd -E 192.168.101.1 5515 \ + lpd "$SPOOLDIR" \ + ash -c "/opt/openslx/scripts/run-virt_print '${USER}' \"${SPOOLDIR}/${QUEUE}/\$DATAFILE\"" & + +# PID to kill the process +PID_LPD="$!" + +{ + sleep 2 + # Check if tcpsvd is running. Do this a little delayed 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" + notify_user "Durcksystem" "Das Drucksystem konnte nicht initialisiert werden. Druckfunktion nicht verfügbar." + fi +} & + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_sound.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_sound.inc new file mode 100644 index 00000000..6230aa3a --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_sound.inc @@ -0,0 +1,65 @@ +#!/bin/bash <-- Add shebang even though it's sourced so vim highlights bash specific features properly +######################## +# Include: Setup sound # +######################## +# 8086:1e20: Sound card in bwPX4 + +writelog "Starting sound setup ..." + +if lspci -n | grep -E -i '8086:1e20( |$)'; then + VOL="100%" # bwPC 4: Speaker too quiet :-( +else + VOL="85%" +fi + +if true; then + # detecting which card is to be used + writelog "Detecting which sound card to use ..." + PROC="/proc/asound/cards" + if [ ! -r "$PROC" ]; then + writelog "'${PROC}' not found or not readable." + SOUND_CARD_INDEX=0 + SOUND_CARD_COUNT=1 + else + # Try to filter HDMI cards first + SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1) + # If empty, try again with all + [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1) + if [ -z "${SOUND_CARD_INDEX}" ]; then + writelog "No sound card found." + SOUND_CARD_INDEX=0 + fi + SOUND_CARD_COUNT=$(grep -E '^[[:space:]]{0,2}[0-9]+[[:space:]]+' "${PROC}" | wc -l) + fi + + SOUND_CARD_INDEX="$(grep -E -o '[0-9]+' <<<$SOUND_CARD_INDEX)" + writelog "Detected sound card index is: $SOUND_CARD_INDEX" + writelog "Sound card count: $SOUND_CARD_COUNT" + + # Adjust sound volume (playback)... Random mixer names we have encountered during testing + writelog "Setting up volume..." + amixer -q -c "$SOUND_CARD_INDEX" sset 'Master' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'PCM' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'CD' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Headphone' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Front' "$VOL" unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Speaker' "$VOL" unmute + # Recording. It seems that (most) devices need the volume set to 0, so you + # don't hear your own mic input, but should be unmuted. Also on some cards, + # you need to set the cap option on the mic you want to use, while other cards + # will just ignore that option. + # Plus, most cards have a Capture mixer, which needs to be set to cap too, and + # have its volume turned up. (There'll probably be some cards that need yet + # another setup, but this works for now on 4 tested cards) + amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic Boost' "50%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Rear Mic' "0%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic Boost' "50%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Front Mic' "0%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic Boost' "50%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Mic' "0%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Capture' "100%" cap unmute + amixer -q -c "$SOUND_CARD_INDEX" sset 'Input Source' 'Front Mic' # Let's hope nobody uses rear mic... + # fix random static noise when starting vmplayer when module snd_pcsp (not pcspkr) is loaded + amixer -q -c pcsp sset Master "0%" mute + writelog "Done setting up volume." +fi >> "${LOGFILE}" 2>&1 diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_virtual_floppy.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_virtual_floppy.inc new file mode 100644 index 00000000..d9ae052c --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_virtual_floppy.inc @@ -0,0 +1,101 @@ +#!/bin/bash +############################################## +# Include: Setup virtual floppy for drive b: # +############################################## + +declare -rg FLOPPYIMG="${TMPDIR}/floppy.img" +declare -rg TMPHOME="${HOME}" +declare -rg RUNSCRIPT="${TMPDIR}/runscript.tmp" + +wget -T 6 -O "${RUNSCRIPT}" "${SLX_VMCHOOSER_BASE_URL}/lecture/${IMGUUID}/runscript" > /dev/null & +WGET=$! + +dd "if=/dev/zero" "of=${FLOPPYIMG}" count=1440 bs=1024 +chmod 0600 "${FLOPPYIMG}" +mkfs.fat "${FLOPPYIMG}" || mkfs.vfat "${FLOPPYIMG}" || mkdosfs "${FLOPPYIMG}" + +# Create file with resolution information etc. +. "/opt/openslx/inc/shares" +if [ -z "$SHARE_REMAP_MODE" ]; then + SHARE_REMAP_MODE_INI="0" + SHARE_REMAP_MODE="3" +else + SHARE_REMAP_MODE_INI="$SHARE_REMAP_MODE" +fi +[ -z "$SHARE_CREATE_MISSING_REMAP" ] && SHARE_CREATE_MISSING_REMAP="1" +declare -rg RESOLUTION=$(xrandr | grep -o -E 'connected\s*(primary)?\s*[0-9]+x[0-9]+\+0\+0' \ + | grep -o -E -m1 '[0-9]+x[0-9]+') + +# Legacy: HOSTRES.TXT +cat > "${TMPDIR}/HOSTRES.TXT" <<-HIER +${RESOLUTION} +HIER + +# Create file for network shares to mount +declare -rg SHARES="${TMPDIR}/shares.dat" +touch "${SHARES}" +chmod 0600 "${SHARES}" +if ! pwdaemon --query "${TMPHOME}/.pwsocket" > "${SHARES}"; then + slxlog "virt-pwdaemon" "Could not start pwdaemon" +else + sed -i 's/^/192.168.101.1\t/' "${SHARES}" # TODO: Depending on nettype (in case we have != nat some day) + if [ "${SHARE_REMAP_MODE}" = 1 -o "${SHARE_REMAP_MODE}" = 2 ] && [ -e "${TMPHOME}/.home" ]; then + NETHOME=$(cat "${TMPHOME}/.home") + [ -z "$SHARE_HOME_DRIVE" ] && SHARE_HOME_DRIVE="H:" + # Tab between items, so spaces can be used! + echo "${NETHOME} ${SHARE_HOME_DRIVE} Home-Verzeichnis" >> "${SHARES}" + fi + for VAR in ${!SHARE_LINE_*}; do + echo "${!VAR}" >> "${SHARES}" + done +fi + +wait "$WGET" + +# Check downloaded runscript, handle extension marker +EXT= +if [ -s "$RUNSCRIPT" ]; then + EXT=$(head -n 1 "$RUNSCRIPT" | grep -o -i '^EXT=.*$' | cut -d '=' -f 2-) + [ -n "$EXT" ] && [ "x${EXT:0:1}" != "x." ] && EXT=".$EXT" +fi + +# Write info file +UNAME= +[ -s "${HOME}/.account" ] && UNAME=$(cat "${HOME}/.account") +[ -z "${UNAME}" ] && UNAME=$(whoami) +cat > "${TMPDIR}/openslx.ini" <<-HIER +[openslx] +username=${UNAME} +resolution=${RESOLUTION} +createMissingRemap=${SHARE_CREATE_MISSING_REMAP} +remapMode=${SHARE_REMAP_MODE_INI} +homeDrive=${SHARE_HOME_DRIVE} +scriptExt=${EXT} + +[remap] +documents=${SHARE_DOCUMENTS} +downloads=${SHARE_DOWNLOADS} +desktop=${SHARE_DESKTOP} +media=${SHARE_MEDIA} +other=${SHARE_OTHER} +HIER + +# Copy all them there filez into floppy image +mcopy -i "${FLOPPYIMG}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" "${SHARES}" "::/" +mcopy -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/openslx.exe" "::/" +# Copy guest configuration (with added information) config.xml to be accessed +# via virtual floppy +mcopy -i "${FLOPPYIMG}" "$xmlfile" "::/config.xml" + +# Copying linux directory: +mcopy -s -i "${FLOPPYIMG}" "$VMCHOOSER_DIR/data/linux" "::/" + +# User supplied runscript +if [ -n "$EXT" ]; then + sed -i '1d' "${RUNSCRIPT}" + mcopy -i "${FLOPPYIMG}" "${RUNSCRIPT}" "::/runscript${EXT}" +fi + +rm -f -- "${SHARES}" "${TMPDIR}/openslx.ini" "${TMPDIR}/HOSTRES.TXT" +unset SHARES VAR NETHOME UNAME + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc new file mode 100644 index 00000000..ce15524f --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/setup_vm_hypervisor.inc @@ -0,0 +1,34 @@ +########################################################################## +# 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 + 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." + error_user "Konnte den Virtualisierer '$xmlvirt' nicht finden. Starten der Virtuellen Maschine fehlgeschlagen. + Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." + cleanexit 1 +fi + +self="${xmlvirt}" + +if ! bash -n "$VMCHOOSER_DIR/$xmlvirt/run-virt.include"; then + slxlog "virt-plugin-syntax" "run-virt.include for $xmlvirt contains syntax errors (bash -n run-virt.include failed)" + writelog "Erroneous run-virt.include for $xmlvirt (syntax check)" + error_user "Das Start-Script für den Virtualisierer '$xmlvirt' ist fehlerhaft. + Starten Sie den Computer neu und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." + cleanexit 1 +fi + +setup_vm_commandline () { + # 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 properly." + writelog "Erroneous run-virt.include for ${xmlvirt}? Source returned != 0" + error_user "Das Start-Script für den Virtualisierer '$xmlvirt' hat einen fehlercode zurückgegeben. + Starten Sie den Computer neu, falls es beim Ausführen der VM zu Problemen kommt + und wenden Sie sich an den Support, wenn das Problem weiterhin besteht." + fi +} + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/start_windowmanager.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/start_windowmanager.inc new file mode 100644 index 00000000..da43f341 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/start_windowmanager.inc @@ -0,0 +1,27 @@ +#################################################### +# Include: Start windowmanager for easier handling # +#################################################### + +# Some problems may arise with windows opening in background when +# using eg. vmware without a window manager. + +FOUND_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 + writelog "Starting fvwm2." + fvwm2 -f ${redodir}/fvwm >/dev/null 2>&1 & + else + writelog "Starting ${dm}." + $dm >/dev/null 2>&1 & + fi + FOUND_WM=1 + break + fi +done + +if [ -z "$FOUND_WM" ]; then + slxlog "virt-windowmanager" "Could not find any window manager to use!" + notify_user "Konnte keinen Window Manager finden. (Das ist schlecht!)" +fi diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/usb_detector.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/usb_detector.inc new file mode 100644 index 00000000..a2d442e4 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/usb_detector.inc @@ -0,0 +1,77 @@ +# Helper function that will scan /dev/bus/usb for devices matching specific classes +# and then output the corresponding device ids. This can be used for selective +# handover of devices to a virtual machine + +declare -rg PASSTHROUGH_USB_DEVICES="2 0:5 0:6 0:7 0:14 0:16 0:17 239" + +# $1: expression to fill with device information. +# valid placeholders are: +# %VENDOR% - device vendor id +# %PRODUCT% - device product id +# $2-n: device classes to include in output +get_usb_devices_int() { + [ -z "$TMPDIR" ] && TMPDIR="/tmp" + local EXP=$1 + shift + if [ -z "$EXP" ]; then + writelog --quiet "No ouput expression template passed to get_usb_devices" + cleanexit 1 + fi + if [ $# -eq 0 ]; then + writelog --quiet "No device classes given to get_usb_devices" + cleanexit 1 + fi + local MATCH=';' + while [ $# -gt 0 ]; do + MATCH+="$1;" + [[ "$1" != *:* ]] && MATCH+="0:$1;" + shift + done + local dev= + local key value trailing + trailing= + local tmp="${TMPDIR}/lsusb.$$.$RANDOM" + for dev in /dev/bus/usb/*/*; do + if ! lsusb -D "$dev" > "$tmp" 2>/dev/null; then + writelog --quiet "Cannot lsusb $dev" + continue + fi + local DC= + local OK= + local VENDOR= + local PRODUCT= + while read -r key value trailing || [ -n "$key" ]; do + if [[ "$key" == "idVendor" ]]; then + [[ "$value" == 0x* ]] && VENDOR="${value:2}" + elif [[ "$key" == "idProduct" ]]; then + [[ "$value" == 0x* ]] && PRODUCT="${value:2}" + elif [ -z "$DC" ]; then + # No bDeviceClass seen yet + if [[ "$key" == "bDeviceClass" ]]; then + DC="$value" + [[ "$MATCH" == *";${DC};"* ]] && OK=yo + fi + else + # #DeviceClass is generic, look at sub class + if [[ "$key" == "bInterfaceClass" ]]; then + [[ "$MATCH" == *";${DC}:${value};"* ]] && OK=yo + fi + fi + if [ -n "$OK" -a -n "$VENDOR" -a -n "$PRODUCT" ]; then + echo "$EXP" | sed "s/%VENDOR%/${VENDOR}/g;s/%PRODUCT%/${PRODUCT}/g" + break + fi + done < "$tmp" + done + rm -f -- "$tmp" +} + +get_usb_devices() { + if which lsusb 2>/dev/null >&2 && lsusb --help 2>&1 | grep -q -- '-D' 2>/dev/null; then + [ $# -eq 1 ] && set -- "$1" $PASSTHROUGH_USB_DEVICES # no quotes here! + get_usb_devices_int "$@" | sort -u + else + writelog --quiet "Cannot scan usb bus: lsusb not found or doesn't support -D" + fi +} + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc new file mode 100644 index 00000000..c0d17dbe --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/run-virt-includes/vmchooser_runvirt_functions.inc @@ -0,0 +1,79 @@ +####################################################### +# Include: Set functions needed by vmchooser-run_virt # +####################################################### + +# function to write to stdout and logfile +writelog() { + local DATE=$(date +%Y-%m-%d-%H-%M-%S) + # write to stdout? + if [ "x$1" = "x--quiet" ]; then + shift + else + echo -e "$DATE: $@" + fi + # log into file + echo -e "$DATE: $@" >> "${LOGFILE}" +} + +notify_user() { + local TOPIC="$1" + shift + notify-send -u normal "$TOPIC" "$@" + writelog "Notify: **${TOPIC}**: $*" +} + +error_user() { + local TOPIC="$1" + shift + local MSG TITLE BODY + if [ $# -gt 0 ]; then + MSG=" $TOPIC +$*" + TITLE="$TOPIC" + BODY="$*" + else + MSG="$TOPIC" + TITLE="ERROR" + BODY="$TOPIC" + fi + # Zenity should yield the nicest result + zenity --error --title "$TITLE" --text "$BODY" && return + # QnD abuse printergui for error message as it's blocking + /opt/openslx/cups/printergui --error "$MSG" && return + # printergui might not exist, try fallback here + # unfortunately, i can only think of notify+sleep right now + notify-send -u critical "$TITLE" "$BODY" + sleep 10 +} + +# Clean exit will be called at the end of vmchooser-run_virt +cleanexit() { + sleep 1 + # Ummount dnbd3-fuse + if [ -n "$dnbd3_fuse_mount_point" ] && [ -e "$dnbd3_fuse_mount_point/img" ]; then + for timeout in 1 1 1 FAIL; do + fusermount -u "$dnbd3_fuse_mount_point" && break + writelog "dnbd3 still busy...." + [ "$timeout" = "FAIL" ] && break + sleep "$timeout" + done + fi + # Kill LPD + [ -n "${PID_LPD}" ] && kill "${PID_LPD}" + + # If we're not in debug mode, remove all temporary files + if [ -n "${TMPDIR}" -a -z "$SLX_DEBUG" ]; then + rm -rf -- "${TMPDIR}" + fi + + [ $# -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 +} diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt b/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt new file mode 100755 index 00000000..10943c51 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/vmchooser-run_virt @@ -0,0 +1,116 @@ +#!/bin/bash +# Full bash required +# ----------------------------------------------------------------------------- +# Copyright (c) 2007..2010 - RZ Uni FR +# Copyright (c) 2007..2013 - OpenSLX GmbH +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your suggestions, praise, or complaints to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org/ +# ----------------------------------------------------------------------------- +# run-virt.sh +# - This is the generic wrapper for the several virtualization solutions. +# 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. +################################################################################ + +RUNVIRTINCLUDEDIR=/opt/openslx/vmchooser/run-virt-includes +xmlfile="$1" + +# Functions needed by vmchooser-run_virt (writelog(), cleanexit(), rv_clean_string()) +if ! source "${RUNVIRTINCLUDEDIR}/vmchooser_runvirt_functions.inc"; then + slxlog "run-virt" "Could not source ${RUNVIRTINCLUDEDIR}/vmchooser_runvirt_functions.inc" + exit 1 +fi + +trap 'trap "" SIGINT SIGTERM; cleanexit' SIGINT SIGTERM +# Define default dirs / get configs +source "${RUNVIRTINCLUDEDIR}/set_runvirt_variables.inc" +# Function to detect whether we can use the new way (vmx via http) or the old way (legacy): +source "${RUNVIRTINCLUDEDIR}/detect_legacy.inc" # This yields LEGACY, IMGUUID, IMGVMX + +if [ "$LEGACY" ]; then + + # No longer supported - yay + + error_user "Legacy Mode" " +Die gewählte VM ist eine 'Legacy VM', für die unvollständige +Metadaten auf dem bwLehrpool-Server hinterlegt sind. Diese +werden nicht mehr unterstützt. Um diese VM weiterhin nutzen +zu können, muss sie mittels der bwLehrpool-Suite heruntergeladen, +einmal gebootet, und wieder hochgeladen werden. +(Bei der Gelegenheit könnten z.B. auch gleich anfallende Updates +eingespielt werden.) +" + cleanexit 1 + + # End legacy warning +fi + +# Proper meta data received - proceed normally + +# check for important files used (filecheck()) - vestigial? +# This include does not currently work. TODO. +# source ${RUNVIRTINCLUDEDIR}/check_runvirt_needed_files.inc && filecheck + +# Read needed variables from XML file +source ${RUNVIRTINCLUDEDIR}/get_xml_file_variables.inc + +# Helper that looks for virtualizer-specific include, show error to user if not found +source "${RUNVIRTINCLUDEDIR}/setup_vm_hypervisor.inc" + +# For scanning for certain usb classes +source "${RUNVIRTINCLUDEDIR}/usb_detector.inc" + +# Firewall +source "${RUNVIRTINCLUDEDIR}/setup_firewall.inc" || writelog "Could not source setup_firewall" +setup_firewall || writelog "Could not run setup_firewall" + +# Sound setup +source ${RUNVIRTINCLUDEDIR}/setup_sound.inc + +# Declaration of hardware relatedt variables +source ${RUNVIRTINCLUDEDIR}/set_runvirt_hardware_variables.inc + +# Start printer daemon +source ${RUNVIRTINCLUDEDIR}/setup_printer_lpd.inc + +# Setup virtual floppy b: for windows guests with config.xml, openslx.exe etc. +source ${RUNVIRTINCLUDEDIR}/setup_virtual_floppy.inc + +# Try to use dnbd3 to access the image, nfs/cifs fallback +source ${RUNVIRTINCLUDEDIR}/setup_image_access.inc + +# Window manager required for handling of popups etc. +source ${RUNVIRTINCLUDEDIR}/start_windowmanager.inc + +# Source run-virt.include of virtualizer +setup_vm_commandline + +# It should have set this variable if all went well +if [ -z "${VIRTCMD}" ]; then + error_user "Fehler beim Starten der VM-Sitzung" " +Das Start-Script für den Virtualisierer $xmlvirt hat kein Kommando +zum Starten der Sitzung definiert. Kann Sitzung nicht initialisieren." + slxlog "virt-plugin-error" "run-virt.include for $xmlvirt did not set VIRTCMD" + cleanexit 1 +fi + +writelog "VM command: eval ${VIRTCMD} ${VIRTCMDOPTS}" +# This will start the VM +eval ${VIRTCMD} ${VIRTCMDOPTS} + +writelog "Virtualizer exited. Bye." + +# Postrun for commands after virtualization finishes +if [ -n "${POSTRUN}" ]; then + eval ${POSTRUN} >/dev/null 2>&1 +fi + +cleanexit 0 + diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file_legacy.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file_legacy.inc deleted file mode 100644 index df6e6f39..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/create_vmware_config_file_legacy.inc +++ /dev/null @@ -1,316 +0,0 @@ -######################################## -# Include: Create vmware startup files # -######################################## - -create_vmware_config_file_legacy() { - echo "# This configuration file was generated by $0" > "$conffile" - - MAXMEM="9999999" - MAXCORES="4" - shfolders="TRUE" - sound="es1371" - - # define hardware configuration depending on the guest OS used - # this needs to be fixed and is the base for the creation of new VMs - case "$vmostype" in - win31*|windows31*) - vmostype="win31" - shfolders="FALSE" - sound="sb16" - MAXMEM="32" - MAXCORES="1" - ;; - winnt*|windowsnt*) - vmostype="winnt" - shfolders="FALSE" - sound="sb16" - MAXMEM="1000" - MAXCORES="2" - ;; - win95*|windows95*) - vmostype="win95" - shfolders="FALSE" - MAXMEM="96" - MAXCORES="1" - ;; - win98*|windows98*) - vmostype="win98" - MAXMEM="256" - MAXCORES="1" - ;; - winme*|windowsme*) - vmostype="winme" - MAXMEM="384" - MAXCORES="1" - ;; - win2000|windows2000|win2000pro*) - vmostype="win2000pro" - MAXMEM="4000" - MAXCORES="2" - ;; - win2000srv*|windows2000srv*|win2000serv*|windows2000serv*) - vmostype="win2000serv" - shfolders="FALSE" - MAXMEM="4000" - MAXCORES="4" - ;; - win2000adv*|windows2000adv*|win2000dat*|windows2000dat*) - vmostype="win2000advserv" - shfolders="FALSE" - MAXMEM="8000" - MAXCORES="8" - ;; - winnet*64|win*2003*64|windowsnet*64) - vmostype="winnetstandard-64" - MAXMEM="8000" - ;; - winnet*|win*2003*|windowsnet*) - vmostype="winnetstandard" - MAXMEM="4000" - ;; - winxphome*|windowsxphome*) - vmostype="winxphome" - MAXMEM="4000" - MAXCORES="1" - ;; - winxp*64|windowsxp*64) - vmostype="winxppro-64" - MAXMEM="8000" - MAXCORES="2" - ;; - winxp*|windowsxp*) - vmostype="winxppro" - MAXMEM="4000" - MAXCORES="1" - ;; - winvista*64|windowsvista*64) - vmostype="winvista-64" - MAXMEM="16000" - MAXCORES="2" - ;; - winvista*|windowsvista*) - vmostype="winvista" - MAXMEM="8000" - MAXCORES="2" - ;; - win7*64|windows7*64) - vmostype="windows7-64" - MAXMEM="32000" - MAXCORES="4" - ;; - win7*|windows7*) - vmostype="windows7" - MAXMEM="8000" - MAXCORES="4" - ;; - win8*64|windows8*64) - vmostype="windows8-64" - MAXMEM="32000" - MAXCORES="4" - ;; - win8*|windows8*) - vmostype="windows8" - MAXMEM="8000" - MAXCORES="4" - ;; - win*64) - MAXMEM="16000" - MAXCORES="4" - ;; - win*) - MAXMEM="8000" - ;; - dos|msdos*|ms-dos*) - vmostype="dos" - shfolders="FALSE" - MAXMEM="128" - ;; - macos*64) - vmostype="freebsd-64" - MAXMEM="4000" - MAXCORES="2" - ;; - macos*) - vmostype="freebsd" - MAXMEM="4000" - MAXCORES="1" - ;; - beos*) - vmostype="other" - shfolders="FALSE" - ;; - # Unknown guestOS setting in .xml - use conservative defaults - *64) - vmostype="other-64" - shfolders="FALSE" - MAXMEM="123456" - MAXCORES="4" - ;; - *) - vmostype="other" - shfolders="FALSE" - MAXMEM="8000" - MAXCORES="1" - ;; - esac - real_core_count="$cpu_cores" - [ "$cpu_cores" -gt "$MAXCORES" ] && cpu_cores="$MAXCORES" - # It currently makes no sense to set the virtual number of cores - # to a different value than the virtual number of cores per virtual CPU. - cores_per_socket="$cpu_cores" - - if [ "x$shfolders" != "xFALSE" ] && [ "$SHARE_REMAP_MODE" != 1 ]; then - enable_share='sharedFolder.option = "alwaysEnabled"' - HGFS_DISABLED="FALSE" - else - enable_share= - HGFS_DISABLED="TRUE" - fi - - [ "$mem" -ge "$MAXMEM" ] && mem="$MAXMEM" - [ "$hwver" -lt "7" -a "$mem" -gt "3500" ] && mem="3500" - - if [ -n "$FLOPPYIMG" ]; then - floppy1="TRUE" - else - floppy1="FALSE" - fi - - cat >> "$conffile" <<-HEREEND - .encoding = "UTF-8" - config.version = "8" - - # general hardware (ehci, 3d accel) - ehci.present = "TRUE" - $FORCE3D - mks.enable3d = "$enable3d" - - monitor.virtual_mmu = "automatic" - monitor.virtual_exec = "automatic" - - # id - virtualHW.version = "$hwver" - displayName = "$displayname" - guestOS = "$vmostype" - - # CPU/MEM - numvcpus = "$cpu_cores" - cpuid.coresPerSocket = "$cores_per_socket" - maxvcpus = "$real_core_count" - memsize = "$mem" - MemAllowAutoScaleDown = "FALSE" - MemTrimRate = "-1" - - # ide-disks - ide0:0.present = "$ide" - ide0:0.fileName = "$vm_diskfile" - ## Edited for persistent mode. - ide0:0.mode = "independent-${diskmode}" - ## - ide1:0.present = "$cdrom0" - ide1:0.autodetect = "TRUE" - ide1:0.fileName = "auto detect" - ide1:0.deviceType = "cdrom-raw" - ide1:1.present = "$cdrom1" - ide1:1.autodetect = "TRUE" - ide1:1.fileName = "auto detect" - ide1:1.deviceType = "cdrom-raw" - - # scsi-disks - scsi0.present = "$scsi" - scsi0:0.present = "$scsi" - scsi0:0.fileName = "$vm_diskfile" - scsi0.virtualDev = "$hddrv" - ## Edited for persistent mode. - scsi0:0.mode = "independent-${diskmode}"$stateFileConfiguration - ## - - # floppies - floppy0.present = "$floppy0" - floppy0.startConnected = "TRUE" - floppy0.autodetect = "TRUE" - floppy0.fileName = "auto detect" - - # we need floppy b: for the client configuration - floppy1.present = "$floppy1" - floppy1.readonly = "TRUE" - floppy1.startConnected = "TRUE" - floppy1.fileType = "file" - floppy1.fileName = "$FLOPPYIMG" - - # nics - ethernet0.present = "TRUE" - ethernet0.addressType = "static" - $network_virtualDev - #ethernet0.connectionType = "hostonly" - ethernet0.connectionType = "custom" - ethernet0.vnet = "$hostdev" - ethernet0.address = "00:50:56:$macaddrsuffix" - ethernet0.wakeOnPcktRcv = "FALSE" - - # sound - sound.present = "TRUE" - $sound_fileName - sound.virtualdev = "$sound" - pciSound.enableVolumeControl = "FALSE" - sound.enableVolumeControl = "FALSE" - - # svga - svga.autodetect = "TRUE" - - # usb - usb.present = "TRUE" - usb.generic.autoconnect = "TRUE" - - # pci configuration - usb.pciSlotNumber = "16" - ethernet0.pciSlotNumber = "17" - sound.pciSlotNumber = "18" - ehci.pciSlotNumber = "19" - scsi0.pciSlotNumber = "20" - - $PCIE - - # shared folders - $enable_share - sharedFolder0.present = "$shfolders" - sharedFolder0.enabled = "$shfolders" - sharedFolder0.expiration = "never" - sharedFolder0.guestName = "$homesharename" - sharedFolder0.hostPath = "$homesharepath" - sharedFolder0.readAccess = "TRUE" - sharedFolder0.writeAccess = "TRUE" - sharedFolder1.present = "$shfolders" - sharedFolder1.enabled = "$shfolders" - sharedFolder1.expiration = "never" - sharedFolder1.guestName = "$commonsharename" - sharedFolder1.hostPath = "$commonsharepath" - sharedFolder1.readAccess = "TRUE" - sharedFolder1.writeAccess = "TRUE" - sharedFolder.maxNum = "2" - - # dirs/configs - tmpDirectory = "$redodir" - redoLogDir = "$redodir" - mainMem.useNamedFile = "TRUE" - snapshot.disabled = "TRUE" - tools.syncTime = "TRUE" - isolation.tools.hgfs.disable = "$HGFS_DISABLED" - hgfs.mapRootShare = "TRUE" - isolation.tools.dnd.disable = "FALSE" - isolation.tools.copy.enable = "TRUE" - isolation.tools.paste.enabled = "TRUE" - - # serial port - serial0.present = "$serial" - $serialdev - - # parallel port - parallel0.present = "$parallel" - parallel0.bidirectional = "$paralbidi" - $paraldev - HEREEND - - # set the appropriate permissions for the vmware config file - chmod u+rwx "${conffile}" >/dev/null 2>&1 -} diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc new file mode 100644 index 00000000..f7f09c65 --- /dev/null +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/log_config_summary.inc @@ -0,0 +1,62 @@ +################################################## +# Include: Print vm config summary into log file # +################################################## + +# log script information +writelog "# File created by $0 (VMware version ${vmware_version})\n# on $(date)\n" +## Edited for persistent mode. +writelog "Starting with ${diskmode} mode ...\n" +## + +# write all results to logfile +# log disksetup +writelog "Directories:" +writelog "\tConfdir:\t${confdir}" +writelog "\tConffile:\t${conffile}" +writelog "\tRedodir:\t${redodir}" +writelog "\tVMhome:\t\t${vmhome}" +writelog "\t/tmp info: $(grep "/tmp " /proc/mounts) $(df -h | grep " /tmp$" | awk '{print $2}')" +# hw setup +writelog "Hardware:" +writelog "\tMAC:\t\t$macaddr" +if [ -n "${network_card}" ]; then + writelog "\tNet Adaptor:\t${network_card}" +fi +writelog "\tMem:\t\t${mem} MB" + +# echo nur wenn hostmem gesetzt +[ -n "${hostmem}" ] && writelog "\tHostmem:\t${hostmem} MB" +writelog "\tMax. res.:\t${xres}x${yres}" +writelog "\tCD-ROM1:\t${cdrom0}" +writelog "\tCD-ROM2:\t${cdrom1}" +writelog "\tFloppy_A:\t${floppy0}" +if [ "${serial}" = "TRUE" ]; then + writelog "\tSerial Port:\t${serialdev}" +fi +if [ "${parallel}" = "TRUE" ]; then + writelog "\tParallel Port:\t${paraldev}" +fi + +writelog "Shared folders:" +if [ "${HGFS_DISABLED}" = "FALSE" ]; then + writelog "\tNo shared folders enabled." +else + writelog "\Shared folders enabled." +fi + +# image +writelog "Diskimage:" +writelog "\tDiskfile:\t${diskfile}" +writelog "\tDisktype:\t${hddrv}" +writelog "\tHWVersion:\t${hwver}" +writelog "\tVMostype:\t${vmostype}" + +# misc +writelog "Misc:" +writelog "\tDisplayname:\t${displayname}" +if [ "${cap3d}" = "TRUE" -a "${enable3d}" = "TRUE" ]; then + writelog "\t3D Graphics:\tenabled" +fi +# empty line at end +writelog "" + diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/logging.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/logging.inc deleted file mode 100644 index f7ee634a..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/logging.inc +++ /dev/null @@ -1,64 +0,0 @@ -############################### -# Include: Logging and stdout # -############################### - -logging() { - # log script information - writelog "# File created by $0 (VMware version ${vmware_version})\n# on $(date)\n" - ## Edited for persistent mode. - writelog "Starting with ${diskmode} mode ...\n" - ## - - # write all results to logfile - # log disksetup - writelog "Directories:" - writelog "\tConfdir:\t${confdir}" - writelog "\tConffile:\t${conffile}" - writelog "\tRedodir:\t${redodir}" - writelog "\tVMhome:\t\t${vmhome}" - writelog "\t/tmp info: $(grep "/tmp " /proc/mounts) $(df -h | grep " /tmp$" | awk '{print $2}')" - # hw setup - writelog "Hardware:" - writelog "\tMAC:\t\t$macaddr" - if [ -n "${network_card}" ]; then - writelog "\tNet Adaptor:\t${network_card}" - fi - writelog "\tMem:\t\t${mem} MB" - - # echo nur wenn hostmem gesetzt - [ -n "${hostmem}" ] && writelog "\tHostmem:\t${hostmem} MB" - writelog "\tMax. res.:\t${xres}x${yres}" - writelog "\tCD-ROM1:\t${cdrom0}" - writelog "\tCD-ROM2:\t${cdrom1}" - writelog "\tFloppy_A:\t${floppy0}" - if [ "${serial}" = "TRUE" ]; then - writelog "\tSerial Port:\t${serialdev}" - fi - if [ "${parallel}" = "TRUE" ]; then - writelog "\tParallel Port:\t${paraldev}" - fi - - writelog "Shared folders:" - if [ "${HGFS_DISABLED}" = "FALSE" ]; then - writelog "\tNo shared folders enabled." - else - writelog "\Shared folders enabled." - fi - - # image - writelog "Diskimage:" - writelog "\tDiskfile:\t${diskfile}" - writelog "\tDisktype:\t${hddrv}" - writelog "\tHWVersion:\t${hwver}" - writelog "\tVMostype:\t${vmostype}" - - # misc - writelog "Misc:" - writelog "\tDisplayname:\t${displayname}" - if [ "${cap3d}" = "TRUE" -a "${enable3d}" = "TRUE" ]; then - writelog "\t3D Graphics:\tenabled" - fi - # empty line at end - writelog "" - -} diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_hardware_legacy.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_hardware_legacy.inc deleted file mode 100644 index 22718839..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/set_hardware_legacy.inc +++ /dev/null @@ -1,152 +0,0 @@ -######################################### -# Include: Hardware checks and settings # -######################################### - -set_hardware_legacy() { - -# use different network card (default e1000, vlance, vmxnet) -if [ -n "${network_card}" ]; then - network_virtualDev="ethernet0.virtualDev = \"${network_card}\"" -else - network_virtualDev='ethernet0.virtualDev = "e1000"' -fi - -# use different network card (default e1000, vlance, vmxnet) -hostdev="/dev/vmnet1" -case "${network_kind}" in - bridge|bridged) - hostdev="/dev/vmnet0" - ;; - nat) - hostdev="/dev/vmnet1" - ;; - hostonly|host-only) - hostdev="/dev/vmnet2" - ;; -esac - -# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio) -sound="es1371" - -# set sound card explicitly if there is more than one card in the host system -sound_fileName='sound.fileName = "-1" -sound.autodetect = "TRUE"' - -# check for 3D configuration setting -case "$enable3d" in - true|yes) - enable3d="TRUE" - ;; - *) - enable3d="FALSE" - ;; -esac - -# check for whitelisted HW-3D -FORCE3D="" -if [ -n "$SLX_VMWARE_3D" ]; then - FORCE3D='mks.gl.allowBlacklistedDrivers = "TRUE"' -fi - -# serial/parallel port defined (e.g. "ttyS0, lp0" or "autodetect") -case "$serial" in - tty*) - if [ -e "/dev/$serial" ]; then - serialdev="serial0.filename = \"/dev/${serial}\"" - serial="TRUE" - else - serialdev="# no serial port configured" - serial="FALSE" - fi - ;; - auto*) - serialdev="serial0.autodetect = \"TRUE\"" - serial="TRUE" - ;; - *) - serialdev="# no serial port configured" - serial="FALSE" - ;; -esac - -case "$parallel" in - lp*|parport*) - if [ -e "/dev/$parallel" ]; then - paraldev="parallel0.filename = \"/dev/${parallel}\"" - paralbidi="TRUE" - parallel="TRUE" - else - paraldev="# no parallel port configured" - paralbidi="FALSE" - parallel="FALSE" - fi - ;; - auto*) - paraldev="parallel0.autodetect = \"TRUE\"" - paralbidi="TRUE" - parallel="TRUE" - ;; - *) - paraldev="# no parallel port configured" - paralbidi="FALSE" - parallel="FALSE" - ;; -esac - -# check if ide/scsi and hwver of image -# read only the first 30 lines to be sure -imghead=$(head -n 30 "${diskfile}") - -## Added to handle persistent snapshots. -if [[ "$originalVMDKFilePath" ]]; then - echo "Select \"${originalVMDKFilePath}\" as information base for \"${diskfile}\"." - imghead=$(head -n 30 "$originalVMDKFilePath") && \ - - # Support suspend mode. - stateFilePath="$(readlink -f "$(dirname "$diskfile")/"*.vmss)" && \ - if [ -f "$stateFilePath" ]; then - echo "Found state file \"$stateFilePath\"." && \ - stateFileConfiguration=" - checkpoint.vmState = \"$stateFilePath\"" - fi - POSTRUN="stateFilePath=\"\$(readlink -f \"${confdir}/\"*.vmss)\" && memoryFilePath=\"\$(readlink -f \"${confdir}/\"*.vmem)\" && [ -f \"\$stateFilePath\" ] && echo \"Saving state and memory file \\\"\$stateFilePath\\\" and \\\"\$memoryFilePath\\\".\" && mv -f \"\$stateFilePath\" \"$(dirname "$diskfile")/\" && mv -f \"\$memoryFilePath\" \"$(dirname "$diskfile")/\"" -fi - -## -hwver=$(echo "${imghead}" | grep -m1 -ia "ddb.virtualHWVersion" | awk -F '"' '{print $2}') - - -if [ -z "$override_hddtype" ]; then - hddrv=$(echo "${imghead}" | grep -m1 -ia "ddb.adapterType" | awk -F '"' '{print $2}') -else - hddrv=$override_hddtype -fi - -PCIE= -case "${hddrv}" in - ide) - ide="TRUE" - scsi="FALSE" - ;; - lsisas*) - ide="FALSE" - scsi="TRUE" - PCIE='pciBridge4.present = "TRUE" - pciBridge4.virtualDev = "pcieRootPort" - pciBridge4.functions = "8"' - ;; - lsilogic|buslogic) - ide="FALSE" - scsi="TRUE" - ;; - scsi) - ide="FALSE" - scsi="TRUE" - hddrv="lsilogic" - ;; - *) - slxlog "virt-vmware-hdd" "vmware: Unknown HDD adapter type $hddrv" - ;; -esac - -} diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files_legacy.inc b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files_legacy.inc deleted file mode 100644 index 52a341ba..00000000 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/includes/write_config_files_legacy.inc +++ /dev/null @@ -1,29 +0,0 @@ -############################### -# Include: Write config files # -############################### - -write_config_files_legacy() { - # create vmware directories - mkdir -p "$redodir" >/dev/null 2>&1 - mkdir -p "$confdir" >/dev/null 2>&1 - mkdir -p "$vmhome/dndlogs" >/dev/null 2>&1 - touch "$vmhome/dndlogs/dndlog.conf" >/dev/null 2>&1 - - # create preferences file ${vmhome}/preferences - source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file - - # create VMware config file (conffile) - source "${VMWAREINCLUDEDIR}/create_vmware_config_file_legacy.inc" && create_vmware_config_file_legacy - - # link to conffile if confdir != redodir - [ "$confdir" != "$redodir" ] && ln -s "$conffile" "$redodir/run-vmware.conf" >/dev/null 2>&1 - - # sync is needed to ensure that data is really written to virtual disk - # TODO: Move to general run-virt, right before exec of vm - sync - - # own nvram. We need it for floppy drive b, default nvram has just drive a - if ! cp "/opt/openslx/vmchooser/vmware/nvram" "$confdir/nvram"; then - slxlog "virt-vmware-nvram" "Could not copy nvram from '/opt/openslx/vmchooser/vmware/nvram' '$confdir/nvram'" - fi -} diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include index 08188b58..84679ebf 100644 --- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include +++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include @@ -33,34 +33,23 @@ vmw_cap_hw_version() { [ "$1" -lt "$maxhardwareversion" ] && maxhardwareversion="$1" } -if [ "$LEGACY" ]; then - # hardware checks - source "${VMWAREINCLUDEDIR}/set_hardware_legacy.inc" && set_hardware_legacy - # write configuration files - # write_config_files calls: - # set_vmhome_preferences_header - # set_vmware_startup_file - source "${VMWAREINCLUDEDIR}/write_config_files_legacy.inc" && write_config_files_legacy -else - # get information from downloaded vmx - source "${VMWAREINCLUDEDIR}/parse_vmx.inc" +# get information from downloaded vmx +source "${VMWAREINCLUDEDIR}/parse_vmx.inc" - # determine limitations wrt RAM and CPU count of VM - source "${VMWAREINCLUDEDIR}/determine_hardware_limitations.inc" +# determine limitations wrt RAM and CPU count of VM +source "${VMWAREINCLUDEDIR}/determine_hardware_limitations.inc" - # create file and directory structure for vmware setup - source "${VMWAREINCLUDEDIR}/create_static_directory_structure.inc" +# create file and directory structure for vmware setup +source "${VMWAREINCLUDEDIR}/create_static_directory_structure.inc" - # create preferences file ${vmhome}/preferences - source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file +# create preferences file ${vmhome}/preferences +source "${VMWAREINCLUDEDIR}/create_vmhome_preferences_file.inc" && create_vmhome_preferences_file - # parse the given vmx file - source "${VMWAREINCLUDEDIR}/write_final_vmx.inc" -fi +# parse the given vmx file +source "${VMWAREINCLUDEDIR}/write_final_vmx.inc" -# logging and stdout -# needs writelog() from vmchooser-run_virt -source "${VMWAREINCLUDEDIR}/logging.inc" && logging +# print summary - needs writelog() from vmchooser-run_virt +source "${VMWAREINCLUDEDIR}/log_config_summary.inc" # For debugging cp "$conffile" "/tmp/vmware-last-config" -- cgit v1.2.3-55-g7522