space-engineers-dedicated-docker-linux icon indicating copy to clipboard operation
space-engineers-dedicated-docker-linux copied to clipboard

Mods fail to download

Open Krumel opened this issue 2 years ago • 16 comments

Pretty simple, every mod I try to add to the world fails the download with "k_EResultFail".

The server then fails to start with "Exception while loading world: Value cannot be null."

I've also tried manually moving the mods to "/appdata/space-engineers/bins/SpaceEngineersDedicated/Mods", but that doesn't seem to help.

The container can reach the steam servers just fine, as it can download updates for Space Engineers itself (pinging server from inside the container also works just fine).

The logs look like this (mod IDs vary of course):

2022-06-27 18:02:21.682 - Thread:  12 ->  Mod query successful
2022-06-27 18:02:21.710 - Thread:   7 ->     Downloading: Id = 2483168442, title = 'Ganymede Tech - Production Mod Pack'
2022-06-27 18:02:23.192 - Thread:   6 ->  MyDefinitionManager.GetSessionPreloadDefinitions() - END
2022-06-27 18:02:23.192 - Thread:   6 ->  MySandboxGame.PerformPreload() - END VANILLA SOUNDS AND VOXELS
2022-06-27 18:02:23.193 - Thread:   6 ->  MySandboxGame.PerformPreload() - END
2022-06-27 18:02:23.875 - Thread:  12 ->  Workshop item with id 2483168442 download finished. Result: k_EResultFail
2022-06-27 18:02:23.876 - Thread:  12 ->  Workshop item with id 2483168442 download finished. Result: k_EResultFail
2022-06-27 18:02:23.876 - Thread:  12 ->  Error during downloading: Fail
2022-06-27 18:02:23.883 - Thread:   7 ->     Up to date mod: Id = 2483168442, title = 'Ganymede Tech - Production Mod Pack'
2022-06-27 18:02:23.883 - Thread:   7 ->     Mod download time: 2.18 seconds
2022-06-27 18:02:23.885 - Thread:   7 ->  Downloading world mods - END
2022-06-27 18:02:23.894 - Thread:   1 ->     Loading session: Z:\appdata\space-engineers\World
2022-06-27 18:02:23.942 - Thread:   1 ->     GC Memory: 64,541,600 B
2022-06-27 18:02:23.944 - Thread:   1 ->     Process Memory:  B
2022-06-27 18:02:23.944 - Thread:   1 ->     Experimental mode: Yes
2022-06-27 18:02:23.944 - Thread:   1 ->     Experimental mode reason: ExperimentalMode, Mods
2022-06-27 18:02:23.944 - Thread:   1 ->     Console compatibility: No
2022-06-27 18:02:24.757 - Thread:   1 ->     MyScriptManager.LoadData() - START
2022-06-27 18:02:24.821 - Thread:   1 ->        Error: Error during loading session:System.ArgumentNullException: Value cannot be null.
Parameter name: path1
   at System.IO.Path.Combine(String path1, String path2)
   at VRage.Game.MyModContext.Init(ModItem modItem)
   at VRage.Game.MyObjectBuilder_Checkpoint.ModItem.GetModContext()
   at Sandbox.Game.World.MyScriptManager.LoadData()
   at Sandbox.Game.World.MySession.PrepareBaseSession(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
   at Sandbox.Game.World.MySession.Load(String sessionPath, MyObjectBuilder_Checkpoint checkpoint, UInt64 checkpointSizeInBytes, Boolean saveLastStates, Boolean allowXml)
2022-06-27 18:02:24.822 - Thread:   1 ->        Exception while loading world: Value cannot be null.
Parameter name: path1
2022-06-27 18:02:24.822 - Thread:   1 ->           at System.IO.Path.Combine(String path1, String path2)
   at VRage.Game.MyModContext.Init(ModItem modItem)
   at VRage.Game.MyObjectBuilder_Checkpoint.ModItem.GetModContext()
   at Sandbox.Game.World.MyScriptManager.LoadData()
   at Sandbox.Game.World.MySession.PrepareBaseSession(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
   at Sandbox.Game.World.MySession.Load(String sessionPath, MyObjectBuilder_Checkpoint checkpoint, UInt64 checkpointSizeInBytes, Boolean saveLastStates, Boolean allowXml)
   at Sandbox.Game.World.MySessionLoader.LoadDedicatedSession(String sessionPath, CancelToken cancelToken, Action afterLoad)
   at Sandbox.MySandboxGame.InitQuickLaunch()
2022-06-27 18:02:24.822 - Thread:   1 ->     MySandboxGame.Initialize() - END
2022-06-27 18:02:24.823 - Thread:   1 ->     Timer Frequency: 10000000
2022-06-27 18:02:24.823 - Thread:   1 ->     Ticks per frame: 166667
2022-06-27 18:02:24.823 - Thread:   1 ->     Exiting..

Full log: SELog.log

Krumel avatar Jun 27 '22 18:06 Krumel

Have you found a fix?

Lucky4Luuk avatar Jul 02 '22 18:07 Lucky4Luuk

Sadly not, but I haven't really tried since then. It might be worth a try to update the wine-version of the container, but I haven't found the time for that yet.

Krumel avatar Jul 02 '22 18:07 Krumel

Hmm, maybe. I tried updating the dll files and while it fixes the server running on my windows machine, the one running through this docker container now gives me a new error about there being no connection to steam possible, so I'm still stuck downloading mods. What have you done instead of running the server on debian, have you instead just bought a server online?

Lucky4Luuk avatar Jul 02 '22 19:07 Lucky4Luuk

Oh, I got it to work. The other error about downloading mods was caused by a mistake in my config. Updating the dll's as mentioned here worked!

Lucky4Luuk avatar Jul 02 '22 19:07 Lucky4Luuk

Nice, thanks a lot! This also fixed my problems.

I think I stumbled upon this solution in my initial debugging, but dismissed it as being windows specific.

Krumel avatar Jul 02 '22 19:07 Krumel

Hey man what was the mistake? Getting a similar issue

AManNamed2 avatar Jul 29 '22 01:07 AManNamed2

Reading that aforementioned thread

Dalten • 2 months ago solution found. keen you will need to hotfix 6 steam dll's in the DedicatedServer64 folder. In an updated copy of SteamCMD "C:\steamcmd\steamapps" in my case, the 6 dll's below need to be copied into the DedicatedServer64 directory, overwriting the older files.

steamclient.dll

steamclient64.dll

tier0_s.dll

tier0_s64.dll

vstdlib_s.dll

vstdlib_s64.dll

Thanks Nevcairiel for the workaround

mmmaxwwwell avatar Jul 29 '22 01:07 mmmaxwwwell

Nah I mean with SteamCMD claiming no connection. I've done the DLL change & while I can get it to work on windows without an issue my linux server does not agree image

AManNamed2 avatar Jul 29 '22 01:07 AManNamed2

What about this?

https://developer.valvesoftware.com/wiki/SteamCMD#Login_Failure:_No_Connection

mmmaxwwwell avatar Jul 29 '22 02:07 mmmaxwwwell

What about this?

https://developer.valvesoftware.com/wiki/SteamCMD#Login_Failure:_No_Connection

Haven't tried that but I also have very little idea of how to actually do it with pterodactyl. All I know is prior to updating the DLLs I was able to connect (and fail to download) and now I can't

AManNamed2 avatar Jul 29 '22 02:07 AManNamed2

What about this? https://developer.valvesoftware.com/wiki/SteamCMD#Login_Failure:_No_Connection

Haven't tried that but I also have very little idea of how to actually do it with pterodactyl. All I know is prior to updating the DLLs I was able to connect (and fail to download) and now I can't

The workaround for me was to just let the server keep running. Eventually, it figures itself out and downloads the mods. It doesn't take long, but it does take a few retries before it finally settles in.

Is there a way to change the image or change the docker scripts (I'm a complete newb) so that the DLL fix is in the code? I have a local repository clone and whenever I edit the entrypoint.bash I can't seem to get the image to contain my edits. Are the entry point files baked into the image when I use docker compose?

activedecay avatar Sep 06 '22 15:09 activedecay

The entry points are put in the container when the container is built. You can add a build section to your docker-compose.yml like here https://docs.docker.com/compose/compose-file/build/, and then run docker-compose build, then ./start. That should get you running with all your local changes. You will be replacing the image definition with the build definition in the docker-compose.yml.

mmmaxwwwell avatar Sep 06 '22 15:09 mmmaxwwwell

Another option is to use volume mounts to replace the entry point scripts. This way may be a little faster to iterate if your testing something.

mmmaxwwwell avatar Sep 06 '22 15:09 mmmaxwwwell

0@snake space-engineers-dedicated-docker-linux$ docker-compose build
se-server uses an image, skipping

I got "uses an image" errors when trying to build using master @174d1a8

--- a/entrypoint-space_engineers.bash
+++ b/entrypoint-space_engineers.bash
@@ -1,5 +1,13 @@
 #!/bin/bash
 source ~/.profile
 source ~/.bash_profile
+
+# temporary hack
+# fix dlls in the dedicated folder using the ones that come from the desktop SE client
+# because of a downloading issue (that should in an ideal world be resolved some day)
+cp /appdata/space-engineers/SpaceEngineersDedicated/steamclient64.dll /appdata/space-engineers/SpaceEngineersDedicated/DedicatedServer64/steamclient64.dll
+cp /appdata/space-engineers/SpaceEngineersDedicated/vstdlib_s64.dll  /appdata/space-engineers/SpaceEngineersDedicated/DedicatedServer64/vstdlib_s64.dll
+cp /appdata/space-engineers/SpaceEngineersDedicated/tier0_s64.dll /appdata/space-engineers/SpaceEngineersDedicated/DedicatedServer64/tier0_s64.dll
+
 cd /appdata/space-engineers/SpaceEngineersDedicated/DedicatedServer64/
 env WINEARCH=win64 WINEDEBUG=-all WINEPREFIX=/wineprefix wine /appdata/space-engineers/SpaceEngineersDedicated/DedicatedServer64/SpaceEngineersDedicated.exe -noconsole -path Z:\\appdata\\space-engineers\\SpaceEngineersDedicated -ignorelastsession

activedecay avatar Sep 06 '22 15:09 activedecay

Ah, you'll have to destroy the existing container with docker compose down first iirc

mmmaxwwwell avatar Sep 06 '22 15:09 mmmaxwwwell

Thanks for your help! pleasure working with you as always

The fix to get the patch inside the image was to stop and rm the container by running docker-compose down Then change the docker-compose.yml file to include the line:

services:
  se-server:
+   build: .
    image: mmmaxwwwell/space-engineers-dedicated-docker-linux:latest
    container_name: space-engineers-dedicated-docker-linux
    restart: unless-stopped

Finally, run the docker-compose build and it creates a new image

$ docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED          SIZE
mmmaxwwwell/space-engineers-dedicated-docker-linux   latest    d8162ae64176   10 minutes ago   4.02GB
mmmaxwwwell/space-engineers-dedicated-docker-linux   <none>    f4ba500786aa   11 months ago    4.02GB

Now, addressing the issue as it was written, and the original author's message about "Logging off Steam...", just let the server settle and it will eventually connect. I usually run the ./start script in this repository, and walk away. I think there's a restarting algorithm in the background that keeps trying if it's not up yet. I walked away and got some coffee and my SE server was up.

activedecay avatar Sep 06 '22 15:09 activedecay

It looks like the issue you were encountering has been resolved, and a new one for downloading the mods has replaced it. I have pushed a fix to the v2 branch, please test and re-open or open a new issue if you are still having problems.

mmmaxwwwell avatar May 18 '24 18:05 mmmaxwwwell