From 1c4e4aedda20b914c4084658c0b37ecff06fcb67 Mon Sep 17 00:00:00 2001 From: jonas H Date: Sat, 26 Sep 2026 01:22:47 +0200 Subject: [PATCH] fix some bugs in the isntller --- installer/join.sh | 340 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 261 insertions(+), 79 deletions(-) diff --git a/installer/join.sh b/installer/join.sh index b347dc8..059972d 100755 --- a/installer/join.sh +++ b/installer/join.sh @@ -2,109 +2,291 @@ 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=() -# Prüfen, was fehlt +# ------------------------------------------------------------ +# Abhängigkeiten prüfen +# ------------------------------------------------------------ + 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 +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 -# OS erkennen -if [[ ! -f /etc/os-release ]]; then - echo "Fehler: Betriebssystem konnte nicht erkannt werden." +# ------------------------------------------------------------ +# 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 -. /etc/os-release +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 -# 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" +# ------------------------------------------------------------ +# ABOUT.md anzeigen +# ------------------------------------------------------------ - # 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 +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) - eval "$INSTALL_CMD" ;; *) + echo + echo "Installation abgebrochen." + echo exit 0 ;; esac -# Nach Installation erneut prüfen -failed=() +# ------------------------------------------------------------ +# Python-Installer starten +# ------------------------------------------------------------ -command -v python3 >/dev/null 2>&1 || failed+=("python3") -command -v curl >/dev/null 2>&1 || failed+=("curl") +echo +echo "Starte den Netzwerk-Installer..." +echo -if [[ ${#failed[@]} -ne 0 ]]; then - echo "Fehler: Konnte nicht installieren: ${failed[*]}" - exit 1 +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 -curl -fsSL https://git.serverjonas.de/api/v1/repos/serverjonas/network/raw/main/installer/installer.py | python3 +echo +echo "============================================================" +echo " Installation erfolgreich abgeschlossen." +echo "============================================================" +echo