138 lines
3.4 KiB
Bash
Executable File
138 lines
3.4 KiB
Bash
Executable File
#!/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 <<EOF
|
|
gameadm - Modularer Game Server Administrator
|
|
|
|
Verwendung:
|
|
gameadm <spiel> <befehl> [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
|
|
|
|
Beispiele:
|
|
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"
|
|
}
|
|
|
|
# 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
|
|
;;
|
|
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 "$@"
|