gameadm/README.md

240 lines
5.1 KiB
Markdown

# gameadm - Modularer Game Server Administrator
## Übersicht
`gameadm` ist ein modulares System zur Verwaltung verschiedener Game Server, das das ursprüngliche `rustadm` Skript ersetzt und für zukünftige Spiele erweiterbar ist.
## Architektur
```
gameadm (Hauptskript)
├── /etc/gameadm/
│ ├── modules/ # Spielmodule
│ │ ├── rust.sh # Rust Server Modul
│ │ ├── mc.sh # Minecraft Server Modul
│ │ └── ... # Weitere Module
│ └── README.md # Diese Dokumentation
└── /usr/local/bin/gameadm # Ausführbares Hauptskript
```
## Verwendung
### Grundlegende Syntax
```bash
gameadm <spiel> <befehl> [optionen]
```
### Verfügbare Spiele
- **rust** - Rust Game Server (vollständig funktional)
- **mc** - Minecraft Server (Beispiel-Modul)
### Verfügbare Befehle (pro Spiel)
- `start` - Startet den Server
- `stop` - Stoppt den Server
- `restart` - Startet 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
```bash
# Rust Server verwalten
gameadm rust start
gameadm rust status
gameadm rust logs
gameadm rust stop
# Minecraft Server verwalten (zukünftig)
gameadm mc start
gameadm mc status
# Hilfe anzeigen
gameadm --help
gameadm rust help
gameadm list
```
## Module erstellen
### Neues Spiel hinzufügen
1. **Modul-Datei erstellen:**
```bash
sudo nano /etc/gameadm/modules/neuespiel.sh
```
2. **Grundstruktur implementieren:**
```bash
#!/bin/bash
# Neues Spiel Modul für gameadm
# Konfiguration laden
CONFIG_FILE="/etc/neuespiel-server.conf"
if [[ -f "$CONFIG_FILE" ]]; then
source "$CONFIG_FILE"
fi
# Standardwerte
CONTAINER_NAME=${CONTAINER_NAME:-neuespiel-server}
IMAGE=${IMAGE:-docker.io/beispiel/neuespiel:latest}
DATA_DIR=${DATA_DIR:-/srv/neuespiel}
PORT=${PORT:-12345}
# Hilfsfunktionen
is_running() {
podman inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null | grep -q true
}
# Befehle implementieren
cmd_start() {
# Start-Logik hier
}
cmd_stop() {
# Stop-Logik hier
}
# Weitere Befehle...
```
3. **Ausführbar machen:**
```bash
sudo chmod +x /etc/gameadm/modules/neuespiel.sh
```
### Erforderliche Funktionen
Jedes Modul muss folgende Funktionen implementieren:
- `cmd_start()` - Server starten
- `cmd_stop()` - Server stoppen
- `cmd_status()` - Status anzeigen
- `cmd_logs()` - Logs anzeigen
- `cmd_help()` - Hilfe anzeigen
Optionale Funktionen:
- `cmd_restart()` - Server neu starten
- `cmd_follow()` - Logs folgen
- `cmd_update()` - Image aktualisieren
## Konfiguration
### Rust Server
- **Datei:** `/etc/rust-server.conf`
- **Beispiel:**
```bash
CONTAINER_NAME=rust-game
IMAGE=docker.io/didstopia/rust-server:latest
DATA_DIR=/srv/rust
PORT=28015
RCON_PORT=28016
MAXPLAYERS=4
RUST_SERVER_NAME="Mein Rust Server"
```
### Minecraft Server
- **Datei:** `/etc/minecraft-server.conf`
- **Beispiel:**
```bash
CONTAINER_NAME=minecraft-server
IMAGE=docker.io/itzg/minecraft-server:latest
DATA_DIR=/srv/minecraft
PORT=25565
MEMORY_LIMIT=2g
VERSION=LATEST
```
## Migration von rustadm
### Vor der Migration
```bash
# Backup der alten Konfiguration
sudo cp /etc/rust-server.conf /etc/rust-server.conf.backup
# Backup des alten Skripts
sudo cp /usr/local/bin/rustadm /usr/local/bin/rustadm.backup
```
### Nach der Migration
```bash
# Alte Befehle durch neue ersetzen
rustadm start → gameadm rust start
rustadm stop → gameadm rust stop
rustadm status → gameadm rust status
rustadm logs → gameadm rust logs
```
## Vorteile der neuen Architektur
1. **Modularität** - Einfaches Hinzufügen neuer Spiele
2. **Wartbarkeit** - Zentrale Logik im Hauptskript
3. **Konsistenz** - Einheitliche Befehle für alle Spiele
4. **Erweiterbarkeit** - Neue Befehle pro Spiel möglich
5. **Farbige Ausgabe** - Bessere Benutzerfreundlichkeit
6. **Fehlerbehandlung** - Robuste Fehlerbehandlung
7. **Dokumentation** - Integrierte Hilfe für alle Module
## Troubleshooting
### Modul wird nicht gefunden
```bash
# Berechtigungen prüfen
ls -la /etc/gameadm/modules/
# Modul ausführbar machen
sudo chmod +x /etc/gameadm/modules/meinspiel.sh
```
### Fehler beim Laden des Moduls
```bash
# Syntax prüfen
bash -n /etc/gameadm/modules/meinspiel.sh
# Debug-Ausgabe aktivieren
bash -x /etc/gameadm/modules/meinspiel.sh
```
### Container-Probleme
```bash
# Podman-Status prüfen
podman ps -a
# Container-Logs direkt anzeigen
podman logs meinspiel-server
```
## Entwicklung
### Neue Befehle hinzufügen
1. **Im Modul neue Funktion erstellen:**
```bash
cmd_neuerbefehl() {
log "INFO" "Führe neuen Befehl aus..."
# Implementierung hier
}
```
2. **Hilfe aktualisieren:**
```bash
cmd_help() {
cat <<EOF
...
neuerbefehl - Beschreibung des neuen Befehls
...
EOF
}
```
### Gemeinsame Funktionen
Das Hauptskript stellt folgende Funktionen zur Verfügung:
- `log(level, message)` - Logging mit Farben
- `show_help()` - Globale Hilfe
- `load_game_module(game)` - Modul laden
## Lizenz
Dieses Projekt folgt den gleichen Lizenzbedingungen wie das ursprüngliche System.