escapingnetwork / core-keeper-dedicated

Dockerfile for automated build of a Core Keeper Dedicated Server
https://hub.docker.com/r/escaping/core-keeper-dedicated
MIT License
121 stars 36 forks source link

Segmentation Fault when starting the docker container #67

Open john-ee opened 4 weeks ago

john-ee commented 4 weeks ago

Hi everyone,

I've just started playing the game and I want to host a server on my NAS. I ran the Docker-Compose file but I'm having issues.

As soons as I start the container after the game installs, I get the following error : ./launch.sh: line 80: 134 Segmentation fault (core dumped) DISPLAY=:99 LD_LIBRARY_PATH="$LD_LIBRARY_PATH:../Steamworks SDK Redist/linux64/" ./CoreKeeperServer "${params[@]}"

I feel like my hardware is weak but according to a few articles, I should be able to run it. My specs are the following : Processor : Intel(R) Celeron(R) N4505 @ 2.00GHz Memory : 4 Go Kernel : Linux 6.1.0-26-amd64 I'm running OpenMediaVault.

Here are the logs and my docker setup : CoreKeeperServerLog.txt core-keeper_core-keeper-dedicated.log docker-compose.txt .core.env.txt

Am I missing something ? The other issues haven't fixed anything for me.

Diyagi commented 4 weeks ago

Probably same as #53 Its an issue with permissions, should also be fixed by #62

john-ee commented 4 weeks ago

Probably same as #53 Its an issue with permissions, should also be fixed by #62

I don't understand what I should do to fix it. In #53 it seems the user is setting the same PUID:GUID from the host as the container in the user. Should I urn the same command ? I'm using Docker volumes instead of creating a folder then using it as a volume. I did that previously but I had rights issues, now at least it's able to download the game.

Diyagi commented 4 weeks ago

Well, it is indeed weird, volumes should not have permission issues, also this error is a bit different from the other issue

Steam API initialized
Steam server API failed to log in anonymously
CWorkThreadPool::~CWorkThreadPool: work complete queue not empty, 2 items discarded.
CWorkThreadPool::~CWorkThreadPool: work processing queue not empty: 3 items discarded.
Platform init Steam failed
 #0 PlayerMain(int, char**)
 #1 PlayerMain(int, char**)
 #2 ???
 #3  (Mono JIT Code) (wrapper managed-to-native) UnityEngine.DebugLogHandler:Internal_Log (UnityEngine.LogType,UnityEngine.LogOption,string,UnityEngine.Object)
 #4  (Mono JIT Code) UnityEngine.Logger:Log (UnityEngine.LogType,object)
 #5  (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void (object,intptr,intptr,intptr)
 #6 mono_get_runtime_build_info
 #7 mono_runtime_invoke
 #8 mono_runtime_invoke
 #9 ???
 #10 ???
 #11 ???
 #12 ???
 #13 ???
 #14 ???
 #15 PlayerMain(int, char**)
 #16 __libc_init_first
 #17 __libc_start_main
 #18 ???
john-ee commented 4 weeks ago

There's the following message in the Docker logs, could that be linked to it ?

core-keeper-dedicated  | xvinfo:  Unable to open display :99
core-keeper-dedicated  | Failed to start Xvfb, retry: 1
core-keeper-dedicated  | _XSERVTransmkdir: Owner of /tmp/.X11-unix should be set to root
Diyagi commented 4 weeks ago

No, First two is just the script waiting for the xvfb to be ready and the second is just wrong permission for the x11 sockets folder, but it should be harmless.

Diyagi commented 4 weeks ago

Well, i guess u can try my in-dev image diyagi/core-keeper-dedicated these are the changed env vars

PUID=1000
PGID=1000
WORLD_INDEX=0
WORLD_NAME="Core Keeper Server"
WORLD_SEED=0
WORLD_MODE=0
GAME_ID=""
DATA_PATH="${STEAMAPPDATADIR}"
MAX_PLAYERS=10
SEASON=""
SERVER_IP=""
SERVER_PORT=""
DISCORD_WEBHOOK_URL=""
# Player Join
DISCORD_PLAYER_JOIN_ENABLED=true
DISCORD_PLAYER_JOIN_MESSAGE="$${char_name} ($${steamid}) has joined the server."
DISCORD_PLAYER_JOIN_TITLE="Player Joined"
DISCORD_PLAYER_JOIN_COLOR="47456"
# Player Leave
DISCORD_PLAYER_LEAVE_ENABLED=true
DISCORD_PLAYER_LEAVE_MESSAGE="$${char_name} ($${steamid}) has disconnected. Reason: $${reason}."
DISCORD_PLAYER_LEAVE_TITLE="Player Left"
DISCORD_PLAYER_LEAVE_COLOR="11477760"
# Server Start
DISCORD_SERVER_START_ENABLED=true
DISCORD_SERVER_START_MESSAGE="**World:** $${world_name}\n**GameID:** $${gameid}"
DISCORD_SERVER_START_TITLE="Server Started"
DISCORD_SERVER_START_COLOR="2013440"
# Server Stop
DISCORD_SERVER_STOP_ENABLED=true
DISCORD_SERVER_STOP_MESSAGE=""
DISCORD_SERVER_STOP_TITLE="Server Stopped"
DISCORD_SERVER_STOP_COLOR="12779520"

pay attention to the PUID and PGID, you will want to set these to the same IDs used by the nas (if u have access to the terminal just run the id command), this should also be safe to use with binds instead of volume assuming you set the right user and group IDs, let me know if it works.

Also, this is just an dev branch, this should be merged in this repo eventually, so if it works, remember that you will need to change it back to this repo once it merges.

john-ee commented 4 weeks ago

I doesn't work any better. In the core.env file, I put the PUID/PGID of the user I have to run Docker.

core-keeper_core-keeper-dedicated.log

Diyagi commented 4 weeks ago

Can you try setting both SERVER_IP and SERVER_PORT ?

john-ee commented 4 weeks ago

Still no success.

Diyagi commented 4 weeks ago

Well, its hard to say whats causing this as the Core Keeper server itself is hiding the errors from steamapi, all i know is that it is failing to login into steam.

// num3 is SERVER_PORT
SteamServer.LogOnAnonymous();
int num4 = 0;
while (num4 < 100 && !SteamServer.LoggedOn)
{
    Thread.Sleep(100);
    this.Update();
    num4++;
}
if (!SteamServer.LoggedOn && num3 == 0)
{
    Debug.LogWarning("Steam server API failed to log in anonymously");
    SteamServer.Shutdown();
    return false;
}

My only guesses is that the core keeper server is loading the wrong steamclient.so or theres some firewall issue not allowing it to connect to steam (tho steamcmd seems to connect to it just fine).