commit ea7a0fe4159710d07c268341901df19f240e1d73 Author: Joel Maxwell Date: Sat May 9 14:18:40 2026 -0300 Full project state: rebuilt container + all updated files diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5fd4dfc --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/server/ +/data/ +*.log diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7676e6b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +# Dockerfile +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive +ENV WINEPREFIX=/data/wine/wineprefix +ENV WINEARCH=win64 +ENV WINDROSE_HOME=/server +ENV WINDROSE_R5=/server/R5 +ENV SAVED_DIR=/data/Saved + +# Install WineHQ (correct method for Ubuntu 22.04) +RUN dpkg --add-architecture i386 \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + ca-certificates wget curl gnupg2 software-properties-common \ + xvfb x11vnc pulseaudio cabextract unzip p7zip-full \ + && mkdir -pm755 /etc/apt/keyrings \ + && wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key \ + && wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources \ + && apt-get update \ + && apt-get install -y --install-recommends winehq-stable \ + && rm -rf /var/lib/apt/lists/* + +# Intel ARC GPU + Vulkan support +RUN dpkg --add-architecture i386 \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + mesa-vulkan-drivers mesa-vulkan-drivers:i386 \ + libvulkan1 libvulkan1:i386 \ + intel-media-va-driver-non-free vainfo \ + && rm -rf /var/lib/apt/lists/* + +# Install DXVK 2.3 (runtime DLLs only) +RUN wget -O dxvk.tar.gz https://github.com/doitsujin/dxvk/releases/download/v2.3/dxvk-2.3.tar.gz \ + && tar -xvf dxvk.tar.gz \ + && rm dxvk.tar.gz \ + && mv dxvk-2.3 /opt/dxvk + +# Create directories for mounts +RUN mkdir -p ${WINDROSE_HOME} ${WINDROSE_R5} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..43b4acc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +services: + windrose: + build: . + container_name: windrose-servermanager + + # IMPORTANT: Linux/TrueNAS paths ONLY + volumes: + - /mnt/tank/windrose/server:/server:rw + - /mnt/tank/windrose/server/R5:/server/R5:rw + - /mnt/tank/windrose/data/Saved:/data/Saved:rw + + ports: + - "27015:27015/udp" + - "27015:27015/tcp" + + environment: + - WINEPREFIX=/data/wine/wineprefix + - WINEARCH=win64 + - WINDROSE_HOME=/server + - WINDROSE_R5=/server/R5 + - SAVED_DIR=/data/Saved + + # Intel ARC GPU Vulkan + - LIBVA_DRIVER_NAME=iHD + - VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/intel_icd.i686.json + + # DXVK overrides + - WINEDLLOVERRIDES=d3d11,dxgi,d3d10core,d3d9=native,builtin + + # GPU passthrough + devices: + - /dev/dri:/dev/dri + + # Required for Wine + GPU access + cap_add: + - SYS_ADMIN + + tty: true + stdin_open: true diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..b2a871f --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,70 @@ +#!/bin/bash +set -euo pipefail + +WINEPREFIX=${WINEPREFIX:-/data/wine/wineprefix} +WINDROSE_HOME=${WINDROSE_HOME:-/server} +WINDROSE_R5=${WINDROSE_R5:-/server/R5} +SAVED_DIR=${SAVED_DIR:-/data/Saved} + +SERVER_EXE="${WINDROSE_R5}/Binaries/Win64/WindroseServer-Win64-Shipping.exe" + +export WINEDEBUG=-all +export DISPLAY= +export XDG_RUNTIME_DIR=/tmp/runtime-wine +mkdir -p "$XDG_RUNTIME_DIR" + +# Intel ARC Vulkan ICDs +export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/intel_icd.i686.json" +export LIBVA_DRIVER_NAME=iHD + +DXVK_32="/opt/dxvk/x32" +DXVK_64="/opt/dxvk/x64" + +# Initialize wineprefix if missing +if [ ! -d "$WINEPREFIX" ] || [ ! -f "$WINEPREFIX/system.reg" ]; then + echo "Initializing wineprefix at $WINEPREFIX" + mkdir -p "$WINEPREFIX" + wineboot --init || true + + echo "Installing DXVK DLLs into wineprefix..." + WIN_SYS32="$WINEPREFIX/drive_c/windows/system32" + WIN_SYSWOW64="$WINEPREFIX/drive_c/windows/syswow64" + + mkdir -p "$WIN_SYS32" "$WIN_SYSWOW64" + + cp "$DXVK_64"/*.dll "$WIN_SYS32"/ + cp "$DXVK_32"/*.dll "$WIN_SYSWOW64"/ +fi + +# Force DXVK to be used +export WINEDLLOVERRIDES="d3d11,dxgi,d3d10core,d3d9=native,builtin" + +mkdir -p "$SAVED_DIR" + +case "${1:-}" in + run-server) + echo "Starting Windrose dedicated server..." + + if [ ! -f "$SERVER_EXE" ]; then + echo "ERROR: Windrose server binary not found:" + echo " $SERVER_EXE" + exit 1 + fi + + cd "$(dirname "$SERVER_EXE")" + + exec wine "$SERVER_EXE" \ + -log \ + -unattended \ + -nosteam \ + -savedir "$SAVED_DIR" + ;; + + bash) + exec /bin/bash + ;; + + *) + exec "$@" + ;; +esac diff --git a/scripts/build-release.sh b/scripts/build-release.sh new file mode 100644 index 0000000..e69de29