added offline package handling, refactored system detection
This commit is contained in:
parent
0449c9f670
commit
ba446e52db
1 changed files with 48 additions and 115 deletions
163
functions
163
functions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue