- console reader: poll()+read() instead of iostream getline; joinable thread joined before Steam shutdown/exit (iostream lock deadlock needed Ctrl+D before) - README: Linux dedicated-server setup guide - CI: version input, tag builds, ReSkateServer-Linux-<version> asset with setup script staged at top level
4.9 KiB
ReSkate dedicated server on Linux
Native x86_64 build. Same lobby protocol as ReSkateServer.exe; needs no game install.
Self-update is disabled on Linux (V1) — update by replacing the binary.
Requirements
- 64-bit Linux (tested: CachyOS/Arch, Ubuntu 22.04+ should work).
cmake >= 3.24,g++ >= 12(C++20),libssl-dev(OpenSSL),libcurlheaders optional (not needed for V1).- Steamworks SDK redist beside the binary:
libsteam_api.so+steamclient.so(Valve proprietary, not in this repo). Anonymous game-server login, same as Windows.
Where the Steam .so files come from
Same split as Windows (steam_api64.dll + steamclient64.dll/tier0_s64.dll/vstdlib_s64.dll):
the release ZIP is expected to ship them; this repo never vendors Valve binaries
(see External/README.md, External/manifest.json).
libsteam_api.so: from the Steamworks SDKredistributable_bin/linux64/(official download viapartner.steamgames.com; any recent 1.x works — the server triesSteamGameServerNetworkingSockets_SteamAPI_v013thenv012, and uses stable flat exportsSteamGameServer015/SteamNetworkingUtils004). It is generic; the app is selected at runtime viaSteamAppId=3354750.steamclient.so(+tier0/vstdlibif present): not in the SDK. Get it from SteamCMD or a Steam client install, e.g.:or copy/symlink an existing client copy (steamcmd +@sSteamCmdForcePlatformType linux +login anonymous +app_update 1007 +quit # then copy steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so # next to ReSkateServer (same folder as libsteam_api.so)~/.steam/steam/linux64/steamclient.so, Valve also documents~/.steam/sdk64/steamclient.so— the server looks there, soln -s <folder>/steamclient.so ~/.steam/sdk64/steamclient.soworks). The serverdlopenslibsteam_api.so, which in turn loadssteamclient.so; either adjacent orLD_LIBRARY_PATHworks.
Arch/CachyOS:
sudo pacman -S base-devel cmake openssl
Ubuntu/Debian:
sudo apt install build-essential cmake libssl-dev
Build
cmake --preset linux-x64
cmake --build --preset linux-release -j$(nproc)
./build/linux/ReSkateServer
Binary: build/linux/ReSkateServer (ELF, OUTPUT_NAME ReSkateServer).
Portable tests:
cmake --preset linux-x64 -DDINGOSDK_BUILD_MULTIPLAYER_TESTS=ON
cmake --build --preset linux-release -j$(nproc)
ctest --test-dir build/linux --output-on-failure
Expected: 8 passed (multiplayer_parties, server_activity, server_speed_check,
server_config, word_filter, multiplayer_bandwidth, multiplayer_lanes,
multiplayer_prediction). Windows-only tests (voice, lobbies, UI) stay WIN32-gated.
Run
- Put
ReSkateServerin its own folder, then fetch the Steam libs (shipped assetup-linux-server-libs.shbeside the binary):Or do it by hand, see below../setup-linux-server-libs.sh # uses the folder it sits in; or --server-dir DIR - First run writes
ReSkateServer.json; editname+admins, restart. - Optional:
world-layers.jsonfor time-of-day / world layers. Normal server runs only read this file (world_layer_scan::read, JSON only) and work on Linux — verified. Get it by either:- Windows export once:
ReSkateServer.exe --export-world-layers "<Skate folder>" world-layers.json, then copy to the Linux folder; or - copy from a Windows player's cache
%LOCALAPPDATA%\ReSkate\cache\<build>\world-layers.json(same game build; the server tells admins this path inlayer-syncerrors). Without it every player keeps their own layers; with it +world_layer_syncthe server forces them.
- Windows export once:
- No ports need opening (Steam relay). Optional UDP
27015-27016(port,query_port) for browser ping + faster joins.
Without libsteam_api.so the server exits 1 with:
Cannot load .../libsteam_api.so. Put libsteam_api.so (Steamworks SDK) next to the server.
Full command list: Server/README.txt (same on Linux; binary name differs).
systemd
See contrib/reskate-server.service. Install:
sudo cp contrib/reskate-server.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now reskate-server
Notes / limits (V1)
auto_update/updatecommand:updates_enabled()==falseon Linux.check_for_updatereports “self-update is not supported on Linux”.--export-world-layerson Linux: the reader works, the scanner needs the Windows game (Data/layout.toc+ CAS) andoo2core_9_win64.dll(Oodle). Oodle blocks throwOodle CAS data is only supported on Windows(caught, exit 1, no crash). Export on Windows, copy the JSON over — no game needed on the server itself.content_cachedir:%LOCALAPPDATA%on Windows,$XDG_CACHE_HOME/~/.cacheon Linux.- Crypto interop verified: OpenSSL
PKCS5_PBKDF2_HMAC(SHA256, 100k)+HMAC-SHA256matches WindowsBCrypt(checked against Pythonhashlib).