fix some bugs in the isntller

This commit is contained in:
2026-09-26 01:22:47 +02:00
parent 9677f02d16
commit 1c4e4aedda
+261 -79
View File
@@ -2,109 +2,291 @@
set -u 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=() missing=()
# Prüfen, was fehlt # ------------------------------------------------------------
# Abhängigkeiten prüfen
# ------------------------------------------------------------
command -v python3 >/dev/null 2>&1 || missing+=("python3") command -v python3 >/dev/null 2>&1 || missing+=("python3")
command -v curl >/dev/null 2>&1 || missing+=("curl") command -v curl >/dev/null 2>&1 || missing+=("curl")
# Alles vorhanden → komplett still beenden if [[ ${#missing[@]} -ne 0 ]]; then
if [[ ${#missing[@]} -eq 0 ]]; then
curl -fsSL https://git.serverjonas.de/api/v1/repos/serverjonas/network/raw/main/installer/installer.py | python3 # OS erkennen
exit 0 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 fi
# OS erkennen # ------------------------------------------------------------
if [[ ! -f /etc/os-release ]]; then # Sudo prüfen
echo "Fehler: Betriebssystem konnte nicht erkannt werden." # ------------------------------------------------------------
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 exit 1
fi 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 # ABOUT.md anzeigen
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 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 case "$answer" in
j|J|ja|Ja|JA) j|J|ja|Ja|JA)
eval "$INSTALL_CMD"
;; ;;
*) *)
echo
echo "Installation abgebrochen."
echo
exit 0 exit 0
;; ;;
esac esac
# Nach Installation erneut prüfen # ------------------------------------------------------------
failed=() # Python-Installer starten
# ------------------------------------------------------------
command -v python3 >/dev/null 2>&1 || failed+=("python3") echo
command -v curl >/dev/null 2>&1 || failed+=("curl") echo "Starte den Netzwerk-Installer..."
echo
if [[ ${#failed[@]} -ne 0 ]]; then INSTALLER_EXIT_CODE=0
echo "Fehler: Konnte nicht installieren: ${failed[*]}"
exit 1 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 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