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
5.13 and Experimental don't see symlinks #334
Comments
Hello @xDShot, starting with Proton 5.13, Proton is run inside the Steam Linux Runtime - Soldier container environment and the container environment does not have unlimited access to the host system. Please clarify exactly what folders are involved with the symlink. Let's treat this as a Pressure Vessel issue until there's a stronger indication the issue is elsewhere. The discussion on #308 may be helpful. |
@kisak-valve |
Right, so as discussed in #308, you probably need to start Steam with something like |
Aha, yeah, just ran into this myself, after I'd moved Borderlands 3 from Proton 5.0 to 5.13. I always dislike having savegames/configs stored under With Pressure Vessel, access to the dir was failing, as I found in an strace:
... but launching Steam with One difference in my situation -- compared to xDShot's mention of |
Huh, well, okay, I guess
The top two on Jan 4 were from the last time I'd started this up (on an old version of Proton), and these new
Doing a bit more
So clearly something's still not quite right... |
Symbolic links and crossing container boundaries do not go together particularly well, because entering the container changes the interpretation of the symlink: Combine this with Proton, which is trying to pretend that there is no such thing as a symlink for better compatibility with Windows programs, and what you get is mostly a mess. pressure-vessel is also designed to be able to limit the amount of stuff on the host system that gets shared with the container, as part of an experimental feature to give each game its own mock home directory (similar to Flatpak apps). That feature is not actively in use, but the fact that it is in our goals for the future means we're reluctant to be too indiscriminate about mirroring things from the host system in the container, because after we have made a directory be shared, changing it to not be shared carries a risk of regression (compatibility break). If you think pressure-vessel is doing the wrong thing, we will need a log that says what it's doing and what it's thinking: see https://github.com/ValveSoftware/steam-runtime/blob/master/doc/reporting-steamlinuxruntime-bugs.md for details. Alternatively, if you are offloading directories onto a different drive, bind-mounts are often more robust than symlinks. When pressure-vessel makes a directory available in the container, it will do the same for any mount points below that directory, recursively. For your use-case of preserving saved games in the face of a malfunctioning or uninstalled game or a need to wipe the compatdata directory, another option is that you might be better off with a backup/restore strategy: back up the saved games periodically to some unrelated location that Proton/Wine can't see (perhaps even a location that pressure-vessel can't see!), and know that they are not going to get deleted from there by the game or by Steam.
You are correct. pressure-vessel works at a level of individual directories, rather than mount points on the host system. However, when @xDShot said "if they target to files not on same hard drive partition", that is the most common scenario in which you will find that a symlink is made available in the container but its target directory is not. |
Okay, I'll go through there in a bit and see if I can get some detailed logs about it; I suspect that something's a bit funky with how it's handling these things. Though as you say, maybe it's the symlink itself which is causing fits...
Yeah, I was doing some bind-mounting earlier, 'cause my
Heh, yeah, I do have my nightly backups which pick these up, and provide me with a month of incrementals. I generally try to make sure I'm in a position where I never actually need the backups, though. :) On a semi-related note, I'd been meaning to submit something to suggest a feature request that maybe the wineroot's |
Okay, so here's the full "System Information" output: system_info.txt ... and here's the debug logs while running the game, having been launched with Let me know if I can provide any more info! Thanks again. |
So, we now have, among other things:
That all looks perfectly reasonable. And you say Your
This says However, now that you are mounting What other symlinks are there in the path In a typical use of Proton, I would expect that at least It might help you to figure this out if you run Steam with the additional environment variable
Then try to launch the game. Instead of really launching the game, this will launch an If you want to run the game from there, you can One thing that could potentially be a problem is that some of the bind-mounts we set up are redundant, because we are already bind-mounting an ancestor of a directory (recursively), which means that bind-mounting a descendant with the same mode is pointless. However, I don't think that should be causing problems? |
That would be a feature request for Proton or Steam, rather than for pressure-vessel. Proton and Steam do most of the policy, we just do mechanism (although anything involving symlinks to another location causes extra work for pressure-vessel, because we have to know what to mount where). However, I think it's deliberate that Proton makes each wineprefix self-contained, similar to |
Thanks for the info! Fun stuff, especially that xterm shell mode. On to answering some questions:
Yep, apart from
As for running from that shell, everything appears to work just fine from there. Running commands in there always pops up the line Heading into savegame dir to check contents and
Running the game, back to the dir we started from:
Back to the savegame dir to check out contents:
So the game's read my savefiles just fine -- I can load up a save and do stuff -- but every time it tries to actually save out the game, it seemingly gets as far as writing a I tried getting some more useful info with
Yeah, I'd sort of assumed that was probably by design, hence why I've still not gotten the impetus together to actually put it in as an RFE. :) |
Taking a step back from the specifics of what @apocalyptech is doing, I think we probably have more than one root cause here. @xDShot's report was lacking detail, so we don't know for sure, but I suspect it was the much simpler case that can be solved with @apocalyptech seems to be going quite far beyond that, with a game-specific(?) user account, home directory and Steam installation that involves lots of symlinks: according to the SLR log, the "official" home directory for this user is I think we have to treat @apocalyptech's situation as unsupported, because each layer of symlinks introduces another place where things can go wrong. I can give some pointers for how to investigate, but if you've deliberately set up a situation this complex, it seems unlikely that I'll be able to reproduce the same setup. Ironically, the reason that pressure-vessel does not indiscriminately mount as much of the host system as possible (which would reduce or remove the need for |
strace and the container are probably not going to work very well together. One thing that might help is to use the beta branch of Another way to get more info might be to use the soldier SDK (which has its own copy of strace) instead of the normal Platform runtime, then use
One day I want to move more of this logic into pressure-vessel so that it's more "joined up", but there's a lot of stuff that had to be bolted on to handle Proton game startup happening in multiple steps, hence the several layers of shell script wrappers. |
Hmm, this might be important. I wonder whether something (Proton? Wine? That assumption would normally be trivially true, but because you've made |
Looking at Wine source code, this looks suspiciously like a call to So I think my guess might be right: Borderlands 3 is (quite reasonably) assuming that it can create a temp file in If pressure-vessel knew how to eliminate the redundant bind-mounts then that might resolve this. However, I don't think we can make this a high priority, because the only reason this is happening is that you've replaced part of the
If I'm right about this being |
Heh, yeah, fair enough. I realize I'm probably an edge case for this kind of stuff. :)
BL3's actually the only game where I've got a separate user set up for it, related to some modding activity I've been doing on the game; it was useful to be able to selectively mark + route packets coming from BL3, and iptables' I do have my Steam install root physically separate from
Cool, thanks for those ideas; I'll give 'em a go in a bit! |
Ahh, interesting, that does sound totally reasonable (well, apart from something trying to create a tmpfile right in I'll have to see how it deals with having a bind mount instead of a symlink -- if that doesn't do the trick then I'll just cope with leaving those saves inside |
Starting from pressure-vessel version 0.20220803.0 in today's "Steam Linux Runtime - soldier" and "Steam Linux Runtime - sniper" betas, more top-level directories are available to games by default, reducing the need to use
and some FHS locations where people often put the mount points for non-removable but non-OS drives and partitions, such as a secondary SSD or HDD:
If symbolic links in a directory used by the game point into one of these locations, then the target of the symlink will be visible to the game, even if it wasn't previously. This means those symlinks will generally work. Custom top-level directories like the In the absence of more information from the original issue reporter @xDShot, I'm assuming that this will mostly solve the issue as initially reported. |
There is a more specific sub-issue that @apocalyptech described, which I'll summarize here:
I don't think this specific sub-issue can be solved, and I suspect that if it was using Windows 10 symlinks, the same thing might well happen on native Windows. I would recommend treating the Wine/Proton |
This change was promoted from beta to the default branch today. |
@kisak-valve, I think it's time we close this issue: everything that is solvable here has been solved. |
Games in the Proton can't read symlinked folders and files. WIne Explorer can't see them as regular files and folders as well.
The text was updated successfully, but these errors were encountered: