#!/usr/bin/env bash # ========================================================== # Eduxel Installer Proxy (/i) # Lädt den neuesten Installer aus den GitHub Releases # Command bleibt: curl -sSL https://edu-core.dev/i | sudo bash # ========================================================== set -euo pipefail REPO="EduCore-Development/eduxel-server-application-installer" ASSET="install.sh" TMP="/tmp/eduxel-install.sh" fail() { echo "[Eduxel] Fehler: $*" >&2; exit 1; } need_root() { if [[ "${EUID:-999}" -ne 0 ]]; then fail "Bitte mit sudo ausführen: curl -sSL https://edu-core.dev/i | sudo bash" fi } pm_detect() { if command -v apt-get >/dev/null 2>&1; then echo apt; return; fi if command -v dnf >/dev/null 2>&1; then echo dnf; return; fi if command -v yum >/dev/null 2>&1; then echo yum; return; fi if command -v pacman >/dev/null 2>&1; then echo pacman; return; fi if command -v zypper >/dev/null 2>&1; then echo zypper; return; fi if command -v apk >/dev/null 2>&1; then echo apk; return; fi echo unknown } pm_install() { local pm="$1"; shift local pkgs=("$@") case "$pm" in apt) apt-get update -y >/dev/null 2>&1 || true DEBIAN_FRONTEND=noninteractive apt-get install -y "${pkgs[@]}" >/dev/null 2>&1 ;; dnf) dnf install -y "${pkgs[@]}" >/dev/null 2>&1 ;; yum) yum install -y "${pkgs[@]}" >/dev/null 2>&1 ;; pacman) pacman -Sy --noconfirm "${pkgs[@]}" >/dev/null 2>&1 ;; zypper) zypper --non-interactive in "${pkgs[@]}" >/dev/null 2>&1 ;; apk) apk add --no-cache "${pkgs[@]}" >/dev/null 2>&1 ;; *) fail "Kein unterstützter Package Manager gefunden." ;; esac } ensure_curl() { if command -v curl >/dev/null 2>&1; then return; fi local pm pm="$(pm_detect)" [[ "$pm" != "unknown" ]] || fail "Kein Package Manager gefunden, kann curl nicht installieren." echo "[Eduxel] Bootstrap: installiere curl..." case "$pm" in apt) pm_install "$pm" ca-certificates curl ;; dnf|yum) pm_install "$pm" ca-certificates curl ;; pacman) pm_install "$pm" ca-certificates curl ;; zypper) pm_install "$pm" ca-certificates curl ;; apk) pm_install "$pm" ca-certificates curl ;; esac command -v curl >/dev/null 2>&1 || fail "curl konnte nicht installiert werden." } main() { need_root ensure_curl echo "[Eduxel] Lade neuesten Installer aus GitHub Releases..." URL="https://github.com/${REPO}/releases/latest/download/${ASSET}" curl -fsSL "$URL" -o "$TMP" || fail "Konnte ${ASSET} nicht laden (Release Asset fehlt oder URL down)." chmod +x "$TMP" echo "[Eduxel] Starte Installer..." exec bash "$TMP" "$@" } main "$@"