Skip to content
Snippets Groups Projects
Simon McVittie's avatar
Simon McVittie authored
This is a bit complicated, because there are two reasonable things that
people might use LD_PRELOAD for, and in this mode it's particularly
important to distinguish between them.

One is to inject arbitrary code, like MangoHud or fakeroot. In this
case, we want to take the loadable module from the namespace in which
the user initiated pv-wrap. We can do this the same way we deal with
the ${LIB} and ${PLATFORM} dynamic string tokens: load it once per ABI,
pass a separate option to pv-adverb for each one, and let pv-adverb
recombine them.

The other is to work around libraries not being loaded soon enough,
like the way people sometimes use LD_PRELOAD="libpthread.so.0 libGL.so.1"
to force an optirun library to be loaded. In this case, we absolutely
do not want to import the host library of that name into the container
unconditionally, because if we do, it will sabotage our careful efforts
to get the correct instance of libpthread.so.0 to be chosen. In this
case, assume that the user meant "take whatever libpthread.so.0 you
would naturally load, and preload it into each executable".

Resolves: https://github.com/ValveSoftware/steam-runtime/issues/435


Signed-off-by: default avatarSimon McVittie <smcv@collabora.com>
8196049b
History

steam-runtime-tools — Steam Runtime integration for the Steam client

The steam-runtime-tools library provides low-level Unix-specific tools and functionality for the Steam client, including the pressure-vessel tool that runs Steam games in containers.

To support multiple architectures (currently only i386 and x86_64 are supported), you will need to build it once for each architecture and install at least the helper tools in /usr/libexec/steam-runtime-tools-0 (the libsteam-runtime-tools-0-helpers package) for every architecture in parallel.

The helper tools are located relative to the shared library, so it's OK to bundle steam-runtime-tools alongside some other stack in this layout:

anything/
    lib/
        x86_64-linux-gnu/
            libsteam-runtime-tools-0.so.0
    libexec/
        steam-runtime-tools-0/
            i386-linux-gnu-*
            x86_64-linux-gnu-*

as long as the program that is linked to libsteam-runtime-tools-0.so.0 can find it (via a RPATH or RUNPATH or by setting the LD_LIBRARY_PATH environment variable).

pressure-vessel — putting Steam in containers

The pressure-vessel/ subdirectory of this project contains the pressure-vessel utilities, which are used by Steam's Steam Linux Runtime compatibility tool to run games in individual game-specific containers. For background on pressure-vessel and SteamLinuxRuntime, please see: