Jump to content

dontstarve_dedicated_server_nullrenderer_x64 fails to start due to odd dependencies on `nettle` on Linux.


hasues
  • Pending

When attempting to start a previously working Don't Starve Together dedicated server on Linux using steamcmd, it fails:

Redirecting stderr to '/home/user/Steam/logs/stderr.txt'
Logging directory: '/home/user/Steam/logs'
[  0%] Checking for available updates...
[----] Verifying installation...
UpdateUI: skip show logoSteam Console Client (c) Valve Corporation - version 1721172922
-- type 'quit' to exit --
Loading Steam API...OK

Connecting anonymously to Steam Public...OK
Waiting for client config...OK
Waiting for user info...OK
 Update state (0x5) verifying install, progress: 0.00 (0 / 3736496702)
 Update state (0x5) verifying install, progress: 26.94 (1006792808 / 3736496702)
 Update state (0x5) verifying install, progress: 54.81 (2047949466 / 3736496702)
 Update state (0x5) verifying install, progress: 80.85 (3020943668 / 3736496702)
Success! App '343050' fully installed.
./dontstarve_dedicated_server_nullrenderer_x64: error while loading shared libraries: libhogweed.so.4: cannot open shared object file: No such file or directory
./dontstarve_dedicated_server_nullrenderer_x64: error while loading shared libraries: libhogweed.so.4: cannot open shared object file: No such file or directory

Investigating the binary further I can see the following links:

ldd dontstarve_dedicated_server_nullrenderer_x64
        linux-vdso.so.1 (0x00007f1f8ace2000)
        libSDL2-2.0.so.0 => ./lib64/libSDL2-2.0.so.0 (0x00007f1f8abe9000)
        libcurl-gnutls.so.4 => ./lib64/libcurl-gnutls.so.4 (0x00007f1f8a600000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f1f8abd0000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1f8abcb000)
        libfmodevent64.so => ./lib64/libfmodevent64.so (0x00007f1f8a000000)
        libfmodex64.so => ./lib64/libfmodex64.so (0x00007f1f89a00000)
        libsteam_api.so => ./lib64/libsteam_api.so (0x00007f1f8ab63000)
        libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/13/libstdc++.so.6 (0x00007f1f89600000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f1f8aa79000)
        libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/13/libgcc_s.so.1 (0x00007f1f8aa51000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f1f89200000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f1f8aa4a000)
        libidn.so.11 => ./lib64/libidn.so.11 (0x00007f1f88c00000)
        libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007f1f8a9f5000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x00007f1f8a9d6000)
        libgnutls.so.30 => /usr/lib64/libgnutls.so.30 (0x00007f1f8a407000)
        libgcrypt.so.11 => ./lib64/libgcrypt.so.11 (0x00007f1f88600000)
        librtmp.so.0 => ./lib64/librtmp.so.0 (0x00007f1f88000000)
        libfmodex64-4.44.64.so => ./lib64/libfmodex64-4.44.64.so (0x00007f1f87a00000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f1f8ace4000)
        libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007f1f8a903000)
        libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007f1f8a8d2000)
        libcom_err.so.2 => /usr/lib64/libcom_err.so.2 (0x00007f1f8a8c9000)
        libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007f1f8a8ba000)
        libkeyutils.so.1 => /usr/lib64/libkeyutils.so.1 (0x00007f1f8a8b3000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f1f8a8a1000)
        libidn2.so.0 => /usr/lib64/libidn2.so.0 (0x00007f1f8a86d000)
        libunistring.so.5 => /usr/lib64/libunistring.so.5 (0x00007f1f89e47000)
        libtasn1.so.6 => /usr/lib64/libtasn1.so.6 (0x00007f1f8a3f1000)
        libnettle.so.8 => /usr/lib64/libnettle.so.8 (0x00007f1f8a39a000)
        libhogweed.so.6 => /usr/lib64/libhogweed.so.6 (0x00007f1f8a34e000)
        libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007f1f8a2a0000)
        libgpg-error.so.0 => /usr/lib64/libgpg-error.so.0 (0x00007f1f89e1a000)
        libhogweed.so.4 => not found
        libnettle.so.6 => not found

Notice the the odd links.  We have access to libnetttle.so.8 and libhogweed.so.6, but the program is also looking for libhogweed.so.4 and libnettle.so.6??  Why would we need to use both?  This should be linked to one version, not both.  Going into the `bin64/lib64`, we can see similar with `librtmp.so.0`.

ldd librtmp.so.0 
        linux-vdso.so.1 (0x00007f3b39376000)
        libgnutls.so.30 => /usr/lib64/libgnutls.so.30 (0x00007f3b39163000)
        libhogweed.so.4 => not found
        libnettle.so.6 => not found
        libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007f3b390b5000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x00007f3b39096000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f3b38a00000)
        libidn2.so.0 => /usr/lib64/libidn2.so.0 (0x00007f3b39060000)
        libunistring.so.5 => /usr/lib64/libunistring.so.5 (0x00007f3b38c47000)
        libtasn1.so.6 => /usr/lib64/libtasn1.so.6 (0x00007f3b3904a000)
        libnettle.so.8 => /usr/lib64/libnettle.so.8 (0x00007f3b389a9000)
        libhogweed.so.6 => /usr/lib64/libhogweed.so.6 (0x00007f3b3895d000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3b39378000)

Again, we see two version of libnettle and libhogweed are linked?  We should simply need one of those to suffice.  Both of these files come from the `nettle` package/library.  Also, I can't do the dirty work around of simply symlinking the versions because librtmp is depends on the specific versions:

./dontstarve_dedicated_server_nullrenderer_x64: /usr/lib64/libnettle.so.8: version `NETTLE_6' not found (required by ./lib64/librtmp.so.0)
./dontstarve_dedicated_server_nullrenderer_x64: /usr/lib64/libhogweed.so.6: version `HOGWEED_4' not found (required by ./lib64/librtmp.so.0)
./dontstarve_dedicated_server_nullrenderer_x64: /usr/lib64/libnettle.so.8: version `NETTLE_6' not found (required by ./lib64/librtmp.so.0)
./dontstarve_dedicated_server_nullrenderer_x64: /usr/lib64/libhogweed.so.6: version `HOGWEED_4' not found (required by ./lib64/librtmp.so.0)

 


Steps to Reproduce

Install on Linux where the older version of libnettle is not present.

  • Like 2



User Feedback


I've created a workaround or solution.  If one obtains the Don't Starve Together using SteamCMD, then in your script, add instructions to manually install the Scout runtime as well.  This can be obtained here:

https://repo.steampowered.com/steamrt1/images/latest-steam-client-general-availability/steam-runtime.tar.xz

Unpack this, and in the resulting steam-runtime directory, run

./setup.sh

Then, how one normally calls the Don't Starve Together null Renderer from the script like say:

dontstarve_dedicated_server_nullrenderer_x64 -persistent_storage_root "$dontstarve_dir" -conf_dir "./" -cluster "$cluster_name" -monitor_parent_process

Execute this with the Scout runtime like this:

steam-runtime/run.sh -- dontstarve_dedicated_server_nullrenderer_x64 -persistent_storage_root "$dontstarve_dir" -conf_dir "./" -cluster "$cluster_name" -monitor_parent_process

This will automatically resolve the correct library dependencies for what the game server needs and it will execute.

Share this comment


Link to comment
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
  • Create New...