fix some bugs in the isntller

This commit is contained in:
2026-09-26 01:22:47 +02:00
parent 9677f02d16
commit 1c4e4aedda
+220 -38
View File
@@ -2,64 +2,80 @@
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
fi
if [[ ${#missing[@]} -ne 0 ]]; then
# OS erkennen
if [[ ! -f /etc/os-release ]]; then
echo "Fehler: Betriebssystem konnte nicht erkannt werden."
# OS erkennen
if [[ ! -f /etc/os-release ]]; then
echo
echo "[FEHLER] Das Betriebssystem konnte nicht erkannt werden."
echo
exit 1
fi
fi
. /etc/os-release
. /etc/os-release
# Paketmanager erkennen
case "$ID" in
case "$ID" in
debian|ubuntu|linuxmint|pop)
PKG_MANAGER="apt"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo apt install --yes ${PACKAGES[*]}"
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")
[[ "$package" == "python3" ]] \
&& PACKAGES+=("python") \
|| PACKAGES+=("$package")
done
INSTALL_CMD="sudo pacman -S --noconfirm ${PACKAGES[*]}"
INSTALL_CMD=(sudo pacman -S --noconfirm "${PACKAGES[@]}")
;;
fedora|rhel|centos|rocky|almalinux)
PKG_MANAGER="dnf"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo dnf install -y ${PACKAGES[*]}"
INSTALL_CMD=(sudo dnf install -y "${PACKAGES[@]}")
;;
opensuse*|sles)
PKG_MANAGER="zypper"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo zypper --non-interactive install ${PACKAGES[*]}"
INSTALL_CMD=(sudo zypper --non-interactive install "${PACKAGES[@]}")
;;
alpine)
PKG_MANAGER="apk"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo apk add ${PACKAGES[*]}"
INSTALL_CMD=(sudo apk add "${PACKAGES[@]}")
;;
void)
PKG_MANAGER="xbps-install"
PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo xbps-install -Sy ${PACKAGES[*]}"
INSTALL_CMD=(sudo xbps-install -Sy "${PACKAGES[@]}")
;;
gentoo)
PKG_MANAGER="emerge"
PACKAGES=()
@@ -71,40 +87,206 @@ case "$ID" in
esac
done
INSTALL_CMD="sudo emerge ${PACKAGES[*]}"
INSTALL_CMD=(sudo emerge "${PACKAGES[@]}")
;;
*)
echo "Fehler: Nicht unterstütztes Betriebssystem: $PRETTY_NAME"
echo
echo "[FEHLER] Dein Betriebssystem wird nicht unterstützt."
echo
echo "Erkanntes Betriebssystem:"
echo " ${PRETTY_NAME:-$ID}"
echo
exit 1
;;
esac
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
# ------------------------------------------------------------
# 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 " 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)
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