r-pufky/steam

I get this issue a few seconds after starting the .exe file

NAHFE opened this issue · 7 comments

NAHFE commented

XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":100"

Can you let me know what game you are trying to run and any docker configuration that you are using so I can reproduce? Thanks!

NAHFE commented

I'm trying to run an astroneer server and this is my docker-compose.yml file:

version: '3'
services:
    steam:
        image: rpufky/steam:stable
        ports:
            - 8777:8777
            - 27015:27015/udp
        environment:
            - PUID=1002
            - PGID=1002
            - UPDATE_OS=1
            - UPDATE_STEAM=1
            - UPDATE_SERVER=1
            - PLATFORM=windows
            - STEAM_APP_ID=728470
            - TZ=Europe/Stockholmz
        volumes:
            - /space/herman/docker/astroserver/data:/data
            - /etc/localtime:/etc/localtime:ro

And my custom_server looks like this:

su steam -c "xvfb-run --auto-servernum \
  wine64 ${SERVER_DIR}/AstroServer.exe"

Did some investigation into this.

Looks like a few things:

I'm going to build an experimental tag, which will include wine-staging. This will bring wine up to whatever the latest staging is (currently 5.10); and should address the crashing issue.

Quick update:

  • I've pushed a new experimental release, which will use the latest non-dev winehq build.
  • The dedicated server for astroneer appears to be a tirefire. I tested both the docker container and an explicit windows dedicated server on dedicated hardware and reach the same state.
  • This appears to be do to wonkiness in how the server handles NAT/NAT Reflection and local IP's -- in both instances I can connect to the server but fail to join. Please let me know if you get past this point and what you did.

Setup

  1. Since it's unreal engine based, I modified the launcher for Conan Exiles.

/data/custom_server

#!/bin/bash
#
# Runs as root. Drop privileges.
#
# Capture kill/term signals and send SIGINT to gracefully shutdown server.
PROCESS_WAIT_TIME=25
WATCHDOG_TIME=300

function shutdown() {
  echo 'Shutting down server ...'
  if [ "$(pgrep -n Astro)" != '' ]; then
    echo "Sending SIGINT to Astro server (max ${PROCESS_WAIT_TIME} secs) ..."
    kill -SIGINT `pgrep -n Astro`
    sleep ${PROCESS_WAIT_TIME}
  fi
  if [ "$(pgrep wine)" != '' ]; then
    echo "Sending SIGINT to wine processes (max ${PROCESS_WAIT_TIME} sec) ..."
    kill -SIGINT `pgrep wine`
    sleep ${PROCESS_WAIT_TIME}
  fi
  exit 0
}
trap shutdown SIGINT SIGKILL SIGTERM

function start_server() {
  su steam -c "xvfb-run --auto-servernum wine64 ${SERVER_DIR}/AstroServer.exe"
}

function watch_server() {
  if ps aux | grep [A]stroServer > /dev/null; then
    echo 'Server is running ...'
  else
    echo 'Starting server ...'
    start_server &
  fi
}

while true; do
  watch_server
  # background and using wait enables trap capture.
  sleep ${WATCHDOG_TIME} &
  wait
done
  1. I updated the compose file to use the correct ports and experimental.

docker-compose.yml

version: "3"

services:
  astroneer:
    image: rpufky/steam:experimental
    restart: unless-stopped
    stop_grace_period: 1m
    ports:
      - 8777:8777/udp
      - 27015:27015
      - 27015:27015/udp
    environment:
      - PUID=1002
      - PGID=1002
      - UPDATE_OS=1
      - UPDATE_STEAM=1
      - UPDATE_SERVER=1
      - PLATFORM=windows
      - STEAM_APP_ID=728470
      - TZ=America/Los_Angeles
    volumes:
      - /d/etc/data/games/astroneer:/data
      - /etc/localtime:/etc/localtime:ro
  1. The dedicated server (on all platforms) will automatically exit with no message if Port and some combination of AstroServerSettings.ini is not set.

Launch the server and let it run until until these files are generated. Then shutdown the server.

Astro/Saved/Config/WindowsServer/Engine.ini

[URL]
Port=8777

Astro/Saved/Config/WindowsServer/AstroServerSettings.ini

[/Script/Astro.AstroServerSettings]
bLoadAutoSave=True
MaxServerFramerate=30.000000
MaxServerIdleFramerate=3.000000
bWaitForPlayersBeforeShutdown=False
PublicIP={MUST BE SET TO YOUR PUBLIC IP}
ServerName={SERVER NAME}
ServerGuid=D70A9EE8449E9079837E43AFB8262FF6
OwnerName={YOUR STEAM USERNAME NAME}
OwnerGuid=0
PlayerActivityTimeout=0
ServerPassword={SERVER PASSWORD}
bDisableServerTravel=False
DenyUnlistedPlayers=False
VerbosePlayerProperties=False
AutoSaveGameInterval=900
BackupSaveGamesInterval=7200
ActiveSaveFileDescriptiveName=SAVE_1
ServerAdvertisedName={PRESET HASH}
  1. Relaunch the server.

Edit: clarified some text.

NAHFE commented

The server is running but I cannot connect to it. Should I forward all the 3 ports?

Yes, you need to expose 8777/udp, 27015 tcp/udp. 8777 is assuming you are following the setup guide for astroneers.

This is essentially where I got with the dedicated server on windows as well as this container.

FYI: There are some folks who are working through some final dependency issues for this server to work on Linux. See this post dedicated server on linux. Looks like there is a discord channel there with the group of folks debugging it.

If they get it working, please re-open this bug and link what needs to be changed for it to work. I'll update the docker image with what's needed then.