added offline package handling, refactored system detection

This commit is contained in:
alanw 2023-05-25 13:59:32 -07:00
parent 0449c9f670
commit ba446e52db

163
functions
View file

@ -1083,7 +1083,7 @@ compare-versions(){
fi fi
} }
find-pmgr(){ identify-system(){
# OS distribution auto-detection # OS distribution auto-detection
if type lsb_release >/dev/null 2>&1; then if type lsb_release >/dev/null 2>&1; then
# linuxbase.org # linuxbase.org
@ -1118,40 +1118,19 @@ find-pmgr(){
OS=$(uname -s) OS=$(uname -s)
VER=$(uname -r) VER=$(uname -r)
fi fi
}
# Match distribution with available utilities ID(){
case $ID in boxborder \
amzn | centos | fedora | rhel) "ID: $ID" \
online_pmgr="yum" "OS: $OS" \
offline_pmgr="rpm" "VER: $VER"
;; }
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
install_packages(){ install_packages(){
# Separate package names and file arguments
declare -a packages=() declare -a packages=()
declare -a offline_packages=() declare -a offline_packages=()
# Separate package names and file arguments
for arg in "$@"; do for arg in "$@"; do
if [[ -f $arg ]]; then if [[ -f $arg ]]; then
offline_packages+=("$arg") offline_packages+=("$arg")
@ -1159,85 +1138,21 @@ install_packages(){
packages+=("$arg") packages+=("$arg")
fi fi
done done
# Identify which distro is being run
identify-system
local distro="" # Match distribution with available utilities
local package_manager="" # TODO: Add package name transformer lists
case $ID in
# Detect distribution amzn | centos | fedora | rhel)
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")
if [ "${#packages[@]}" -gt 0 ]; then if [ "${#packages[@]}" -gt 0 ]; then
sudo apt-get update sudo yum install -y "${packages[@]}"
sudo apt-get install "${packages[@]}"
fi fi
if [ "${#offline_packages[@]}" -gt 0 ]; then if [ "${#offline_packages[@]}" -gt 0 ]; then
sudo dpkg -i "${offline_packages[@]}" sudo rpm -i "${packages[@]}"
fi fi
;; ;;
"yum") arch | Arch | manjaro)
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 if [ "${#packages[@]}" -gt 0 ]; then
sudo pacman -Syu sudo pacman -Syu
sudo pacman -S "${packages[@]}" sudo pacman -S "${packages[@]}"
@ -1246,15 +1161,37 @@ install_packages(){
sudo pacman -U "${offline_packages[@]}" sudo pacman -U "${offline_packages[@]}"
fi fi
;; ;;
"pkgtool") debian | ubuntu | Ubuntu)
for package in "${packages[@]}"; do if [ "${#packages[@]}" -gt 0 ]; then
sudo installpkg "$package" sudo apt-get update
done sudo apt-get install "${packages[@]}"
for package_file in "${offline_packages[@]}"; do fi
sudo installpkg "$package_file" if [ "${#offline_packages[@]}" -gt 0 ]; then
done 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 if [ "${#packages[@]}" -gt 0 ]; then
brew install "${packages[@]}" brew install "${packages[@]}"
fi fi
@ -1264,10 +1201,6 @@ install_packages(){
done done
fi fi
;; ;;
*)
echo "Unsupported package manager."
return 1
;;
esac esac
} }