#!/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 < 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 }