jammsen / docker-palworld-dedicated-server

Docker container to easily provision and manage Palworld Dedicated Server
https://hub.docker.com/r/jammsen/palworld-dedicated-server
MIT License
910 stars 157 forks source link

[Feature Request] arm64 support? #6

Closed RhanCandia closed 10 months ago

RhanCandia commented 10 months ago

Have you read the Important information text above

Current behavior

Currently the docker image only supports x86.

Desired behavior

For the image to support arm64 linux servers.

Links to screenshots

No response

To Reproduce

Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Software setup

Hardware setup

Additional context

Would it be posible to support arm64 servers by using certain emulators like box64 or skmething like that? I’ve seen some SteamCMD servers supported arm64 via box64 or something like that.

jammsen commented 10 months ago

Well with Docker and Buildx to build for arm64 arch would be in itself no problem but i dont know about the Base-Image i use ( https://hub.docker.com/r/cm2network/steamcmd ).

Even when that works, the package on SteamCMD must be able to download this too. https://steamdb.info/app/2394010/info/

I can have a look at this, but i have NO test-hardware for this, so testing would be up to the community and i need at least 2-3 testers for this.

RhanCandia commented 10 months ago

Well with Docker and Buildx to build for arm64 arch would be in itself no problem but i dont know about the Base-Image i use ( https://hub.docker.com/r/cm2network/steamcmd ).

Even when that works, the package on SteamCMD must be able to download this too. https://steamdb.info/app/2394010/info/

I can have a look at this, but i have NO test-hardware for this, so testing would be up to the community and i need at least 2-3 testers for this.

I would test for sure. Although another thing is that I am using the GamePass version. I am not sure if that can join dedicated servers because those servers are probably based on the Steam servers. I may have to purchase the game on Steam.

jammsen commented 10 months ago

As of the time right now Steam and Xbox dont work YET. They said the plan to has this working, but nothing else als information to that either. (Wanting to have something and have something planed with a roadmap are 2 big different things 😎 )

Steam can only do Steam things, if you dont want to wait you would have to invest in that game to have it bought and not lended over the game-pass, yes.

jammsen commented 10 months ago

I've looked about 1h into that and tested a bit around, but i have nothing. Seems not that easy, because of the base-image lacking support for ARM. Maybe i will look into that tomorrow again.

SakulFlee commented 10 months ago

I just came across this issue and wanted to share a possible solution. Though, I haven't done any testing yet and performance of it might be underwhelming.

Either way, I am seeing two issues:

  1. steamcmd (the tool used to download the palworld server from steam) only exists for the i686 architecture (32-bit/x86). There isn't even a x86_64 version of it. Valve usually recommends just installing the normal steam client for those platforms, it seems.

Some ideas: the palworld server could be pre-downloaded, manually downloaded or steamcmd could be emulated using something like QEMU (see below).

  1. However, the bigger issue is that the palworld server also only is published for x86_64 (see osarch here). I haven't tried running it via QEMU User-Space emulation yet, but usually the setup for this is rather complicated and (in case of docker) requires some extra steps to get the image to run. Furthermore, this emulation usually is very slow ... most likely for a game server.

What we could try is the following:

  1. Deploy multiarch/qemu-user-static as a container first Possibly inside a docker-compose file, if that works?

[!NOTE]
There may be some setup required on the host system.

E.g.:

$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  1. Deploy some custom docker-image based on some arm64/aarch64 distribution (like Ubuntu-ARM) and get the Palworld server on it. Again, either of these could work:
  1. Start the server, emulated, and hope that everything works. ... especially performance wise ...

Naturally, I'd be happy to test and help if required :) Though, while it should work in theory, I don't think it will be performant enough to actually play the game.

The best cause of action here may be to approach the developers and ask them to release the server for ARM64. Unreal Engine supports this since the latest release(s) as far as I know.

Juice805 commented 10 months ago

Somewhat tangential, but for those attempting to host on an arm Mac machine via Rosetta, you may need to add +@sSteamCmdForcePlatformBitness 64 to the steamcmd command to ensure steamcmd understands it's in a 64 bit environment. See here

jammsen commented 10 months ago

Ive looked a bit more into this, but bascially afaik SteamCMD is not existing for arm64 architecture. If you guys want to try more aroung i have seen this post https://www.reddit.com/r/linux_gaming/comments/v6b9n5/steamcmd_on_arm_with_box86_and_box64_issues/

Hey @RhanCandia - Not to be rude, but this issue is way more then just adding docker buildx plattform and build it also for you on arm64. You have to do so much work to even get the package-manager running, after that you have to go heavy into virtualization and make translation layers ready to emulate or cross-compile on some layer code and then you dont even know if the dedicated server really runs.

Sorry that topic in itself isnt "an issue" here, its an entire new project with many hours of work and expertise i simply dont have. I cant deliver something like this 😞 .

Are you okay with that answer and can we close this issue?

RhanCandia commented 10 months ago

Ive looked a bit more into this, but bascially afaik SteamCMD is not existing for arm64 architecture. If you guys want to try more aroung i have seen this post https://www.reddit.com/r/linux_gaming/comments/v6b9n5/steamcmd_on_arm_with_box86_and_box64_issues/

Hey @RhanCandia - Not to be rude, but this issue is way more then just adding docker buildx plattform and build it also for you on arm64. You have to do so much work to even get the package-manager running, after that you have to go heavy into virtualization and make translation layers ready to emulate or cross-compile on some layer code and then you dont even know if the dedicated server really runs.

Sorry that topic in itself isnt "an issue" here, its an entire new project with many hours of work and expertise i simply dont have. I cant deliver something like this 😞 .

Are you okay with that answer and can we close this issue?

No, that is not rude in any way. I totally understand. I really appreciate you and everypne else looking into it though. I have so much respect to you people on open source communities.

Again, thank you for looking into it. For now my next course pf action is to actually file a ticket to the game developers and ask them if they can wupport arm64 officially.

DDxPlague commented 10 months ago

So chiming in a bit here:

1) I can test on arm64 Linux and Mac when we get to where we're going. 2) This is a UE5 based game. Building an arm64 server binary is literally a one-click option in addition to their Windows server build (I actually wrote the guide on how to do this). @RhanCandia if you want to point the developer to me I can help them do this. Also linking here for future: https://aws.amazon.com/blogs/gametech/compiling-unreal-engine-5-dedicated-servers-for-aws-graviton-ec2-instances/

3) getting steamcmd up and running on arm64 shouldn't be too much work once we get the other pieces sorted. QEMU may work for this if we have to.

4) i would highly recommend against QEMU for the server itself if we care about performance at all. QEMU emulation can be incredibly slow for things like this.

RhanCandia commented 10 months ago

So chiming in a bit here:

  1. I can test on arm64 Linux and Mac when we get to where we're going.
  2. This is a UE5 based game. Building an arm64 server binary is literally a one-click option in addition to their Windows server build (I actually wrote the guide on how to do this). @RhanCandia if you want to point the developer to me I can help them do this. Also linking here for future: https://aws.amazon.com/blogs/gametech/compiling-unreal-engine-5-dedicated-servers-for-aws-graviton-ec2-instances/
  3. getting steamcmd up and running on arm64 shouldn't be too much work once we get the other pieces sorted. QEMU may work for this if we have to.
  4. i would highly recommend against QEMU for the server itself if we care about performance at all. QEMU emulation can be incredibly slow for things like this.

Thank you for the input. I tried posting on their official Discord but their issue/ideas channel is full. It's hard to get noticed in the chat. I can't find the right channel to post this request.

Their website is kinda hard to navigate. It's hard to find the right email address.

jammsen commented 10 months ago

So chiming in a bit here:

  1. I can test on arm64 Linux and Mac when we get to where we're going.
  2. This is a UE5 based game. Building an arm64 server binary is literally a one-click option in addition to their Windows server build (I actually wrote the guide on how to do this). @RhanCandia if you want to point the developer to me I can help them do this. Also linking here for future: https://aws.amazon.com/blogs/gametech/compiling-unreal-engine-5-dedicated-servers-for-aws-graviton-ec2-instances/
  3. getting steamcmd up and running on arm64 shouldn't be too much work once we get the other pieces sorted. QEMU may work for this if we have to.
  4. i would highly recommend against QEMU for the server itself if we care about performance at all. QEMU emulation can be incredibly slow for things like this.

Hey @DDxPlague thanks for your contribution, if you can help out / chime in, that would be awesome.

@RhanCandia im okay with leaving this issue open, so you guys have a dedicated channel to get updates to each other.

Also regarding:

Thank you for the input. I tried posting on their official Discord but their issue/ideas channel is full. It's hard to get noticed in the chat. I can't find the right channel to post this request.

Their website is kinda hard to navigate. It's hard to find the right email address.

image

I think they have a LOT of their plate right now, it just freaks me out that they dont do like daily releases right now, no day0 or day1 patch not even day5 or so.

jammsen commented 10 months ago

This game has 1,5 MIO active players right now: image Them having server issue and people not be able to join, im HARDLY impressed by theese numbers, imagine how much that would be, when peole had a good server browser and could actually easy connect to servers 🤣

RhanCandia commented 10 months ago

@jammsen @DDxPlague I've been watching Docker Hub every day. I came across this today: https://hub.docker.com/r/czy0612/palworld-server

It looks like there's emulating happening on the steamcmd container but I am not sure about the Palworld server part. There's isn't much information in the page.

Berodin commented 10 months ago

@jammsen @DDxPlague I've been watching Docker Hub every day. I came across this today: https://hub.docker.com/r/czy0612/palworld-server

It looks like there's emulating happening on the steamcmd container but I am not sure about the Palworld server part. There's isn't much information in the page.

It also does emulation stuff on palworld server: ENTRYPOINT ["/bin/sh" "-c" "FEXBash ~/Steam/steamapps/common/PalServer/PalServer.sh"]

Right now thats one possible solution. In the end it can only run through qemu, box86/64, FEX and the likes.

RhanCandia commented 10 months ago

I ran it. Feels okay so far. I'm not sure how reliable it can be in the long run. Right now, I'm only a single player in the server. I'm trying to invite over friends to test the load.

I wish the server flags were exposed as env variables though. There are also no server logs. So, I can't tell if there're are issue in the server.

jammsen commented 10 months ago

There are also no server logs. So, I can't tell if there're are issue in the server.

Well thats down to Pocketpair, even the Windows or Linux version doesnt give much 😢

luismaia-git commented 10 months ago

I ran it. Feels okay so far. I'm not sure how reliable it can be in the long run. Right now, I'm only a single player in the server. I'm trying to invite over friends to test the load.

I wish the server flags were exposed as env variables though. There are also no server logs. So, I can't tell if there're are issue in the server.

Você conseguiu executar em um servidor arm64?

nitrog0d commented 10 months ago

Working on an arm64 version, got it working with a very simple script, it's missing configuration and environment variables so I plan to publish tomorrow. The basic works though, steamcmd downloads the server, then it runs under FEX interpreter (emulator). I would PR but it's based off ubuntu:22.04 and incompatible with the existing steamcmd image.

Also, I might fork this repo and just add Arm64 support under it? Still thinking about it.

RhanCandia commented 10 months ago

Working on an arm64 version, got it working with a very simple script, it's missing configuration and environment variables so I plan to publish tomorrow. The basic works though, steamcmd downloads the server, then it runs under FEX interpreter (emulator). I would PR but it's based off ubuntu:22.04 and incompatible with the existing steamcmd image.

Also, I might fork this repo and just add Arm64 support under it? Still thinking about it.

The docker image I linked above uses FEX too. Same Ubuntu image. I experienced a server crash on that image and it reset my and my friends progress.

But I saw Shockbyte customers experiencing the same. So I am not sure if it’s the image or the server binaries problem. No servwr logs so there’s really no way to tell.

Do let me know when you publish yours. I would love to test on my arm64 server.

Berodin commented 10 months ago

The docker image I linked above uses FEX too. Same Ubuntu image. I experienced a server crash on that image and it reset my and my friends progress.

Well I don't know yet how the palworld dedicated server looks likes and works, but in normally you need a persistent volume mounted to the dockercontainer and configure the install process in a way that it uses existing data (save data, not then entire server) if possible.

RhanCandia commented 10 months ago

The docker image I linked above uses FEX too. Same Ubuntu image. I experienced a server crash on that image and it reset my and my friends progress.

Well I don't know yet how the palworld dedicated server looks likes and works, but in normally you need a persistent volume mounted to the dockercontainer and configure the install process in a way that it uses existing data (save data, not then entire server) if possible.

I did learn my lesson after that crash. I modified the image and mounted a volume so I can back up the data. It is still not as flexible as @jammsen’s as I would like. But it serves the purpose for now.

BrunoDomenesDutra commented 10 months ago

Working on an arm64 version, got it working with a very simple script, it's missing configuration and environment variables so I plan to publish tomorrow. The basic works though, steamcmd downloads the server, then it runs under FEX interpreter (emulator). I would PR but it's based off ubuntu:22.04 and incompatible with the existing steamcmd image.

Also, I might fork this repo and just add Arm64 support under it? Still thinking about it.

Awesome!

I've been trying to set up and make a server work on OCI with arm for 3 days now. If you need someone to test it there when you make your configs, just let me know.

EmPiFree commented 10 months ago

Working on an arm64 version, got it working with a very simple script, it's missing configuration and environment variables so I plan to publish tomorrow. The basic works though, steamcmd downloads the server, then it runs under FEX interpreter (emulator). I would PR but it's based off ubuntu:22.04 and incompatible with the existing steamcmd image. Also, I might fork this repo and just add Arm64 support under it? Still thinking about it.

Awesome!

I've been trying to set up and make a server work on OCI with arm for 3 days now. If you need someone to test it there when you make your configs, just let me know.

It works with this image https://hub.docker.com/r/czy0612/palworld-server But it lacks customization on docker image level. I also couldn't manage to change server settings, because the container always shuts down, when killing the PalServer process.

BrunoDomenesDutra commented 10 months ago

Working on an arm64 version, got it working with a very simple script, it's missing configuration and environment variables so I plan to publish tomorrow. The basic works though, steamcmd downloads the server, then it runs under FEX interpreter (emulator). I would PR but it's based off ubuntu:22.04 and incompatible with the existing steamcmd image. Also, I might fork this repo and just add Arm64 support under it? Still thinking about it.

Awesome! I've been trying to set up and make a server work on OCI with arm for 3 days now. If you need someone to test it there when you make your configs, just let me know.

It works with this image https://hub.docker.com/r/czy0612/palworld-server But it lacks customization on docker image level. I also couldn't manage to change server settings, because the container always shuts down, when killing the PalServer process.

For me it didn't work, maybe I'm doing something wrong.

Did you make any specific config to the VCN or to the Instance reguarding network config?

I created an Instance, intalled docker, pulled the image and run it, but nothing, wasn't able to conect to it

EmPiFree commented 10 months ago

Working on an arm64 version, got it working with a very simple script, it's missing configuration and environment variables so I plan to publish tomorrow. The basic works though, steamcmd downloads the server, then it runs under FEX interpreter (emulator). I would PR but it's based off ubuntu:22.04 and incompatible with the existing steamcmd image. Also, I might fork this repo and just add Arm64 support under it? Still thinking about it.

Awesome! I've been trying to set up and make a server work on OCI with arm for 3 days now. If you need someone to test it there when you make your configs, just let me know.

It works with this image https://hub.docker.com/r/czy0612/palworld-server But it lacks customization on docker image level. I also couldn't manage to change server settings, because the container always shuts down, when killing the PalServer process.

For me it didn't work, maybe I'm doing something wrong.

Did you make any specific config to the VCN or to the Instance reguarding network config?

I created an Instance, intalled docker, pulled the image and run it, but nothing, wasn't able to conect to it

On VCN site I just forwarded the port 8211 on UDP and it worked.

jammsen commented 10 months ago

Working on an arm64 version, got it working with a very simple script, it's missing configuration and environment variables so I plan to publish tomorrow. The basic works though, steamcmd downloads the server, then it runs under FEX interpreter (emulator). I would PR but it's based off ubuntu:22.04 and incompatible with the existing steamcmd image.

Also, I might fork this repo and just add Arm64 support under it? Still thinking about it.

Would could add a subdirectory here and another github-action special to your use-case if you want, but im also fine if you want to fork and be the admin of the code yourself, because im not sure how helpful im right this second in this endevore of your arm research. But im fine either way with any decision you make ❤️. If you want to be your own repo-admin, maybe we could consider linking to each other? Questions questions questions 🤣

nitrog0d commented 10 months ago

I ended up making a repo, I based the server management script off yours (oh and the README too)and also left links on the readme, if that's fine! I did not set up GitHub actions as I don't know much about these, ended up uploading the image using docker push If you want me to link your repo for whoever is using amd64 instead, I don't mind It's also my first ever docker image, so if anyone spots anything wrong let me know or PR :)

jammsen commented 10 months ago

@nitrog0d i dont see this comment anymore, somehow, but my emails tell me this:

Hello @jammsen, kindly requesting permission to use your scriptmanager.sh and your README.md as base for the arm64 image, is that okay?

Of course thats okay, feel free to use ANYTHING ❤️ - We are a community! Sharing is caring!

jammsen commented 10 months ago

I ended up making a repo, I based the server management script off yours (oh and the README too)and also left links on the readme, if that's fine!

Sure! Nice!

I did not set up GitHub actions as I don't know much about these, ended up uploading the image using docker push

Im not a pro at this either, more like a slightly experienced newby. But if you want i can try to help you out.

If you want me to link your repo for whoever is using amd64 instead, I don't mind.

Awesome, lets do that.

It's also my first ever docker image, so if anyone spots anything wrong let me know or PR :)

I can do a review on your Dockerfile, but please be aware im using Docker almost 9 years, i have high standards and learnd a lot, we could do a Discord call and i explain why what is important if you want. Maybe on the weekend?

RhanCandia commented 10 months ago

This is amazing. Thank you, guys!

Deses commented 10 months ago

have NO test-hardware for this, so testing would be up to the community and i need at least 2-3 testers for this.

You can test this using a Free Oracle Cloud instance.

I was planning to host a small dedicated server for my friends and I using their free ARM servers, like I used to do with Minecraft.

HEROgold commented 10 months ago

@nitrog0d I must say, your repo was nice and quick to run and my arm64 server is running quite smooth even, currently the only one playing but its been two full days without crashes, or major bugs. (minor bugs sometimes where entities teleport a few meters etc, but that might be the game not the arm64 version, but I can't say for sure)

I hope it'll help this project with arm64 support

jammsen commented 10 months ago

(minor bugs sometimes where entities teleport a few meters etc, but that might be the game not the arm64 version, but I can't say for sure)

Windows does that too 🤣 seems like the TickRate option "REDUCES" it but not fixes it.

jammsen commented 10 months ago

Im closing this issue as resolved, feel free to reopen again if needed.

If you like this project, please consider giving this repo and the docker-hub-repo a Star.

fogolin commented 10 months ago

Ive looked a bit more into this, but bascially afaik SteamCMD is not existing for arm64 architecture. If you guys want to try more aroung i have seen this post https://www.reddit.com/r/linux_gaming/comments/v6b9n5/steamcmd_on_arm_with_box86_and_box64_issues/

Hey @RhanCandia - Not to be rude, but this issue is way more then just adding docker buildx plattform and build it also for you on arm64. You have to do so much work to even get the package-manager running, after that you have to go heavy into virtualization and make translation layers ready to emulate or cross-compile on some layer code and then you dont even know if the dedicated server really runs.

Sorry that topic in itself isnt "an issue" here, its an entire new project with many hours of work and expertise i simply dont have. I cant deliver something like this 😞 .

Are you okay with that answer and can we close this issue?

@jammsen I've looked into it and found this: https://github.com/TeriyakiGod/steamcmd-docker-arm64

Don't know if it helps, but I'd prefer using this repo (with all the bells and whistles) over the other one cited here any given day. Would you consider looking into it?

jammsen commented 10 months ago

Hey @fogolin

Would you consider looking into it?

In what context do you mean that? I dont understand, sorry.

Don't know if it helps, but I'd prefer using this repo (with all the bells and whistles) over the other one cited here any given day.

Looking over the Dockerfile about a half-minute on either of them, purely from a review and safety perspective, they both use pratices which are considered "very-bad-practices". @nitrog0d - Downloads with not hash-checks python-script that could be used as MITM as root. Thats quite dangerous, also SteamCMD yeah. 😅 @TeriyakiGod - Does that same but from Dropbox, which isnt a reputable source at all 🤣

They both have downsites and are welcome to ask me for a full review, if they want this.

Im doing this a long time, review Dockerfiles and approaches very often and im using Docker since 2015.

Not sure it thats what you asked @fogolin

nitrog0d commented 10 months ago

@fogolin Really curious on what's wrong with my repo, care to elaborate further?