summaryrefslogtreecommitdiff
path: root/src/VBox/Installer/darwin/DiskImage
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2014-03-26 19:21:20 +0000
committer <>2014-05-08 15:03:54 +0000
commitfb123f93f9f5ce42c8e5785d2f8e0edaf951740e (patch)
treec2103d76aec5f1f10892cd1d3a38e24f665ae5db /src/VBox/Installer/darwin/DiskImage
parent58ed4748338f9466599adfc8a9171280ed99e23f (diff)
downloadVirtualBox-master.tar.gz
Imported from /home/lorry/working-area/delta_VirtualBox/VirtualBox-4.3.10.tar.bz2.HEADVirtualBox-4.3.10master
Diffstat (limited to 'src/VBox/Installer/darwin/DiskImage')
-rwxr-xr-xsrc/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool139
1 files changed, 84 insertions, 55 deletions
diff --git a/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool b/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool
index 31b70047..9f5150fa 100755
--- a/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool
+++ b/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool
@@ -1,8 +1,11 @@
-#!/bin/sh
-#
+#!/bin/bash
+# $Id: VirtualBox_Uninstall.tool $
+## @file
# VirtualBox Uninstaller Script.
#
-# Copyright (C) 2007-2010 Oracle Corporation
+
+#
+# Copyright (C) 2007-2013 Oracle Corporation
#
# This file is part of VirtualBox Open Source Edition (OSE), as
# available from http://www.virtualbox.org. This file is free software;
@@ -45,69 +48,82 @@ fi
# Collect directories and files to remove.
# Note: Do NOT attempt adding directories or filenames with spaces!
#
-my_directories=""
-my_files=""
+declare -a my_directories
+declare -a my_files
# Users files first
-test -f "${HOME}/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist" && my_files="$my_files ${HOME}/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist"
-
-test -d /Library/StartupItems/VirtualBox/ && my_directories="$my_directories /Library/StartupItems/VirtualBox/"
-test -d /Library/Receipts/VBoxStartupItems.pkg/ && my_directories="$my_directories /Library/Receipts/VBoxStartupItems.pkg/"
-
-test -d /Library/Extensions/VBoxDrv.kext/ && my_directories="$my_directories /Library/Extensions/VBoxDrv.kext/"
-test -d /Library/Extensions/VBoxUSB.kext/ && my_directories="$my_directories /Library/Extensions/VBoxUSB.kext/"
-test -d /Library/Extensions/VBoxNetFlt.kext/ && my_directories="$my_directories /Library/Extensions/VBoxNetFlt.kext/"
-test -d /Library/Extensions/VBoxNetAdp.kext/ && my_directories="$my_directories /Library/Extensions/VBoxNetAdp.kext/"
+test -f "${HOME}/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist" && my_files+=("${HOME}/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist")
+
+test -d /Library/StartupItems/VirtualBox/ && my_directories+=("/Library/StartupItems/VirtualBox/")
+test -d /Library/Receipts/VBoxStartupItems.pkg/ && my_directories+=("/Library/Receipts/VBoxStartupItems.pkg/")
+
+test -d "/Library/Application Support/VirtualBox/LaunchDaemons/" && my_directories+=("/Library/Application Support/VirtualBox/LaunchDaemons/")
+test -d "/Library/Application Support/VirtualBox/VBoxDrv.kext/" && my_directories+=("/Library/Application Support/VirtualBox/VBoxDrv.kext/")
+test -d "/Library/Application Support/VirtualBox/VBoxUSB.kext/" && my_directories+=("/Library/Application Support/VirtualBox/VBoxUSB.kext/")
+test -d "/Library/Application Support/VirtualBox/VBoxNetFlt.kext/" && my_directories+=("/Library/Application Support/VirtualBox/VBoxNetFlt.kext/")
+test -d "/Library/Application Support/VirtualBox/VBoxNetAdp.kext/" && my_directories+=("/Library/Application Support/VirtualBox/VBoxNetAdp.kext/")
+# Pre 4.3.0rc1 locations:
+test -d /Library/Extensions/VBoxDrv.kext/ && my_directories+=("/Library/Extensions/VBoxDrv.kext/")
+test -d /Library/Extensions/VBoxUSB.kext/ && my_directories+=("/Library/Extensions/VBoxUSB.kext/")
+test -d /Library/Extensions/VBoxNetFlt.kext/ && my_directories+=("/Library/Extensions/VBoxNetFlt.kext/")
+test -d /Library/Extensions/VBoxNetAdp.kext/ && my_directories+=("/Library/Extensions/VBoxNetAdp.kext/")
# Tiger support is obsolete, but we leave it here for a clean removing of older
# VirtualBox versions
-test -d /Library/Extensions/VBoxDrvTiger.kext/ && my_directories="$my_directories /Library/Extensions/VBoxDrvTiger.kext/"
-test -d /Library/Extensions/VBoxUSBTiger.kext/ && my_directories="$my_directories /Library/Extensions/VBoxUSBTiger.kext/"
-test -d /Library/Receipts/VBoxKEXTs.pkg/ && my_directories="$my_directories /Library/Receipts/VBoxKEXTs.pkg/"
-
-test -f /usr/bin/VirtualBox && my_files="$my_files /usr/bin/VirtualBox"
-test -f /usr/bin/VBoxManage && my_files="$my_files /usr/bin/VBoxManage"
-test -f /usr/bin/VBoxVRDP && my_files="$my_files /usr/bin/VBoxVRDP"
-test -f /usr/bin/VBoxHeadless && my_files="$my_files /usr/bin/VBoxHeadless"
-test -f /usr/bin/vboxwebsrv && my_files="$my_files /usr/bin/vboxwebsrv"
-test -f /usr/bin/VBoxBalloonCtrl && my_files="$my_files /usr/bin/VBoxBalloonCtrl"
-test -f /usr/bin/VBoxAutostart && my_files="$my_files /usr/bin/VBoxAutostart"
-test -f /usr/bin/vbox-img && my_files="$my_files /usr/bin/vbox-img"
-test -d /Library/Receipts/VirtualBoxCLI.pkg/ && my_directories="$my_directories /Library/Receipts/VirtualBoxCLI.pkg/"
-
-test -d /Applications/VirtualBox.app/ && my_directories="$my_directories /Applications/VirtualBox.app/"
-test -d /Library/Receipts/VirtualBox.pkg/ && my_directories="$my_directories /Library/Receipts/VirtualBox.pkg/"
+test -d /Library/Extensions/VBoxDrvTiger.kext/ && my_directories+=("/Library/Extensions/VBoxDrvTiger.kext/")
+test -d /Library/Extensions/VBoxUSBTiger.kext/ && my_directories+=("/Library/Extensions/VBoxUSBTiger.kext/")
+test -d /Library/Receipts/VBoxKEXTs.pkg/ && my_directories+=("/Library/Receipts/VBoxKEXTs.pkg/")
+
+test -f /usr/bin/VirtualBox && my_files+=("/usr/bin/VirtualBox")
+test -f /usr/bin/VBoxManage && my_files+=("/usr/bin/VBoxManage")
+test -f /usr/bin/VBoxVRDP && my_files+=("/usr/bin/VBoxVRDP")
+test -f /usr/bin/VBoxHeadless && my_files+=("/usr/bin/VBoxHeadless")
+test -f /usr/bin/vboxwebsrv && my_files+=("/usr/bin/vboxwebsrv")
+test -f /usr/bin/VBoxBalloonCtrl && my_files+=("/usr/bin/VBoxBalloonCtrl")
+test -f /usr/bin/VBoxAutostart && my_files+=("/usr/bin/VBoxAutostart")
+test -f /usr/bin/vbox-img && my_files+=("/usr/bin/vbox-img")
+test -d /Library/Receipts/VirtualBoxCLI.pkg/ && my_directories+=("/Library/Receipts/VirtualBoxCLI.pkg/")
+test -f /Library/LaunchDaemons/org.virtualbox.startup.plist && my_files+=("/Library/LaunchDaemons/org.virtualbox.startup.plist")
+
+test -d /Applications/VirtualBox.app/ && my_directories+=("/Applications/VirtualBox.app/")
+test -d /Library/Receipts/VirtualBox.pkg/ && my_directories+=("/Library/Receipts/VirtualBox.pkg/")
# legacy
-test -d /Library/Receipts/VBoxDrv.pkg/ && my_directories="$my_directories /Library/Receipts/VBoxDrv.pkg/"
-test -d /Library/Receipts/VBoxUSB.pkg/ && my_directories="$my_directories /Library/Receipts/VBoxUSB.pkg/"
+test -d /Library/Receipts/VBoxDrv.pkg/ && my_directories+=("/Library/Receipts/VBoxDrv.pkg/")
+test -d /Library/Receipts/VBoxUSB.pkg/ && my_directories+=("/Library/Receipts/VBoxUSB.pkg/")
# python stuff
python_versions="2.3 2.5 2.6 2.7"
for p in $python_versions; do
- test -f /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.py && my_files="$my_files /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.py"
- test -f /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.pyc && my_files="$my_files /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.pyc"
- test -f /Library/Python/$p/site-packages/vboxapi/__init__.py && my_files="$my_files /Library/Python/$p/site-packages/vboxapi/__init__.py"
- test -f /Library/Python/$p/site-packages/vboxapi/__init__.pyc && my_files="$my_files /Library/Python/$p/site-packages/vboxapi/__init__.pyc"
- test -f /Library/Python/$p/site-packages/vboxapi-1.0-py$p.egg-info && my_files="$my_files /Library/Python/$p/site-packages/vboxapi-1.0-py$p.egg-info"
- test -d /Library/Python/$p/site-packages/vboxapi/ && my_directories="$my_directories /Library/Python/$p/site-packages/vboxapi/"
+ test -f /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.py && my_files+=("/Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.py")
+ test -f /Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.pyc && my_files+=("/Library/Python/$p/site-packages/vboxapi/VirtualBox_constants.pyc")
+ test -f /Library/Python/$p/site-packages/vboxapi/__init__.py && my_files+=("/Library/Python/$p/site-packages/vboxapi/__init__.py")
+ test -f /Library/Python/$p/site-packages/vboxapi/__init__.pyc && my_files+=("/Library/Python/$p/site-packages/vboxapi/__init__.pyc")
+ test -f /Library/Python/$p/site-packages/vboxapi-1.0-py$p.egg-info && my_files+=("/Library/Python/$p/site-packages/vboxapi-1.0-py$p.egg-info")
+ test -d /Library/Python/$p/site-packages/vboxapi/ && my_directories+=("/Library/Python/$p/site-packages/vboxapi/")
done
#
# Collect KEXTs to remove.
# Note that the unload order is significant.
#
-my_kexts=""
+declare -a my_kexts
for kext in org.virtualbox.kext.VBoxUSB org.virtualbox.kext.VBoxNetFlt org.virtualbox.kext.VBoxNetAdp org.virtualbox.kext.VBoxDrv; do
if /usr/sbin/kextstat -b $kext -l | grep -q $kext; then
- my_kexts="$my_kexts $kext"
+ my_kexts+=("$kext")
fi
done
#
+# Collect packages to forget
+#
+my_pb='org\.virtualbox\.pkg\.'
+my_pkgs=`/usr/sbin/pkgutil --pkgs="${my_pb}vboxkexts|${my_pb}vboxstartupitems|${my_pb}virtualbox|${my_pb}virtualboxcli"`
+
+#
# Did we find anything to uninstall?
#
-if test -z "$my_directories" -a -z "$my_files" -a -z "$my_kexts"; then
- echo "No VirtualBox files, directories or KEXTs to uninstall."
+if test -z "${my_directories[*]}" -a -z "${my_files[*]}" -a -z "${my_kexts[*]}" -a -z "$my_pkgs"; then
+ echo "No VirtualBox files, directories, KEXTs or packages to uninstall."
echo "Done."
exit 0;
fi
@@ -120,7 +136,7 @@ fi
#
# Note! comm isn't supported on Tiger, so we make -c to do the stripping.
#
-my_processes="`ps -axco 'pid uid command' | grep -wEe '(VirtualBox|VirtualBoxVM|VBoxManage|VBoxHeadless|vboxwebsrv|VBoxXPCOMIPCD|VBoxSVC|VBoxNetDHCP)' | grep -vw grep | grep -vw VirtualBox_Uninstall.tool | tr '\n' '\a'`";
+my_processes="`ps -axco 'pid uid command' | grep -wEe '(VirtualBox|VirtualBoxVM|VBoxManage|VBoxHeadless|vboxwebsrv|VBoxXPCOMIPCD|VBoxSVC|VBoxNetDHCP|VBoxNetNAT)' | grep -vw grep | grep -vw VirtualBox_Uninstall.tool | tr '\n' '\a'`";
if test -n "$my_processes"; then
echo 'Warning! Found the following active VirtualBox processes:'
echo "$my_processes" | tr '\a' '\n'
@@ -144,16 +160,22 @@ fi
# Display the files and directories that will be removed
# and get the user's consent before continuing.
#
-if test -n "$my_files" -o -n "$my_directories"; then
+if test -n "${my_files[*]}" -o -n "${my_directories[*]}"; then
echo "The following files and directories (bundles) will be removed:"
- for file in $my_files; do echo " $file"; done
- for dir in $my_directories; do echo " $dir"; done
+ for file in "${my_files[@]}"; do echo " $file"; done
+ for dir in "${my_directories[@]}"; do echo " $dir"; done
+ echo ""
fi
-if test -n "$my_kexts"; then
-echo "And the following KEXTs will be unloaded:"
- for kext in $my_kexts; do echo " $kext"; done
+if test -n "${my_kexts[*]}"; then
+ echo "And the following KEXTs will be unloaded:"
+ for kext in "${my_kexts[@]}"; do echo " $kext"; done
+ echo ""
+fi
+if test -n "$my_pkgs"; then
+ echo "And the traces of following packages will be removed:"
+ for kext in $my_pkgs; do echo " $kext"; done
+ echo ""
fi
-echo ""
if test "$my_default_prompt" != "Yes"; then
echo "Do you wish to uninstall VirtualBox (Yes/No)?"
@@ -182,8 +204,8 @@ echo "because some of the installed files cannot be removed by a normal"
echo "user. You may be prompted for your password now..."
echo ""
-if test -n "$my_files" -o -n "$my_directories"; then
- /usr/bin/sudo -p "Please enter %u's password:" /bin/rm -Rf $my_files $my_directories
+if test -n "${my_files[*]}" -o -n "${my_directories[*]}"; then
+ /usr/bin/sudo -p "Please enter %u's password:" /bin/rm -Rf "${my_files[@]}" "${my_directories[@]}"
my_rc=$?
if test "$my_rc" -ne 0; then
echo "An error occurred durning 'sudo rm', there should be a message above. (rc=$my_rc)"
@@ -196,7 +218,7 @@ if test -n "$my_files" -o -n "$my_directories"; then
fi
my_rc=0
-for kext in $my_kexts; do
+for kext in "${my_kexts[@]}"; do
echo unloading $kext
/usr/bin/sudo -p "Please enter %u's password (unloading $kext):" /sbin/kextunload -m $kext
my_rc2=$?
@@ -208,10 +230,17 @@ for kext in $my_kexts; do
fi
done
if test "$my_rc" -eq 0; then
- echo "Successfully uninstalled VirtualBox."
+ echo "Successfully unloaded VirtualBox kernel extensions."
else
- echo "Failed to unload on or more KEXTs, please reboot the machine to complete the uninstall."
+ echo "Failed to unload one or more KEXTs, please reboot the machine to complete the uninstall."
+ exit 1;
fi
+
+# Cleaning up pkgutil database
+for my_pkg in $my_pkgs; do
+ /usr/bin/sudo -p "Please enter %u's password (removing $my_pkg):" /usr/sbin/pkgutil --forget "$my_pkg"
+done
+
echo "Done."
exit 0;