Fixing Killing Floor 2 Linux Server Workshop downloads

     

Update: killinuxfloor 1.1 released with the fix included.

I’ve been doing killinuxfloor, an installer for Killing Floor 2 Server on Linux for some time, and Workshop downloads have been troublesome for quite a while. I even raised a ticket with Tripwire about a week ago, but other than the automatic confirmation e-mail, I received zero response from them. Customer service at its finest.

But thanks to a hint from helpful reader Suros, I seem to have found the problem, and the solution as well. You’d never guess: it’s a mess-up on Tripwire’s end.

Steam content can be accessed via APIs, for which Steam provides libraries. When the API changes (because Steam is adding features or so), the library is updated as well, otherwise the game client wouldn’t be able to use the services at some point. In our case, it’s Workshop downloads, and the library is steamclient.so. Let’s see where do we have that stored:

$ find . -name steamclient.so
./linux64/steamclient.so
./linux32/steamclient.so
./KF2Server/linux64/steamclient.so
./KF2Server/Binaries/Win64/lib64/steamclient.so
./KF2Server/steamclient.so

Wait, what? We have Steam’s copy for 32-bit and 64-bit, that’s perfectly fine. But then we also have three additional copies from Tripwire. And all three files are of different size, meaning they’re different versions, even. It’s just all over the place. Why does Tripwire ship even one copy? It should just use the up-to-date version provided by Steam. What the hell…

In any case, the fix is straightforward: remove the Tripwire copies, and make them all point to the Steam version. Why all three, you might ask. Because God knows which one KF2 tries to load and when. Ironically, to me it seemed like KF2 is actually using the one located in the Win64 folder. Yes, you read that right, the Linux client is using the files from Win64 folder. #justtripwirethings


TLDR:

Make sure you have the latest version of Steam:

sudo -iu steam
killinuxfloor update

Now make all three KF2 files point to Steam’s own version of steamclient.so:

mv ~/Steam/KF2Server/linux64/steamclient.so ~/Steam/KF2Server/linux64/steamclient.so.orig
mv ~/Steam/KF2Server/Binaries/Win64/lib64/steamclient.so ~/Steam/KF2Server/Binaries/Win64/lib64/steamclient.so.orig
mv ~/Steam/KF2Server/steamclient.so ~/Steam/KF2Server/steamclient.so.orig
ln -s ~/Steam/linux64/steamclient.so ~/Steam/KF2Server/linux64/steamclient.so
ln -s ~/Steam/linux64/steamclient.so ~/Steam/KF2Server/Binaries/Win64/lib64/steamclient.so
ln -s ~/Steam/linux64/steamclient.so ~/Steam/KF2Server/steamclient.so

Then, for good measure:

killinuxfloor stop
killinuxfloor reset
killinuxfloor config
killinuxfloor start

In the coming weeks, I’ll add measures to killinuxfloor to automatically prevent this from happening. Until then, please use this manual workaround.

Thanks again, Suros!