VirtualBox_Uninstall.tool revision 2009785c2bc1d376c4919f55ddba552a22e1ce26
2d0611ffc9f91c5fc2ddccb93f9a3d17791ae650takashi#!/bin/sh
2d0611ffc9f91c5fc2ddccb93f9a3d17791ae650takashi#
dc0d8d65d35787d30a275895ccad8d8e1b58a5ednd# VirtualBox Uninstaller Script.
dc0d8d65d35787d30a275895ccad8d8e1b58a5ednd#
dc0d8d65d35787d30a275895ccad8d8e1b58a5ednd# Copyright (C) 2007-2010 Oracle Corporation
a78048ccbdb6256da15e6b0e7e95355e480c2301nd#
0066eddda7203f6345b56f77d146a759298dc635gryzor# This file is part of VirtualBox Open Source Edition (OSE), as
0066eddda7203f6345b56f77d146a759298dc635gryzor# available from http://www.virtualbox.org. This file is free software;
0066eddda7203f6345b56f77d146a759298dc635gryzor# you can redistribute it and/or modify it under the terms of the GNU
0066eddda7203f6345b56f77d146a759298dc635gryzor# General Public License (GPL) as published by the Free Software
6ae232055d4d8a97267517c5e50074c2c819941and# Foundation, in version 2 as it comes in the "COPYING" file of the
40f659ca3ad0b434256bb0af6170bbcdcf5e2cfdyoshiki# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
6ae232055d4d8a97267517c5e50074c2c819941and# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
40f659ca3ad0b434256bb0af6170bbcdcf5e2cfdyoshiki#
a78048ccbdb6256da15e6b0e7e95355e480c2301nd
a78048ccbdb6256da15e6b0e7e95355e480c2301nd# Override any funny stuff from the user.
a78048ccbdb6256da15e6b0e7e95355e480c2301ndexport PATH="/bin:/usr/bin:/sbin:/usr/sbin:$PATH"
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi#
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi# Display a simple welcome message first.
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi#
echo ""
echo "Welcome to the VirtualBox uninstaller script."
echo ""
#
# Check for arguments and display
#
my_default_prompt=0
if test "$#" != "0"; then
if test "$#" != "1" -o "$1" != "--unattended"; then
echo "Error: Unknown argument(s): $*"
echo ""
echo "Usage: uninstall.sh [--unattended]"
echo ""
echo "If the '--unattended' option is not given, you will be prompted"
echo "for a Yes/No before doing the actual uninstallation."
echo ""
exit 4;
fi
my_default_prompt="Yes"
fi
#
# Collect directories and files to remove.
# Note: Do NOT attempt adding directories or filenames with spaces!
#
my_directories=""
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/"
# 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 -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/"
# 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/"
# python stuff
python_versions="2.3 2.5 2.6"
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/"
done
#
# Collect KEXTs to remove.
# Note that the unload order is significant.
#
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"
fi
done
#
# 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."
echo "Done."
exit 0;
fi
#
# Look for running VirtualBox processes and warn the user
# if something is running. Since deleting the files of
# running processes isn't fatal as such, we will leave it
# to the user to choose whether to continue or not.
#
# 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'`";
if test -n "$my_processes"; then
echo 'Warning! Found the following active VirtualBox processes:'
echo "$my_processes" | tr '\a' '\n'
echo ""
echo "We recommend that you quit all VirtualBox processes before"
echo "uninstalling the product."
echo ""
if test "$my_default_prompt" != "Yes"; then
echo "Do you wish to continue none the less (Yes/No)?"
read my_answer
if test "$my_answer" != "Yes" -a "$my_answer" != "YES" -a "$my_answer" != "yes"; then
echo "Aborting uninstall. (answer: '$my_answer')".
exit 2;
fi
echo ""
my_answer=""
fi
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
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
fi
if test -n "$my_kexts"; then
echo "And the following KEXTs will be unloaded:"
for kext in $my_kexts; do echo " $kext"; done
fi
echo ""
if test "$my_default_prompt" != "Yes"; then
echo "Do you wish to uninstall VirtualBox (Yes/No)?"
read my_answer
if test "$my_answer" != "Yes" -a "$my_answer" != "YES" -a "$my_answer" != "yes"; then
echo "Aborting uninstall. (answer: '$my_answer')".
exit 2;
fi
echo ""
fi
#
# Display the sudo usage instructions and execute the command.
#
echo "The uninstallation processes requires administrative privileges"
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
my_rc=$?
if test "$my_rc" -ne 0; then
echo "An error occured durning 'sudo rm', there should be a message above. (rc=$my_rc)"
test -x /usr/bin/sudo || echo "warning: Cannot find /usr/bin/sudo or it's not an executable."
test -x /bin/rm || echo "warning: Cannot find /bin/rm or it's not an executable"
echo ""
echo "The uninstall failed. Please retry."
exit 1;
fi
fi
my_rc=0
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=$?
if test "$my_rc2" -ne 0; then
echo "An error occured durning 'sudo /sbin/kextunload -m $kext', there should be a message above. (rc=$my_rc2)"
test -x /usr/bin/sudo || echo "warning: Cannot find /usr/bin/sudo or it's not an executable."
test -x /sbin/kextunload || echo "warning: Cannot find /sbin/kextunload or it's not an executable"
my_rc=$my_rc2
fi
done
if test "$my_rc" -eq 0; then
echo "Successfully uninstalled VirtualBox."
else
echo "Failed to unload on or more KEXTs, please reboot the machine to complete the uninstall."
fi
echo "Done."
exit 0;