diff --git a/functions b/functions index f9d2e71..a643df5 100644 --- a/functions +++ b/functions @@ -2,7 +2,7 @@ # pyr0ball script functions library # Initial Vars -functionsrev=1.3.0 +functionsrev=1.4.0 #scriptname="${BASH_SOURCE[0]##*/}" #rundir="${BASH_SOURCE[0]%/*}" #rundir_absolute=$(cd $rundir && pwd) @@ -1072,7 +1072,7 @@ check-prbl-version(){ vercomp } -compare-versions() { +compare-versions(){ vercomp $1 $2 case $? in 0) op='=';; @@ -1087,4 +1087,125 @@ compare-versions() { fi } -set-boxtype +identify-system(){ + # OS distribution auto-detection + if type lsb_release >/dev/null 2>&1; then + # linuxbase.org + ID=$(lsb_release -si) + OS=$(lsb_release -si) + VER=$(lsb_release -sr) + elif [ -f /etc/debian_version ]; then + # Older Debian/Ubuntu/etc. + ID=debian + OS=Debian + VER=$(cat /etc/debian_version) + elif [ -f /etc/lsb-release ]; then + # For Arch and some versions of Debian/Ubuntu without lsb_release command + . /etc/lsb-release + ID=$DISTRIB_ID + OS=$DISTRIB_ID + VER=$DISTRIB_RELEASE + VER=${VER:-$LSB_VERSION} + elif [ -f /etc/os-release ]; then + # freedesktop.org arch and systemd + . /etc/os-release + ID=${ID:-VERSION_ID} + ID=${ID:-VERSION} + OS=$NAME + VER=$VERSION_ID + VER=${VER:-$VERSION} + elif [ -f /etc/redhat-release ]; then + # Older Red Hat, CentOS, etc. + OS=$(cat /etc/redhat-release | awk '{print $1}') + else + # Fall back to uname, e.g. "Linux ", also works for BSD, etc. + OS=$(uname -s) + VER=$(uname -r) + fi +} + +ID(){ + boxborder \ + "ID: $ID" \ + "OS: $OS" \ + "VER: $VER" +} + +install_packages(){ + # Separate package names and file arguments + declare -a packages=() + declare -a offline_packages=() + for arg in "$@"; do + if [[ -f $arg ]]; then + offline_packages+=("$arg") + else + packages+=("$arg") + fi + done + # Identify which distro is being run + identify-system + + # Match distribution with available utilities + # TODO: Add package name transformer lists + case $ID in + amzn | centos | fedora | rhel) + if [ "${#packages[@]}" -gt 0 ]; then + sudo yum install -y "${packages[@]}" + fi + if [ "${#offline_packages[@]}" -gt 0 ]; then + sudo rpm -i "${packages[@]}" + fi + ;; + arch | Arch | manjaro) + if [ "${#packages[@]}" -gt 0 ]; then + sudo pacman -Syu + sudo pacman -S "${packages[@]}" + fi + if [ "${#offline_packages[@]}" -gt 0 ]; then + sudo pacman -U "${offline_packages[@]}" + fi + ;; + debian | ubuntu | Ubuntu) + if [ "${#packages[@]}" -gt 0 ]; then + sudo apt-get update + sudo apt-get install "${packages[@]}" + fi + if [ "${#offline_packages[@]}" -gt 0 ]; then + sudo dpkg -i "${offline_packages[@]}" + fi + ;; + opensuse | sles) + if [ "${#packages[@]}" -gt 0 ]; then + sudo zypper refresh + sudo zypper install "${packages[@]}" + fi + if [ "${#offline_packages[@]}" -gt 0 ]; then + sudo rpm -i "${offline_packages[@]}" + fi + ;; + slackware) + if [ "${#packages[@]}" -gt 0 ]; then + for package in "${packages[@]}"; do + sudo installpkg "$package" + done + fi + if [ "${#offline_packages[@]}" -gt 0 ]; then + for package_file in "${offline_packages[@]}"; do + sudo installpkg "$package_file" + done + fi + ;; + brew) + if [ "${#packages[@]}" -gt 0 ]; then + brew install "${packages[@]}" + fi + if [ "${#offline_packages[@]}" -gt 0 ]; then + for package_file in "${offline_packages[@]}"; do + brew install "$package_file" + done + fi + ;; + esac +} + +set-boxtype \ No newline at end of file