From 44673ae150b6dea8ecd7d8f766cec98161225c78 Mon Sep 17 00:00:00 2001 From: alanw Date: Thu, 11 May 2023 16:23:28 -0700 Subject: [PATCH 1/5] added beginning of OS detection and install commands --- functions | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/functions b/functions index 4c6f671..e2e4194 100644 --- a/functions +++ b/functions @@ -1083,4 +1083,69 @@ compare-versions() { fi } +find-pmgr(){ + # OS distribution auto-detection + if type lsb_release >/dev/null 2>&1; then + # linuxbase.org + OS=$(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 + 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 + + # Match distribution with available utilities + case $ID in + amzn | centos | fedora | rhel) + online_pmgr="yum" + offline_pmgr="rpm" + ;; + arch | Arch | manjaro) + online_pmgr="pacman" + offline_pmgr="pacman" + ;; + debian | ubuntu) + online_pmgr="apt-get" + offline_pmgr="dpkg" + ;; + opensuse) + online_pmgr="zypper" + offline_pmgr="zypper" + ;; + slackware) + online_pmgr="slackpkg" + offline_pmgr="installpkg" + ;; + sles) + online_pmgr="zypper" + offline_pmgr="rpm" + ;; + ubuntu + esac + "dpkg" "brew" "yum" "gdebi" "apt-get" "pacman" "emerge" "zypper" "dnf" "rpm" +} + set-boxtype From a0ac60edee2b02c46900a69e9e9d843d7cee005e Mon Sep 17 00:00:00 2001 From: alanw Date: Thu, 11 May 2023 16:38:36 -0700 Subject: [PATCH 2/5] porting over commands from python library --- functions | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 134 insertions(+), 6 deletions(-) diff --git a/functions b/functions index e2e4194..12ca6f3 100644 --- a/functions +++ b/functions @@ -1068,7 +1068,7 @@ check-prbl-version(){ vercomp } -compare-versions() { +compare-versions(){ vercomp $1 $2 case $? in 0) op='=';; @@ -1087,7 +1087,7 @@ find-pmgr(){ # OS distribution auto-detection if type lsb_release >/dev/null 2>&1; then # linuxbase.org - OS=$(lsb_release -si) + ID=$(lsb_release -si) OS=$(lsb_release -si) VER=$(lsb_release -sr) elif [ -f /etc/debian_version ]; then @@ -1105,6 +1105,8 @@ find-pmgr(){ 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} @@ -1127,7 +1129,7 @@ find-pmgr(){ online_pmgr="pacman" offline_pmgr="pacman" ;; - debian | ubuntu) + debian | ubuntu | Ubuntu) online_pmgr="apt-get" offline_pmgr="dpkg" ;; @@ -1143,9 +1145,135 @@ find-pmgr(){ online_pmgr="zypper" offline_pmgr="rpm" ;; - ubuntu esac - "dpkg" "brew" "yum" "gdebi" "apt-get" "pacman" "emerge" "zypper" "dnf" "rpm" + if packageExtension == 'deb' and ipm == 'dpkg': + pmgr = "dpkg" + pre = "" + if commandType == "install": + pre = "echo 'yes' | sudo " + post = " -i " + elif commandType == "queryLocalInstall": + pre = "sudo " + post = " -l "+packageName+" | grep -ic 'no packagesfound\|error'" + elif commandType == "queryLocalVer": + pre = "sudo " + post = " -l "+packageName+" | grep ii" + elif commandType == "remove": + pre = "echo 'yes' | sudo " + post = " -r " + elif commandType == "queryAvailVer": + pre = "sudo " + post = " -I "+packageName+" | grep -i version" + pmgrCMD = pre+ipm+post + + elif ipm == 'pacman': + pmgr = 'pacman' + pre = "sudo " + if commandType == "install": + post = " -S --noconfirm "+packageName + elif commandType == "queryLocalInstall": + pre = "if [[ $(sudo " + post = " -Ss "+packageName+" | grep '/"+packageName+"[^-,^_]' | grep -ic 'installed') == 1 ]] ; then echo 0 ; else echo 1 ; fi" + elif commandType == "queryLocalVersion": + post = " -Ss "+packageName+" | grep '/"+packageName+"[^-,^_]' | grep -i Installed | awk '{print $2}'" + elif commandType == "remove": + post = " -R --noconfirm "+packageName + elif commandType == "queryAvailVer": + post = " -Ss "+packageName+" | grep '/"+packageName+"[^-,^_]' | grep -iv 'installed' | awk '{print $2}'" + pmgrCMD = pre+pmgr+post + + elif ipm == 'apt-get' or ipm == 'apt': + pmgr = "apt" + pre = "sudo " + if commandType == "install": + post = "-get install -y "+packageName + elif commandType == "queryLocalInstall": + post = "-cache policy "+packageName+" | grep -ic 'none\|Unable'" + elif commandType == "queryLocalVersion": + post = "-cache policy "+packageName+" | grep -i Installed | awk '{print $2}'" + elif commandType == "remove": + post = "-get remove -y "+packageName + elif commandType == "queryAvailVer": + post = " list "+packageName+" 2>&1 | grep '^"+packageName+"\/' | head -n 1 | awk '{print $2}'" + pmgrCMD = pre+pmgr+post + + elif ipm == 'yum' or ipm == 'dnf': + pmgr = ipm + pre = "sudo " + if commandType == "install": + post = "-get install -y "+packageName + elif commandType == "queryLocalInstall": + post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" + elif commandType == "queryLocalVersion": + post = "-cache policy "+packageName+" | grep -i Installed " + elif commandType == "remove": + post = "-get remove -y"+packageName + elif commandType == "queryAvailVer": + post = "-I "+packageName+" | grep -i version" + pmgrCMD = pre+pmgr+post + + + # TODO: All package managers beyond this point need to be reworked to correctly function + elif ipm == 'emerge': + pmgr = "apt" + pre = "sudo " + if commandType == "install": + post = "-get install -y " + elif commandType == "queryLocalInstall": + post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" + elif commandType == "queryLocalVersion": + post = "-cache policy | grep -i Installed " + elif commandType == "remove": + post = "-get remove -y" + elif commandType == "queryAvailVer": + post = "-I | grep -i version" + pmgrCMD = pre+pmgr+post + + elif ipm == 'zypper': + pmgr = "apt" + pre = "sudo " + if commandType == "install": + post = "-get install -y " + elif commandType == "queryLocalInstall": + post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" + elif commandType == "queryLocalVersion": + post = "-cache policy | grep -i Installed " + elif commandType == "remove": + post = "-get remove -y" + elif commandType == "queryAvailVer": + post = "-I | grep -i version" + pmgrCMD = pre+pmgr+post + + elif ipm == 'brew': + pmgr = "apt" + pre = "sudo " + if commandType == "install": + post = "-get install -y "+packageName + elif commandType == "queryLocalInstall": + post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" + elif commandType == "queryLocalVersion": + post = "-cache policy "+packageName+" | grep -i Installed " + elif commandType == "remove": + post = "-get remove -y "+packageName + elif commandType == "queryAvailVer": + post = "-I "+packageName+" | grep '^"+packageName+" -" + pmgrCMD = pre+pmgr+post + + elif ipm == 'gdebi' and packageExtension == 'deb': + pmgr = "apt" + pre = "sudo " + pCMD = pre+pmgr + if commandType == "install": + post = "-get install -y "+packageName + elif commandType == "queryLocalInstall": + post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" + elif commandType == "queryLocalVersion": + post = "-cache policy "+packageName+" | grep -i Installed " + elif commandType == "remove": + post = "-get remove -y "+packageName + elif commandType == "queryAvailVer": + post = "-I "+packageName+" | grep -i version " + pmgrCMD = pCMD+post } -set-boxtype +set-boxtype \ No newline at end of file From 0449c9f6702fae83db372b707cdb196348403323 Mon Sep 17 00:00:00 2001 From: alanw Date: Tue, 23 May 2023 16:39:47 -0700 Subject: [PATCH 3/5] new algo testingnew algo testing --- functions | 239 ++++++++++++++++++++++++++---------------------------- 1 file changed, 117 insertions(+), 122 deletions(-) diff --git a/functions b/functions index 12ca6f3..a21fc52 100644 --- a/functions +++ b/functions @@ -1146,134 +1146,129 @@ find-pmgr(){ offline_pmgr="rpm" ;; esac - if packageExtension == 'deb' and ipm == 'dpkg': - pmgr = "dpkg" - pre = "" - if commandType == "install": - pre = "echo 'yes' | sudo " - post = " -i " - elif commandType == "queryLocalInstall": - pre = "sudo " - post = " -l "+packageName+" | grep -ic 'no packagesfound\|error'" - elif commandType == "queryLocalVer": - pre = "sudo " - post = " -l "+packageName+" | grep ii" - elif commandType == "remove": - pre = "echo 'yes' | sudo " - post = " -r " - elif commandType == "queryAvailVer": - pre = "sudo " - post = " -I "+packageName+" | grep -i version" - pmgrCMD = pre+ipm+post - elif ipm == 'pacman': - pmgr = 'pacman' - pre = "sudo " - if commandType == "install": - post = " -S --noconfirm "+packageName - elif commandType == "queryLocalInstall": - pre = "if [[ $(sudo " - post = " -Ss "+packageName+" | grep '/"+packageName+"[^-,^_]' | grep -ic 'installed') == 1 ]] ; then echo 0 ; else echo 1 ; fi" - elif commandType == "queryLocalVersion": - post = " -Ss "+packageName+" | grep '/"+packageName+"[^-,^_]' | grep -i Installed | awk '{print $2}'" - elif commandType == "remove": - post = " -R --noconfirm "+packageName - elif commandType == "queryAvailVer": - post = " -Ss "+packageName+" | grep '/"+packageName+"[^-,^_]' | grep -iv 'installed' | awk '{print $2}'" - pmgrCMD = pre+pmgr+post +install_packages(){ + declare -a packages=() + declare -a offline_packages=() - elif ipm == 'apt-get' or ipm == 'apt': - pmgr = "apt" - pre = "sudo " - if commandType == "install": - post = "-get install -y "+packageName - elif commandType == "queryLocalInstall": - post = "-cache policy "+packageName+" | grep -ic 'none\|Unable'" - elif commandType == "queryLocalVersion": - post = "-cache policy "+packageName+" | grep -i Installed | awk '{print $2}'" - elif commandType == "remove": - post = "-get remove -y "+packageName - elif commandType == "queryAvailVer": - post = " list "+packageName+" 2>&1 | grep '^"+packageName+"\/' | head -n 1 | awk '{print $2}'" - pmgrCMD = pre+pmgr+post + # Separate package names and file arguments + for arg in "$@"; do + if [[ -f $arg ]]; then + offline_packages+=("$arg") + else + packages+=("$arg") + fi + done - elif ipm == 'yum' or ipm == 'dnf': - pmgr = ipm - pre = "sudo " - if commandType == "install": - post = "-get install -y "+packageName - elif commandType == "queryLocalInstall": - post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" - elif commandType == "queryLocalVersion": - post = "-cache policy "+packageName+" | grep -i Installed " - elif commandType == "remove": - post = "-get remove -y"+packageName - elif commandType == "queryAvailVer": - post = "-I "+packageName+" | grep -i version" - pmgrCMD = pre+pmgr+post + local distro="" + local package_manager="" + # Detect distribution + if [ -f /etc/os-release ]; then + distro=$(awk -F= '/^ID=/{print $2}' /etc/os-release) + elif [ -f /etc/lsb-release ]; then + distro=$(awk -F= '/^DISTRIB_ID=/{print $2}' /etc/lsb-release) + elif [ -f /etc/debian_version ]; then + distro="debian" + elif [ -f /etc/redhat-release ]; then + distro="rhel" + elif [ -f /etc/SuSE-release ]; then + distro="opensuse" + elif [ -f /etc/slackware-version ]; then + distro="slackware" + elif [ "$(uname)" == "Darwin" ]; then + distro="macos" + else + echo "Unsupported distribution. Unable to determine the package manager." + return 1 + fi - # TODO: All package managers beyond this point need to be reworked to correctly function - elif ipm == 'emerge': - pmgr = "apt" - pre = "sudo " - if commandType == "install": - post = "-get install -y " - elif commandType == "queryLocalInstall": - post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" - elif commandType == "queryLocalVersion": - post = "-cache policy | grep -i Installed " - elif commandType == "remove": - post = "-get remove -y" - elif commandType == "queryAvailVer": - post = "-I | grep -i version" - pmgrCMD = pre+pmgr+post + # Detect package manager + case "$distro" in + "debian"|"ubuntu") + package_manager="apt-get" + ;; + "fedora"|"centos"|"rhel") + package_manager="yum" + ;; + "opensuse") + package_manager="zypper" + ;; + "arch") + package_manager="pacman" + ;; + "slackware") + package_manager="pkgtool" + ;; + "macos") + package_manager="brew" + ;; + *) + echo "Unsupported distribution. Unable to determine the package manager." + return 1 + ;; + esac - elif ipm == 'zypper': - pmgr = "apt" - pre = "sudo " - if commandType == "install": - post = "-get install -y " - elif commandType == "queryLocalInstall": - post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" - elif commandType == "queryLocalVersion": - post = "-cache policy | grep -i Installed " - elif commandType == "remove": - post = "-get remove -y" - elif commandType == "queryAvailVer": - post = "-I | grep -i version" - pmgrCMD = pre+pmgr+post - - elif ipm == 'brew': - pmgr = "apt" - pre = "sudo " - if commandType == "install": - post = "-get install -y "+packageName - elif commandType == "queryLocalInstall": - post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" - elif commandType == "queryLocalVersion": - post = "-cache policy "+packageName+" | grep -i Installed " - elif commandType == "remove": - post = "-get remove -y "+packageName - elif commandType == "queryAvailVer": - post = "-I "+packageName+" | grep '^"+packageName+" -" - pmgrCMD = pre+pmgr+post - - elif ipm == 'gdebi' and packageExtension == 'deb': - pmgr = "apt" - pre = "sudo " - pCMD = pre+pmgr - if commandType == "install": - post = "-get install -y "+packageName - elif commandType == "queryLocalInstall": - post = "-cache policy "+packageName+"| grep -ic 'none\|Unable'" - elif commandType == "queryLocalVersion": - post = "-cache policy "+packageName+" | grep -i Installed " - elif commandType == "remove": - post = "-get remove -y "+packageName - elif commandType == "queryAvailVer": - post = "-I "+packageName+" | grep -i version " - pmgrCMD = pCMD+post + # Install packages using package manager + case "$package_manager" in + "apt-get") + 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 + ;; + "yum") + if [ "${#packages[@]}" -gt 0 ]; then + sudo yum install "${packages[@]}" + fi + if [ "${#offline_packages[@]}" -gt 0 ]; then + sudo rpm -i "${offline_packages[@]}" + fi + ;; + "zypper") + 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 + ;; + "pacman") + 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 + ;; + "pkgtool") + for package in "${packages[@]}"; do + sudo installpkg "$package" + done + for package_file in "${offline_packages[@]}"; do + sudo installpkg "$package_file" + done + ;; + "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 + ;; + *) + echo "Unsupported package manager." + return 1 + ;; + esac } set-boxtype \ No newline at end of file From ba446e52db5ed6da8f60602efb1ddeeb33c8c146 Mon Sep 17 00:00:00 2001 From: alanw Date: Thu, 25 May 2023 13:59:32 -0700 Subject: [PATCH 4/5] added offline package handling, refactored system detection --- functions | 163 ++++++++++++++++-------------------------------------- 1 file changed, 48 insertions(+), 115 deletions(-) diff --git a/functions b/functions index a21fc52..6210288 100644 --- a/functions +++ b/functions @@ -1083,7 +1083,7 @@ compare-versions(){ fi } -find-pmgr(){ +identify-system(){ # OS distribution auto-detection if type lsb_release >/dev/null 2>&1; then # linuxbase.org @@ -1118,40 +1118,19 @@ find-pmgr(){ OS=$(uname -s) VER=$(uname -r) fi +} - # Match distribution with available utilities - case $ID in - amzn | centos | fedora | rhel) - online_pmgr="yum" - offline_pmgr="rpm" - ;; - arch | Arch | manjaro) - online_pmgr="pacman" - offline_pmgr="pacman" - ;; - debian | ubuntu | Ubuntu) - online_pmgr="apt-get" - offline_pmgr="dpkg" - ;; - opensuse) - online_pmgr="zypper" - offline_pmgr="zypper" - ;; - slackware) - online_pmgr="slackpkg" - offline_pmgr="installpkg" - ;; - sles) - online_pmgr="zypper" - offline_pmgr="rpm" - ;; - esac +ID(){ + boxborder \ + "ID: $ID" \ + "OS: $OS" \ + "VER: $VER" +} install_packages(){ + # Separate package names and file arguments declare -a packages=() declare -a offline_packages=() - - # Separate package names and file arguments for arg in "$@"; do if [[ -f $arg ]]; then offline_packages+=("$arg") @@ -1159,85 +1138,21 @@ install_packages(){ packages+=("$arg") fi done + # Identify which distro is being run + identify-system - local distro="" - local package_manager="" - - # Detect distribution - if [ -f /etc/os-release ]; then - distro=$(awk -F= '/^ID=/{print $2}' /etc/os-release) - elif [ -f /etc/lsb-release ]; then - distro=$(awk -F= '/^DISTRIB_ID=/{print $2}' /etc/lsb-release) - elif [ -f /etc/debian_version ]; then - distro="debian" - elif [ -f /etc/redhat-release ]; then - distro="rhel" - elif [ -f /etc/SuSE-release ]; then - distro="opensuse" - elif [ -f /etc/slackware-version ]; then - distro="slackware" - elif [ "$(uname)" == "Darwin" ]; then - distro="macos" - else - echo "Unsupported distribution. Unable to determine the package manager." - return 1 - fi - - # Detect package manager - case "$distro" in - "debian"|"ubuntu") - package_manager="apt-get" - ;; - "fedora"|"centos"|"rhel") - package_manager="yum" - ;; - "opensuse") - package_manager="zypper" - ;; - "arch") - package_manager="pacman" - ;; - "slackware") - package_manager="pkgtool" - ;; - "macos") - package_manager="brew" - ;; - *) - echo "Unsupported distribution. Unable to determine the package manager." - return 1 - ;; - esac - - # Install packages using package manager - case "$package_manager" in - "apt-get") + # Match distribution with available utilities + # TODO: Add package name transformer lists + case $ID in + amzn | centos | fedora | rhel) if [ "${#packages[@]}" -gt 0 ]; then - sudo apt-get update - sudo apt-get install "${packages[@]}" + sudo yum install -y "${packages[@]}" fi if [ "${#offline_packages[@]}" -gt 0 ]; then - sudo dpkg -i "${offline_packages[@]}" + sudo rpm -i "${packages[@]}" fi ;; - "yum") - if [ "${#packages[@]}" -gt 0 ]; then - sudo yum install "${packages[@]}" - fi - if [ "${#offline_packages[@]}" -gt 0 ]; then - sudo rpm -i "${offline_packages[@]}" - fi - ;; - "zypper") - 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 - ;; - "pacman") + arch | Arch | manjaro) if [ "${#packages[@]}" -gt 0 ]; then sudo pacman -Syu sudo pacman -S "${packages[@]}" @@ -1246,15 +1161,37 @@ install_packages(){ sudo pacman -U "${offline_packages[@]}" fi ;; - "pkgtool") - for package in "${packages[@]}"; do - sudo installpkg "$package" - done - for package_file in "${offline_packages[@]}"; do - sudo installpkg "$package_file" - done + 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 ;; - "brew") + 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 @@ -1264,10 +1201,6 @@ install_packages(){ done fi ;; - *) - echo "Unsupported package manager." - return 1 - ;; esac } From 37f2332c11616255fd424c2b66dc54ae6df518d2 Mon Sep 17 00:00:00 2001 From: alanw Date: Thu, 25 May 2023 14:00:41 -0700 Subject: [PATCH 5/5] v1.4.0 - beta package managementv1.4.0 - beta package management --- functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions b/functions index 6210288..b559423 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)