View previous topic :: View next topic |
Author |
Message |
tuxian l33t
Joined: 26 Jan 2004 Posts: 766 Location: Austria
|
Posted: Mon May 15, 2006 8:07 pm Post subject: vmware tools installieren |
|
|
Getestet mit VMWARE GSX Server 3.2 als Host-OS und Gentoo 2006.0 als Gast-OS.
1.) Vorbereitung:
Kernel-Quellen installieren:
mit uname -r die Version des laufenden Kernel herausfinden:
Code: | markus@laptop: pts/4: 53 files 552Mb -> uname -r
2.6.15-gentoo-r5 |
dann die gleiche Version der gentoo-sources installieren:
Code: | emerge =sys-kernel/gentoo-sources-2.6.15-r5 |
config übernehmen:
Code: |
cd /usr/src/linux
zcat /proc/config.gz > .config |
Quellen vorbereiten:
Code: | make oldconfig
make prepare |
Initscript-Verzeichnisse anlegen (können nach der Installation der vmware-tools wieder gelöscht werden!):
Code: |
mkdir /etc/init.d/rc0.d
mkdir /etc/init.d/rc1.d
mkdir /etc/init.d/rc2.d
mkdir /etc/init.d/rc3.d
mkdir /etc/init.d/rc4.d
mkdir /etc/init.d/rc5.d
mkdir /etc/init.d/rc6.d |
2.) Installation:
VM -> Install VMware Tools ....
danach wieder im Gast-OS:
Code: | mount /mnt/cdrom
cd /tmp
cp /mnt/cdrom/vmware-linux-tools.tar.gz .
tar xvfz vmware-linux-tools.tar.gz
cd vmware-tools-distrib |
Bei vmware-Workstation heißt die Datei VMWareTools-5.x-xxxxx.tar.gz!
Installer aufrufen:
Code: | ./vmware-install.pl |
Man kann immer ENTER drücken denn die default-Werte sollten in Ordnung sein.
Wenn ein Fehler beim Kompilieren des vmhgfs-Moduls auftritt dann ist das nicht so tragisch da dieses Modul nur zum Austausch von Daten zw. Host- und Gast-OS dient.
Man hat aber genügend Alternativen die wahrscheinlich sogar flexibler sind (smb, nfs, ...).
3.) Abschluss:
Code: | rc-update add vmware default |
Wenn das nicht funktioniert dann:
Code: | echo "/etc/init.d/vmware-tools start" >> /etc/conf.d/local.start
echo "/etc/init.d/vmware-tools stop" >> /etc/conf.d/local.stop |
Nun können wieder die zuvor angelegten Verzeichnisse gelöscht werden:
Code: |
rm -r /etc/init.d/rc0.d
rm -r /etc/init.d/rc1.d
rm -r /etc/init.d/rc2.d
rm -r /etc/init.d/rc3.d
rm -r /etc/init.d/rc4.d
rm -r /etc/init.d/rc5.d
rm -r /etc/init.d/rc6.d |
4.) Bekannte Probleme:
Ich musste die xorg-Konfigurationsdatei /etc/X11/xorg.conf nach der Installation der vmware-tools abändern da es zwar möglich war im Gast-OS die Maus zu bewegen aber ich konnte nichts anklicken.
Abhilfe:
in der /etc/X11/xorg.conf die Zeile mit
Code: | Option "Device" "/dev/ttyS0" |
auf
Code: | Option "Device" "/dev/input/mice" |
ändern und X neustarten!
Last edited by tuxian on Thu Aug 17, 2006 1:33 am; edited 3 times in total |
|
Back to top |
|
|
GenYetiToo Apprentice
Joined: 03 Feb 2004 Posts: 165 Location: Siegen, Germany
|
Posted: Fri Aug 11, 2006 4:33 pm Post subject: Re: vmware tools installieren |
|
|
tuxian wrote: |
Code: |
mkdir /etc/init.d/rc0.d
mkdir /etc/init.d/rc1.d
mkdir /etc/init.d/rc2.d
mkdir /etc/init.d/rc3.d
mkdir /etc/init.d/rc4.d
mkdir /etc/init.d/rc5.d
mkdir /etc/init.d/rc6.d |
|
Sollten die nicht idealerweise nach /etc/runlevels?
Dann klappt's nämlich auch mit dem "immer Enter drücken".
Code: | mount /mnt/cdrom
cd /tmp
cp /mnt/cdrom/vmware-linux-tools.tar.gz .
tar xvfz vmware-linux-tools.tar.gz
cd vmware-tools-contrib |
Bei VMWare-Workstation heisst das tar anders, aber das findet man ...
Allerdings heisst das Verzeichnis vmware-tools-distrib.
Quote: | 3.) Abschluss:
In der Datei /etc/init.d/local die fett gedruckten Zeile hinzufügen (zum Starten und zum Beenden der vmware-tools beim Booten bzw. Runterfahren):
|
Bei mir hat das mit einem einfachen 'rc-update add vmware-tools default' funktioniert.
M. _________________ Cats, cats everywhere ... |
|
Back to top |
|
|
tuxian l33t
Joined: 26 Jan 2004 Posts: 766 Location: Austria
|
Posted: Sat Aug 12, 2006 9:49 am Post subject: Re: vmware tools installieren |
|
|
GenYetiToo wrote: | tuxian wrote: |
Code: |
mkdir /etc/init.d/rc0.d
mkdir /etc/init.d/rc1.d
mkdir /etc/init.d/rc2.d
mkdir /etc/init.d/rc3.d
mkdir /etc/init.d/rc4.d
mkdir /etc/init.d/rc5.d
mkdir /etc/init.d/rc6.d |
|
Sollten die nicht idealerweise nach /etc/runlevels?
Dann klappt's nämlich auch mit dem "immer Enter drücken". |
In /etc/runlevels gibt es aber genauso wenig die rcx.d-Verzeichnisse.
Das Setup braucht aber diese Verzeichnisse.
Man kann die Verzeichnisse ja nach dem Setup wieder löschen.
GenYetiToo wrote: | Code: | mount /mnt/cdrom
cd /tmp
cp /mnt/cdrom/vmware-linux-tools.tar.gz .
tar xvfz vmware-linux-tools.tar.gz
cd vmware-tools-contrib |
Bei VMWare-Workstation heisst das tar anders, aber das findet man ...
Allerdings heisst das Verzeichnis vmware-tools-distrib. |
Danke, habe ich ausgebessert. Wie heißt das Paket denn unter VMWare-Workstation weil dann schreib ich den Namen dazu?
GenYetiToo wrote: |
Quote: | 3.) Abschluss:
In der Datei /etc/init.d/local die fett gedruckten Zeile hinzufügen (zum Starten und zum Beenden der vmware-tools beim Booten bzw. Runterfahren):
|
Bei mir hat das mit einem einfachen 'rc-update add vmware-tools default' funktioniert.
M. |
Okay ich schreibe das dazu.
Ich hatte mal das Problem dass das so nicht funktioniert hatte weil das Script anscheinend nicht Gentoo-konform war.
Wenn es nicht funktioniert kann man es immer noch in die /etc/init.d/local, besser aber in /etc/conf.d/local.start und /etc/conf.d/local.stop schreiben.
EDIT: Bei mir klappt es mit "rc-update add vmware-tools default" nicht.
Wird nicht gestartet: Meldung "Usage: rc {start|stop|restart|status}".
Kann du mal ein Script posten (/etc/ini.d/vmware-tools), vielleicht ist das bei dir Gentoo-konform?
Möglichweise sind die vmware-tools die in vmware-Workstation enthalten sind an Gentoo angepasst.
Danke für deine Hinweise. |
|
Back to top |
|
|
GenYetiToo Apprentice
Joined: 03 Feb 2004 Posts: 165 Location: Siegen, Germany
|
Posted: Wed Aug 16, 2006 9:19 pm Post subject: Re: vmware tools installieren |
|
|
Quote: | Quote: | Sollten die nicht idealerweise nach /etc/runlevels?
Dann klappt's nämlich auch mit dem "immer Enter drücken". |
In /etc/runlevels gibt es aber genauso wenig die rcx.d-Verzeichnisse. |
Schon, aber das Setup-Skript (zumindest meins, also das von VMWare-Workstation) schlägt /etc/runlevels vor, und wenn man einfach immer nur Enter drücken will ...
Quote: | Danke, habe ich ausgebessert. Wie heißt das Paket denn unter VMWare-Workstation weil dann schreib ich den Namen dazu? |
Bei mir heisst's VMWareTools-5.5.1-19175.tar.gz
Quote: | EDIT: Bei mir klappt es mit "rc-update add vmware-tools default" nicht. |
Hab's grad nochmal probiert, es funktioniert, allerdings weiss ich nicht, inwieweit alle möglichen Abhängigkeiten berücksichtigt werden, es ist immer noch kein Gentoo-konformes Skript.
Quote: | Kann du mal ein Script posten (/etc/ini.d/vmware-tools), vielleicht ist das bei dir Gentoo-konform? |
Hier das Skript, wie es bei mir unverändert läuft (seltsamerweise wird es genau an der richtigen Stelle, nämlich als allerletztes gestartet, allerdings wird es beim runterfahren nicht gestoppt, aber das ist IMO Wurscht...):
Code: | #!/bin/sh
#
# Copyright (C) 1998-2002 VMware, Inc. All Rights Reserved.
#
# This script manages the services needed to run VMware software
# Basic support for IRIX style chkconfig
# chkconfig: 235 19 08
# description: Manages the services needed to run VMware software
# Basic support for the Linux Standard Base Specification 1.0.0 (to be used by
# insserv for example)
### BEGIN INIT INFO
# Provides: VMware_Tools
# Required-Start:
# Required-Stop: $network
# Default-Start: 2 3 5
# Default-Stop: 0 6
# Description: Manages the services needed to run VMware Tools
### END INIT INFO
# BEGINNING_OF_UTIL_DOT_SH
#!/bin/sh
# A few utility functions used by our shell scripts. These are patched in during
# make.
# They are a lot of small utility programs to create temporary files in a
# secure way, but none of them is standard. So I wrote this --hpreg
make_tmp_dir() {
local dirname="$1" # OUT
local prefix="$2" # IN
local tmp
local serial
local loop
tmp="${TMPDIR:-/tmp}"
# Don't overwrite existing user data
# -> Create a directory with a name that didn't exist before
#
# This may never succeed (if we are racing with a malicious process), but at
# least it is secure
serial=0
loop='yes'
while [ "$loop" = 'yes' ]; do
# Check the validity of the temporary directory. We do this in the loop
# because it can change over time
if [ ! -d "$tmp" ]; then
echo 'Error: "'"$tmp"'" is not a directory.'
echo
exit 1
fi
if [ ! -w "$tmp" -o ! -x "$tmp" ]; then
echo 'Error: "'"$tmp"'" should be writable and executable.'
echo
exit 1
fi
# Be secure
# -> Don't give write access to other users (so that they can not use this
# directory to launch a symlink attack)
if mkdir -m 0755 "$tmp"'/'"$prefix$serial" >/dev/null 2>&1; then
loop='no'
else
serial=$(($serial + 1))
if [ "$(($serial % 200))" = '0' ]; then
echo 'Warning: The "'"$tmp"'" directory may be under attack.'
echo
fi
fi
done
eval "$dirname"'="$tmp"'"'"'/'"'"'"$prefix$serial"'
}
# Check if the process associated to a pidfile is running.
# Return 0 if the pidfile exists and the process is running, 1 otherwise
vmware_check_pidfile() {
local pidfile="$1" # IN
local pid
pid=`cat "$pidfile" 2>/dev/null`
if [ "$pid" = '' ]; then
# The file probably does not exist or is empty. Failure
return 1
fi
# Keep only the first number we find, because some Samba pid files are really
# trashy: they end with NUL characters
# There is no double quote around $pid on purpose
set -- $pid
pid="$1"
[ -d /proc/"$pid" ]
}
# Note:
# . Each daemon must be started from its own directory to avoid busy devices
# . Each PID file doesn't need to be added to the installer database, because
# it is going to be automatically removed when it becomes stale (after a
# reboot). It must go directly under /var/run, or some distributions
# (RedHat 6.0) won't clean it
#
# Terminate a process synchronously
vmware_synchrone_kill() {
local pid="$1" # IN
local signal="$2" # IN
local second
kill -"$signal" "$pid"
# Wait a bit to see if the dirty job has really been done
for second in 0 1 2 3 4 5 6 7 8 9 10; do
if [ ! -d /proc/"$pid" ]; then
# Success
return 0
fi
sleep 1
done
# Timeout
return 1
}
# Kill the process associated to a pidfile
vmware_stop_pidfile() {
local pidfile="$1" # IN
local pid
pid=`cat "$pidfile" 2>/dev/null`
if [ "$pid" = '' ]; then
# The file probably does not exist or is empty. Success
return 0
fi
# Keep only the first number we find, because some Samba pid files are really
# trashy: they end with NUL characters
# There is no double quote around $pid on purpose
set -- $pid
pid="$1"
# First try a nice SIGTERM
if vmware_synchrone_kill "$pid" 15; then
return 0
fi
# Then send a strong SIGKILL
if vmware_synchrone_kill "$pid" 9; then
return 0
fi
return 1
}
# END_OF_UTIL_DOT_SH
vmware_etc_dir=/etc/vmware-tools
# Since this script is installed, our main database should be installed too and
# should contain the basic information
vmware_db="$vmware_etc_dir"/locations
if [ ! -r "$vmware_db" ]; then
echo 'Warning: Unable to find '"`vmware_product_name`""'"'s main database '"$vmware_db"'.'
echo
exit 1
fi
# BEGINNING_OF_DB_DOT_SH
#!/bin/sh
#
# Manage an installer database
#
# Add an answer to a database in memory
db_answer_add() {
local dbvar="$1" # IN/OUT
local id="$2" # IN
local value="$3" # IN
local answers
local i
eval "$dbvar"'_answer_'"$id"'="$value"'
eval 'answers="$'"$dbvar"'_answers"'
# There is no double quote around $answers on purpose
for i in $answers; do
if [ "$i" = "$id" ]; then
return
fi
done
answers="$answers"' '"$id"
eval "$dbvar"'_answers="$answers"'
}
# Remove an answer from a database in memory
db_answer_remove() {
local dbvar="$1" # IN/OUT
local id="$2" # IN
local new_answers
local answers
local i
eval 'unset '"$dbvar"'_answer_'"$id"
new_answers=''
eval 'answers="$'"$dbvar"'_answers"'
# There is no double quote around $answers on purpose
for i in $answers; do
if [ "$i" != "$id" ]; then
new_answers="$new_answers"' '"$i"
fi
done
eval "$dbvar"'_answers="$new_answers"'
}
# Load all answers from a database on stdin to memory (<dbvar>_answer_*
# variables)
db_load_from_stdin() {
local dbvar="$1" # OUT
eval "$dbvar"'_answers=""'
# read doesn't support -r on FreeBSD 3.x. For this reason, the following line
# is patched to remove the -r in case of FreeBSD tools build. So don't make
# changes to it. -- Jeremy Bar
while read -r action p1 p2; do
if [ "$action" = 'answer' ]; then
db_answer_add "$dbvar" "$p1" "$p2"
elif [ "$action" = 'remove_answer' ]; then
db_answer_remove "$dbvar" "$p1"
fi
done
}
# Load all answers from a database on disk to memory (<dbvar>_answer_*
# variables)
db_load() {
local dbvar="$1" # OUT
local dbfile="$2" # IN
db_load_from_stdin "$dbvar" < "$dbfile"
}
# Iterate through all answers in a database in memory, calling <func> with
# id/value pairs and the remaining arguments to this function
db_iterate() {
local dbvar="$1" # IN
local func="$2" # IN
shift 2
local answers
local i
local value
eval 'answers="$'"$dbvar"'_answers"'
# There is no double quote around $answers on purpose
for i in $answers; do
eval 'value="$'"$dbvar"'_answer_'"$i"'"'
"$func" "$i" "$value" "$@"
done
}
# If it exists in memory, remove an answer from a database (disk and memory)
db_remove_answer() {
local dbvar="$1" # IN/OUT
local dbfile="$2" # IN
local id="$3" # IN
local answers
local i
eval 'answers="$'"$dbvar"'_answers"'
# There is no double quote around $answers on purpose
for i in $answers; do
if [ "$i" = "$id" ]; then
echo 'remove_answer '"$id" >> "$dbfile"
db_answer_remove "$dbvar" "$id"
return
fi
done
}
# Add an answer to a database (disk and memory)
db_add_answer() {
local dbvar="$1" # IN/OUT
local dbfile="$2" # IN
local id="$3" # IN
local value="$4" # IN
db_remove_answer "$dbvar" "$dbfile" "$id"
echo 'answer '"$id"' '"$value" >> "$dbfile"
db_answer_add "$dbvar" "$id" "$value"
}
# Add a file to a database on disk
# 'file' is the file to put in the database (it may not exist on the disk)
# 'tsfile' is the file to get the timestamp from, '' if no timestamp
db_add_file() {
local dbfile="$1" # IN
local file="$2" # IN
local tsfile="$3" # IN
local date
if [ "$tsfile" = '' ]; then
echo 'file '"$file" >> "$dbfile"
else
date=`date -r "$tsfile" '+%s' 2> /dev/null`
if [ "$date" != '' ]; then
date=' '"$date"
fi
echo 'file '"$file$date" >> "$dbfile"
fi
}
# Add a directory to a database on disk
db_add_dir() {
local dbfile="$1" # IN
local dir="$2" # IN
echo 'directory '"$dir" >> "$dbfile"
}
# END_OF_DB_DOT_SH
db_load 'vmdb' "$vmware_db"
# This comment is a hack to prevent RedHat distributions from outputing
# "Starting <basename of this script>" when running this startup script.
# We just need to write the word daemon followed by a space --hpreg.
# This defines echo_success() and echo_failure() on RedHat
if [ -r "$vmdb_answer_INITSCRIPTSDIR"'/functions' ]; then
. "$vmdb_answer_INITSCRIPTSDIR"'/functions'
fi
# This defines $rc_done and $rc_failed on S.u.S.E.
if [ -f /etc/rc.config ]; then
# Don't include the entire file: there could be conflicts
rc_done=`(. /etc/rc.config; echo "$rc_done")`
rc_failed=`(. /etc/rc.config; echo "$rc_failed")`
else
# Make sure the ESC byte is literal: Ash does not support echo -e
rc_done='[71G done'
rc_failed='[71Gfailed'
fi
#
# Global variables
#
vmmemctl="vmmemctl"
vmxnet="vmxnet"
vmhgfs="vmhgfs"
GUESTD_PID_FILE='/var/run/vmware-guestd.pid'
#
# Utilities
#
# BEGINNING_OF_IPV4_DOT_SH
#!/bin/sh
#
# IPv4 address functions
#
# Thanks to Owen DeLong <owen@delong.com> for pointing me at bash's arithmetic
# expansion ability, which is a lot faster than using 'expr' --hpreg
#
# Compute the subnet address associated to a couple IP/netmask
ipv4_subnet() {
local ip="$1"
local netmask="$2"
# Split quad-dotted addresses into bytes
# There is no double quote around the back-quoted expression on purpose
# There is no double quote around $ip and $netmask on purpose
set -- `IFS='.'; echo $ip $netmask`
echo $(($1 & $5)).$(($2 & $6)).$(($3 & $7)).$(($4 & $8))
}
# Compute the broadcast address associated to a couple IP/netmask
ipv4_broadcast() {
local ip="$1"
local netmask="$2"
# Split quad-dotted addresses into bytes
# There is no double quote around the back-quoted expression on purpose
# There is no double quote around $ip and $netmask on purpose
set -- `IFS='.'; echo $ip $netmask`
echo $(($1 | (255 - $5))).$(($2 | (255 - $6))).$(($3 | (255 - $7))).$(($4 | (255 - $8)))
}
# END_OF_IPV4_DOT_SH
# Are we running in a VM?
vmware_inVM() {
"$vmdb_answer_SBINDIR"/vmware-checkvm >/dev/null 2>&1
}
# This is a function in case a future product name contains language-specific
# escape characters.
vmware_product_name() {
echo 'VMware Tools'
exit 0
}
#
# Count the number of running virtual machines
# by looking at the number of references to the
# $driver module.
#
countVMs() {
# Beware of module dependancies here. An exact match is important
/sbin/lsmod | awk 'BEGIN {n = 0;} {if ($1 == "'"$driver"'") n = $3;} END {print n;}'
}
# Is a given module loaded?
isLoaded() {
local module="$1"
/sbin/lsmod | awk 'BEGIN {n = "no";} {if ($1 == "'"$module"'") n = "yes";} END {print n;}'
}
# Build a Linux kernel integer version
kernel_version_integer() {
echo $(((($1 * 256) + $2) * 256 + $3))
}
# Get the running kernel integer version
get_version_integer() {
local version_uts
local v1
local v2
local v3
version_uts=`uname -r`
# There is no double quote around the back-quoted expression on purpose
# There is no double quote around $version_uts on purpose
set `IFS='.'; echo $version_uts`
v1="$1"
v2="$2"
v3="$3"
# There is no double quote around the back-quoted expression on purpose
# There is no double quote around $v3 on purpose
set `IFS='-ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'; echo $v3`
v3="$1"
kernel_version_integer "$v1" "$v2" "$v3"
}
vmware_failed() {
if [ "`type -t 'echo_failure' 2>/dev/null`" = 'function' ]; then
echo_failure
else
echo -ne "$rc_failed"
fi
}
vmware_success() {
if [ "`type -t 'echo_success' 2>/dev/null`" = 'function' ]; then
echo_success
else
echo -ne "$rc_done"
fi
}
# Execute a macro
vmware_exec() {
local msg="$1" # IN
local func="$2" # IN
shift 2
echo -n ' '"$msg"
# On Caldera 2.2, SIGHUP is sent to all our children when this script exits
# I wanted to use shopt -u huponexit instead but their bash version
# 1.14.7(1) is too old
#
# Ksh does not recognize the SIG prefix in front of a signal name
if [ "$VMWARE_DEBUG" = 'yes' ]; then
(trap '' HUP; "$func" "$@")
else
(trap '' HUP; "$func" "$@") >/dev/null 2>&1
fi
if [ "$?" -gt 0 ]; then
vmware_failed
echo
return 1
fi
vmware_success
echo
return 0
}
# Execute a macro in the background
vmware_bg_exec() {
local msg="$1" # IN
local func="$2" # IN
shift 2
if [ "$VMWARE_DEBUG" = 'yes' ]; then
# Force synchronism when debugging
vmware_exec "$msg" "$func" "$@"
else
echo -n ' '"$msg"' (background)'
# On Caldera 2.2, SIGHUP is sent to all our children when this script exits
# I wanted to use shopt -u huponexit instead but their bash version
# 1.14.7(1) is too old
#
# Ksh does not recognize the SIG prefix in front of a signal name
(trap '' HUP; "$func" "$@") 2>&1 | logger -t 'VMware[init]' -p daemon.err &
vmware_success
echo
return 0
fi
}
# Be sure we enable DMA on all the disks for best performance.
vmware_start_dma() {
if [ -x /sbin/hdparm ]; then
/sbin/hdparm -d 1 /dev/hda > /dev/null 2>&1
/sbin/hdparm -d 1 /dev/hdb > /dev/null 2>&1
/sbin/hdparm -d 1 /dev/hdc > /dev/null 2>&1
/sbin/hdparm -d 1 /dev/hdd > /dev/null 2>&1
fi
exit 0
}
vmware_load_module() {
if [ "`isLoaded "$1"`" = 'yes' ]; then
/sbin/rmmod "$1"
fi
/sbin/insmod -s -f "/lib/modules/`uname -r`/misc/$1.o" >/dev/null 2>&1 || /sbin/insmod -s -f "$1" >/dev/null 2>&1 || exit 1
exit 0
}
vmware_unload_module() {
if [ "`isLoaded "$1"`" = 'yes' ]; then
/sbin/rmmod "$1" >/dev/null 2>&1 || exit 1
fi
exit 0
}
# Start the virtual ethernet kernel service
vmware_start_vmxnet() {
# only load vmxnet if it's not already loaded
if [ "`isLoaded "$vmxnet"`" = 'no' ]; then
vmware_load_module $vmxnet
fi
}
# Stop the virtual ethernet kernel service
# XXX Might want to stop the network in case the device is
# configured.
vmware_stop_vmxnet() {
vmware_unload_module $vmxnet
}
vmware_switch() {
"$vmdb_answer_BINDIR"/vmware-config-tools.pl --switch
exit 0
}
# Start the guest virtual memory manager
vmware_start_vmmemctl() {
vmware_load_module $vmmemctl
}
# Stop the guest virtual memory manager
vmware_stop_vmmemctl() {
vmware_unload_module $vmmemctl
}
# Start the guest filesystem driver
vmware_start_vmhgfs() {
# only load vmhgfs if it's not already loaded
if [ "`isLoaded "$vmhgfs"`" = 'no' ]; then
vmware_load_module $vmhgfs
fi
}
# Unmount all hgfs filesystems left mounted
vmware_unmount_vmhgfs() {
# This emulates 'umount -a -t vmware-hgfs' but with /proc/mounts instead of /etc/mtab
cat /proc/mounts | while read dev path fs rest; do
case "$fs" in
vmware-hgfs)
umount "$path"
;;
*)
;;
esac
done
}
# Stop the guest filesystem driver
vmware_stop_vmhgfs() {
vmware_unmount_vmhgfs
vmware_unload_module $vmhgfs
}
#
# Note:
# . Each daemon must be started from its own directory to avoid busy devices
# . Each PID file doesn't need to be added to the installer database, because
# it is going to be automatically removed when it becomes stale (after a
# reboot). It must go directly under /var/run, or some distributions
# (RedHat 6.0) won't clean it
#
# Start the guest OS daemon
vmware_start_guestd() {
cd "$vmdb_answer_SBINDIR" && "$vmdb_answer_SBINDIR"/vmware-guestd \
--background "$GUESTD_PID_FILE"
}
# Stop the guest OS daemon
vmware_stop_guestd() {
if vmware_stop_pidfile "$GUESTD_PID_FILE"; then
rm -f "$GUESTD_PID_FILE"
fi
}
is_ESX_running() {
if "$vmdb_answer_SBINDIR"/vmware-checkvm -p | grep -q ESX; then
echo yes
else
echo no
fi
}
is_vmhgfs_needed() {
local min_kver=`kernel_version_integer '2' '4' '0'`
local run_kver=`get_version_integer`
if [ "`is_ESX_running`" = 'yes' ]; then
echo no
else
if [ $min_kver -le $run_kver -a "$vmdb_answer_VMHGFS_CONFED" = 'yes' ]; then
echo yes
else
echo no
fi
fi
}
is_vmmemctl_needed() {
if [ "`is_ESX_running`" = 'yes' -a "$vmdb_answer_VMMEMCTL_CONFED" = 'yes' ]; then
echo yes
else
echo no
fi
}
is_vmxnet_needed() {
cat /proc/bus/pci/devices | grep -qi "^[0-9a-f]* 15ad0720 "
if [ "$?" -eq 0 -a "$vmdb_answer_VMXNET_CONFED" = 'yes' ]; then
echo yes
else
echo no
fi
}
# See how we were called.
case "$1" in
start)
exitcode='0'
if vmware_inVM; then
if [ -e "$vmware_etc_dir"/not_configured ]; then
echo "`vmware_product_name`"' is installed, but it has not been '
echo '(correctly) configured for the running kernel.'
echo 'To (re-)configure it, invoke the following command: '
echo "$vmdb_answer_BINDIR"'/vmware-config-tools.pl.'
echo
exit 1
fi
echo 'Starting VMware Tools services in the virtual machine:'
vmware_exec 'Switching to guest configuration:' vmware_switch
exitcode=$(($exitcode + $?))
if [ "`is_vmhgfs_needed`" = 'yes' ]; then
vmware_exec 'Guest filesystem driver:' vmware_start_vmhgfs
exitcode=$(($exitcode + $?))
fi
if [ "`is_vmmemctl_needed`" = 'yes' ]; then
vmware_exec 'Guest memory manager:' vmware_start_vmmemctl
exitcode=$(($exitcode + $?))
fi
if [ "`is_vmxnet_needed`" = 'yes' ]; then
vmware_exec 'Guest vmxnet fast network device:' vmware_start_vmxnet
exitcode=$(($exitcode + $?))
fi
vmware_exec 'DMA setup:' vmware_start_dma
exitcode=$(($exitcode + $?))
vmware_exec 'Guest operating system daemon:' vmware_start_guestd
exitcode=$(($exitcode + $?))
# Try to enable tso for all interfaces
# Here all messages and errors are ignored and not displayed
if which ethtool >/dev/null 2>&1; then
# -a is important with ifconfig, which means list all interfaces
for ethif in `ifconfig -a | grep ^eth | cut -d' ' -f1`; do
ethtool -K $ethif tso on >/dev/null 2>&1
done
fi
else
echo 'Starting VMware Tools services on the host:'
vmware_exec 'Switching to host config:' vmware_switch
exitcode=$(($exitcode + $?))
fi
if [ "$exitcode" -gt 0 ]; then
# Set the 'not configured' flag
touch "$vmware_etc_dir"'/not_configured'
chmod 644 "$vmware_etc_dir"'/not_configured'
db_add_file "$vmware_db" "$vmware_etc_dir"'/not_configured' \
"$vmware_etc_dir"'/not_configured'
exit 1
fi
;;
stop)
exitcode='0'
if vmware_inVM; then
echo 'Stopping VMware Tools services in the virtual machine:'
vmware_exec 'Guest operating system daemon:' vmware_stop_guestd
exitcode=$(($exitcode + $?))
if [ "`is_vmhgfs_needed`" = 'yes' ]; then
vmware_exec 'Guest filesystem driver:' vmware_stop_vmhgfs
exitcode=$(($exitcode + $?))
fi
if [ "`is_vmmemctl_needed`" = 'yes' ]; then
vmware_exec 'Guest memory manager:' vmware_stop_vmmemctl
exitcode=$(($exitcode + $?))
fi
if [ "`is_vmxnet_needed`" = 'yes' ]; then
if [ -x "$vmdb_answer_INITSCRIPTSDIR"'/network' ]; then
"$vmdb_answer_INITSCRIPTSDIR"/network stop
elif [ -x "$vmdb_answer_INITSCRIPTSDIR"'/networking' ]; then
"$vmdb_answer_INITSCRIPTSDIR"/networking stop
fi
vmware_exec 'Guest vmxnet fast network device:' vmware_stop_vmxnet
exitcode=$(($exitcode + $?))
fi
else
echo -n 'Skipping VMware Tools services shutdown on the host:'
vmware_success
echo
fi
if [ "$exitcode" -gt 0 ]; then
exit 1
fi
;;
status)
echo -n 'vmware-guestd '
if vmware_check_pidfile "$GUESTD_PID_FILE"; then
echo 'is running'
exit 0;
else
echo 'is not running'
exit 1;
fi
;;
restart)
"$0" stop && "$0" start
;;
*)
echo "Usage: `basename "$0"` {start|stop|status|restart}"
exit 1
esac
exit 0
|
Grüssings, M. _________________ Cats, cats everywhere ... |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|