diff options
Diffstat (limited to 'core/modules/vbox/data/opt/openslx/vmchooser/plugins/virtualbox/run-virt.include')
-rwxr-xr-x | core/modules/vbox/data/opt/openslx/vmchooser/plugins/virtualbox/run-virt.include | 274 |
1 files changed, 0 insertions, 274 deletions
diff --git a/core/modules/vbox/data/opt/openslx/vmchooser/plugins/virtualbox/run-virt.include b/core/modules/vbox/data/opt/openslx/vmchooser/plugins/virtualbox/run-virt.include deleted file mode 100755 index df7772e8..00000000 --- a/core/modules/vbox/data/opt/openslx/vmchooser/plugins/virtualbox/run-virt.include +++ /dev/null @@ -1,274 +0,0 @@ -# ----------------------------------------------------------------------------- -# -# Copyright (c) 2009..2018 bwLehrpool-Projektteam -# -# This program/file is free software distributed under the GPL version 2. -# See https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html -# -# If you have any feedback please consult https://bwlehrpool.de and -# send your feedback to bwlehrpool@hs-offenburg.de. -# -# General information about bwLehrpool can be found at https://bwlehrpool.de -# -# ----------------------------------------------------------------------------- -# run-virt.include -# - component for virtualbox of the vmchooser plugin vmchooser-run_virt -################################################################################ - -[ -r /run/hwinfo ] && source /run/hwinfo - -################################################################################ -### declaration of default variables -################################################################################ - -if ! isset VM_CLEANNAME IMG_BASENAME SRC_IMG_ABSOLUTE VM_OS_TYPE; then - env=$(mktemp) - env > "$env" - slxlog -d "virt-vbox-init" "A required variable is not set." "$env" - writelog "Incomplete variable set passed from main run-virt" - error_user "Wichtige variablen, die das VBox Plugin benötigt, wurden nicht -gesetzt. Kann die VM nicht starten." - cleanexit 1 -fi - -# Define which features the VMware plugin supports -declare -rg PLUGIN_FEATURES="TODO" - -declare -rg VMCHOOSERVBOX="/opt/openslx/vmchooser/${PLUGIN_ID}" -declare -rg VBOX_ROOT="${TMPDIR}/vbox" # dir for configs -declare -rg VBOX_MACHINES_DIR="${VBOX_ROOT}/Machines" -declare -rg VBOX_SNAPSHOT_DIR="${VBOX_MACHINES_DIR}/${VM_CLEANNAME}/Snapshots" -declare -rg VBOX_HDD_DIR="${VBOX_ROOT}/HardDisks" -declare -rg VBOX_HDD_LINK="${VBOX_HDD_DIR}/${IMG_BASENAME}" - -export VBOX_USER_HOME="${VBOX_ROOT}" # instead of $HOME/.VirtualBox - -# use VM_CLEANNAME for dir and config names since VM_DISPLAYNAME can be very long -VBOX_MACHINE_CONFIG="${VBOX_MACHINES_DIR}/${VM_CLEANNAME}/${VM_CLEANNAME}.xml" -mkdir -p "${VBOX_HDD_DIR}" "${VBOX_SNAPSHOT_DIR}" 2>/dev/null -enable2d="true" # default setting for accelerated 2D grapics (OS dependent) -vram="128" # set default graphics ram -snapshotuuid="34f617be-192a-46b3-a8ae-bce1029e093f" # snapshot UUID is static - -# link to image, determine extension (type) -imgfmt=$(echo ${SRC_IMG_ABSOLUTE##*.} | tr '[a-z]' '[A-Z]') -if [ -n "$VM_DISKFILE_RW" ]; then - ln -sf "${VM_DISKFILE_RW}" "${VBOX_HDD_LINK}" -else - ln -sf "${VM_DISKFILE_RO}" "${VBOX_HDD_LINK}" - # image is RO, we only support VDI? - if [ "$imgfmt" != "VDI" ]; then - writelog "Image is not VDI, cannot create snapshot.." - error_log "Die gewählte VM nutzt VBox, hat aber kein VDI image (sondern '$imgfmt'), kann VM nicht starten." - cleanexit 1 - fi -fi - - -# Setting some default variables -SHARED_FOLDERS="TRUE" -enablevt="true" - -# set some base configuration depending on the guest operating system -case "${VM_OS_TYPE}" in - Windows31) - VM_MEM="32" - vram="16" - CPU_CORES=1 - enablevt="false" - SHARED_FOLDERS="FALSE" - ;; - WindowsNT) - VM_MEM="4096" - vram="16" - CPU_CORES=4 - enablevt="false" - SHARED_FOLDERS="FALSE" - ;; - Windows95) - VM_MEM="128" - vram="32" - CPU_CORES=1 - enablevt="false" - SHARED_FOLDERS="FALSE" - ;; - Windows98) - VM_MEM="256" - vram="64" - CPU_CORES=1 - SHARED_FOLDERS="FALSE" - ;; - WindowsMe) - VM_MEM="256" - vram="64" - CPU_CORES=1 - SHARED_FOLDERS="FALSE" - ;; - WindowsXP) - ;; - WindowsVista) - ;; - Windows7) - ;; - Windows8) - ;; - OS2eCS) - VM_MEM="256" - CPU_CORES=1 - enable2d="false" - ;; - MacOS) - enable2d="false" - ;; - Linux*) - ;; - *) - VM_OS_TYPE="Other" - enable2d="false" - ;; -esac - -if [ "$HW_KVM" != "ENABLED" ]; then - enablevt="false" - CPU_CORES=1 # check for VT, if not available only 1 cpu supported -fi - -writelog "Directories:" -writelog "\tConfig dir:\t\t$VBOX_ROOT" -writelog "\tMachines dir:\t\t$VBOX_MACHINES_DIR" -writelog "\tMachine config:\t\t$VBOX_MACHINE_CONFIG" - -################################################################################ -### Hardware checks -################################################################################ - -# remove ':' from MAC addr for vbox and generate a VDE (virtual device ethernet) -# MAC addr from the first one (put in prefix 00DE) -VM_MAC_ADDR=$(echo ${VM_MAC_ADDR} | sed 's/://g') -VM_VDE_MAC_ADDR=$(echo ${VM_MAC_ADDR} | sed 's/^..../00DE/g') - -machineuuid="00000000-0000-0000-0000-${VM_MAC_ADDR}" # machine UUID, MAC addr part of it -machineuuid=$(echo ${machineuuid} | tr "[A-Z]" "[a-z]") # cosmetical, since UUID in lower case - -# get UUID of VBox image -diskuuid=$(VBoxManage -q showvdiinfo ${VBOX_HDD_LINK} \ - | grep UUID | grep -v "Parent UUID" | awk '{print $2}' \ - | grep -v use ) # nec. for VBox >= 4 - - -if [ -n "$VM_DISKFILE_RW" ]; then - # Image is already RW - easy - imgtype="Normal" - imageuuid=${diskuuid} -else - # use temp disk as snapshot to get CoW - imgtype="Immutable" # make disk immutable - imageuuid=${snapshotuuid} - < "${VMCHOOSERVBOX}/empty-diff.vdi.gz" gunzip > "${VBOX_SNAPSHOT_DIR}/{${snapshotuuid}}.vdi" - # patch the disk file uuid into the snapshot vdi file: - # We read from offset 424 in the source HDD and write to offset 392 in out prepared - # CoW container. 16 bytes will be copied, which is the binary UUID - # TODO: This requires the image to be a vdi/vdh; Afaik, vbox supports vmdk, - # so this code would break in that case. Can we use the diskuuid we got via - # VBoxManage, convert to binary, and patch it - dd if=${VBOX_HDD_LINK} of="${VBOX_SNAPSHOT_DIR}/{${snapshotuuid}}.vdi" seek=424 \ - skip=392 bs=16 count=1 conv=notrunc -fi - -# translate network kinds (nat, bridged, host-only) -# TODO: Server should prepare this in returned xml -case "${network_kind}" in - bridge*) - network_kind='HostOnlyInterface name="vboxnet0"' - ;; - host*) - network_kind='HostOnlyInterface name="vboxnet2"' - ;; - *) - network_kind='HostOnlyInterface name="vboxnet1"' -esac - -boot="HardDisk" - -writelog "\tSnapshots dir:\t\t$VBOX_SNAPSHOT_DIR" -writelog "Diskimage:" -writelog "\tDisk file:\t\t$VBOX_HDD_LINK" -writelog "\tDisk type:\t\t$imgtype" -writelog "\tVMostype:\t\t$VM_OS_TYPE" -writelog "\tMachine UUID:\t\t$machineuuid" -writelog "\tDisk UUID:\t\t$diskuuid" -writelog "Virtual Hardware:" -writelog "\tCPU cores:\t\t${CPU_CORES}\c" -writelog "" -[ "$HW_KVM" = "ENABLED" ] && writelog " (VT enabled CPU)" -writelog "\tGuest RAM:\t\t${VM_MEM} MB" -# echo nur wenn HOST_MEM_REMAINING gesetzt -[ -n "${HOST_MEM_REMAINING}" ] && writelog "\tHost RAM:\t\t${HOST_MEM_REMAINING} MB" -writelog "\tMAC address:\t\t$VM_MAC_ADDR" -writelog "\tNetwork card:\t\t${vb_network_card}" -writelog "\tNetwork kind:\t\t${network_kind}" -writelog "\tBooting from:\t\t${boot}\c" -writelog "" -writelog "\tCD-ROM1:\t\t${CDROM0}" -#writelog "\tCD-ROM2:\t\t${CDROM1}" -writelog "\tFloppy_A:\t\t${floppy0}" -writelog "\tFloppy_B:\t\t${floppy1}" -# defined in run-virt.sh and run-vmgrid.sh -writelog "\tShared Folders '${sharename}':\t${sharepath}" - -################################################################################ -### Pepare and configure virtual machine and disk image -################################################################################ - -# create Virtualbox.xml - -# Shares given? -if [ "x$SHARED_FOLDERS" != "xFALSE" ]; then - sharelist="<SharedFolders> - <SharedFolder name=\"${homesharename}\" hostPath=\"${homesharepath}\" writable=\"true\"/> - <SharedFolder name=\"${commonsharename}\" hostPath=\"${commonsharepath}\" writable=\"true\"/> - </SharedFolders>" -else - sharelist='' -fi - -source "${VMCHOOSERVBOX}/virtualbox.include" # create Virtualbox.xml - -# remove snapshot disk when using rw images -if [ "${imgtype}" != "Immutable" ]; then - sed -i "/${snapshotuuid}/d" "${VBOX_ROOT}/VirtualBox.xml" -fi - -# TODO: add rawdisk if requested -#"raw.vmdk" format="VMDK" type="Writethrough"/> - -source "${VMCHOOSERVBOX}/machine.include" # create machine.xml - -# remove CD-ROM if not available -if [ "${CDROM0}" != "TRUE" ]; then - sed -i "/HostDrive/d" "${VBOX_MACHINE_CONFIG}" - sed -i '/AttachedDevice.*type="DVD"/d' "${VBOX_MACHINE_CONFIG}" - sed -i "/<!-- PLEASE DO NOT REMOVE THIS COMMENT (CD)!!! -->/d" "${VBOX_MACHINE_CONFIG}" -fi - -################################################################################ -### Set env for vmchooser-run_virt -################################################################################ - -# wait for a certain command to settle -# get the PID of the right process -# kill PID, seems to work -VBMANPID=$(pstree -p | grep VBoxXPCOMIPCD | grep -ivE "VirtualBox|VBoxHeadless"\ - | sed -e "s/.*VBoxXPCOMIPCD(\(.*\)).*/\1/") -for i in $(echo ${VBMANPID}); do - kill -9 ${VBMANPID} >/dev/null 2>&1 -done - -# set the variables appropriately (several interfaces with different names) -VIRTCMD=$(which VirtualBox 2>/dev/null) -VIRTCMDOPTS="--startvm ${machineuuid} --start-running --fullscreen" - -# set headless mode (-v off to disable vrdp) -VIRTCMDHL=$(which VBoxHeadless 2>/dev/null) -VIRTCMDOPTSHL="-s ${machineuuid}" - |