Skip to content

pressure-vessel inherits host TZDIR without making it available inside container #795

@mdonoughe

Description

@mdonoughe

Your system information

  • Steam Runtime Version: 0.20251201.0+srt1
  • Distribution (e.g. Ubuntu 18.04): NixOS 25.11
  • Link to your full system information (Help -> Steam Runtime Diagnostics) in a Gist: https://gist.github.com/mdonoughe/26ae606560215fbcee5e2bec6a701a9c
  • Have you checked for system updates?: Yes
  • What compatibility tool are you using?: Steam Linux Runtime or Proton 5.13+
  • What versions are listed in steamapps/common/SteamLinuxRuntime/VERSIONS.txt?
#Name   Version         Runtime Runtime_Version Comment
depot   0.20240806.0                    # Overall version number
LD_LIBRARY_PATH -       scout   -       # see ~/.steam/root/ubuntu12_32/steam-runtime/version.txt
scripts 0.20240806.0                    # from steam-runtime-tools
  • What versions are listed in steamapps/common/SteamLinuxRuntime_soldier/VERSIONS.txt?
#Name   Version         Runtime Runtime_Version Comment
depot   2.0.20250929.168591                     # Overall version number
pressure-vessel 0.20250926.0    scout           # pressure-vessel-bin.tar.gz
scripts 0.20250926.0                    # from steam-runtime-tools
soldier 2.0.20250929.168591     soldier 2.0.20250929.168591     # soldier_platform_2.0.20250929.168591/
  • What versions are listed in steamapps/common/SteamLinuxRuntime_sniper/VERSIONS.txt?
#Name   Version         Runtime Runtime_Version Comment
depot   3.0.20250929.168600                     # Overall version number
pressure-vessel 0.20250926.0    scout           # pressure-vessel-bin.tar.gz
scripts 0.20250926.0                    # from steam-runtime-tools
sniper  3.0.20250929.168600     sniper  3.0.20250929.168600     # sniper_platform_3.0.20250929.168600/

Please describe your issue in as much detail as possible:

When launching a game on NixOS, pressure-vessel fails to provide an appropriate value for the TZDIR environment variable to the launched game.

On systems like Arch Linux or Debian, the zoneinfo files are at /usr/share/zoneinfo, the same as they are in the Steam Linux Runtime image, so in most cases if TZDIR is set it will be set to a location within the sandbox that exists and contains the zoneinfo files. On NixOS, TZDIR is set to /etc/zoneinfo, which is a symbolic link to /etc/static/zoneinfo, where /etc/static is a symbolic link to a path under /nix/store and zoneinfo is a symbolic link to another path under /nix/store.

When launching a game using pressure-vessel, despite (unused?) code that should prevent TZDIR propagation, TZDIR ends up being set to /etc/zoneinfo, which does not exist in the pressure vessel environment, and /run/host/etc/zoneinfo ends up as a symbolic link pointing to /.host-etc/zoneinfo, which does not exist either. /nix/store does exist inside the sandbox, and if I run TZDIR=/nix/store/xaa75rd44q62nc9mrbvym9d1m6gy0fj8-tzdata-2025b/share/zoneinfo date inside the sandbox I do see the correct time.

This causes games and other software launched from Steam to display incorrect time. I'm pretty sure I have observed this to cause functional problems where games end up with the wrong UTC time, possibly because they are mixing timezone conversion functions that are broken by the missing zoneinfo files and functions that use their own copy of the zoneinfo files.

NixOS/nixpkgs#279893

slr-app211820-t20260111T134617.log

Steps for reproducing this issue:

  1. Set the launch options for a game to PRESSURE_VESSEL_SHELL=instead %command%
  2. Launch the game
  3. In the xterm window, type ls -l "${TZDIR}" and date

It should print out the available timezone names and the current local time, but instead it prints out ls: cannot access '/etc/zoneinfo': No such file or directory and the UTC time followed by the invalid timezone name "America" for me.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions