#!/bin/bash set -euo pipefail # gameadm - Modularer Game Server Administrator # Ersetzt rustadm und ist für verschiedene Spiele erweiterbar SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" GAMEADM_DIR="/etc/gameadm" MODULES_DIR="$GAMEADM_DIR/modules" # Farben für bessere Ausgabe RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Logging-Funktion log() { local level="$1" shift local message="$*" local timestamp=$(date '+%Y-%m-%d %H:%M:%S') case "$level" in "INFO") echo -e "${GREEN}[gameadm]${NC} $message" ;; "WARN") echo -e "${YELLOW}[gameadm]${NC} $message" ;; "ERROR") echo -e "${RED}[gameadm]${NC} $message" ;; "DEBUG") echo -e "${BLUE}[gameadm]${NC} $message" ;; esac } # Hilfsfunktionen show_help() { cat < [optionen] Verfügbare Spiele: rust - Rust Game Server mc - Minecraft Server (zukünftig) # Weitere Spiele können hier hinzugefügt werden Verfügbare Befehle (pro Spiel): start - Startet den Server stop - Stoppt den Server restart - Startet den Server neu status - Zeigt Server-Status logs - Zeigt Server-Logs follow - Folgt Logs in Echtzeit update - Aktualisiert Server-Image help - Zeigt Hilfe für das Spiel Spezielle Befehle: install - Installiert gameadm auf dem System (erfordert root) list - Zeigt verfügbare Spiele version - Zeigt Version Beispiele: sudo gameadm install # Installation/Update gameadm rust start gameadm rust status gameadm rust logs gameadm mc help Konfiguration: $GAMEADM_DIR/ Module: $MODULES_DIR/ EOF } # Spiel-Modul laden load_game_module() { local game="$1" local module_file="$MODULES_DIR/${game}.sh" if [[ ! -f "$module_file" ]]; then log "ERROR" "Spiel '$game' nicht gefunden. Verfügbare Module:" ls -1 "$MODULES_DIR"/*.sh 2>/dev/null | sed 's|.*/||' | sed 's|\.sh$||' | sort || log "WARN" "Keine Module gefunden in $MODULES_DIR" exit 1 fi # Modul laden # shellcheck disable=SC1090 source "$module_file" } # Install-Funktion cmd_install() { log "INFO" "Starte gameadm Installation..." # Prüfe Root-Berechtigung if [[ $EUID -ne 0 ]]; then log "ERROR" "Installation muss als root ausgeführt werden (sudo)." log "INFO" "Verwenden Sie: sudo gameadm install" exit 1 fi # Installer-Skript herunterladen und ausführen local installer_url="http://localhost:3000/PurePowerPh1l/gameadm-repo/raw/branch/main/install.sh" local temp_installer="/tmp/gameadm-installer-$$.sh" log "INFO" "Lade Installer herunter..." if ! curl -fsSL "$installer_url" -o "$temp_installer"; then log "ERROR" "Fehler beim Herunterladen des Installers" log "INFO" "URL: $installer_url" exit 1 fi chmod +x "$temp_installer" log "INFO" "Führe Installation aus..." "$temp_installer" "$@" # Aufräumen rm -f "$temp_installer" log "INFO" "Installation abgeschlossen." } # Hauptfunktion main() { # Verzeichnisse erstellen falls nicht vorhanden mkdir -p "$GAMEADM_DIR" "$MODULES_DIR" # Keine Argumente = Hilfe anzeigen if [[ $# -eq 0 ]]; then show_help exit 0 fi # Erstes Argument ist das Spiel local game="$1" shift # Spezielle Befehle case "$game" in "help"|"-h"|"--help") show_help exit 0 ;; "list"|"ls") log "INFO" "Verfügbare Spiele:" ls -1 "$MODULES_DIR"/*.sh 2>/dev/null | sed 's|.*/||' | sed 's|\.sh$||' | sort || log "WARN" "Keine Module gefunden" exit 0 ;; "version"|"-v"|"--version") echo "gameadm v1.0.0 - Modularer Game Server Administrator" exit 0 ;; "install") cmd_install "$@" exit 0 ;; esac # Spiel-Modul laden load_game_module "$game" # Modul-spezifische Befehle ausführen if [[ $# -eq 0 ]]; then log "ERROR" "Kein Befehl angegeben für '$game'. Verwenden Sie 'gameadm $game help' für Hilfe." exit 1 fi local command="$1" shift # Befehl an das Modul weiterleiten if declare -f "cmd_${command}" >/dev/null 2>&1; then "cmd_${command}" "$@" else log "ERROR" "Unbekannter Befehl '$command' für '$game'. Verwenden Sie 'gameadm $game help' für verfügbare Befehle." exit 1 fi } # Hauptprogramm ausführen main "$@"