147 lines
3.5 KiB
Bash
Executable File
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
|
|
}
|