diff --git a/docker/dedicated-server/entrypoint.sh b/docker/dedicated-server/entrypoint.sh index 26b40da98..8d5a8a29f 100644 --- a/docker/dedicated-server/entrypoint.sh +++ b/docker/dedicated-server/entrypoint.sh @@ -8,7 +8,6 @@ SERVER_PORT="25565" SERVER_BIND_IP="0.0.0.0" PERSIST_DIR="/srv/persist" -WINE_CMD="" ensure_persist_file() { local persist_path="$1" @@ -30,64 +29,6 @@ ensure_persist_file() { ln -sfn "${persist_path}" "${runtime_path}" } -wait_for_xvfb_ready() { - local display="$1" - local xvfb_pid="$2" - local wait_seconds="${XVFB_WAIT_SECONDS:-10}" - local wait_ticks=$((wait_seconds * 10)) - local display_number="${display#:}" - display_number="${display_number%%.*}" - - if [ -z "${display_number}" ] || ! [[ "${display_number}" =~ ^[0-9]+$ ]]; then - echo "[error] Invalid DISPLAY format for Xvfb wait: ${display}" >&2 - return 1 - fi - - local socket_path="/tmp/.X11-unix/X${display_number}" - local elapsed=0 - - while [ "${elapsed}" -lt "${wait_ticks}" ]; do - if ! kill -0 "${xvfb_pid}" 2>/dev/null; then - echo "[error] Xvfb exited before the display became ready." >&2 - if [ -f /tmp/xvfb.log ]; then - echo "[error] ---- /tmp/xvfb.log ----" >&2 - tail -n 200 /tmp/xvfb.log >&2 || true - echo "[error] ----------------------" >&2 - fi - return 1 - fi - - if [ -S "${socket_path}" ]; then - # Keep a short extra delay so Wine does not race display handshake. - sleep 0.2 - if kill -0 "${xvfb_pid}" 2>/dev/null && [ -S "${socket_path}" ]; then - return 0 - fi - fi - - # One more liveness check after the ready probe branch. - if ! kill -0 "${xvfb_pid}" 2>/dev/null; then - echo "[error] Xvfb exited during display readiness probe." >&2 - if [ -f /tmp/xvfb.log ]; then - echo "[error] ---- /tmp/xvfb.log ----" >&2 - tail -n 200 /tmp/xvfb.log >&2 || true - echo "[error] ----------------------" >&2 - fi - return 1 - fi - - sleep 0.1 - elapsed=$((elapsed + 1)) - done - - echo "[error] Timed out waiting for Xvfb display ${display}." >&2 - if [ -f /tmp/xvfb.log ]; then - echo "[error] ---- /tmp/xvfb.log ----" >&2 - tail -n 200 /tmp/xvfb.log >&2 || true - echo "[error] ----------------------" >&2 - fi - return 1 -} if [ ! -d "$SERVER_DIR" ]; then echo "[error] Server directory not found: $SERVER_DIR" >&2 @@ -117,47 +58,13 @@ if [ -e "Windows64/GameHDD" ] && [ ! -L "Windows64/GameHDD" ]; then fi ln -sfn "${PERSIST_DIR}/GameHDD" "Windows64/GameHDD" -# for compatibility with other images -if command -v wine64 >/dev/null 2>&1; then - WINE_CMD="wine64" -elif [ -x "/usr/lib/wine/wine64" ]; then - WINE_CMD="/usr/lib/wine/wine64" -elif command -v wine >/dev/null 2>&1; then - WINE_CMD="wine" -else - echo "[error] No Wine executable found (wine64/wine)." >&2 - exit 1 -fi +# do umu-run stuff + if [ ! -d "${WINEPREFIX}" ] || [ -z "$(ls -A "${WINEPREFIX}" 2>/dev/null)" ]; then mkdir -p "${WINEPREFIX}" fi -# in the current implementation, a virtual screen is required because the client-side logic is being called for compatibility -if [ -z "${DISPLAY:-}" ]; then - export DISPLAY="${XVFB_DISPLAY:-:99}" - XVFB_SCREEN="${XVFB_SCREEN:-64x64x16}" - DISPLAY_NUMBER="${DISPLAY#:}" - DISPLAY_NUMBER="${DISPLAY_NUMBER%%.*}" - if [ -z "${DISPLAY_NUMBER}" ] || ! [[ "${DISPLAY_NUMBER}" =~ ^[0-9]+$ ]]; then - echo "[error] Invalid XVFB_DISPLAY format: ${DISPLAY}" >&2 - exit 1 - fi - XVFB_SOCKET="/tmp/.X11-unix/X${DISPLAY_NUMBER}" - XVFB_LOCK="/tmp/.X${DISPLAY_NUMBER}-lock" - # The check is performed assuming the same container will be restarted. - if [ -S "${XVFB_SOCKET}" ] || [ -e "${XVFB_LOCK}" ]; then - echo "[warn] Removing stale Xvfb state for ${DISPLAY} before startup." >&2 - rm -f "${XVFB_SOCKET}" "${XVFB_LOCK}" - fi - Xvfb "${DISPLAY}" -nolisten tcp -screen 0 "${XVFB_SCREEN}" >/tmp/xvfb.log 2>&1 & - XVFB_PID=$! - wait_for_xvfb_ready "${DISPLAY}" "${XVFB_PID}" - echo "[info] Xvfb ready on ${DISPLAY} (pid=${XVFB_PID}, screen=${XVFB_SCREEN})" -else - echo "[info] Using existing DISPLAY=${DISPLAY}; skipping Xvfb startup" -fi - args=( -port "${SERVER_PORT}" -bind "${SERVER_BIND_IP}"