簡體   English   中英

即使使用安全啟動也如何在Linux上安裝VirtualBox-Bash腳本

[英]How to install VirtualBox on linux even with secure boot - bash script

我構建了一個簡單的bash腳本,即使在安全啟動系統上,該腳本也應能夠安裝VirtualBox存儲庫和VirtualBox。
它利用了我自己的beta版本的bash函數庫。
因此,如果您在安全啟動系統上運行VirtualBox時遇到問題,則適合您。

PS我假設已安裝rpmfusion

評論和幫助使其在其他發行版和版本上運行將不勝感激。 隨着評論的到來,我將不斷更新此腳本

#!/bin/bash

############################################################################
# #
# @author Øystein "iRock" Jacobsen #
# @email irock.dev@gmail.com #
# @title VirtualBox.sh #
# @date 06.04.15 - 19.03.17 #
# @description Installs VirtualBox repo and VirtualBox #
# #
############################################################################

# -= SCRIPT VARIABLES =- #
install=1 # Install / uninstall ( 1 / -1 ).
package="VirtualBox-5.1 kernel-devel gcc dkms" # Packages to install.
user= ``
package_url="" # Url to said package.
archive_version="" # Version of archive to download.
archive="" # Archive to dowload and install.
archive_url="" # Url to said archive.
remove_archive=1 # Remove archive after install ( 0 / 1 ).
install_path="" # Extraction path.
icon_path="$install_path/icon.png" # Path to install icon.
icon_url="" # Url to icon.
debug=1 # Debugging.
log=1 # Logging ( 0 / 1 / 2 ) ( None / File / File & Terminal).
log_file="$script_path/$script_name.log" # Log file name ($0.log).

# -= IMPORTING FUNCTIONS =-#
source "`dirname "$0"`/framework/FunctionLibrary.sh"                        # Importing FunctionLibrary.sh


# -= ELEVATING PRIVILEGES =- #
elevate_privileges                                                          # Elevate privileges


# -= CORE VARIABLES =- #
core_variables                                                              # Determines system-variables       


# -= PRE INSTALL =- #
repo_url="http://download.virtualbox.org/virtualbox/$pkg/`echo $distro | tr '[:upper:]' '[:lower:]'`/virtualbox.repo"   # URL to repo.

# -= INSTALL REPOSITORY =- #                                                                
if [ $pkg == "rpm" ]; then
    install_repo "1" "$repo_url" "https://www.virtualbox.org/download/oracle_vbox.asc"
elif [ $pkg == "deb" ]; then
    install_repo "1" "$repo_url" "https://www.virtualbox.org/download/oracle_vbox_2016.asc" "https://www.virtualbox.org/download/oracle_vbox.asc"
fi


# -= INSTALL =- #
install_pkg "1" $package


# -= POST INSTALL =- #
if [ "`getent group vboxusers`" == "" ]; then                                       # If vboxusers group doesn't exist.
    groupadd vboxusers                                                                  # Create vboxusers group.
fi
usermod -a -G vboxusers "$user"                                                     # Add user to vboxusers.


# BUILD DRIVERS #
/usr/lib/virtualbox/vboxdrv.sh setup                                                # Build kernel modules.
#/etc/init.d/vboxdrv setup                                                          # Build kernel modules.
#/sbin/rcvboxdrv setup                                                              # Build kernel modules.
#!/bin/bash
#############################################################################
#                                                                           #
#   @author         Øystein "iRock" Jacobsen                                #
#   @email          irock.dev@gmail.com                                     #
#   @title          Function Library                                        #
#   @date           11.06.2016 - ?                                          #
#   @description    A library of often used functions                       #
#                                                                           #
#############################################################################


#################################################
#           -= ELEVATE PRIVILEGES =-            #
# @description: Elevates privileges to root and #
#               runs the calling script again.  #
#################################################
function elevate_privileges {
    #if [ $EUID != 0 ]; then                                                                # If not root
    if [ `whoami` != root ]; then
        if [ $debug != 0 ]; then echo "Elevating privileges to root "; echo; fi
        if [ -t 1 ]; then                                                                   # If run from terminal
            sudo sh "$0" "$@"                                                                   # Elevating to root in terminal
            exit 0
        elif [ `gnome-shell --version | cut -d " " -f3 | cut -d "." -f1` -le 2 ]; then      # If run from Gnome 1 or 2
            gksudo "$0" "$@"                                                                    # Elevating to root in Gnome 1 or 2
            exit 0
        elif [ `gnome-shell --version | cut -d " " -f3 | cut -d "." -f1` -ge 3 ]; then      # If Gnome version is 3
            pkexec "$0" "$@"                                                                # Elevating to root in Gnome 3
            exit 0
        else                                                                                # If desktop environment is undetermined
            if [ $debug != 0 ]; then echo "Can't determine desktop environment"; echo "Exiting"; echo; fi
            zenity --error --text="Can't determine desktop environment"
            exit -1
        fi
    fi
}


#################################################
#           -= ENUMERATE DISTRO =-              #
# @description: Determines distribution,        #
#               release, kernel and             #
#               architecture                    #
# @TODO:        Add distro unknown!             #
#################################################
function enumerate_distro {
    if [ $debug == 0 ]; then echo "Determining distro"; fi

    if [ -f /etc/lsb-release ]; then                                                        # If "linux standard base" is present
        distro=`cat /etc/lsb-release | cut -d " " -f1`
        release=`cat /etc/lsb-release | cut -d " " -f3`
    elif [ -f /etc/debian_version ]; then                                                   # If Debian based distro
        distro="Debian"  # XXX or Ubuntu??
        release=`cat /etc/debian_version`
    elif [ -f /etc/redhat-release ]; then                                                   # If redhat based distro
        distro=`cat /etc/redhat-release | cut -d  " " -f1`
        release=`cat /etc/redhat-release | cut -d " " -f3`
    else                                                                                    # Else Install lsb
        if [ `rpm -qa dnf` -ne "" ]; then
            dnf -y install redhat-lsb-core
        elif [ `rpm -qa yum` -ne "" ]; then
            yum -y install redhat
        fi  

        distro=`lsb_release -si`
        release=`lsb_release -sr`
    fi
    #distro=`lsb_release -si`   #`lsb_release -i | cut -d":" -f2 | xargs`                   # Distrobution name (Fedora / Debian / Ubuntu / Kali)
    #release=`lsb_release -sr`  #`rpm -E %distro`                                           # Release number (22 / 8.2 / 15.04 / 2.0)
    kernel=`uname -r | cut -d"." -f1-3`                                                     # Kernel version (4.1.6-200)
    arch=`uname -m`             #$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')                # Architecture (x86_64 / i686)

    # if [ -z "$distro" ] || [ -z "$relese" ] || [ -z #$kernel ] || [ z- "$arch ]; then 
    # echo "echo Could not enumerate distro!"
    # exit -1
    if [ $debug != 0 ]; then echo "$distro $release - $kernel-$arch"; echo; fi
}


#################################################
#       -= DETERMINE PACKAGE ENVIRONMENT =-     #
# @description: Determines which packages and   #
#               packamanager the system uses    #
#################################################
function determin_pkgman {
    if [ -z "$distro" ]; then
        enumerate_distro
    fi

    if [ $debug != 0 ]; then echo "Determining package manager"; fi
    case "$distro" in
        Fedora)
            if [ $release -le 21 ]; then
                pkgman="yum"
            elif [ $release -ge 22 ]; then
                pkgman="dnf"
            fi
            pkg="rpm"
            ;;
        Debian)
            pkgman="apt-get"
            pkg="deb"
            ;;
        Ubuntu)
            pkgman="apt-get"
            pkg="deb"
            ;;
        Kali)
            pkgman="apt-get"
            pkg="deb"
            ;;
        Raspbian)
            pkgman="apt-get"
            pkg="deb"
            ;;
    esac


    if [ $debug != 0 ]; then echo "$pkgman / $pkg"; echo; fi
}


#################################################
#           -= ENUMERATE SCRIPT =-              #
# @description: Determines script related info  #
#################################################
function enumerate_script { 
    script_name=`basename "$0" ".sh"`                                                       # Script name
    script_ext=`basename "$0" "$script_name"`                                               # Script extension
    script_path="`dirname "$0"`"                                                            # Script path
}


#################################################
#           -= CORE VARIABLES =-                #
# @description: Determines operating system and #
#               script related variables        #
#################################################
function core_variables {
    enumerate_distro                                                                        # Determine distro, release, kernel and architecture.

    determin_pkgman                                                                         # Determines package-manager.

    enumerate_script                                                                        # Determines script-path, name and extension.
}


#################################################
#           -= GET USER INPUT =-                #
# @description: Get userinput from terminal.    #
#################################################
function read_input {
    read input                                                                              # Reads a line from the terminal.
}


#################################################
#           -= CURRENT DATE =-                  #
# @description: Get userinput from terminal.    #
#################################################
function get_date {
    date +%Y%m%d                                                                            # Writes todays date in YYYYMMDD format.
}


#################################################
#           -= ADD USER =-                      #
# @description: Adds a new user to linux.       #
# @parameters:                                  #
#           $1      username        (string)    #
#           $2-$N   groups          (string)    #
#################################################
function add_user {
    echo "Adding user: $1"
    useradd "$1"                                                                            # Add new user
    passwd "$1"                                                                             # Prompt for password
    for group in "${@:2}"; do                                                               # For all arguments except first
        adduser $group                                                                      # Add user to group
    done
    echo
}


#################################################
#               -= SET HOSTNAME =-              #
# @description: Sets the hostname of the system.#
# @parameters:                                  #
#           $1      hostname        (string)    #
#################################################
function set_hostname {
    echo "Setting hostname: $1"
    temp=`hostname`                                                                         # Find old hostname
    sed -i "s/$temp/$1/" /etc/hostname                                                      # Replacing old hostname with new
    sed -i "s/$temp/$1/" /etc/hosts                                                         # Replacing old hostname in known hosts
    hostname $1                                                                             # Setting hostname for current session
    echo
}

#################################################
#           -= IS PACKAGE INSTALLED =-          #
# @description: Determine if package is         #
#               installed.                      #
# @parameters:                                  #
#           $1      install / remove    (1/0)   #
#           $2      package name                #
#################################################
function is_pkg_installed {
    if [ -z $pkgman ]; then
        determin_pkgman
    fi

    which $2
    if [[ $? == 1 ] && [ $1 == 1 ]]; then
        install_pkg $1 $2
    fi
}


#################################################
#           -= INSTALL PACKAGES =-              #
# @description: Install/Remove packages         #
# @parameters:                                  #
#           $1:     install / remove    (1/0)   #   
#           $2-$N:  packages to handle          #
#################################################
function install_pkg {
    if [ -z $pkgman ]; then
        determin_pkgman
    fi


    if [ $1 == 1 ]; then
        if [ $debug != 0 ]; then echo "Installing ${@:2} with $pkgman"; fi
        $pkgman -y install "${@:2}"
    elif [ $1 == 0 ]; then
        if [ $debug != 0 ]; then echo "Removing ${@:2} with $pkgman"; fi
        $pkgman -y remove "${@:2}"
    fi

    if [ $debug != 0 ]; then echo; fi
}


#################################################
#           -= INSTALL ARCHIVE =-               #
# @description: Install\Remove archive          #
# @parameters:                                  #
#           $1:     install / remove    (1/0)   #
#           $2:     install path        (string)#
#           $3:     url to archive      (string)#
#################################################
function install_arch {     
    if [ $1 == 1 ]; then
        if [ ! -e `basename "$3"` ]; then               
            if [ $debug != 0 ]; then echo "Downloading $3"; fi  
            wget "$3"
            echo
        fi
        if [ $debug != 0 ]; then echo "Installing `basename "$3"` to $2"; fi
        if [ ! -d "$2" ]; then
            mkdir "$2"
        fi
        tar -xf `basename "$3"` -C "$2"
        if [ $debug != 0 ]; then echo "Deleting `basename "$3"`"; fi
        rm `basename "$3"`
    elif [ $1 == 0 ]; then
        if [ $debug != 0 ]; then echo "Deleting $2"; fi
        rm -rf "$2"
    fi

    if [ $debug != 0 ]; then echo; fi
}


#################################################
#           -= INSTALL IMAGE =-                 #
# @description: Install an image to a device.   #
# @parameters:                                  #   
#           $1      image_path      (string)    #
#           $2      install_device  (string)    #
#################################################
function install_image {
    echo "Installing $1 to $2"
    if [ -e $1 ]; then
        if [ -e "/dev/$2" ]; then
            echo "Unmounting:"                                          # Unmount all partitions device
            df -h | grep "$2"
            df -h | grep "2" | cut -d' ' -f1 | while read line ; do umount $line ; done
            echo
            echo "Installing:"
            dd bs=4M if="$1" of="/dev/$2"                               # Install image to device
            sync                                                        # Flush cache 
            echo "Done"
        else
            echo "Could not find $2"
        fi
    else
        echo "Could not find image $1"
    fi
    echo
}


#################################################
#           -= INSTALL REPOSITORY =-            #
# @description: Install/Remove repository       #
# @parameters:                                  #
#           $1:     install / remove    (1/0)   #
#           $2:     repository package url      #
#           $3-$N:  repository gpg key url      #
# @TODO:    Add apt-get repo download           #
#################################################   
function install_repo {
    if [ -z $pkgman ]; then
        determin_pkgman
    fi

    if [ $debug != 0 ]; then echo "`date +%Y/%m/%d-%H:%M` - Installing $2"; fi

    repo_ext=`basename "$2" | awk -F "." '{print $NF}'`         # Repository extension
    repo_name=`basename "$2" ".$repo_ext"`                      # Repository name

    if [ $pkgman == "yum" ] && [ "$repo_ext" == "rpm" ]; then
        $pkgman config-manager --add-repo "$2"
    elif [ $pkgman == "yum" ] && [ "$repo_ext" == "repo" ]; then
        rpm --import -f $2
    elif [ $pkgman == "dnf" ] && [ "$repo_ext" == "rpm" ]; then
        $pkgman -y install "$2"
    elif [ $pkgman == "dnf" ] && [ "$repo_ext" == "repo" ]; then
        curl -o /etc/yum.repos.d/"$repo_name.$repo_ext" $2
    fi

    if [ $debug != 0 ]; then echo "`date +%Y/%m/%d-%H:%M` - Adding repository gpg keys ${@:3}"; fi
    if [ $pkg == "rpm" ]; then
        for url in ${@:3} ; do
            rpm --import "$url"
        done
    elif [ $pkg == "deb" ]; then
        for url in ${@:3} ; do
            wget -q "$url" -O- | apt-key add -
        done
    fi

    if [ $debug != 0 ]; then echo; fi
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM