gameadm-repo/modules/mc.sh

147 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# Minecraft Server Modul für gameadm
# Beispiel für zukünftige Erweiterungen
# Konfigurationsdatei
CONFIG_FILE="/etc/minecraft-server.conf"
# Konfiguration laden
if [[ -f "$CONFIG_FILE" ]]; then
# shellcheck disable=SC1090
source "$CONFIG_FILE"
else
log "WARN" "Konfig nicht gefunden: $CONFIG_FILE"
fi
# Standardwerte
CONTAINER_NAME=${CONTAINER_NAME:-minecraft-server}
IMAGE=${IMAGE:-docker.io/itzg/minecraft-server:latest}
DATA_DIR=${DATA_DIR:-/srv/minecraft}
PORT=${PORT:-25565}
MEMORY_LIMIT=${MEMORY_LIMIT:-"2g"}
VERSION=${VERSION:-"LATEST"}
EULA=${EULA:-"TRUE"}
# Hilfsfunktionen
ensure_prereqs() {
mkdir -p "$DATA_DIR"
# EULA akzeptieren
if [[ ! -f "$DATA_DIR/eula.txt" ]]; then
echo "eula=$EULA" > "$DATA_DIR/eula.txt"
log "INFO" "EULA akzeptiert: $DATA_DIR/eula.txt"
fi
}
is_running() {
podman inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null | grep -q true
}
# Befehle
cmd_start() {
ensure_prereqs
if is_running; then
log "INFO" "Bereits gestartet: $CONTAINER_NAME"
exit 0
fi
# Beendeten Container entfernen falls vorhanden
if podman inspect "$CONTAINER_NAME" >/dev/null 2>&1; then
podman rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true
fi
log "INFO" "Starte $CONTAINER_NAME ..."
podman run -d \
--name "$CONTAINER_NAME" \
--restart=always \
--memory="$MEMORY_LIMIT" \
-p ${PORT}:25565 \
-v "$DATA_DIR:/data" \
-e EULA="$EULA" \
-e VERSION="$VERSION" \
-e MEMORY="$MEMORY_LIMIT" \
"$IMAGE" >/dev/null
log "INFO" "Minecraft Server gestartet."
}
cmd_stop() {
if ! podman inspect "$CONTAINER_NAME" >/dev/null 2>&1; then
log "INFO" "Container existiert nicht: $CONTAINER_NAME"
exit 0
fi
log "INFO" "Stoppe $CONTAINER_NAME ..."
podman stop -t 30 "$CONTAINER_NAME" >/dev/null 2>&1 || true
podman rm "$CONTAINER_NAME" >/dev/null 2>&1 || true
log "INFO" "Minecraft Server gestoppt."
}
cmd_restart() {
cmd_stop || true
cmd_start
}
cmd_status() {
if is_running; then
echo "RUNNING"
podman ps --filter name="^${CONTAINER_NAME}$" --format '{{.Names}}\t{{.Status}}\t{{.Ports}}'
else
if podman inspect "$CONTAINER_NAME" >/dev/null 2>&1; then
echo "EXITED"
else
echo "NOT FOUND"
fi
fi
}
cmd_logs() {
if ! podman inspect "$CONTAINER_NAME" >/dev/null 2>&1; then
log "ERROR" "Container $CONTAINER_NAME existiert nicht"
exit 1
fi
podman logs --tail=200 "$CONTAINER_NAME"
}
cmd_follow() {
if ! podman inspect "$CONTAINER_NAME" >/dev/null 2>&1; then
log "ERROR" "Container $CONTAINER_NAME existiert nicht"
exit 1
fi
podman logs -f "$CONTAINER_NAME"
}
cmd_update() {
log "INFO" "Pull $IMAGE ..."
podman pull "$IMAGE"
log "INFO" "Minecraft Server Image aktualisiert."
}
cmd_help() {
cat <<EOF
Minecraft Server Verwaltung
Verwendung:
gameadm mc <befehl>
Verfügbare Befehle:
start - Startet Minecraft Server
stop - Stoppt Minecraft Server
restart - Startet Server neu
status - Zeigt Server-Status
logs - Zeigt Server-Logs (letzte 200 Zeilen)
follow - Folgt Logs in Echtzeit
update - Aktualisiert Server-Image
help - Zeigt diese Hilfe
Konfiguration: $CONFIG_FILE
Container: $CONTAINER_NAME
Port: $PORT (TCP)
Speicher: $MEMORY_LIMIT
Version: $VERSION
Daten: $DATA_DIR
Hinweis: Dies ist ein Beispiel-Modul für zukünftige Erweiterungen.
EOF
}