Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SteamWebHelper fails to start if __pycache__ folders under ~/.local/share/Steam have been deleted (by some "helpful" cleanup utility). #10614

Closed
ivan-kljajic opened this issue Mar 14, 2024 · 4 comments

Comments

@ivan-kljajic
Copy link

ivan-kljajic commented Mar 14, 2024

  • Steam client version (build number or date):
    Steam Beta Branch: Stable Client
    Steam Version: 1709846872
    Steam Client Build Date: Thu, Mar 7 7:28 AM UTC +10:00
    Steam Web Build Date: Fri, Mar 8 8:17 AM UTC +10:00
    Steam API Version: SteamClient021

  • Distribution (e.g. Ubuntu):
    Linux Mint 21.3

  • Opted into Steam client beta?: [Yes/No]
    No

  • Have you checked for system updates?: [Yes/No]
    Yes

  • Steam Logs: [generate by running this command in a terminal tar -zcvf ~/Desktop/steam-logs.tar.gz ~/.steam/steam/logs]

Already deleted, sorry. But the issue was SteamWebHelper failing to launch because it could not copy one or more files from a __pycache__ folder under its ~/.local/share/Steam hierarchy to some other folder in the Steam hierarchy.

  • GPU: Nvidia/Intel/AMD
    gtx1060

Please describe your issue in as much detail as possible:

SteamWebHelper now seems to require that at least one Steam pycache folder exists in the user installation. It fails to start if the particular cache folder and its file or files are not present because it tries to copy them from one pycache folder to another (or another location) and hard-fails if the file(s) are not present.

So the program does not regenerate the pycache folder on launch, but rather expects the folder and its contents to exist.
This behaviour seems counterintuitive, because Python apps generally create these cache folders as-needed, and some 'cleaners' like to blast those folders with the expectation that it is safe to do so.

Describe what you expected should happen and what did happen. Please link any large code pastes as a Github Gist

I would expect SteamWebHelper to not depend on files under the Steam client's pycache folders to exist. It should either generate them as-needed on startup or put them in some other folder.

Steps for reproducing this issue:

  1. Install the above-mentioned version of the steam client.
  2. Delete all pycache folders under ~/.local/share/Steam
  3. Run the steam client.
  4. Observe the messagebox informing you that the critical component (steamwebhelper) failed to launch.
  5. Look at the helpful logfile (cheers!).
@smcv
Copy link
Contributor

smcv commented Mar 14, 2024

Randomly modifying the files installed by Steam is not a supported thing to do, and I would recommend not using "helpful" "cleaners" that assume that all files with a particular naming pattern are expendable: sooner or later this will likely cause you to lose valuable data when the tool's guess turns out to be inaccurate. The amount of space saved is probably also very small when compared with the size of Steam or a typical game.

The root cause of this is that steamwebhelper now runs under the Steam Linux Runtime framework. For boring technical reasons involving multi-distribution support, yes, it needs to copy files from one location to another (actually it uses hard-links, so they don't take up any extra space); and at the moment if any of those files are missing, it will diagnose that as a fatal error and refuse to continue.

The files in __pycache__ are probably not strictly necessary, but the container runtime framework doesn't know that: all it knows is that it has a list of files that it expected to have available, and one of them is missing. In principle it would be possible to special-case those files to be ignored-if-missing, or (perhaps better?) disguise their filenames so that "helpful" "cleaners" will not arbitrarily delete them.

Python apps generally create these cache folders as-needed

In the case of the container runtime this is not actually possible, because the files in question end up mounted read-only inside the container, so anything that needs to run Python inside the container will be unable to write there.

@ivan-kljajic
Copy link
Author

Fair enough. "Helpful" was in quotes because of course... also random shmandom.

@smcv
Copy link
Contributor

smcv commented Mar 26, 2024

In principle it would be possible to [...] disguise their filenames so that "helpful" "cleaners" will not arbitrarily delete them.

An implementation of this is in progress, and will hopefully appear in a future release of the container runtime. (Tracked as steamrt/tasks#422 internally)

@smcv
Copy link
Contributor

smcv commented Apr 16, 2024

In principle it would be possible to [...] disguise their filenames so that "helpful" "cleaners" will not arbitrarily delete them.

An implementation of this is in progress, and will hopefully appear in a future release of the container runtime. (Tracked as steamrt/tasks#422 internally)

This change has reached the public betas of "Steam Linux Runtime 2.0 - soldier" and "Steam Linux Runtime 3.0 - sniper", versioned as 0.20240415.x. The copy of sniper that runs the steamwebhelper (which is the one that matters for this issue) has not yet been updated in public betas, but that should happen in a future Steam beta.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants