fix some bugs in the isntller
This commit is contained in:
+261
-79
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user