#!/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. ################################################################################ declare -rg RUNVIRTINCLUDEDIR=/opt/openslx/vmchooser/run-virt-includes declare -rg 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" # Read needed variables from XML file source "${RUNVIRTINCLUDEDIR}/get_xml_file_variables.inc" # Download meta data from server (e.g. vmx for vmware) source "${RUNVIRTINCLUDEDIR}/download_vm_metadata.inc" if ! isset IMGUUID TMPCONFIG TMPDIR USER; then slxlog "run-virt" "Internal sanity check failed: One of IMGUUID TMPCONFIG TMPDIR USER is not set." cleanexit 1 fi 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 # 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 $PLUGIN_ID hat kein Kommando zum Starten der Sitzung definiert. Kann Sitzung nicht initialisieren." slxlog "virt-plugin-error" "run-virt.include for $PLUGIN_ID 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