1a84601801d5bd045712787a3ef59313795389a1vboxsync#!/bin/sh
1a84601801d5bd045712787a3ef59313795389a1vboxsync#
1a84601801d5bd045712787a3ef59313795389a1vboxsync# VirtualBox Uninstaller Script.
1a84601801d5bd045712787a3ef59313795389a1vboxsync#
1a84601801d5bd045712787a3ef59313795389a1vboxsync# Copyright (C) 2007-2013 Oracle Corporation
1a84601801d5bd045712787a3ef59313795389a1vboxsync#
1a84601801d5bd045712787a3ef59313795389a1vboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
1a84601801d5bd045712787a3ef59313795389a1vboxsync# available from http://www.virtualbox.org. This file is free software;
1a84601801d5bd045712787a3ef59313795389a1vboxsync# you can redistribute it and/or modify it under the terms of the GNU
1a84601801d5bd045712787a3ef59313795389a1vboxsync# General Public License (GPL) as published by the Free Software
1a84601801d5bd045712787a3ef59313795389a1vboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
1a84601801d5bd045712787a3ef59313795389a1vboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
1a84601801d5bd045712787a3ef59313795389a1vboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1a84601801d5bd045712787a3ef59313795389a1vboxsync#
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync# Override any funny stuff from the user.
1a84601801d5bd045712787a3ef59313795389a1vboxsyncexport PATH="/bin:/usr/bin:/sbin:/usr/sbin:$PATH"
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync#
1a84601801d5bd045712787a3ef59313795389a1vboxsync# Display a simple welcome message first.
1a84601801d5bd045712787a3ef59313795389a1vboxsync#
1a84601801d5bd045712787a3ef59313795389a1vboxsyncecho ""
1a84601801d5bd045712787a3ef59313795389a1vboxsyncecho "Welcome to the VirtualBox Guest Additions uninstall script."
1a84601801d5bd045712787a3ef59313795389a1vboxsyncecho ""
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync# Check if user interraction is required to start uninstall process.
1a84601801d5bd045712787a3ef59313795389a1vboxsyncfUnattended=0
1a84601801d5bd045712787a3ef59313795389a1vboxsyncif test "$#" != "0"; then
1a84601801d5bd045712787a3ef59313795389a1vboxsync if test "$#" != "1" -o "$1" != "--unattended"; then
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo "Error: Unknown argument(s): $*"
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo ""
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo "Usage: $0 [--unattended]"
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo ""
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo "If the '--unattended' option is not given, you will be prompted"
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo "for a Yes/No before doing the actual uninstallation."
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo ""
1a84601801d5bd045712787a3ef59313795389a1vboxsync exit 4;
1a84601801d5bd045712787a3ef59313795389a1vboxsync fi
1a84601801d5bd045712787a3ef59313795389a1vboxsync fUnattended="Yes"
1a84601801d5bd045712787a3ef59313795389a1vboxsyncfi
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsyncif test "$fUnattended" != "Yes"; then
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo "Do you wish to continue none the less (Yes/No)?"
1a84601801d5bd045712787a3ef59313795389a1vboxsync read fUnattended
1a84601801d5bd045712787a3ef59313795389a1vboxsync if test "$fUnattended" != "Yes" -a "$fUnattended" != "YES" -a "$fUnattended" != "yes"; then
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo "Aborting uninstall. (answer: '$fUnattended')".
1a84601801d5bd045712787a3ef59313795389a1vboxsync exit 2;
1a84601801d5bd045712787a3ef59313795389a1vboxsync fi
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo ""
1a84601801d5bd045712787a3ef59313795389a1vboxsyncfi
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync# Stop services
1a84601801d5bd045712787a3ef59313795389a1vboxsyncecho "Checking running services..."
1a84601801d5bd045712787a3ef59313795389a1vboxsyncunload()
1a84601801d5bd045712787a3ef59313795389a1vboxsync{
1a84601801d5bd045712787a3ef59313795389a1vboxsync ITEM_ID=$1
1a84601801d5bd045712787a3ef59313795389a1vboxsync ITEM_PATH=$2
1a84601801d5bd045712787a3ef59313795389a1vboxsync FORCED_USER=$3
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo "Unloading $ITEM_ID"
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync loaded="NO"
1a84601801d5bd045712787a3ef59313795389a1vboxsync test -n "$(sudo -u "$FORCED_USER" launchctl list | grep $ITEM_ID)" && loaded="YES"
1a84601801d5bd045712787a3ef59313795389a1vboxsync if [ "$loaded" = "YES" ] ; then
1a84601801d5bd045712787a3ef59313795389a1vboxsync sudo -p "Please enter $FORCED_USER's password (unloading $ITEM_ID):" sudo -u "$FORCED_USER" launchctl unload -F "$ITEM_PATH/$ITEM_ID.plist"
1a84601801d5bd045712787a3ef59313795389a1vboxsync fi
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync}
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsyncunload "org.virtualbox.additions.vboxservice" "/Library/LaunchDaemons" "root"
1a84601801d5bd045712787a3ef59313795389a1vboxsyncunload "org.virtualbox.additions.vboxclient" "/Library/LaunchAgents" `whoami`
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync# Unload kernel extensions
1a84601801d5bd045712787a3ef59313795389a1vboxsyncecho "Checking running kernel extensions..."
1a84601801d5bd045712787a3ef59313795389a1vboxsyncitems="VBoxGuest"
1a84601801d5bd045712787a3ef59313795389a1vboxsyncfor item in $items; do
1a84601801d5bd045712787a3ef59313795389a1vboxsync kext_item="org.virtualbox.kext.$item"
1a84601801d5bd045712787a3ef59313795389a1vboxsync loaded=`kextstat | grep $kext_item`
1a84601801d5bd045712787a3ef59313795389a1vboxsync if [ ! -z "$loaded" ] ; then
1a84601801d5bd045712787a3ef59313795389a1vboxsync echo "Unloading $item kernel extension"
1a84601801d5bd045712787a3ef59313795389a1vboxsync sudo -p "Please enter %u's password (unloading $item):" kextunload -b $kext_item
1a84601801d5bd045712787a3ef59313795389a1vboxsync fi
1a84601801d5bd045712787a3ef59313795389a1vboxsyncdone
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync# Remove files and directories
1a84601801d5bd045712787a3ef59313795389a1vboxsyncecho "Checking files and directories..."
1a84601801d5bd045712787a3ef59313795389a1vboxsyncsudo -p "Please enter %u's password (removing files and directories):" rm -rf "/Library/Application Support/VirtualBox Guest Additions"
1a84601801d5bd045712787a3ef59313795389a1vboxsyncsudo -p "Please enter %u's password (removing files and directories):" rm -rf "/Library/Extensions/VBoxGuest.kext"
1a84601801d5bd045712787a3ef59313795389a1vboxsyncsudo -p "Please enter %u's password (removing files and directories):" rm -rf "/Library/LaunchAgents/org.virtualbox.additions.vboxclient.plist"
1a84601801d5bd045712787a3ef59313795389a1vboxsyncsudo -p "Please enter %u's password (removing files and directories):" rm -rf "/Library/LaunchDaemons/org.virtualbox.additions.vboxservice.plist"
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsync# Cleaning up pkgutil database
1a84601801d5bd045712787a3ef59313795389a1vboxsyncecho "Checking package database ..."
1a84601801d5bd045712787a3ef59313795389a1vboxsyncitems="kexts tools-and-services"
1a84601801d5bd045712787a3ef59313795389a1vboxsyncfor item in $items; do
1a84601801d5bd045712787a3ef59313795389a1vboxsync pkg_item="org.virtualbox.pkg.additions.$item"
1a84601801d5bd045712787a3ef59313795389a1vboxsync installed=`pkgutil --pkgs="$pkg_item"`
1a84601801d5bd045712787a3ef59313795389a1vboxsync if [ ! -z "$installed" ] ; then
1a84601801d5bd045712787a3ef59313795389a1vboxsync sudo -p "Please enter %u's password (removing $pkg_item):" pkgutil --forget "$pkg_item"
1a84601801d5bd045712787a3ef59313795389a1vboxsync fi
1a84601801d5bd045712787a3ef59313795389a1vboxsyncdone
1a84601801d5bd045712787a3ef59313795389a1vboxsync
1a84601801d5bd045712787a3ef59313795389a1vboxsyncecho "Done."
1a84601801d5bd045712787a3ef59313795389a1vboxsyncexit 0;