Файловый менеджер - Редактировать - /var/www/html/vmware-tools.zip
Ðазад
PK ! W2jf resume-vm-defaultnu ȯ�� #!/bin/sh ########################################################## # Copyright (c) 2010-2016, 2023 VMware, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation version 2.1 and no later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # ########################################################## ########################################################################## # DO NOT modify this file directly as it will be overwritten the next # time the VMware Tools are installed. ########################################################################## # # statechange.sh # # This script is a refactored version of the legacy power scripts (e.g., # poweron-vm-default). It expects to be installed in their places -- # in other words, `basename "$0"` might be poweron-vm-default. # # Handy reference/shorthand used in this doc/scripts: # TOOLS_CONFDIR ::= Depends on platform and installation settings. Likely # "/etc/vmware-tools" or # "/Library/Application Support/VMware Tools" # powerOp ::= One of "poweron-vm", "poweroff-vm", "suspend-vm", and # "resume-vm". # vmwScriptDir ::= $TOOLS_CONFDIR/scripts/vmware # userScriptDir ::= $TOOLS_CONFDIR/scripts/${powerOp}-default.d # # End users may install scripts of their own under $userScriptDir. They # are executed in alphabetical order with "$powerOp" as the only argument. # # NB: This directory layout remains to preserve backwards compatibility. End # users are free to write a single script which uses its only parameter # (${powerOp}) as a discriminator, and then install symlinks to it in each # of the ${powerOp}-default.d directories. # # On power-on and resume, VMware's scripts execute before the end user's. On # suspend and power-off, the end user's execute before VMware's. (This way, # VMware stops services only after the user's scripts have finished their # work, and conversely restores the same services before the user's scripts # attempt to use them.) # # Should any script exit non-zero, only its value will be saved to exitCode. # (Any further non-zero exits will have no effect on exitCode.) This script # exits with $exitCode. # # XXX Consider using the available/enabled pattern for VMware's scripts. # # XXX This should be staged as a single executable whereby the desired # power operation is passed in as a parameter. (I.e., one would run # "/path/to/statechange.sh suspend-vm" rather than having to install # statechange.sh as suspend-vm-default.) # echo `date` ": Executing '$0'" # See above. TOOLS_CONFDIR=`dirname "$0"` export TOOLS_CONFDIR # Pull in subroutines like Panic. . "$TOOLS_CONFDIR"/statechange.subr # # RunScripts -- # # Executes scripts installed under $scriptDir. # # Side effects: # exitCode may be incremented. # RunScripts() { scriptDir="$1" if [ -d "$scriptDir" ]; then for scriptFile in "$scriptDir"/*; do if [ -x "$scriptFile" ]; then "$scriptFile" $powerOp exitCode=`expr $exitCode \| $?` fi done fi } # # main -- # # Entry point. See comments at top of file for details. # # Results: # Exits with $exitCode. # main() { # This is confidence checked in the case/esac bit below. powerOp=`basename "$0" | sed 's,-default,,'` exitCode=0 vmwScriptDir="$TOOLS_CONFDIR/scripts/vmware" userScriptDir="$TOOLS_CONFDIR/scripts/${powerOp}-default.d" case "$powerOp" in poweron-vm|resume-vm) RunScripts "$vmwScriptDir" RunScripts "$userScriptDir" ;; poweroff-vm|suspend-vm) RunScripts "$userScriptDir" RunScripts "$vmwScriptDir" ;; *) Panic "Invalid argument: $powerOp" ;; esac return $exitCode } main PK ! ��q q vgauth.confnu �[��� [service] samlSchemaDir = /etc/vmware-tools/vgauth/schemas [localization] msgCatalog = /usr/share/open-vm-tools PK ! W2jf suspend-vm-defaultnu ȯ�� #!/bin/sh ########################################################## # Copyright (c) 2010-2016, 2023 VMware, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation version 2.1 and no later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # ########################################################## ########################################################################## # DO NOT modify this file directly as it will be overwritten the next # time the VMware Tools are installed. ########################################################################## # # statechange.sh # # This script is a refactored version of the legacy power scripts (e.g., # poweron-vm-default). It expects to be installed in their places -- # in other words, `basename "$0"` might be poweron-vm-default. # # Handy reference/shorthand used in this doc/scripts: # TOOLS_CONFDIR ::= Depends on platform and installation settings. Likely # "/etc/vmware-tools" or # "/Library/Application Support/VMware Tools" # powerOp ::= One of "poweron-vm", "poweroff-vm", "suspend-vm", and # "resume-vm". # vmwScriptDir ::= $TOOLS_CONFDIR/scripts/vmware # userScriptDir ::= $TOOLS_CONFDIR/scripts/${powerOp}-default.d # # End users may install scripts of their own under $userScriptDir. They # are executed in alphabetical order with "$powerOp" as the only argument. # # NB: This directory layout remains to preserve backwards compatibility. End # users are free to write a single script which uses its only parameter # (${powerOp}) as a discriminator, and then install symlinks to it in each # of the ${powerOp}-default.d directories. # # On power-on and resume, VMware's scripts execute before the end user's. On # suspend and power-off, the end user's execute before VMware's. (This way, # VMware stops services only after the user's scripts have finished their # work, and conversely restores the same services before the user's scripts # attempt to use them.) # # Should any script exit non-zero, only its value will be saved to exitCode. # (Any further non-zero exits will have no effect on exitCode.) This script # exits with $exitCode. # # XXX Consider using the available/enabled pattern for VMware's scripts. # # XXX This should be staged as a single executable whereby the desired # power operation is passed in as a parameter. (I.e., one would run # "/path/to/statechange.sh suspend-vm" rather than having to install # statechange.sh as suspend-vm-default.) # echo `date` ": Executing '$0'" # See above. TOOLS_CONFDIR=`dirname "$0"` export TOOLS_CONFDIR # Pull in subroutines like Panic. . "$TOOLS_CONFDIR"/statechange.subr # # RunScripts -- # # Executes scripts installed under $scriptDir. # # Side effects: # exitCode may be incremented. # RunScripts() { scriptDir="$1" if [ -d "$scriptDir" ]; then for scriptFile in "$scriptDir"/*; do if [ -x "$scriptFile" ]; then "$scriptFile" $powerOp exitCode=`expr $exitCode \| $?` fi done fi } # # main -- # # Entry point. See comments at top of file for details. # # Results: # Exits with $exitCode. # main() { # This is confidence checked in the case/esac bit below. powerOp=`basename "$0" | sed 's,-default,,'` exitCode=0 vmwScriptDir="$TOOLS_CONFDIR/scripts/vmware" userScriptDir="$TOOLS_CONFDIR/scripts/${powerOp}-default.d" case "$powerOp" in poweron-vm|resume-vm) RunScripts "$vmwScriptDir" RunScripts "$userScriptDir" ;; poweroff-vm|suspend-vm) RunScripts "$userScriptDir" RunScripts "$vmwScriptDir" ;; *) Panic "Invalid argument: $powerOp" ;; esac return $exitCode } main PK ! ��n�8B 8B scripts/vmware/networknu ȯ�� #!/bin/sh -x ########################################################## # Copyright (c) 2001-2018, 2021, 2023 VMware, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation version 2.1 and no later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # ########################################################## # # network (Linux) # # Using a combination of a system networking script, ifconfig, ifup, ifdown # and the ip command, attempt to release and renew DHCP leases upon receipt # of suspend and resume events, respectively. # SOURCE=$0 logdir=/var/log logbase=$logdir/vmware-network logfile=$logbase.log # Defines logging mode enabled (1) or disabled (0) logmode=1 # Defines whether to rotate logs (1) or not (0) logrotate=1 # # Get log file path # get_logfile() { file=`vmware-toolbox-cmd config get logging network.data | \ sed -e 's/.*= *//' -e 's/ *$//'` if [ -n "${file##*"UNSET"*}" ]; then logfile=$file logdir=`dirname $logfile` logbase=`echo $logfile | sed 's/\..*$//'` fi } # # Get Network logging config # get_logconfig() { handler=`vmware-toolbox-cmd config get logging network.handler | \ sed -e 's/.*= *//' -e 's/ *$//'` case $handler in "file") get_logfile ;; "file+") get_logfile logrotate=0 ;; "vmx"|"std") logrotate=0 ;; "syslog") logfile=/var/log/syslog logdir=`dirname $logfile` logrotate=0 ;; *) ;; esac } # # Rotate any logs # rotate_logfile() { if [ $logrotate -eq 1 ]; then max=`vmware-toolbox-cmd config get logging network.maxOldLogFiles | \ sed -e 's/.*= *//' -e 's/ *$//'` if [ -z "${max##*"UNSET"*}" -o `expr "$max" : '[0-9]\+$'` -eq 0 ]; then max=9 fi max=`expr $max - 1` for s in `seq $max -1 1`; do d=`expr $s + 1` mv -f $logbase.$s.log $logbase.$d.log done mv -f $logbase.log $logbase.1.log fi } # # Logging api # log() { if [ $logmode -eq 1 ]; then if [ "$handler" = "vmx" ]; then `vmtoolsd --cmd "log $*"` elif [ "$handler" = "std" ]; then echo `date` ": $*" elif [ -w $logdir ]; then space=`df -k $logdir | awk 'NR == 2 { print $4 }'` if [ $space -gt 1024 ]; then echo `date` ": $*" >> $logfile else `vmtoolsd --cmd "log WARNING: [$SOURCE] Logging disabled. No space left in $logdir"` logmode=0 fi else `vmtoolsd --cmd "log WARNING: [$SOURCE] Logging disabled. $logdir is not writable"` logmode=0 fi fi } get_logconfig rotate_logfile log "Executing '$0 $*'" . `dirname "$0"`/../../statechange.subr # # find_networking_script -- # # Searches common Linux distro init/rc paths to find a singular network # services script. # # Result: # Returns a valid networking script path on success or "error" on failure. # # Side effects: # None. # find_networking_script() { local script="error" for dir in "/etc/init.d" "/sbin/init.d" "/etc" "/etc/rc.d" ; do if [ -d "$dir/rc0.d" ] && [ -d "$dir/rc1.d" ] && [ -d "$dir/rc2.d" ] && [ -d "$dir/rc3.d" ] && [ -d "$dir/rc4.d" ] && [ -d "$dir/rc5.d" ] && [ -d "$dir/rc6.d" ]; then # Now find the appropriate networking script. if [ -d "$dir/init.d" ]; then if [ -x "$dir/init.d/network" ]; then script="$dir/init.d/network" elif [ -x "$dir/init.d/networking" ]; then script="$dir/init.d/networking" fi else if [ -x "$dir/network" ]; then script="$dir/network" elif [ -x "$dir/networking" ]; then script="$dir/networking" fi fi fi done log "$script" } # # exec_networking_script -- # # Execute the networking script to bring network interfaces up or down # based on the given input action argument. # exec_networking_script() { local script=$1 local action=$2 # Using SysV "service" if it exists, otherwise fall back to run the # script directly service=`which service 2>/dev/null` if [ $? = 0 -a -n "$service" ]; then serviceName=`basename "$script"` "$service" "$serviceName" "$action" else "$script" "$action" fi return $? } # # exec_systemctl_service -- # # Handle linux distributions that use systemd to replace the legacy # system V startup scripts. The previous network script searching # approach is no longer viable in these systems. Invoke the systemctl # command to control the network service instead. # exec_systemctl_service() { local rc=1 local action=$1 local ctlcmd=$(which systemctl 2>/dev/null) local service [ -z "$ctlcmd" ] && return $rc for svc in systemd-networkd network; do if ! $ctlcmd status $svc | grep -iq 'not-found'; then service=$svc && break fi done [ -z "$service" ] && return $rc $ctlcmd $action $service; rc=$? # When use the systemd-networkd service to shut down interfaces, interface # address and state remain unchanged. Need to use ip command to change its # address and state. if [ $rc = 0 -a $service = 'systemd-networkd' -a $action = 'stop' ]; then config_network_intfs $action; rc=$? fi return $rc } # # del_intf_ip -- # # Use the ip command to remove all the addresses of an interface. # del_intf_ip() { local nic=$1 $ip_cmd addr flush dev $nic return $? } # # ip_intf_ops -- # # Use the ip command to change the state of an interface to up or down. # ip_intf_ops() { local rc=1 local nic=$1 local ops=$2 [ -z "$ip_cmd" ] && return $rc $ip_cmd link set $nic $ops; rc=$? # Remove interface addresses when taking an interface down. if [ $rc = 0 -a $ops = down ]; then del_intf_ip $nic; rc=$? fi return $rc } # # intf_ops -- # # Execute the specified command (ifup or ifdown) if available, otherwise use # the ip command as fallback. If ifup or ifdown fails, run the ip command to # retry the intended operation. # intf_ops() { local rc=0 local cmd=$1 local ops=$2 local nic=$3 local tmp if [ ! -z "$cmd" ]; then tmp=$($cmd $nic 2>&1); rc=$? # Some systems still return a successful status even the command fails # because the interface is not configured in the configuration file. So # have to examine the command output to determine the actual status. if [ $rc = 0 ]; then echo $tmp | egrep -iq 'not configured|ignoring unknown' && rc=1 fi fi # If ifup/ifdown fails, try the ip fallback. if [ -z "$cmd" -o $rc != 0 ]; then ip_intf_ops $nic $ops; rc=$? fi return $rc } # # exec_intf_ops -- # # Perform an operation to bring an individual interface up or down. # exec_intf_ops() { local rc=0 local action=$1 local nic=$2 case $action in start) intf_ops "$ifup_cmd" up $nic; rc=$? ;; stop) intf_ops "$ifdown_cmd" down $nic; rc=$? ;; *) Panic "Illegal interface action: $action" ;; esac return $rc } # # config_network_intfs -- # # For Linux systems not supporting networking scripts to bring interfaces # up or down, provide a way to change the interface state individually. # config_network_intfs() { local rc=0 local action=$1 if [ -f "$activeList" ]; then while read nic; do exec_intf_ops $action $nic rc=$(expr $rc \| $?) done < $activeList fi return $rc } # # run_network_script -- # # Finds out how to run the system's script used to control networking, and # runs it with the given argument (which should be one of the usual SysV # init script arguments). If it does not work, tries the other alternatives. # So far, our alternatives are (a) systemctl (b) network script (c) perform # an individual interface state change. # run_network_script() { local action=$1 local rc=0 local script while true; do exec_systemctl_service $action [ $? != 0 ] || break script=`find_networking_script` if [ $script != "error" ]; then exec_networking_script $script $action [ $? != 0 ] || break fi # Since all the other alternatives fail, need to manually change # individual interface state. config_network_intfs $action; rc=$? break done return $rc } # # save_active_NIC_list -- # # Records a list of every active NIC to /var/run/vmware-active-nics. # # XXX What's the story on aliases? Should they still be included, or will # they be recreated automatically upon resume? # # Results: # $activeList has, one per line, a list of all active NICs. # # Side effects: # None. # save_active_NIC_list() { local intf_out >$activeList # Find out all the non-loopback up interfaces. Use ip if available # otherwise fall back to the ifconfig command. # ifconfig is buggy on some platforms and truncates long # network names if [ -n "$ip_cmd" ]; then for nic in $($ip_cmd link show up | egrep '\bUP\b' | awk -F: '{print $2}'); do $ip_cmd link show ${nic%@*} | grep -iq 'link/ether' && echo ${nic%@*} >> $activeList done else for nic in $($ifconfig_cmd | sed -n 's/^\([^: \t]*\).*$/\1/p'); do intf_out=$($ifconfig_cmd $nic) echo $intf_out | grep -iq loopback && continue echo $intf_out | egrep -q '\bUP\b' && echo $nic >> $activeList done fi } # # rescue_NIC -- # # For each NIC recorded in $activeList that is not currently "up", run # "ifup $nic" or "ip link set $nic up" to bring the interface up. # # Results: # All downed NICs should be active. # rescue_NIC() { local rc=0 local intf_out if [ -f "$activeList" ]; then while read nic; do if [ -n "$ip_cmd" ]; then intf_out=$($ip_cmd link show $nic up) else intf_out=$($ifconfig_cmd $nic) fi if echo $intf_out | grep -q 'UP'; then log "[rescue_nic] $nic is already active." else log "[rescue_nic] activating $nic ..." # Our best effort to activate interfaces, use ifup if available # otherwise use the ip command as fallback. intf_ops "$ifup_cmd" up $nic rc=$(expr $rc \| $?) fi done < $activeList rm -f $activeList fi return $rc } # # TranquilizeNetworkManager -- # # Put the NetworkManager daemon to sleep (maybe). # # See http://projects.gnome.org/NetworkManager/developers/spec.html . # # Results: # Sleep(true) request is sent to the NetworkManager D-Bus interface. # # Side effects: # None. # TranquilizeNetworkManager() { # `which' may be a bit noisy, so we'll shush it. dbusSend=`which dbus-send 2>/dev/null` rc=$? if [ $rc -ne 0 ]; then return $rc fi # Check NetworkManager state before disabling it. nm_state=`$dbusSend --system --print-reply \ --dest=org.freedesktop.NetworkManager \ /org/freedesktop/NetworkManager \ org.freedesktop.DBus.Properties.Get \ string:'org.freedesktop.NetworkManager' \ string:'State' \ | awk '/variant/ {print $3;}'` if [ -z "$nm_state" ]; then return 1 fi # NetworkManager API 0.7/0.8 0.9 # NM_STATE_ASLEEP 1 10 # NM_STATE_DISCONNECTED 4 20 case $nm_state in 1|4|10|20) # Nothing needs to be done. return 0 ;; esac # NetworkManager 0.8.0 and above $dbusSend --system --print-reply \ --dest=org.freedesktop.NetworkManager \ /org/freedesktop/NetworkManager \ org.freedesktop.NetworkManager.Enable boolean:false rc=$? if [ $rc -eq 0 ]; then return $rc fi # NetworkManager 0.7.0 $dbusSend --system --print-reply \ --dest=org.freedesktop.NetworkManager \ /org/freedesktop/NetworkManager \ org.freedesktop.NetworkManager.Sleep boolean:true rc=$? if [ $rc -eq 0 ]; then return $rc fi # NetworkManager 0.6 $dbusSend --system --print-reply \ --dest=org.freedesktop.NetworkManager \ /org/freedesktop/NetworkManager \ org.freedesktop.NetworkManager.sleep rc=$? return $rc } # # WakeNetworkManager -- # # Wake the NetworkManager daemon (maybe). # # See http://projects.gnome.org/NetworkManager/developers/spec.html . # # Results: # Sleep(false)request is sent to the NetworkManager D-Bus interface. # # Side effects: # None. # WakeNetworkManager() { # `which' may be a bit noisy, so we'll shush it. dbusSend=`which dbus-send 2>/dev/null` rc=$? if [ $rc = 0 ]; then # NetworkManager 0.8.0 $dbusSend --system --print-reply \ --dest=org.freedesktop.NetworkManager \ /org/freedesktop/NetworkManager \ org.freedesktop.NetworkManager.Enable boolean:true rc=$? if [ $rc = 0 ]; then return $rc fi # NetworkManager 0.7.0 $dbusSend --system --print-reply \ --dest=org.freedesktop.NetworkManager \ /org/freedesktop/NetworkManager \ org.freedesktop.NetworkManager.Sleep boolean:false rc=$? if [ $rc = 0 ]; then return $rc fi # NetworkManager 0.6 $dbusSend --system --print-reply \ --dest=org.freedesktop.NetworkManager \ /org/freedesktop/NetworkManager \ org.freedesktop.NetworkManager.wake rc=$? fi return $rc } # # confidence_check -- # # Check if the script has all the commands it needs to carry out the # request. So far, it requires either ip or ifconfig command to read # interface configuration. Ifup is not checked here. It is checked at # the place where we need to do individual interface state change. # confidence_check() { ip_cmd=$(which ip 2>/dev/null) ifconfig_cmd=$(which ifconfig 2>/dev/null) ifup_cmd=$(which ifup 2>/dev/null) ifdown_cmd=$(which ifdown 2>/dev/null) [ -z "$ifconfig_cmd" -a -z "$ip_cmd" ] && \ Panic "ip and ifconfig not in search path." } # # main -- # # Main entry point. Perform some confidence checking, then map state change # events to relevant networking operations. # # Results: # See comment at top of file. # main() { exitCode=0 activeList=/var/run/vmware-active-nics case "$1" in poweron-vm) rm -f $activeList ;; suspend-vm) TranquilizeNetworkManager exitCode=$? if [ $exitCode != 0 ]; then confidence_check suspend-vm save_active_NIC_list run_network_script stop exitCode=$? fi ;; resume-vm) WakeNetworkManager exitCode=$? if [ $exitCode != 0 ]; then confidence_check resume-vm # According to hfu, "/etc/init.d/networking restart" on Debian 5.0 # may bring down ethernet interfaces tagged as "allow-hotplug" without # bringing them back up. # # This is especially a problem when reverting to a live, running # VM snapshot where an active NIC list hadn't yet been generated, # resulting in sudden loss of an otherwise operational NIC. # # So, if the active list doesn't exist, assume we're coming back to # a live snapshot and capture the current active list now for # rescue later. if [ ! -s $activeList ]; then save_active_NIC_list fi # We shall use start not restart here. Otherwise we may not be able # to bring back active list on distros like sles11sp2 # -- PR 816791 run_network_script start rescue_NIC exitCode=$? fi ;; *) log "No argument supplied." ;; esac return $exitCode } main "$@" log "Finished '$0 $*'" PK ! W2jf poweroff-vm-defaultnu ȯ�� #!/bin/sh ########################################################## # Copyright (c) 2010-2016, 2023 VMware, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation version 2.1 and no later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # ########################################################## ########################################################################## # DO NOT modify this file directly as it will be overwritten the next # time the VMware Tools are installed. ########################################################################## # # statechange.sh # # This script is a refactored version of the legacy power scripts (e.g., # poweron-vm-default). It expects to be installed in their places -- # in other words, `basename "$0"` might be poweron-vm-default. # # Handy reference/shorthand used in this doc/scripts: # TOOLS_CONFDIR ::= Depends on platform and installation settings. Likely # "/etc/vmware-tools" or # "/Library/Application Support/VMware Tools" # powerOp ::= One of "poweron-vm", "poweroff-vm", "suspend-vm", and # "resume-vm". # vmwScriptDir ::= $TOOLS_CONFDIR/scripts/vmware # userScriptDir ::= $TOOLS_CONFDIR/scripts/${powerOp}-default.d # # End users may install scripts of their own under $userScriptDir. They # are executed in alphabetical order with "$powerOp" as the only argument. # # NB: This directory layout remains to preserve backwards compatibility. End # users are free to write a single script which uses its only parameter # (${powerOp}) as a discriminator, and then install symlinks to it in each # of the ${powerOp}-default.d directories. # # On power-on and resume, VMware's scripts execute before the end user's. On # suspend and power-off, the end user's execute before VMware's. (This way, # VMware stops services only after the user's scripts have finished their # work, and conversely restores the same services before the user's scripts # attempt to use them.) # # Should any script exit non-zero, only its value will be saved to exitCode. # (Any further non-zero exits will have no effect on exitCode.) This script # exits with $exitCode. # # XXX Consider using the available/enabled pattern for VMware's scripts. # # XXX This should be staged as a single executable whereby the desired # power operation is passed in as a parameter. (I.e., one would run # "/path/to/statechange.sh suspend-vm" rather than having to install # statechange.sh as suspend-vm-default.) # echo `date` ": Executing '$0'" # See above. TOOLS_CONFDIR=`dirname "$0"` export TOOLS_CONFDIR # Pull in subroutines like Panic. . "$TOOLS_CONFDIR"/statechange.subr # # RunScripts -- # # Executes scripts installed under $scriptDir. # # Side effects: # exitCode may be incremented. # RunScripts() { scriptDir="$1" if [ -d "$scriptDir" ]; then for scriptFile in "$scriptDir"/*; do if [ -x "$scriptFile" ]; then "$scriptFile" $powerOp exitCode=`expr $exitCode \| $?` fi done fi } # # main -- # # Entry point. See comments at top of file for details. # # Results: # Exits with $exitCode. # main() { # This is confidence checked in the case/esac bit below. powerOp=`basename "$0" | sed 's,-default,,'` exitCode=0 vmwScriptDir="$TOOLS_CONFDIR/scripts/vmware" userScriptDir="$TOOLS_CONFDIR/scripts/${powerOp}-default.d" case "$powerOp" in poweron-vm|resume-vm) RunScripts "$vmwScriptDir" RunScripts "$userScriptDir" ;; poweroff-vm|suspend-vm) RunScripts "$userScriptDir" RunScripts "$vmwScriptDir" ;; *) Panic "Invalid argument: $powerOp" ;; esac return $exitCode } main PK ! �mH1H 1H tools.conf.examplenu �[��� # Copyright (c) 2019-2023 VMware, Inc. All rights reserved. # "CAUTION: tools.conf is highly syntax sensitive file. Use extreme caution # while editing it. If modified, it is automatically re-loaded by # VMware Tools services every 5 seconds." # # Lines must not end with trailing white space. [unsetenvironment] # Defines environment variables to be removed from the service reading # the configuration file. Supported formats are: # # 1. <variableName>= # 2. <serviceName>.<variableName>= # # Where <serviceName> refers to the 'vmsvc' and 'vmusr', # <variableName> refers to the name of the environment # variable to be removed. '=' sign after <variableName> # is mandatory to maintain the configuration file syntax. # However, anything after '=' is ignored. # # Case-sensitive behavior is defined by the operating system. # # Note: unsetenvironment group is processed before setenvironment group. # As the service environment is setup at start up time, any changes # in this group require service to be restarted in order to take effect. # # Unsetting PATH for all services: # PATH= # # Unsetting PATH for vmsvc only: # vmsvc.PATH= # # Unsetting PATH for vmusr only: # vmusr.PATH= [setenvironment] # Defines environment variables to be set for the service reading # the configuration file. Supported formats are: # # 1. <variableName>=<variableValue> # 2. <serviceName>.<variableName>=<variableValue> # # Where <serviceName> refers to the 'vmsvc' and 'vmusr', # <variableName> refers to the name of the environment # variable to be set, and <variableValue> refers to the # value to be assigned to the environment variable. # # Case-sensitive behavior is defined by the operating system. # # Note: setenvironment group is processed after unsetenvironment group. # As the service environment is setup at start up time, any changes # in this group require service to be restarted in order to take effect. # # Setting TMPDIR for all services: # TMPDIR=/vmware/temp # # Setting TMPDIR for vmsvc only: # vmsvc.TMPDIR=/vmware/vmsvc/temp # # Setting TMPDIR for vmusr only: # vmusr.TMPDIR=/vmware/vmusr/temp [logging] # set to false to turn off logging #log = true # Log destinations for various services # By default, logs go to # %windir%/temp/vmware-<servicename>.log # for Windows, and # /var/log/vmware-<servicename>-<username>.log # for Linux, MacOS and Solaris. # Possible values for handler are: # file: logs to a file. Set *.data to the file name # file+: same as 'file', but appends to the file # All file paths used in *.data value need to be in Unix # format (forward slashes) and in utf-8, for all operating # systems. # vmx: logs to the host (ESXi, Workstation, Fusion) # std: Logs to stdout for level >= 'message', # and to stderr for more severe than 'message'. # syslog: logs to syslog # outputdebugstring: uses OutputDebugString (Windows only) # If handler is 'syslog' and the OS is Linux, the facility # can be set with <domain>.facility. The facility value can be one of # 'local0'..'local7', 'daemon' or 'user'. The default is 'user'. #vmtoolsd.facility = user # possible values for level are: # debug, info, message, warning, critical, error # Note that "debug" level logs generate huge amounts of logs and may also # include sensitive data required for diagnosis. Therefore, this level should # be used only for the duration of diagnosis of an issue and reverted back to # default setting post diagnosis. # Enable tools service logging to a file. #vmtoolsd.level = debug #vmtoolsd.handler = file #vmtoolsd.data = c:/tmp/vmtoolsd-${USER}.log # Enable 'vmsvc' service logging to a file. #vmsvc.level = debug #vmsvc.handler = file #vmsvc.data = c:/tmp/vmsvc.log # Enable VMwareResolutionSet.exe logging to a file. # Comment this for Linux guest, sometimes vmusr logs are not generated due # to this being uncommented #vmresset.level = debug #vmresset.handler = file+ #vmresset.data = c:/tmp/vmresset.log # Enable new "vmusr" service logging to a file. #vmusr.level = debug #vmusr.handler = file #vmusr.data = c:/tmp/vmusr.${USER}.log # Set the following configuration if you want to collect the logs for # vmware-toolbox-cmd utility #toolboxcmd.level = debug #toolboxcmd.handler = file #toolboxcmd.data = c:/tmp/vmtoolboxcmd-${USER}.log # With no explicit logging configuration for deployPkg, its default log path in # Linux is /var/log/vmware-imc/toolsDeployPkg.log, and in Windows is # %WINDIR%/Temp/vmware-imc/toolsDeployPkg.log # Set the following configuration if you want to redirect the deployPkg log to # any existing location other than the default. #deployPkg.level = debug #deployPkg.handler = file #deployPkg.data = c:/tmp/toolsDeployPkg-${USER}.log # Redirecting the deployPkg log to the vmx log file. Please note that # "log = true" and the vmsvc log handler setting to vmx are also neccessary # if you want to redirect the deployPkg log to vmx. #log = true #vmsvc.level = debug #vmsvc.handler = vmx #deployPkg.level = debug #deployPkg.handler = vmx # Enable old VMwareUser/vmware-user logging to file. #log.file = c:/tmp/vmtools.log # Enable "hgfsServer" request handling logging to the appropriate service file. #hgfsServer.level = debug # Enable "hgfs" manager and transport logging to the appropriate service file. #hgfsd.level = debug #vmbackup.level = debug #vmbackup.handler = vmx #vmvss.level = debug #vmvss.handler = vmx # Default 4096, 0=> deactivate log caching #maxCacheEntries=4096 # Set the following configurations for modifying network script logging file. # Only for Linux, Mac OS X, Solaris, and FreeBSD #network.handler = file #network.data = /tmp/network.log #network.maxOldLogFiles = 9 # Redirect network script logs to vmx #network.handler = vmx [powerops] # Custom scripts for power operations # This can be an absolute path, or a path relative to the tools # install path (/etc/vmware-tools/ for Linux). # For more information on configuring and querying custom scripts with # VMware Tools, see the "Use Custom VMware Tools Scripts" section of the # "VMware Tools Configuration Utility User's Guide". # Runs when the virtual machine is being powered on rather than resumed. # Also runs after virtual machine restarts. # The default script has no effect on networking for the virtual machine. #poweron-script=poweron-vm-default # Runs when the virtual machine is being powered off or reset. # The default script has no effect on networking for the virtual machine. #poweroff-script=poweroff-vm-default # Runs when the virtual machine is resumed after it was suspended. # On Windows guest operating systems, if the virtual machine is configured to # use DHCP, the default script renews the IP address of the virtual machine. # On Linux, Mac OS X, Solaris, and FreeBSD guest operating systems, # this script starts networking for the virtual machine. #resume-script=resume-vm-default # Runs when the virtual machine is being suspended. # On Windows guest operating systems, if the virtual machine is configured # to use DHCP, the default script releases the IP address of the virtual # machine. # On Linux, Mac OS X, Solaris, and FreeBSD, this script stops networking for # the virtual machine. #suspend-script=suspend-vm-default [guestinfo] # Set to true to deactivate the perf monitor. #disable-perf-mon=false # Set to true to deactivate DiskInfo. #disable-query-diskinfo=false # User-defined poll interval in seconds. Set to 0 to deactivate polling. #poll-interval=30 # User-defined stats interval in seconds. Set to 0 to deactivate stats collection. #stats-interval=20 # Whether stat results should be written to the log. #enable-stat-logging=false # Set a comma separated list of network interface names that can be the # primary ones. These will be sorted to the top. Interface names can use # wildcards like '*' and '?'. Default is no value. #primary-nics= # Set a comma separated list of network interface names that have low priority # (so they will be sorted to the end). Interface names can use wildcards like # '*' and '?'. Default is no value. #low-priority-nics= # Set a comma separated list of network interface names that shall be ignored. # Interface names can use wildcards like '*' and '?'. # Default for Linux and all non-Windows: #exclude-nics=veth*,docker*,virbr*,antrea-*,cali* # Default for Windows: #exclude-nics=vEthernet* # max umber of IPv4 routes to gather. #max-ipv4-routes=100 # max umber of IPv6 routes to gather. #max-ipv6-routes=100 # whether to include reserved space in diskInfo space metrics on Linux #diskinfo-include-reserved=false [globalconf] # The GlobalConf feature provides an ability for the vSphere administrators # to distribute a 'VMware Tools Configuration File' (tools.conf) via the # GuestStore for multiple VMs at scale. # Defines the configuration to activate/deactivate the GlobalConf module. # Set to true to enable(activate) the module. # Set to false to deactivate the module. Default false. #enabled=false # Defines a custom GlobalConf poll interval (in seconds). # Default 3600 seconds. Minimum 1800 seconds. #poll-interval=3600 # Defines the global configuration resource in GuestStore. # Windows guests #resource=/vmware/configurations/vmtools/windows/tools.conf # # Linux guests #resource=/vmware/configurations/vmtools/linux/tools.conf [componentmgr] # This plugin manages the known and enabled components add/remove status. # The plugin polls at regular interval and triggers action add/remove for # all the known and enabled components in the componentMgr plugin. # Default and minimum polling interval in seconds (0 => polling deactivated) #poll-interval=180 # Comma separated list of components managed by the plugin. If not specified, # default value is all, which means all components are enabled by default. # A special value of none means no component, which is equivalent to disabling # the plugin completely. Value is parsed left to right and parsing stops at # first occurrence of all or none or end of line. #included=all [appinfo] # This plugin collects info about running applications in guest OS. # Set to true to deactivate the appinfo plugin. #disabled=false # User-defined poll interval in seconds. Set to 0 to deactivate the plugin. #poll-interval=21600 # For Windows guest, set to true to use WMI for getting the application # version info, otherwise native Win32 API is used. #useWMI=false # Whether to remove the duplicate applications information in the # guestinfo variable. #remove-duplicates=true [containerinfo] # This plugin collects info about running containers in guest OS. # User-defined poll interval in seconds. Set to 0 to deactivate the plugin. #poll-interval=21600 # Maximum number of containers to be retrieved per namespace. #max-containers=256 # Whether to remove the duplicate containers information in the # guestinfo variable. #remove-duplicates=true # Unix socket to use to communicate with the docker daemon. #docker-unix-socket=/var/run/docker.sock # The unix socket to connect to communicate with containerd grpc server # for retrieving the list of running containers. #containerd-unix-socket=/run/containerd/containerd.sock # List of namespaces to be queried for the running containers. # The value for this key is a comman separated list. #allowed-namespaces=moby,k8s.io,default [servicediscovery] # This plugin provides admins with additional info for better VM management. # Set to true to deactivate the servicediscovery plugin. #disabled=false [unity] # # Unity is available for Windows only. # # Set to true to override system decisions about whether unity should be available. #forceEnable=false # Override the desktop background color when in Unity mode. #desktop.backgroundColor= # The socket type can be 'ipsocket' or 'vsocket': #pbrpc.socketType [resolutionKMS] # Default is true if tools finds an xf86-video-vmware driver with # version >= 13.2.0. If you don't have X installed, set this to true manually. # This only affects tools for Linux. #enable=true [guestosinfo] # Override the short OS name sent by tools. #short-name= # Override the long OS name sent by tools. #long-name= [vmbackup] # enableSyncDriver is Linux only. #enableSyncDriver=true # enableVSS is Windows only. #enableVSS=true # vss.disableAppQuiescing is Windows only. # This setting can be used to force file system quiescing on Windows systems # having problems with application quiescing. # See https://kb.vmware.com/s/article/2146204 #vss.disableAppQuiescing=false # Linux: # The value of excludedFileSystems is a comma-separated list of glob-style # patterns specifying the file system mount points to be excluded from # quiescing operation. The patterns may use '*' (wildcard) to represent # any string of characters and '?' (joker) to represent any single character. # The characters represented by the patterns '*' and '?' may include any # characters, including '/'. # # Windows: # The value of excludedFileSystems is a comma-separated list of mount points # specifying the volumes to be excluded from quiesced snapshots. # Each mount point must be a full path separated and ended with "\\". # For example, to exclude volumes with drive letter 'E' or mount point # "F:\mount\", use: # excludedFileSystems=E:\\,F:\\mount\\ # This setting is ignored when application quiescing is used. #excludedFileSystems= # Linux: # It is possible that filesystems are being frozen in pre-freeze scripts # to control the order in which those specific filesystems are to be frozen. # The vmtoolsd process must be informed of all such filesystems with the help # of "excludedFileSystems" setting of tools.conf. # # A temporary workaround is available (starting from 12.3.0) for admins to allow # quiesceing operation to succeed until the "excludedFileSystems" list # is configured. # # If another process thaws the file system while a quiescing operation # operation is ongoing, the snapshot may be compromised. Once the # "excludedFileSystems" list is configured this setting MUST be unset (or set # to false). # # The value of ignoreFrozenFileSystems is a true or false; the default is # false. # # Set to true to ignore pre-frozen file systems during the quiescing operation. # # ignoreFrozenFileSystems is Linux only (Not supported on Windows). #ignoreFrozenFileSystems=false # execScripts specifies whether to execute scripts as part of the quiescing # operation. Scripts are executed from the scripts directory along with the # legacy scripts. # # Scripts directory: # Linux: /etc/vmware-tools/backupScripts.d # Windows: <Install-Path>\backupScripts.d # # Legacy scripts: # Linux: /usr/sbin/pre-freeze-script and /usr/sbin/post-thaw-script # Windows: C:\windows\pre-freeze-script.bat and C:\windows\post-thaw-script.bat # # On each quiescing operation, scripts are invoked before quiescing and # either after a quiescing failure or after thawing. # The first argument passed to each script is # "freeze", when invoked before quiescing; # "freezefail", when invoked after a quiescing failure; or # "thaw", when invoked after thawing. # When invoked before quiescing, scripts from the directory are invoked in # alphabetically ascending order; when invoked following a quiescing failure # or thawing, they are invoked in the reverse order. Any subdirectories are # ignored. # Note that the legacy pre-freeze-script is invoked only before quiescing as # the first script and post-thaw-script is invoked after a quiescing failure # as well as after thawing as the last script. #execScripts=true # Additional argument to be passed to scripts #scriptArg= [guestoperations] # to deactivate all guest ops #disabled=false # Whether to use vgauth for guest op authentication #useVGAuth=true [autoupgrade] # The "allow-upgrade" option controls whether automatic upgrades (or reinstalls) # are allowed. #allow-upgrade=true # The autoupgrade plugin is only available for Windows. # The "allow-add-feature" and "allow-remove-feature" control whether adding # or removing a feature will be allowed. # The allow-msi-transforms option controls whether TRANSFORMS property is # allowed. #allow-add-feature=true #allow-remove-feature=true #allow-msi-transforms=false [deployPkg] # to deactivate guest customization #enable-customization=false # This "wait-cloudinit-timeout" option controls how long does guest # customization wait for cloud-init execution done when it detects cloud-init # is available in guest. # Guest customization will continue executing as soon as it detects cloud-init # execution done within this option's value in seconds. # If cloud-init is still running beyond this option's value in seconds, guest # customization will continue executing regardless cloud-init execution status. # Minimum valid value is 0 second, set to 0 to deactivate waiting. # Maximum valid value is 1800 seconds (30 minutes). # Default value is 30 seconds. #wait-cloudinit-timeout=30 [cbhelper] # The carbonblack helper plugin is only available for Windows. # User-defined poll interval in seconds. Set to 0 to deactivate polling. #poll-interval=60 [gueststoreupgrade] # The guestStoreUpgrade plugin is only available for Windows. # The policy value is one of the settings listed below. # off = no VMware Tools upgrade from GuestStore. Feature is # deactivated. # manual = (Default) VMware Tools upgrade from GuestStore is # manually started. # powercycle = VMware Tools upgrade from GuestStore on system # power on. #policy=manual # Time interval for periodically checking available VMware Tools package # version in the GuestStore. # User-defined poll interval in seconds. Set to 0 to deactivate polling. # Minimum valid value is 900 seconds (15 minutes) # Default value is 3600 seconds (60 minutes) #poll-interval=3600 # VMware Tools package version metadata key to specify a VMware Tools # package version in the GuestStore. # User-defined key for VMware Tools package version. # Default value is "vmtools" which points to the latest version of # VMware Tools package in the GuestStore. #vmtools-version-key=vmtools [devicehelper] # The deviceHelper plugin is only available for Windows. # Set to true to deactivate the deviceHelper plugin. #disabled=false [gitray] # The gitray plugin is only available for Windows # with Complete VMTools install or with File # Introspection Custom install. # By default the gitray plugin is enabled # To disable gitray user plugin set #enabled=false PK ! =��r� � tools.confnu �[��� [logging] # Turns on logging globally. It can still be disabled for each domain. # log = true # Disables core dumps on fatal errors; they're enabled by default. # enableCoreDump = false # Defines the "vmsvc" domain, logging to file # vmsvc.level = message vmsvc.handler = file # Setup file rotation - keep 3 files vmsvc.maxOldLogFiles = 3 # Max log file size kept: 1 MB vmsvc.maxLogSize = 1 # Defines the "vmtoolsd" domain, and disable logging for it. # vmtoolsd.level = none PK ! 2M�� � statechange.subrnu �[��� #!/bin/sh ########################################################## # Copyright (C) 2010-2016 VMware, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation version 2.1 and no later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public # License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # ########################################################## ########################################################################## # DO NOT modify this file directly as it will be overwritten the next # time the VMware Tools are installed. ########################################################################## # # Panic -- # # Write a formatted error message to stderr and exit. # # Results: # Stderr is spammed, program exits with exit code 1. # # Side effects: # None. # Panic() { fmt="`date '+%b %d %H:%M:%S'` `basename \"$0\"`" if [ -n "$1" ]; then fmt="${fmt}: $1" shift fi printf >&2 "${fmt}\n" "$@" exit 1 } PK ! ]�}��'