peepoturtle / palworld-docker-proton-server

8 stars 6 forks source link

issue getting started :( #1

Closed Dekita closed 5 months ago

Dekita commented 5 months ago

i get this error when trying to run on my linux machine: palworld | [ 0%] Checking for available updates... palworld | src/tier0/threadtools.cpp (4213) : Probably deadlock or failure waiting for thread to initialize. palworld | Thread failed to initialize

and this when trying to run on local windows for testing: 2024-01-28 20:21:16 Waiting for user info...OK 2024-01-28 20:21:16 Update state (0x5) verifying install, progress: 0.00 (1762 / 39195172) 2024-01-28 20:21:16 Update state (0x5) verifying install, progress: 17.11 (462917637 / 2704769513) 2024-01-28 20:21:16 Update state (0x5) verifying install, progress: 59.77 (1616532485 / 2704769513) 2024-01-28 20:21:16 Update state (0x5) verifying install, progress: 99.67 (2695861225 / 2704769513) 2024-01-28 20:21:16 Success! App '2394010' fully installed. 2024-01-28 20:21:16 Work thread 'CJobMgr::m_WorkThreadPool:1' is marked exited, but we could not immediately join prior to deleting -- proceeding without join 2024-01-28 20:21:16 starting server with: /home/steam/.steam/steam/compatibilitytools.d/GE-Proton8-28/proton run /app/PalServer/Pal/Binaries/Win64/PalServer-Win64-Test.exe -port=8211 -publicport=8211 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS EpicApp=PalServer 2024-01-28 20:21:16 esync: up and running. 2024-01-28 20:21:16 wine: RLIMIT_NICE is <= 20, unable to use setpriority safely 2024-01-28 20:21:17 Wine cannot find the FreeType font library. To enable Wine to 2024-01-28 20:21:17 use TrueType fonts please install a version of FreeType greater than 2024-01-28 20:21:17 or equal to 2.0.5. 2024-01-28 20:21:17 http://www.freetype.org 2024-01-28 20:21:17 error

both issues result in the server not launching :P

peepoturtle commented 5 months ago

the FreeType error you can ignore it, it will launch even when it show up. Are you trying with just a fresh setup without ue4ss installed on the server?

Dekita commented 5 months ago

yeah its with a completely fresh setup with nothing extra.

when running locally on windows, with the freetype error, the server never connects, so i dont think it is actually launching after throwing that error :(

peepoturtle commented 5 months ago

hmm, only thing i could think of might be your user id is not 1000? the docker image uses a non-root user that has 1000 uid, if your linux user's uid is not 1000 it could run into permission issue with the shared server folder.

if that's not the problem then i'm not really sure... maybe try disable multi-thread (pull the latest commit) and

cp env.sample .env
<uncomment line # NO_MULTITHREADING=1>
NewittAll commented 5 months ago

I'm also getting a similar error when trying to run it on Ubuntu, I uncommented the multi threading line in the .env file but that didn't change anything either.

Dekita commented 5 months ago

i tried a different docker container for a pure linux dedicated server, and had the same error of thread not starting. found a helpful post mentioning they had the same issue on a synology nas and updating the software worked. i realized my servers last update was a few years ago, ran apt update and upgrade, and then the linux dedi server container works... but i now have the error i was getting on windows, with the truefont errors and then a single 'error' message, wont connect :(

also tried with/without multithreading. it seems to be whatever is printing the final 'error' message thats causing the issue, no idea where its coming from though :D

peepoturtle commented 5 months ago

the single error message at the end is from the start.sh script, it means the palserver exe exited so the script hangs there in case i need to go in the docker to check stuff (docker exec -it palworld /bin/bash)

i'm not really sure what could be the issue, i verified the setup on 2 different machines and 2 distro (arch and ubuntu). and this is the docker version i have on my ubuntu setup

~ $ docker -v
Docker version 24.0.5, build ced0996
~ $ docker compose version
Docker Compose version v2.20.2
Dekita commented 5 months ago

adding libfreetype6 was something i had tried already. the error persists even after that (it just stops the truefont error messages)

still not been able to get this container running at all :(

peepoturtle commented 5 months ago

i didn't think the libfreetype was going to fix it either, didn't notice it auto closed the issue when i merged the PR.

Dekita commented 5 months ago

still no luck getting this to work either locally on windows or on a linux vps.

rented a new vps, ubuntu 20.04, docker v25.0.2, compose v2.24.5. get the exact same issue of wine: RLIMIT_NICE is <= 20, unable to use setpriority safely before the system says "error" and dies. I found some additional informaiton about the issue, which seems to be somewhat common? here: https://github.com/ValveSoftware/Proton/issues/6141 but havent been able to solve it on my end with any of the proposed solutions.

NewittAll commented 5 months ago

I've been trying to get it working as well; however, I have been able to get it to boot, I'm just not 100% certain if it is running a windows server because I haven't gotten the mods to work yet.

When I built the docker it starts the download fine then starts printing src/common/processpipe_posix.cpp (279) : invalid name/address:port string provided to BSetIpPortFromName SteamClientService_53 after validating, it says it downloads successfully but it didn't download the PalServer file to the /app/PalServer location, it went to /home/steam/.steam/steam/steamapps/common/PalServer instead.

When I tried running the server directly with docker exec I got the error wine: '/home/steam/.steam/steam/steamapps/compatdata/2394010/pfx' is not owned by you. This error is due to docker exec running at root level so I fixed it by adding gosu steam to the docker exec like so.

docker exec palworld gosu steam /home/steam/.steam/steam/compatibilitytools.d/GE-Proton8-28/proton run /home/steam/.steam/steam/steamapps/common/PalServer/Pal/Binaries/Win64/PalServer-Win64-Test-cmd.exe -port=8211 -players=32 -servername=palworld-proton

This gives the same, _wine: RLIMITNICE is <= 20, unable to use setpriority safely, error @Dekita was getting but it actually boots up a server I was able to connect to, I'm still trying to work on it to be sure it's running Windows before I make changes to the file.

peepoturtle commented 5 months ago

the RLIMIT_NICE is <= 20 error can be ignored, server would still boot up even if changing nice value fails. not sure why your install got installed in the wrong place, the +force_install_dir ${PalServerDir} in the start.sh script is supposed to tell steam to install it in /app/PalServer.

if there is a permission issue, could you try doing this before starting the container

sudo chown -R 1000:1000 ./server

this should ensure the files accessed by docker's steam user have the correct permission

if you are able to get run the server but crash when you try to load mod that's most likely because you have the ue4ss gui enabled, on this headless setup we cannot have gui enable since there's no x server and such, and it would lead to proton failing

for disabling the ue4ss gui just have to set these 2 to 0 in UE4SS-settings.ini

GuiConsoleEnabled = 0
GuiConsoleVisible = 0
NewittAll commented 5 months ago

Yeah not too sure why it downloaded to there either, as for the permission issue its due to running wine as a root user (docker exec only runs at root level) which is why I had to use the gosu to force it to run wine as the steam user.

As for the mods I was able to add the UE4SS files and this mod: https://www.nexusmods.com/palworld/mods/79?tab=description it didn't crash, but it just didn't do anything, but I'll try that out.

peepoturtle commented 5 months ago

I don't think that mod works on dedicated, you can use my mod https://www.nexusmods.com/palworld/mods/182, which is specifically made to work with dedicated

Dekita commented 5 months ago

just checked, and yes, if i change the start.sh code to the code below, then the log further below is shown, followed by the game client being able to connect to the server!!

PalServerDir=/home/steam/.steam/steam/steamapps/common/PalServer
CMD="$PROTON run ${PalServerDir}/Pal/Binaries/Win64/PalServer-Win64-Test-cmd.exe -port=8211 -players=9 -servername=palworld-proton"

image

Only tested on my local windows machine, but yea, it seems this is the issue!

peepoturtle commented 5 months ago

ok so the under lying issue seems to be when steam run this command it some how failed to installed the server in ${PalServerDir} and ended up in the default location.

$steamcmd +@sSteamCmdForcePlatformType windows +force_install_dir ${PalServerDir} +login anonymous +app_update ${APPID} validate +quit || die

could you open a shell docker run -it palworld /bin/bash and check if there's any logs in /home/steam/.steam/steam/logs, maybe there's some useful info on why it could have failed.

Dekita commented 5 months ago

got a bunch of different log files, but nothing that suggests a full failure except this in stderr.txt:

02/01 17:45:45 Init: Installing breakpad exception handler for appid(steam)/version(1705108307)/tid(41)
Steam Service Error: Failed to get Steam Service Start function
CAppInfoCacheReadFromDiskThread took 60 milliseconds to initialize

^ thats the entire contents

NewittAll commented 5 months ago

ok so the under lying issue seems to be when steam run this command it some how failed to installed the server in ${PalServerDir} and ended up in the default location.

$steamcmd +@sSteamCmdForcePlatformType windows +force_install_dir ${PalServerDir} +login anonymous +app_update ${APPID} validate +quit || die

could you open a shell docker run -it palworld /bin/bash and check if there's any logs in /home/steam/.steam/steam/logs, maybe there's some useful info on why it could have failed.

I made a couple changes by installing it to /palworld instead of /app/PalWorldServer and that allowed the server to start up by just starting the container. Added to the end of Dockerfile before ENTRYPOINT, and in start.sh I changed PalServerDir to /palworld

RUN mkdir -p /palworld/backup \
    && chown steam:steam /palworld

I'll keep you updated on what I find.

peepoturtle commented 5 months ago

so it seems like if steamcmd doesn't have proper permission to install an app in the specified location from force_install_dir it would just silently fail and fallback to default install location can you try the branch fix_steam_install i just pushed? i updated the start.sh to check for directory permission and ensure the server is installed in the right place before starting and to ensure that directory has proper permission, you can do this instead

cd palworld-docker-proton-server
sudo chown 1000:1000 ./server
docker compose up
NewittAll commented 5 months ago
cd palworld-docker-proton-server
sudo chown 1000:1000 ./server
docker compose up

Sadly no luck with that branch

palworld  | Starting periodic command scheduler: cron.
palworld  | uid=1000(steam) gid=1000(steam) groups=1000(steam)
palworld  | mkdir: cannot create directory '/app/PalServer': Permission denied
palworld  | stat: cannot statx '/app/PalServer': No such file or directory
palworld  | /app/PalServer has unexpected permission  != 1000:1000:755
palworld  | /app/start.sh script failed, hanging forever...
Dekita commented 5 months ago

same, however, i do seem to have luck if i simply disable the mounted volume for the server folder.

peepoturtle commented 5 months ago

this line here /app/PalServer has unexpected permission != 1000:1000:755 means the steam user inside docker does not have permission to create files/directories in the ./server directory (mounted as /app inside docker)

what does the file permission of ./server look like? can you run a stat on it from the host?

$ stat server/
  File: server/
  Size: 54              Blocks: 0          IO Block: 4096   directory
Device: 0,38    Inode: 7873811     Links: 1
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    test)   Gid: ( 1000/    test)
Access: 2024-02-01 10:34:17.339689329 -0800
Modify: 2024-02-01 10:34:13.176330829 -0800
Change: 2024-02-01 10:34:13.176330829 -0800
 Birth: 2024-02-01 10:12:25.311952824 -0800
NewittAll commented 5 months ago
$ docker exec palworld2 stat /app
  File: /app
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 2bh/43d Inode: 3227658     Links: 3
Access: (0775/drwxrwxr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-02-01 19:00:54.681853818 +0000
Modify: 2024-02-01 18:58:59.979707135 +0000
Change: 2024-02-01 19:00:54.489849139 +0000
 Birth: -
peepoturtle commented 5 months ago

Uid: ( 0/ root) Gid: ( 0/ root) it's not supposed to owned by root, i could fix this by just forcing setting the permission of this directory before calling doing gosu steam ...

peepoturtle commented 5 months ago

can you try updating the branch? you will have to rebuild the image:

$ cd docker
$ ./build-docker-image.sh
NewittAll commented 5 months ago

Lets go one problem down, that fixed the /app/PalServer issue.

peepoturtle commented 5 months ago

good to hear, this confirms the fix so i merged the branch and close this issue

Dekita commented 5 months ago

when i try to build the latest commit the terminal window that opens just immediately exits. deleted the volumes and such and same thing. apparently it cant find the docker entrypoint? think its somehow pulling from a cache even though ive deleted the volumes and renamed what the iamge gets built as..

but applying your edits into my own currently building version, the error still remains.

the only thing i've found so far to 'fix' it, is to not mount the server folder at all. which obviously then makes things a lot harder for trying to add mods etc :D

peepoturtle commented 5 months ago

try a clean build of the image?

$ docker image ls -a|grep palserver
2:palserver-proton      latest    f8ebbfa4568c   About an hour ago   2.95GB
$ docker image rm palserver-proton
Untagged: palserver-proton:latest
Deleted: sha256:f8ebbfa4568c91ca36ebba367060c560d06a26231e78d15779864f671ab42ff5
Deleted: sha256:e46e94e8f3387b86a374bc67026e5e1c1dbbc9c6b07f57d6fd47e27bbcbe4c51
Deleted: sha256:fae7df332b78a63bbf3df0ecaac5ca70f957c5eb9cc77c0fec080a0c43aa2fe2
Deleted: sha256:64c1a23cf1e8d4b1b48cd981ac9ed0b04c3b87981176b931d85035bde7c70ba0
Deleted: sha256:ee86a3d740d39049071c4d8a4af16413d74039f70371b7ef6c601adb4ed1f865
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:62c0860915897240a50f9bb4cef3d0a291ff9cc02da2e7823925e4b1e40a0d7a
deleted: sha256:39e1e410af7a4962f4df2d4117f09e7409d74ac55cd7045f54ef71d862e38e45
deleted: sha256:1140b5ef76cfd8430daa0cd122dc19028a26de3cbf10f2967fae0d96dafd845b
...
$ ./docker/build-docker-image.sh
...

also when you are trying again, make sure you do a docker compose down first before doing docker compose up

Dekita commented 5 months ago
$ docker image ls -a|grep palserver
palserver-proton                         latest                                                50274aea5464   36 minutes ago   3.27GB

$ docker image rm palserver-proton
Untagged: palserver-proton:latest
Deleted: sha256:50274aea54645fb6928092ee980e6a21ebf8ff43f933d71a1c00cd154c081db1

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

$ ./docker/build-docker-image.sh
#0 building with "default" instance using docker driver

#1 [internal] load .dockerignore
#1 transferring context: 2B done
#1 DONE 0.0s

#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 1.19kB done
#2 DONE 0.0s

#3 [internal] load metadata for docker.io/cm2network/steamcmd:root
#3 DONE 0.5s

#4 [ 1/11] FROM docker.io/cm2network/steamcmd:root@sha256:12e1b920052e4faa6e9dc80ed0e76dd6b37ab7271d62c769b8d2d79cfe52da82
#4 DONE 0.0s

#5 [internal] load build context
#5 transferring context: 41B done
#5 DONE 0.0s

#6 [ 3/11] RUN mkdir -p /home/steam/.steam/steam
#6 CACHED

#7 [ 6/11] RUN wget -O -     https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton8-28/GE-Proton8-28.tar.gz     | tar -xz -C compatibilitytools.d/
#7 CACHED

#8 [ 4/11] WORKDIR /home/steam/.steam/steam
#8 CACHED

#9 [ 8/11] RUN cp -r compatibilitytools.d/GE-Proton8-28/files/share/default_pfx steamapps/compatdata/2394010
#9 CACHED

#10 [ 5/11] RUN mkdir -p compatibilitytools.d/
#10 CACHED

#11 [ 2/11] RUN apt-get update && apt-get install -y gosu cron wget python3 libfreetype6
#11 CACHED

#12 [10/11] COPY docker-entrypoint.sh /docker-entrypoint.sh
#12 CACHED

#13 [ 7/11] RUN mkdir -p steamapps/compatdata/2394010
#13 CACHED

#14 [ 9/11] RUN chown -R steam:steam /home/steam
#14 CACHED

#15 [11/11] RUN chmod +x /docker-entrypoint.sh
#15 CACHED

#16 exporting to image
#16 exporting layers done
#16 writing image sha256:50274aea54645fb6928092ee980e6a21ebf8ff43f933d71a1c00cd154c081db1 done
#16 naming to docker.io/library/palserver-proton done
#16 DONE 0.0s

$ docker compose down
Container palworld-proton  Stopping
Container palworld-proton  Stopped
Container palworld-proton  Removing
Container palworld-proton  Removed
Network palworld-proton-new_default  Removing
Network palworld-proton-new_default  Removed

$ docker compose up
Network palworld-proton-new_default  Creating
Network palworld-proton-new_default  Created
Container palworld-proton  Creating
Container palworld-proton  Created
Attaching to palworld-proton
palworld-proton  | exec /docker-entrypoint.sh: no such file or directory
palworld-proton exited with code 0
peepoturtle commented 5 months ago

idk why your docker decide to use cache when the entrypoint file has changed. you can try editing the ./docker/build-docker-image.sh file, change

docker image build -t palserver-proton .

to

docker image build --no-cache -t palserver-proton .

if it doesn't work i guess it's worth trying to do a clean clone of the repo and try it with that

Dekita commented 5 months ago

So.. I've tried.. still cannot get anything working and I think im just gonna give up now.. its been like 5 days that i've been fighting with these random completely unhelpful error messages, and i've not been able to write a single mod in this time or play the game.

If i download your latest repo, for some reason the docker-entrypoint.sh file cannot be found, same if i download newittalls version from the forked repo. I can see the file in the image, its right there, but the container constantly restarts with exec /docker-entrypoint.sh: no such file or directory

I've tried clearing all images from cache, restarting pc, updating docker, renaming the built image, altering the ge-proton version to ensure a full rebuild of the image, and still. issues.

NewittAll commented 5 months ago

I was having a similar issue, @Dekita, I had to completely delete the file from my computer and do a new git clone to a new folder, if I didn't do that it just kept using the old files too.

Dekita commented 5 months ago

@NewittAll tried that unfortunately, when i was trying out your repo :( I just wanna write some server mods already lol