179 lines
4.6 KiB
Bash
Executable File
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/pp1l/gameadm/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 "$@"
|