zoukankan      html  css  js  c++  java
  • virtualbox和vagrant卸载脚本在macbook

    virtualbox和vagrant在macbook版本的安装文件内,都有一个卸载脚本uninstall.tool

    vagrant2.1.5卸载脚本:

    #!/usr/bin/env bash
    
    #----------------------------------------------------------------------
    # Functions
    #----------------------------------------------------------------------
    # Exits the script with the given exit code after waiting
    # for a keypress.
    #
    # @param [Integer] $1 exit code.
    function key_exit() {
        echo "Press any key to exit."
        read
        exit $1
    }
    
    # Appends a value to an array.
    #
    # @param [String] $1 Name of the variable to modify
    # @param [String] $2 Value to append
    function append() {
        eval $1[${#$1[*]}]=$2
    }
    
    #----------------------------------------------------------------------
    # Script
    #----------------------------------------------------------------------
    # Collect the directories and files to remove
    my_files=()
    append my_files "/opt/vagrant"
    append my_files "/usr/local/bin/vagrant"
    
    # Print the files and directories that are to be removed and verify
    # with the user that that is what he/she really wants to do.
    echo "The following files and directories will be removed:"
    for file in "${my_files[@]}"; do
        echo "    $file"
    done
    
    echo ""
    echo "Do you wish to uninstall Vagrant (Yes/No)?"
    read my_answer
    if [ "$my_answer" != "Yes" ]; then
        echo "Aborting install. (answer: ${my_answer})"
        key_exit 2
    fi
    
    # Initiate the actual uninstall, which requires admin privileges.
    echo "The uninstallation process requires administrative privileges"
    echo "because some of the installed files cannot be removed by a"
    echo "normal user. You may now be prompted for a password..."
    echo ""
    
    # Use AppleScript so we can use a graphical `sudo` prompt.
    # This way, people can enter the username they wish to use
    # for sudo, and it is more Apple-like.
    osascript -e "do shell script "/bin/rm -Rf ${my_files[*]}" with administrator privileges"
    
    # Verify that the uninstall succeeded by checking whether every file
    # we meant to remove is actually removed.
    for file in "${my_files[@]}"; do
        if [ -e "${file}" ]; then
            echo "An error must have occurred since a file that was supposed to be"
            echo "removed still exists: ${file}"
            echo ""
            echo "Please try again."
            key_exit 1
        fi
    done
    
    echo "Successfully uninstalled Vagrant."
    echo "Done."
    key_exit 0

    VirtualBox5.2.18卸载脚本:

    #!/bin/bash
    # $Id: VirtualBox_Uninstall.tool 118839 2017-10-28 15:14:05Z bird $
    ## @file
    # VirtualBox Uninstaller Script.
    #
    
    #
    # Copyright (C) 2007-2017 Oracle Corporation
    #
    # This file is part of VirtualBox Open Source Edition (OSE), as
    # available from http://www.virtualbox.org. This file is free software;
    # you can redistribute it and/or modify it under the terms of the GNU
    # General Public License (GPL) as published by the Free Software
    # Foundation, in version 2 as it comes in the "COPYING" file of the
    # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
    # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    #
    
    # Override any funny stuff from the user.
    export PATH="/bin:/usr/bin:/sbin:/usr/sbin:$PATH"
    
    #
    # Display a simple welcome message first.
    #
    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!
    #
    declare -a my_directories
    declare -a my_files
    
    # Users files first
    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+=("/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/VBoxBugReport                     && my_files+=("/usr/bin/VBoxBugReport")
    test -f /usr/bin/VBoxBalloonCtrl                   && my_files+=("/usr/bin/VBoxBalloonCtrl")
    test -f /usr/bin/VBoxAutostart                     && my_files+=("/usr/bin/VBoxAutostart")
    test -f /usr/bin/VBoxDTrace                        && my_files+=("/usr/bin/VBoxDTrace")
    test -f /usr/bin/vbox-img                          && my_files+=("/usr/bin/vbox-img")
    test -f /usr/local/bin/VirtualBox                  && my_files+=("/usr/local/bin/VirtualBox")
    test -f /usr/local/bin/VBoxManage                  && my_files+=("/usr/local/bin/VBoxManage")
    test -f /usr/local/bin/VBoxVRDP                    && my_files+=("/usr/local/bin/VBoxVRDP")
    test -f /usr/local/bin/VBoxHeadless                && my_files+=("/usr/local/bin/VBoxHeadless")
    test -f /usr/local/bin/vboxwebsrv                  && my_files+=("/usr/local/bin/vboxwebsrv")
    test -f /usr/local/bin/VBoxBugReport               && my_files+=("/usr/local/bin/VBoxBugReport")
    test -f /usr/local/bin/VBoxBalloonCtrl             && my_files+=("/usr/local/bin/VBoxBalloonCtrl")
    test -f /usr/local/bin/VBoxAutostart               && my_files+=("/usr/local/bin/VBoxAutostart")
    test -f /usr/local/bin/VBoxDTrace                  && my_files+=("/usr/local/bin/VBoxDTrace")
    test -f /usr/local/bin/vbox-img                    && my_files+=("/usr/local/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+=("/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+=("/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.
    #
    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+=("$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[*]}"  -a  -z "$my_pkgs"; then
        echo "No VirtualBox files, directories, KEXTs or packages 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|VBoxNetNAT)' | grep -vw grep | grep -vw VirtualBox_Uninstall.tool | tr '
    ' 'a'`";
    if test -n "$my_processes"; then
        echo 'Warning! Found the following active VirtualBox processes:'
        echo "$my_processes" | tr 'a' '
    '
        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
        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
        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
    
    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
    
    #
    # Unregister has to be done before the files are removed.
    #
    LSREGISTER=/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
    if [ -e ${LSREGISTER} ]; then
        ${LSREGISTER} -u /Applications/VirtualBox.app > /dev/null
        ${LSREGISTER} -u /Applications/VirtualBox.app/Contents/Resources/vmstarter.app > /dev/null
    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 occurred 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 occurred 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 unloaded VirtualBox kernel extensions."
    else
        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;
  • 相关阅读:
    Tornado session 插件 pycket 定制时间和时间续租
    为Tornado框架加上基于Redis或Memcached的session 【第三方】
    正则表达式大全 --【Python举例】
    Django 最好的缓存memcached的使用 小记
    Django 1.9 admin 使用suit 小记
    IntelliJ IDEA 注册码
    Python 爬虫抓取代理IP,并检测联通性
    MySQL自定义函数
    css补充知识
    sqlalchemy 知识补充
  • 原文地址:https://www.cnblogs.com/litifeng/p/9664227.html
Copyright © 2011-2022 走看看