gameadm-repo/bin/gameadm

179 lines
4.6 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
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 "$@"