summaryrefslogblamecommitdiffstats
path: root/core/modules/qemukvm/data/opt/openslx/vmchooser/plugins/qemukvm/run-virt.include
blob: e2a60f9cef810f80537c4699b5f1c7fe0668145d (plain) (tree)































                                                                                

                                                  













                                                                     

                                                                        
    
                                                                                 



                                                                       
                  
                       

                                                     

                                               






                                                     
                    











                                                     
                    



                                                       
                    






                                                         

                                                                           
















                                                                                
                                             





                                                  
                                                 







                                                     
                                                  
                              
                                                            
      
                                                                        


                


                                                                                           




                                              
                                         


                                                     


                                                                                  










































                                                                               
                   








                                                                      

                                                                     

                                
                                                                     

       
                                                  




                                                                               



                                                                                    

                                             
                                 
                                 

                                         




















                                                                                
# -----------------------------------------------------------------------------
# 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
################################################################################
# Define which features the VMware plugin supports
declare -rg PLUGIN_FEATURES="TODO"

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 ${IMG_BASENAME} | grep -iE "img|qcow|vmdk" >/dev/null 2>&1; then
  imgtype=$(echo ${IMG_BASENAME##*.} | tr "[a-z]" "[A-Z]")
else
  writelog "${IMG_BASENAME} is not a valid image type (img|qcow*|vmdk), exiting!"
  exit 1
fi

# set the emulator/virtualization options for various operating systems
SOUND_DEV="es1370"
case "${VM_OS_TYPE}" in
  beos*)
    VIRTCMDOPTS="qemu-system-i386 -machine accel=tcg"
    SOUND_DEV="sb16"
    if [ "${HOST_MEM_TOTAL}" -ge "1000" ]; then
      forcemem=512
    else
      forcemem=256
    fi
  ;;
  win3*|win*3*|Win*3*)
    VIRTCMDOPTS="qemu-system-i386 -machine accel=tcg"
    SOUND_DEV="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_DEV="ac97"
    forcemem=384
  ;;
	winxp*64|windowsxp*64)
    VIRTCMDOPTS="qemu-system-x86_64 -machine accel=kvm"
    SOUND_DEV="ac97"
  ;;
esac

# hot keys ALT+CTRL+SHIFT (does not work properly!?)
#VIRTCMDOPTS="${VIRTCMDOPTS} -alt-grab"

# display name, remove blanks because of cmdline problems
VM_DISPLAYNAME=$(echo ${VM_DISPLAYNAME} | sed -e "s, ,-,g;s,(,[,g;s,),],g")
VIRTCMDOPTS="${VIRTCMDOPTS} -name ${VM_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 [ "${HOST_MEM_TOTAL}" -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 [ "${HOST_MEM_TOTAL}" -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 ${HOST_MEM_TOTAL} / 100 \* ${permem})
  if [ "${id44}" = "1" ]; then
    HOST_MEM_REMAINING=$(expr ${HOST_MEM_TOTAL} - ${VM_MEM})
  else
    HOST_MEM_REMAINING=$(expr ${HOST_MEM_TOTAL} - ${VM_MEM} - ${VM_MEM})
  fi
  # static first
  permem=50
  mem=$(expr ${HOST_MEM_TOTAL} / 100 \* ${permem})
  if [ "${VM_MEM}" -lt "256" ] || [ "${HOST_MEM_REMAINING}" -lt "256" ]; then
    writelog "Memory out of range: ${VM_MEM} MB (guest) / ${HOST_MEM_REMAINING} MB (host)!"
    writelog "Min. 256 MB for host and guest!"
    exit 1
  fi
fi

VIRTCMDOPTS="${VIRTCMDOPTS} -m ${VM_MEM}"

# network adaptor alternatives: rtl8139, pcnet, e1000
network_card=${network_card:=pcnet}
# TODO handle new way of generating MAC addr with prefix/suffix
# KVM MAC prefix should be 52:54:00
VIRTCMDOPTS="${VIRTCMDOPTS} -net nic,macaddr=${VM_MAC_ADDR},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

# TODO externalize!
# 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 ${SLX_FLOPPY_IMG}"

# add optical drive if available
[ -n "${CDROM_0}" ] && VIRTCMDOPTS="${VIRTCMDOPTS} -cdrom ${CDROM_0}"

# audio
VIRTCMDOPTS="${VIRTCMDOPTS} -soundhw ${SOUND_DEV}"

# serial
[ "x${serial}" == "xttyS0" ] && VIRTCMDOPTS="${VIRTCMDOPTS} -serial /dev/ttyS0"

writelog "Virtual Hardware:"
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${network_card}"
writelog "\tNetwork kind:\t\t${network_kind}"
writelog "\tCD-ROM1:\t${CDROM_0}"
#writelog "\tCD-ROM2:\t${cdrom1}"
writelog "\tFloppy_A:\t${FLOPPY_0}"
writelog "\tFloppy_B:\t${SLX_FLOPPY_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}"