Files
network/installer/join.sh
T

111 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -u
missing=()
# Prüfen, was fehlt
command -v python3 >/dev/null 2>&1 || missing+=("python3")
command -v curl >/dev/null 2>&1 || missing+=("curl")
# Alles vorhanden → komplett still beenden
if [[ ${#missing[@]} -eq 0 ]]; then
curl -fsSL https://git.serverjonas.de/api/v1/repos/serverjonas/network/raw/main/installer/installer.py | python3
exit 0
fi
# OS erkennen
if [[ ! -f /etc/os-release ]]; then
echo "Fehler: Betriebssystem konnte nicht erkannt werden."
exit 1
fi
. /etc/os-release
# Paketmanager erkennen
case "$ID" in
debian|ubuntu|linuxmint|pop)
PKG_MANAGER="apt"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo apt install --yes ${PACKAGES[*]}"
;;
arch|manjaro|endeavouros)
PKG_MANAGER="pacman"
# Arch nennt Python einfach "python"
PACKAGES=()
for package in "${missing[@]}"; do
[[ "$package" == "python3" ]] && PACKAGES+=("python") || PACKAGES+=("$package")
done
INSTALL_CMD="sudo pacman -S --noconfirm ${PACKAGES[*]}"
;;
fedora|rhel|centos|rocky|almalinux)
PKG_MANAGER="dnf"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo dnf install -y ${PACKAGES[*]}"
;;
opensuse*|sles)
PKG_MANAGER="zypper"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo zypper --non-interactive install ${PACKAGES[*]}"
;;
alpine)
PKG_MANAGER="apk"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo apk add ${PACKAGES[*]}"
;;
void)
PKG_MANAGER="xbps-install"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo xbps-install -Sy ${PACKAGES[*]}"
;;
gentoo)
PKG_MANAGER="emerge"
PACKAGES=()
for package in "${missing[@]}"; do
case "$package" in
python3) PACKAGES+=("dev-lang/python") ;;
curl) PACKAGES+=("net-misc/curl") ;;
esac
done
INSTALL_CMD="sudo emerge ${PACKAGES[*]}"
;;
*)
echo "Fehler: Nicht unterstütztes Betriebssystem: $PRETTY_NAME"
exit 1
;;
esac
# Nur jetzt Ausgabe, weil tatsächlich etwas fehlt
echo "Fehlende Programme: ${missing[*]}"
echo "Betriebssystem: $PRETTY_NAME"
echo "Paketmanager: $PKG_MANAGER"
echo
read -r -p "Fehlende Pakete jetzt installieren? [j/N] " answer
case "$answer" in
j|J|ja|Ja|JA)
eval "$INSTALL_CMD"
;;
*)
exit 0
;;
esac
# Nach Installation erneut prüfen
failed=()
command -v python3 >/dev/null 2>&1 || failed+=("python3")
command -v curl >/dev/null 2>&1 || failed+=("curl")
if [[ ${#failed[@]} -ne 0 ]]; then
echo "Fehler: Konnte nicht installieren: ${failed[*]}"
exit 1
fi
curl -fsSL https://git.serverjonas.de/api/v1/repos/serverjonas/network/raw/main/installer/installer.py | python3