# run-virt.include
# -----------------------------------------------------------------------------
# Copyright (c) 2009..2012 - RZ Uni Freiburg
# Copyright (c) 2009..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.include
# - component for vmware/player of the vmchooser plugin run-virt.sh
################################################################################
# configuration writer functions
################################################################################
runvmwareconfheader ()
{
echo "# This configuration file was generated by $0" >${conffile}
# check for the ostype
case "${vmostype}" in
win31*)
mem="32"
cpu_cores="1"
sound="sb16"
shfolders="FALSE"
;;
win95*)
mem="92"
cpu_cores="1"
shfolders="FALSE"
;;
win98*|winme*)
mem="256"
cpu_cores="1"
shfolders="FALSE"
;;
winxp*|windowsxp*)
shfolders="TRUE"
;;
winvista*|windowsvista*)
shfolders="TRUE"
;;
windows7*)
shfolders="TRUE"
;;
windows8*)
shfolders="TRUE"
;;
linux*|*ubuntu*|*suse*|debian*|*sci*)
vmostype="linux"
shfolders="TRUE"
;;
macos*)
cpu_cores="1"
vmostype="other"
shfolders="FALSE"
;;
beos*)
cpu_cores="1"
vmostype="other"
shfolders="FALSE"
;;
*)
vmostype="other"
shfolders="FALSE"
;;
esac
case "$vmversion" in
*)
svga_autodetect="TRUE"
numvcpus="1"
echo ".encoding = \"UTF-8\"
# version specific stuff - all versions
config.version = \"8\"" >>${conffile}
;;
esac
case "$vmversion" in
2.*|3.*|4.*|6.*|7.*|8.*|9.*)
[ ${shfolders} == FALSE ] || echo "
# version specific stuff - ver. 2.*|3.*|6.*|7.*|8.*|9.*
sharedFolder.option = \"alwaysEnabled\"" >>${conffile}
;;
esac
case "$vmversion" in
2.5|3.*|4.*|6.5|7.*|8.*)
if [ "${cpu_cores}" -ge "2" 2>/dev/null ]; then
numvcpus="2"
fi
if [ "${mem}" -ge "8000" 2>/dev/null ]; then
mem=8000
fi
cap3d="TRUE" # helper var for loging output
echo "
# version specific stuff - ver. 2.5|3.*|6.5|7.*
ehci.present = \"TRUE\"
mks.enable3d = \"${enable3d}\"" >>${conffile}
;;
esac
case "$vmversion" in
3.*|4.*|7.*|8.*|9.*)
numvcpus="${cpu_cores}"
if [ "${cpu_cores}" -ge "4" 2>/dev/null ]; then
numvcpus="4"
fi
# svga_autodetect="FALSE" # if defined manual, see below
echo "
# version specific stuff - ver. 3.*|7.*
cpuid.coresPerSocket = \"${cpu_cores}\"
maxvcpus = \"4\"
monitor.virtual_mmu = \"automatic\"
monitor.virtual_exec = \"automatic\"
floppy1.clientDevice = \"FALSE\"
floppy1.readonly = \"TRUE\"" >>${conffile}
;;
esac
echo "
# id
virtualHW.version = \"${hwver}\"
displayName = \"${displayname}\"
guestOS = \"${vmostype}\"
# CPU/MEM
numvcpus = \"${numvcpus}\"
memsize = \"${mem}\"
MemAllowAutoScaleDown = \"FALSE\"
MemTrimRate = \"-1\"
# ide-disks
ide0:0.present = \"${ide}\"
ide0:0.fileName = \"${diskfile}\"
ide0:0.mode = \"independent-nonpersistent\"
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 = \"${diskfile}\"
scsi0.virtualDev = \"${hddrv}\"
scsi0:0.mode = \"independent-nonpersistent\"
# floppies
floppy0.present = \"${floppy0}\"
floppy0.startConnected = \"FALSE\"
floppy0.autodetect = \"TRUE\"
floppy0.fileName = \"auto detect\"
# we need floppy b: for our windows client configuration
floppy1.present = \"${floppy1}\"
floppy1.startConnected = \"TRUE\"
floppy1.fileType = \"file\"
floppy1.fileName = \"${floppy1name}\"
# nics
ethernet0.present = \"TRUE\"
ethernet0.addressType = \"static\"
${network_virtualDev}
ethernet0.connectionType = \"${network_kind}\"
#ethernet1.connectionType = \"custom\"
#ethernet1.vnet = \"/dev/vmnet2\"
ethernet0.address = \"00:50:56:${VM_ID}:${machostpart}\"
ethernet0.wakeOnPcktRcv = \"FALSE\"
# sound
sound.present = \"TRUE\"
sound.fileName = \"-1\"
sound.autodetect = \"TRUE\"
sound.virtualdev = \"${sound}\"
# svga
svga.autodetect = \"${svga_autodetect}\"
# 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"
# shared folders
sharedFolder0.present = \"${shfolders}\"
sharedFolder0.enabled = \"${shfolders}\"
sharedFolder0.expiration = \"never\"
sharedFolder0.guestName = \"${sharename}\"
sharedFolder0.hostPath = \"${sharepath}\"
sharedFolder0.readAccess = \"TRUE\"
sharedFolder0.writeAccess = \"TRUE\"
sharedFolder.maxNum = \"1\"
# dirs/configs
tmpDirectory = \"${redodir}\"
redoLogDir = \"${redodir}\"
mainMem.useNamedFile = \"TRUE\"
snapshot.disabled = \"TRUE\"
tools.syncTime = \"TRUE\"
isolation.tools.hgfs.disable = \"FALSE\"
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}" >>${conffile}
# set the appropriate permissions for the vmware config file
chmod u+rwx ${conffile} >/dev/null 2>&1
}
preferencesheader ()
{
echo ".encoding = \"UTF-8\"
# This configuration file was generated by $0
# updates/tips
webUpdate.enabled = \"FALSE\"
pref.downloadPermission = \"deny\"
pref.vmplayer.downloadPermission = \"deny\"
pref.vmplayer.webUpdateOnStartup = \"FALSE\"
pref.tip.startup = \"FALSE\"
hints.hideAll = \"TRUE\"
hint.vmui.showAllUSBDevs = \"FALSE\"
# configs
prefvmx.defaultVMPath = \"${vmhome}\"
prefvmx.mru.config = \"${conffile}:\"
# hot keys
pref.hotkey.control = \"true\"
pref.hotkey.alt = \"true\"
pref.hotkey.shift = \"true\"
pref.hotkey.gui = \"true\"
gui.restricted = \"true\"
# fullscreen/mouse/keyboard
pref.fullscreen.toolbarPixels = \"0\"
pref.vmplayer.fullscreen.autohide = \"TRUE\"
pref.grabOnMouseClick = \"TRUE\"
pref.grabOnKeyPress = \"FALSE\"
pref.motionGrab = \"TRUE\"
pref.motionUngrab = \"TRUE\"
pref.hideCursorOnUngrab = \"TRUE\"
pref.autoFit = \"TRUE\"
pref.autoFitFullScreen = \"fitGuestToHost\"
pref.vmplayer.exit.vmAction = \"poweroff\"
pref.vmplayer.confirmOnExit = \"TRUE\"
# shared folders
pref.enableAllSharedFolders = \"TRUE\"
# eula" >${vmhome}/preferences
# different eula parameters from Workstation 9+
case "$vmversion" in
3.*|4.*|7.*|8.*)
echo "
pref.eula.size = \"2\"
pref.eula.0.appName = \"VMware Player\"
pref.eula.0.buildNumber = \"${vmbuild}\"
pref.eula.1.appName = \"VMware Workstation\"
pref.eula.1.buildNumber = \"${vmbuild}\"" >>${vmhome}/preferences
;;
9.*)
# code
echo "
pref.eula.count = \"2\"
pref.eula0.product = \"VMware Player\"
pref.eula0.build = \"${vmbuild}\"
pref.eula1.product = \"VMware Workstation\"
pref.eula1.build = \"${vmbuild}\"" >>${vmhome}/preferences
;;
esac
}
# declaration of default variables
################################################################################
# VM-ID static (0D), remove if changed to 00
VM_ID="0D"
# should be dynamic
if [ "x$(which bc)" != "x" ]; then
VM_ID=$(echo "obase=16; $$" | bc)
VM_ID=$(expr substr $VM_ID $(expr ${#VM_ID} - 1) 2)
fi
# temporary disk space for logs, etc...
redodir=/tmp/vmware/${USER}.$$
# dir for configs and vmem file
confdir=/tmp/vmware/${USER}.$$
# configfile
conffile="${confdir}/run-vmware.conf"
# diskfile
diskfile=${vmpath}
# users vmware config folder
vmhome="${HOME}/.vmware"
# get several version infos for vmware/player
. ${OPENSLX_DEFAULT_CONFDIR}/plugins/vmware/vmware.conf
vmbuild=$buildversion
vmversion=$version
# VMware start options
# "-X": start in fullscreen
vmopt="-X"
# hardware checks
################################################################################
# use different network card (default e1000, vlance, vmxnet)
if [ -n "${network_card}" ]; then
network_virtualDev="ethernet0.virtualDev = \"${network_card}\""
else
network_virtualDev='# using default virtualDev for ethernet0'
fi
# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio)
sound="es1371"
# check for 3D configuration setting
case "${enable3d}" in
*true*|*yes*)
enable3d="TRUE"
;;
*)
enable3d="FALSE"
;;
esac
# serial/parallel port defined (e.g. "ttyS0, lp0" or "autodetect")
case "$serial" in
tty*)
serialdev="serial0.filename = \"/dev/${serial}\""
serial="TRUE"
;;
auto*)
serialdev="serial0.autodetect = \"TRUE\""
serial="TRUE"
;;
*)
serialdev="# no serial port configured"
serial="FALSE"
;;
esac
case "$parallel" in
lp*|parport*)
paraldev="parallel0.filename = \"/dev/${parallel}\""
paralbidi="TRUE"
parallel="TRUE"
;;
auto*)
paraldev="parallel0.autodetect = \"TRUE\""
paralbidi="TRUE"
parallel="TRUE"
;;
*)
paraldev="# no parallel port configured"
paralbidi="FALSE"
parallel="FALSE"
;;
esac
# adjust memory available for vmware guests
#if [ -n "${forcemem}" ]; then
# mem="${forcemem}"
#else
# case "$vmversion" in
# 2.*|6.*)
# permem=30
# ;;
# 3.*|7.*)
# permem=25
# ;;
# esac
# if [ "${totalmem}" -ge "2500" ]; then
# permem=40
# fi
# # check if /tmp is on harddisk
# if grep -qe "/dev/.* /tmp " /proc/mounts ; then
# permem=60
# id44="1"
# # Hack, if more than 2,5G RAM use 40% of Ram and write vmem into Ram as well
# # (40% vmware | 40% confdir(vmem...) | 20% host
# # VMplayer 2+ issue
# if [ "${totalmem}" -ge "2500" ]; then
# permem=40
# confdir=/dev/shm/vmware/$USER
# conffile=${confdir}/run-vmware.conf
# mkdir -p /dev/shm/vmware/$USER
# fi
# fi
# mem=$(expr ${totalmem} / 100 \* ${permem} / 4 \* 4)
# if [ "${id44}" = "1" ]; then
# hostmem=$(expr ${totalmem} - ${mem})
# else
# hostmem=$(expr ${totalmem} - ${mem} - ${mem})
# fi
#fi
# check if ide/scsi and hwver of image
# read only the first 30 lines to be shure
imghead=$(head -30 ${diskfile})
hddrv=$(echo "${imghead}" | grep -m1 -ia "ddb.adapterType" |\
awk -F '"' '{print $2}')
hwver=$(echo "${imghead}" | grep -m1 -ia "ddb.virtualHWVersion" |\
awk -F '"' '{print $2}')
case "${hddrv}" in
ide)
ide="TRUE"
scsi="FALSE"
;;
lsilogic|buslogic)
ide="FALSE"
scsi="TRUE"
;;
esac
# write configuration files
################################################################################
# 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
preferencesheader
# create VMware startup file
runvmwareconfheader
# link to conffile if 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
sync
# own nvram. We need it for floppy drive b, default nvram has just drive a
# TODO: optimize, currently kinda inefficient, too much copys, but we
# don't know which one is installed...
for i in /opt/openslx/plugin-repo/vmware/*; do
cp ${i}/nvram ${confdir}/nvram 2>/dev/null
done
# logging and stdout
################################################################################
# log script information
writelog "# File created by $0 (VMversion ${vmversion})\n# on $(date)\n"
writelog "Starting with non-persistent 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\t00:50:56:${VM_ID}:${machostpart}"
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
# 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 ""
# finally set env for run-virt.sh
################################################################################
# configure and start samba service to provide user's home directory
if [ -f /usr/sbin/smbd ] ; then
sudo /opt/openslx/rootfs/bin/sed -i /etc/vmware/smb.conf -e "s,USER,$USER,"
sudo /usr/sbin/nmbd -s /etc/vmware/smb.conf
sudo /usr/sbin/smbd -s /etc/vmware/smb.conf
fi
# using the modified version of the wrapper script
VIRTCMD="${OPENSLX_DEFAULT_BINDIR}/vmplayer"
VIRTCMDOPTS="${vmopt} ${conffile}"
RMDIRS="${redodir} ${conffile}"