diff options
author | Sebastian | 2016-04-25 12:01:08 +0200 |
---|---|---|
committer | Sebastian | 2016-04-25 12:01:08 +0200 |
commit | 5acda3eaeabae9045609539303a8c12c4ce401f1 (patch) | |
tree | 7e71975f8570b05aafe2ea6ec0e242a8912387bb /core/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include | |
parent | initial commit (diff) | |
download | mltk-5acda3eaeabae9045609539303a8c12c4ce401f1.tar.gz mltk-5acda3eaeabae9045609539303a8c12c4ce401f1.tar.xz mltk-5acda3eaeabae9045609539303a8c12c4ce401f1.zip |
merge with latest dev version
Diffstat (limited to 'core/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include')
-rw-r--r-- | core/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/core/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include b/core/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include new file mode 100644 index 00000000..29360159 --- /dev/null +++ b/core/modules/qemukvm/data/opt/openslx/vmchooser/qemukvm/run-virt.include @@ -0,0 +1,245 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2009..2013 - OpenSLX GmbH +# +# This program/file 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 feedback to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org +# ----------------------------------------------------------------------------- +# run-virt.include +# - Include script for running the QEMU/Linux KVM virtual machine on an +# OpenSLX client via the run-virt.sh or run-vmgrid.sh +################################################################################ + +################################################################################ +### Script functions +################################################################################ + +setup_if () +{ + kvmdev=$1 + hostdev=$2 + sudo /opt/openslx/rootfs/sbin/tunctl -t ${kvmdev} -u ${USER} >/dev/null 2>&1 + sudo /opt/openslx/rootfs/bin/ip link set dev ${kvmdev} up + sudo /opt/openslx/rootfs/usr/sbin/brctl addif ${hostdev} ${kvmdev} +} + +################################################################################ +### Declaration of default variables +################################################################################ + +VMCHOOSERQK="/opt/openslx/vmchooser/${self}" +# create TMPDIR for all users +mkdir -m 1777 /tmp/${self} 2>/dev/null +# TMPDIR +QKTMPDIR="/tmp/${self}/${USER}/${VM_ID}" +# define dirs and files which can be removed after exit, be carefull! +RMDIRS="${QKTMPDIR}" +rm -rf ${RMDIRS} 2>/dev/null +mkdir -m 1777 -p ${QKTMPDIR} 2>/dev/null +# vmpath is the path to the vm, here an image (img|qcow*|vmdk) +diskfile=${vmpath} + +# check the file type +if echo ${imgname} | grep -iE "img|qcow|vmdk" >/dev/null 2>&1; then + imgtype=$(echo ${imgname##*.} | tr "[a-z]" "[A-Z]") +else + writelog "${imgname} is not a valid image type (img|qcow*|vmdk), exiting!" + exit 1 +fi + +# set the emulator/virtualization options for various operating systems +sound="es1370" +case "${vmostype}" in + beos*) + VIRTCMDOPTS="qemu-system-i386 -machine accel=tcg" + sound="sb16" + if [ "${totalmem}" -ge "1000" ]; then + forcemem=512 + else + forcemem=256 + fi + ;; + win3*|win*3*|Win*3*) + VIRTCMDOPTS="qemu-system-i386 -machine accel=tcg" + sound="sb16" + forcemem=32 + ;; + win95*|Win*95) + VIRTCMDOPTS="qemu-system-i386 -machine accel=tcg" + forcemem=96 + ;; + win98) + VIRTCMDOPTS="qemu-system-i386 -machine accel=tcg" + forcemem=256 + ;; + winme*|windowsme*) + VIRTCMDOPTS="qemu-system-i386 -machine accel=tcg" + sound="ac97" + forcemem=384 + ;; + winxp*64|windowsxp*64) + VIRTCMDOPTS="qemu-system-x86_64 -machine accel=kvm" + sound="ac97" + ;; +esac + +# hot keys ALT+CTRL+SHIFT (does not work properly!?) +#VIRTCMDOPTS="${VIRTCMDOPTS} -alt-grab" + +# display name, remove blanks because of cmdline problems +displayname=$(echo ${displayname} | sed -e "s, ,-,g;s,(,[,g;s,),],g") +VIRTCMDOPTS="${VIRTCMDOPTS} -name ${displayname}" + +writelog "Directories:" +writelog "\tTMPDIR:\t\t\t$QKTMPDIR" +writelog "Diskimage:" +writelog "\tDisk type:\t\t$imgtype" +writelog "\tDisk file:\t\t$diskfile" + +################################################################################ +### Hardware checks +################################################################################ + +# memory part equal to vmware plugin +# percentage of memory to use for virtualbox in standard case +if [ -n "${forcemem}" ]; then + mem="${forcemem}" +else + permem=30 + if [ "${totalmem}" -ge "1600" ]; then + permem=40 + fi +# # check if /tmp is on harddisk +# if grep -qe "/dev/.* /tmp " /proc/mounts ; then +# permem=60 +# id44="1" +# #if [ "${totalmem}" -ge "2500" ]; then +# #permem=40 +# #rmdir ${snapshotdir} +# #snapshotdirold=${snapshotdir} +# #snapshotdir=/dev/shm/${self}/${USER}/${VM_ID} +# #mkdir -p ${snapshotdir} +# #ln -sf ${snapshotdir} ${snapshotdirold} +# #fi +# fi + mem=$(expr ${totalmem} / 100 \* ${permem}) + if [ "${id44}" = "1" ]; then + memhost=$(expr ${totalmem} - ${mem}) + else + memhost=$(expr ${totalmem} - ${mem} - ${mem}) + fi + # static first + permem=50 + mem=$(expr ${totalmem} / 100 \* ${permem}) + if [ "${mem}" -lt "256" ] || [ "${memhost}" -lt "256" ]; then + writelog "Memory out of range: ${mem} MB (guest) / ${memhost} MB (host)!" + writelog "Min. 256 MB for host and guest!" + exit 1 + fi +fi + +VIRTCMDOPTS="${VIRTCMDOPTS} -m ${mem}" + +# network adaptor alternatives: rtl8139, pcnet, e1000 +network_card=${network_card:=pcnet} +VIRTCMDOPTS="${VIRTCMDOPTS} -net nic,macaddr=${macaddr},model=${network_card}" + +# define network kind and configure the interfaces +case "${network_kind}" in + bridge*) + VIRTCMDOPTS="${VIRTCMDOPTS} -net tap,ifname=kvmnet0${VM_ID}" + setup_if kvmnet0${VM_ID} br0 + POSTRUN="sudo /opt/openslx/rootfs/sbin/tunctl -d kvmnet0${VM_ID}" + ;; + nat) + VIRTCMDOPTS="${VIRTCMDOPTS} -net tap,ifname=kvmnet1${VM_ID}" + setup_if kvmnet1${VM_ID} nat1 + POSTRUN="sudo /opt/openslx/rootfs/sbin/tunctl -d kvmnet1${VM_ID}" + ;; + host*) + VIRTCMDOPTS="${VIRTCMDOPTS} -net tap,ifname=kvmnet2${VM_ID}" + setup_if kvmnet2${VM_ID} vsw2 + POSTRUN="sudo /opt/openslx/rootfs/sbin/tunctl -d kvmnet2${VM_ID}" + ;; + *) + network_kind="user" + VIRTCMDOPTS="${VIRTCMDOPTS} -net user" + ;; +esac + +# translate boot, use if set else set to HardDisk +if [ -n "${boot}" ]; then + case ${boot} in + n*) # usually support for a,c,d,n, stands for Floppy, HD, CD-ROM, Network + boot="n" + # TODO: does not work yet, can be removed if tap1 solution better + if [ "${network_kind}" = "user" ] && [ -n "${virtualbox_tftpdir}" ]; then + VIRTCMDOPTS="${VIRTCMDOPTS},tftp=${virtualbox_tftpdir}" + fi + ;; + # later maybe c|disk|hd*|sd*) for HD and d|cd*) for CD-ROM + *) + boot="c" + ;; + esac +else + boot="c" +fi + +# external GUI port +vncport="590${VM_ID}" + +# ide is expected default, test for the virtual disk image type should +# be done while creating the runscripts ... +ide="TRUE" +hddrv="ide" + +# special feature for real and virtual floppy disks +[ -n "${floppy_0}" ] && VIRTCMDOPTS="${VIRTCMDOPTS} -fda ${floppy_0}" +VIRTCMDOPTS="${VIRTCMDOPTS} -fdb /opt/openslx/vmchooser/data/loopimg/fd.img" + +# add optical drive if available +[ -n "${cdrom_0}" ] && VIRTCMDOPTS="${VIRTCMDOPTS} -cdrom ${cdrom_0}" + +# audio +VIRTCMDOPTS="${VIRTCMDOPTS} -soundhw ${sound}" + +# serial +[ "x${serial}" == "xttyS0" ] && VIRTCMDOPTS="${VIRTCMDOPTS} -serial /dev/ttyS0" + +writelog "Virtual Hardware:" +writelog "\tGuest RAM:\t\t${mem} MB" +# echo nur wenn memhost gesetzt +[ -n "${memhost}" ] && writelog "\tHost RAM:\t\t${memhost} MB" +writelog "\tMAC address:\t\t$macaddr" +writelog "\tNetwork card:\t\t${network_card}" +writelog "\tNetwork kind:\t\t${network_kind}" +writelog "\tCD-ROM1:\t${cdrom0}" +#writelog "\tCD-ROM2:\t${cdrom1}" +writelog "\tFloppy_A:\t${floppy_0}" +writelog "\tFloppy_B:\t/opt/openslx/vmchooser/data/loopimg/fd.img" +#writelog "\tShared Folders 'home':\t/home/${USER}" + +################################################################################ +### finally set env for run-virt.sh +################################################################################ + +# using snapshots +VIRTCMDOPTS="${VIRTCMDOPTS} -snapshot" + +# TODO: boot als var, -boot n, tftp... +VIRTCMDOPTS="${VIRTCMDOPTS} -boot c" + +# set headless mode +# define first, you do not want VIRTCMDOPTS from graphical start +VIRTCMDHL=${VIRTCMD} +VIRTCMDOPTSHL="${VIRTCMDOPTS} -nographic ${diskfile}" + +# graphical start +# vga std/cirrus/vmware? +#VIRTCMDOPTS="${VIRTCMDOPTS} -vga std -full-screen ${diskfile}" +VIRTCMDOPTS="${VIRTCMDOPTS} ${diskfile}" |