Files
network/installer/join.sh
T

293 lines
7.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
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=()
# ------------------------------------------------------------
# Abhängigkeiten prüfen
# ------------------------------------------------------------
command -v python3 >/dev/null 2>&1 || missing+=("python3")
command -v curl >/dev/null 2>&1 || missing+=("curl")
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
# ------------------------------------------------------------
# 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
;;
esac
# ------------------------------------------------------------
# Python-Installer starten
# ------------------------------------------------------------
echo
echo "Starte den Netzwerk-Installer..."
echo
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
echo
echo "============================================================"
echo " Installation erfolgreich abgeschlossen."
echo "============================================================"
echo