#!/usr/bin/env bash set -u # ============================================================ # serverjonas network - Join Installer # ============================================================ REPO_BASE="https://git.serverjonas.de/api/v1/repos/serverjonas/network/raw/main" ABOUT_URL="${REPO_BASE}/ABOUT.md" INSTALLER_URL="${REPO_BASE}/installer/installer.py" missing=() # ------------------------------------------------------------ # Abhängigkeiten prüfen # ------------------------------------------------------------ command -v python3 >/dev/null 2>&1 || missing+=("python3") command -v curl >/dev/null 2>&1 || missing+=("curl") if [[ ${#missing[@]} -ne 0 ]]; then # OS erkennen if [[ ! -f /etc/os-release ]]; then echo echo "[FEHLER] Das Betriebssystem konnte nicht erkannt werden." echo exit 1 fi . /etc/os-release 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" 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 echo "[FEHLER] Dein Betriebssystem wird nicht unterstützt." echo echo "Erkanntes Betriebssystem:" echo " ${PRETTY_NAME:-$ID}" echo exit 1 ;; esac echo echo "Fehlende Programme: ${missing[*]}" echo "Betriebssystem: ${PRETTY_NAME:-$ID}" echo "Paketmanager: $PKG_MANAGER" echo read -r -p "Fehlende Pakete jetzt installieren? [j/N] " answer case "$answer" in j|J|ja|Ja|JA) echo echo "Installiere benötigte Pakete..." echo if ! "${INSTALL_CMD[@]}"; then echo echo "[FEHLER] Die benötigten Pakete konnten nicht installiert werden." echo exit 1 fi ;; *) echo echo "Installation abgebrochen." exit 0 ;; esac fi # ------------------------------------------------------------ # Sudo prüfen # ------------------------------------------------------------ if [[ "$EUID" -eq 0 ]]; then # Bereits root – alles gut. SUDO_CMD=() else if ! command -v sudo >/dev/null 2>&1; then echo echo "[FEHLER] Dieses Programm benötigt Root-Rechte." echo echo "Das Programm 'sudo' wurde auf diesem System nicht gefunden." echo "Bitte installiere sudo und starte den Join-Installer erneut." echo exit 1 fi echo echo "Der Netzwerk-Installer benötigt Root-Rechte." echo "Bitte bestätige den folgenden sudo-Dialog." echo if ! sudo -v; then echo echo "[FEHLER] Root-Rechte konnten nicht erhalten werden." echo echo "Ohne Root-Rechte kann der Rechner dem Netzwerk nicht" echo "hinzugefügt werden." echo exit 1 fi SUDO_CMD=(sudo) fi # ------------------------------------------------------------ # ABOUT.md herunterladen # ------------------------------------------------------------ echo echo "============================================================" echo " serverjonas network" echo "============================================================" echo echo "Informationen zum Netzwerk werden geladen..." echo ABOUT_FILE="$(mktemp)" cleanup() { rm -f "$ABOUT_FILE" } trap cleanup EXIT if ! curl -fsSL --connect-timeout 10 --max-time 30 \ "$ABOUT_URL" -o "$ABOUT_FILE"; then echo echo "[FEHLER] Die Informationen zum Netzwerk konnten nicht" echo "geladen werden." echo echo "Bitte überprüfe deine Internetverbindung und versuche" echo "es später erneut." echo exit 1 fi if [[ ! -s "$ABOUT_FILE" ]]; then echo echo "[FEHLER] Die ABOUT.md des Netzwerks ist leer." echo echo "Die Installation wurde aus Sicherheitsgründen abgebrochen." echo exit 1 fi # ------------------------------------------------------------ # ABOUT.md anzeigen # ------------------------------------------------------------ echo echo "============================================================" echo " INFORMATIONEN ZUM NETZWERK" echo "============================================================" echo cat "$ABOUT_FILE" echo echo "============================================================" echo # ------------------------------------------------------------ # Letzte Bestätigung # ------------------------------------------------------------ echo "Du bist jetzt dabei, diesen Computer dem" echo "serverjonas network hinzuzufügen." echo echo "Der Installer wird dafür Änderungen am System vornehmen" echo "und benötigt dafür Root-Rechte." echo read -r -p "Möchtest du mit der Installation fortfahren? [j/N] " answer case "$answer" in j|J|ja|Ja|JA) ;; *) echo echo "Installation abgebrochen." echo exit 0 ;; esac # ------------------------------------------------------------ # Python-Installer starten # ------------------------------------------------------------ echo echo "Starte den Netzwerk-Installer..." echo INSTALLER_EXIT_CODE=0 if [[ "$EUID" -eq 0 ]]; then if ! curl -fsSL --connect-timeout 10 --max-time 60 \ "$INSTALLER_URL" | python3; then INSTALLER_EXIT_CODE=$? fi else if ! curl -fsSL --connect-timeout 10 --max-time 60 \ "$INSTALLER_URL" | sudo python3; then INSTALLER_EXIT_CODE=$? fi fi if [[ "$INSTALLER_EXIT_CODE" -ne 0 ]]; then echo echo "============================================================" echo "[FEHLER] Der Netzwerk-Installer wurde nicht erfolgreich" echo "ausgeführt." echo "============================================================" echo echo "Die Installation konnte nicht abgeschlossen werden." echo echo "Bitte versuche es erneut oder wende dich an den" echo "Netzwerk-Administrator." echo exit "$INSTALLER_EXIT_CODE" fi echo echo "============================================================" echo " Installation erfolgreich abgeschlossen." echo "============================================================" echo