Mismatched behavior between custom FHSUserEnv and Steam/lutris FHSUserEnv

I’m trying to launch the Linux-native Shadow of the Tomb Raider, but sadly it always errors out with a seg fault (“Game crashed with signal SIGSEGV(11): Segmentation fault.”) and a binary log dump of some kind that I can’t read.

Launching it manually using steam-run ./ShadowOfTheTombRaider in the correct directory (~/.local/share/Steam/steamapps/common/Shadow of the Tomb Raider/bin) leads to the same error, but at least by setting LD_DEBUG=libs I can see some output from libraries that it tries to load:

      8897:	/steamrt/amd64/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0: error: symbol lookup error: undefined symbol: udev_device_get_action (fatal)
      8897:	/steamrt/amd64/usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0: error: symbol lookup error: undefined symbol: _udev_device_get_action (fatal)

That matches with a reply I got from the publisher when I sent them some of the dump files:

Both crash logs pointed towards something with udev_device, but there is nothing further than that to give us a clue.

Since I wanted to try and replicate this in an environment I can manipulate, I copied the lutris package definition from here and loaded it as a package ((pkgs.callPackage ./override/lutris.nix {}) – no idea if that’s correct).

Still didn’t work. So I made a simple shell.nix describing a FHS User Env in the aforementioned directory and started adding dependencies until it worked (initial Common and xorgDeps sets copied from lutris because I’m lazy):

{ pkgs ? import <nixpkgs> {} }:

let
  xorgDeps = pkgs: with pkgs.xorg; [
    libX11 libXrender libXrandr libxcb libXmu libpthreadstubs libXext libXdmcp
    libXxf86vm libXinerama libSM libXv libXaw libXi libXcursor libXcomposite
  ];
in (pkgs.buildFHSUserEnv {
  name = "ubuntu-like";
  targetPkgs = pkgs: (with pkgs; [
      # for feral
      fontconfig openal nss nspr expat
      steam
    ]);
  multiPkgs = pkgs: with pkgs; [
    # Common
    libsndfile libtheora libogg libvorbis libopus libGLU libpcap libpulseaudio
    libao libusb libevdev udev libgcrypt libxml2 libusb libpng libmpeg2 libv4l
    libjpeg libxkbcommon libass libcdio libjack2 libsamplerate libzip libmad libaio
    libcap libtiff libva libgphoto2 libxslt libtxc_dxtn libsndfile giflib zlib glib
    alsaLib zziplib bash dbus keyutils zip cabextract freetype unzip coreutils
    readline gcc SDL SDL2 curl graphite2 gtk2 gtk3 udev ncurses wayland libglvnd
    vulkan-loader xdg_utils sqlite gnutls libbsd
  ] ++ xorgDeps pkgs;

  runScript = "bash";
}).env

Running ./ShadowOfTheTombRaider in a nix-shell now work (assumes Steam in also running)! The only different is nspr.

Now comes the funny bit: If I add nspr to my custom lutris package, I continue to get the same segfault. So I assume it wasn’t that after all, even though it seems to be required.

What I am doing wrong? Is there another/better way to add more libraries to the lutris FHS?

do you mind building steam from steam.chrootenv: add udev by jonringer · Pull Request #81003 · NixOS/nixpkgs · GitHub and seeing if it fixes your issue?

$ git fetch https://github.com/NixOS/nixpkgs pull/81003/head:fix-steam
$ git checkout fix-steam
$ nix-build -A steam
$ ./result
2 Likes

also for future debugging, you can also use strace, and you will get to see all the system calls which are being issued.

strace stream-run ~/.share/steam/steamapps/common/...

Ohhh, I’m an idiot, I was looking at the packages available in lutris’ environment, not Steam’s!

Your patch works perfectly fine! Thanks so much!

1 Like