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

File path case problem #4206

Closed
alexzk1 opened this issue Sep 19, 2020 · 19 comments
Closed

File path case problem #4206

alexzk1 opened this issue Sep 19, 2020 · 19 comments

Comments

@alexzk1
Copy link

alexzk1 commented Sep 19, 2020

This issue "File path case problem #2813" is not solved in latest proton 5.xx used by steam.
Proton now goes to "steamapps" but old installation has "SteamApps" and that is a problem on case-sensitive FS.
And takes hours to guess what the problem is, as internal "browse local files" open proper folder.

@alexzk1
Copy link
Author

alexzk1 commented Sep 19, 2020

Fix can be simple, if exists any-case folder but does not match exact current lower case, then symlink it to lowercase.

@aeikum
Copy link
Collaborator

aeikum commented Sep 24, 2020

Can you tell us what the problem is? Does it stop some game working?

@alexzk1
Copy link
Author

alexzk1 commented Sep 24, 2020

Years old installation and current build has different cases in folder names:
"SteamApps" and "steamapps"
file names on disk are CASE SENSITIVE.
So it silently do not work.

@aeikum
Copy link
Collaborator

aeikum commented Sep 24, 2020

OK. Can you name a game that shows the problem?

@alexzk1
Copy link
Author

alexzk1 commented Sep 24, 2020

Any game which uses proton.
Steam client itself handles cases properly. I have 2 drives. 1 with old installation which has "SteamApps" and newer where I "moved" some games, it has "steamapps" when I click "show folder" for different games located on those 2 drives it opens ok.
However, current proton expects "steamapps". If game placed on old drive with folder "SteamApps" proton makes a mess there, as tries to create "steamapps", so I have "SteamApps" and "steamapps" subfolders.
Any way, Witcher 3 and Evolution (i think) was not running. Because I played it in 2018 like when it was "SteamApps" and this year it stopped to work until I figured this problem.

My point is you should pay attention to cases and don't play with it so free as Windows programmers do.

@alexzk1
Copy link
Author

alexzk1 commented Sep 24, 2020

It is possible GUI client do a mess, then you may try to predict it.
For example, if something "not found", then list folders. Compare case INsensitive with what you want, if in such comparision it is found then show some message or use that cased.

Because it is common problem with windows games, today they name file "something.bin", tomorrow on update it will be "Something.bin" and on wine it stops to work, because now game has 2 files on disk.

@aeikum
Copy link
Collaborator

aeikum commented Sep 24, 2020

So the problem is you have both a steamapps and a SteamApps folder?

@alexzk1
Copy link
Author

alexzk1 commented Sep 24, 2020

So the problem is you have both a steamapps and a SteamApps folder?

That what I eventually found. Initially my old proton games like witcher 3 just stopped to launch after couple months not using it.
Then not sure how and why, but I got some log saying "pid.lck" not found file. Then i started to read with care path and figured proton wants "steamapps" and I have "SteamApps" old with game and new created "steamapps" too. So I just symlinked that 1 to another and that fixed.
But well, as I said ...windows games treat those cases freely. Would be cool if proton detects that and shows something so user can just fix.

@Fludizz
Copy link

Fludizz commented Oct 18, 2020

Ran into this exact same issue this weekend, .steam/error.log gave file-not-found errors and indeed found discrepancy between SteamApps and steamapps paths on Linux. Notable, this steam installation is a few years old so if the path changed recently it makes sense that both paths exist in a single installation.

Solved on this specific machine in /home/$USER/.steam/steam/ (ensure Steam is not running while doing this):

  1. Copy/merge all files from the old "UpperCase" folder SteamApps to lowercase folder steamapps (preserves the 'newest' files)
    rsync -au SteamApps/ steamapps/

  2. Remove the old "Uppercase" folder SteamApps and replace with symlink for compatibility reasons:
    rm -r SteamApps && ln -s steamapps SteamApps

This resolved the issues with Proton being unable to launch some games ("Among Us", as example, installed into SteamApps and not steamapps).

Edit to add:
Just checked on a more recent installation, the newer installation (other linux machine) only had the lowercase steamapps folder and on that machine "Among Us" did correctly install in the lowercase steamapps. So this issue appears to be specific to linux steam installations that are older.

@TTimo
Copy link

TTimo commented Oct 19, 2020

We'd be interested in reproduction steps where a Steam install would go from having a single SteamApps repository to having both a SteamApps and steamapps repository (I don't think it's possible, other than user modifications: creating those directories or putting in symlinks).

Since steamapps is the new default, just renaming SteamApps to steamapps is the best approach. I'm thinking we should make the steam client do this for you moving forward. We'd probably have to warn or hard abort if both casing already exist because driving a "merge" operation would be too dangerous. But that shouldn't be happening unless manually done by user.

@alexzk1
Copy link
Author

alexzk1 commented Oct 19, 2020

I think "SteamApps" is for old installer. I have that installed like 3-4 years ago.
I made symlink to "steampps" and it works ok.
However, as I said before it could be cool if proton detects upper/lower cases mixes for any folder because ... there are user modifications, like witcher 3 or skyrim.
And modders don't really care file name's cases. That gives me good time of finding such mess after installing some mods. Could be cool if proton detects such and pops message about problem.

@Fludizz
Copy link

Fludizz commented Oct 19, 2020

We'd be interested in reproduction steps where a Steam install would go from having a single SteamApps repository to having both a SteamApps and steamapps repository (I don't think it's possible, other than user modifications: creating those directories or putting in symlinks).

Try digging a very old installation of Steam (for reference: the machine that had I observed the issue on, got steam installed about 6 years ago and was continuously updated over time), install a few games in that (check it uses SteamApps) and then upgrade steam to the latest version and install Proton.

I can no longer reproduce the issue as I don't have any other older steam installations laying around.

@TTimo
Copy link

TTimo commented Oct 19, 2020

Try digging a very old installation of Steam (for reference: the machine that had I observed the issue on, got steam installed about 6 years ago and was continuously updated over time), install a few games in that (check it uses SteamApps) and then upgrade steam to the latest version and install Proton.

That doesn't work though - I keep my Steam environment using the old SteamApps directory casing on purpose, and I do dev work on the Steam client (including the Proton/SLR work that was just released), and I've never ended up with the directory with the two casings created. Which is why I think this doesn't happen unless the user forced it in some way to begin with.

@alexzk1
Copy link
Author

alexzk1 commented Oct 19, 2020

Install game on another drive with updated client, it will create lowercase. Then move game from that drive to initial one -> u got both casing.
This is what I do with SSD (small) and HDD. I move current game to ssd, then move it back to hdd.

@TTimo
Copy link

TTimo commented Oct 19, 2020

Install game on another drive with updated client, it will create lowercase. Then move game from that drive to initial one -> u got both casing.

I like that idea, but that doesn't trigger said problem either. Both my Proton 5.13 and soldier SLR were installed to my library on /opt which uses steamapps, and moving via 'Game Properties' > Local Files > Move Install Folder... put them in my main SteamApps cased library without any problem.

@Fludizz
Copy link

Fludizz commented Oct 23, 2020

I have no other idea on how to reproduce... We did not do anything strange to this Linux (and steam) installation other than upgrading slowly from Ubuntu 14.04 all the way to Ubuntu 20.04 (and to a newer laptop model, just dd the old disk to new disk, it's linux - that works great and that does not change the installation in any way).

All I can say is that on this system, for some unknown reason, it ended up with both lowercase and uppercase notation for the same folder. No custom paths have been defined for anything. So sorry :( Cannot provide more info to get to the bottom of this.

@TTimo
Copy link

TTimo commented Nov 4, 2020

The next beta update (> Oct 28) will attempt to migrate SteamApps to steamapps for you.

If that's not possible it'll pop an error dialog asking the user to fix manually. This will also detect setups where both casings are present, which is bad.

Overall we feel that enforcing/pushing for the lowercase directory will be beneficial in the long run over maintaining support for both casings.

@Fludizz
Copy link

Fludizz commented Dec 12, 2020

Last week we got the Steam update on Linux. I can now confirm the "fix manually" popup showed up on the machine I fixed with the Symlink work-around. I removed the symlink that pointed SteamApps to steamapps and now everything works fine!

Suggest closing this ticket as it looks resolved now.

@kisak-valve
Copy link
Member

Closing as fixed in the 2020-12-07 Steam client update.

@kisak-valve kisak-valve removed the Need Retest Request to retest an issue with vanilla Proton label Jan 15, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants