fix some bugs in the isntller

This commit is contained in:
2026-09-26 01:22:47 +02:00
parent 9677f02d16
commit 1c4e4aedda
+211 -29
View File
@@ -2,64 +2,80 @@
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
exit 0
fi
# OS erkennen # OS erkennen
if [[ ! -f /etc/os-release ]]; then if [[ ! -f /etc/os-release ]]; then
echo "Fehler: Betriebssystem konnte nicht erkannt werden." echo
echo "[FEHLER] Das Betriebssystem konnte nicht erkannt werden."
echo
exit 1 exit 1
fi fi
. /etc/os-release . /etc/os-release
# Paketmanager erkennen
case "$ID" in case "$ID" in
debian|ubuntu|linuxmint|pop) debian|ubuntu|linuxmint|pop)
PKG_MANAGER="apt" PKG_MANAGER="apt"
PACKAGES=("${missing[@]}") PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo apt install --yes ${PACKAGES[*]}" INSTALL_CMD=(sudo apt install --yes "${PACKAGES[@]}")
;; ;;
arch|manjaro|endeavouros) arch|manjaro|endeavouros)
PKG_MANAGER="pacman" PKG_MANAGER="pacman"
# Arch nennt Python einfach "python"
PACKAGES=() PACKAGES=()
for package in "${missing[@]}"; do for package in "${missing[@]}"; do
[[ "$package" == "python3" ]] && PACKAGES+=("python") || PACKAGES+=("$package") [[ "$package" == "python3" ]] \
&& PACKAGES+=("python") \
|| PACKAGES+=("$package")
done done
INSTALL_CMD="sudo pacman -S --noconfirm ${PACKAGES[*]}" INSTALL_CMD=(sudo pacman -S --noconfirm "${PACKAGES[@]}")
;; ;;
fedora|rhel|centos|rocky|almalinux) fedora|rhel|centos|rocky|almalinux)
PKG_MANAGER="dnf" PKG_MANAGER="dnf"
PACKAGES=("${missing[@]}") PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo dnf install -y ${PACKAGES[*]}" INSTALL_CMD=(sudo dnf install -y "${PACKAGES[@]}")
;; ;;
opensuse*|sles) opensuse*|sles)
PKG_MANAGER="zypper" PKG_MANAGER="zypper"
PACKAGES=("${missing[@]}") PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo zypper --non-interactive install ${PACKAGES[*]}" INSTALL_CMD=(sudo zypper --non-interactive install "${PACKAGES[@]}")
;; ;;
alpine) alpine)
PKG_MANAGER="apk" PKG_MANAGER="apk"
PACKAGES=("${missing[@]}") PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo apk add ${PACKAGES[*]}" INSTALL_CMD=(sudo apk add "${PACKAGES[@]}")
;; ;;
void) void)
PKG_MANAGER="xbps-install" PKG_MANAGER="xbps-install"
PACKAGES=("${missing[@]}") PACKAGES=("${missing[@]}")
INSTALL_CMD="sudo xbps-install -Sy ${PACKAGES[*]}" INSTALL_CMD=(sudo xbps-install -Sy "${PACKAGES[@]}")
;; ;;
gentoo) gentoo)
PKG_MANAGER="emerge" PKG_MANAGER="emerge"
PACKAGES=() PACKAGES=()
@@ -71,40 +87,206 @@ case "$ID" in
esac esac
done 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 exit 1
;; ;;
esac esac
# Nur jetzt Ausgabe, weil tatsächlich etwas fehlt echo
echo "Fehlende Programme: ${missing[*]}" echo "Fehlende Programme: ${missing[*]}"
echo "Betriebssystem: $PRETTY_NAME" echo "Betriebssystem: ${PRETTY_NAME:-$ID}"
echo "Paketmanager: $PKG_MANAGER" echo "Paketmanager: $PKG_MANAGER"
echo echo
read -r -p "Fehlende Pakete jetzt installieren? [j/N] " answer read -r -p "Fehlende Pakete jetzt installieren? [j/N] " answer
case "$answer" in case "$answer" in
j|J|ja|Ja|JA) j|J|ja|Ja|JA)
eval "$INSTALL_CMD" 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 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