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