protonscr

samba support

protonopen
ValveSoftware/Proton#1910 · opened 2018-11-04 by treymerkley · updated 2021-03-13 · 9 comments · github
Ttreymerkley 2018-11-04 github

Feature Request

I confirm:

  • [x ] that I haven't found another request for this feature.
  • [ x] that I have checked whether there are updates for my system available that
    contain this feature already.

Description

When exporting my ~/.local/share/Steam/steamapps/common to an SMB networked drive, native apps run but Proton apps break without any clear reason. I'd like to be able to run network attached games.

Justification [optional]

Frankly, I don't know whether this is a Wine or a Proton problem, but I figure that since the feature will be uniquely usable in Steam it doesn't really need to be done in upstream.

Risks [optional]

References [optional]

Zzzhiyi 2019-01-07 github

With SMB networked drive, it will be missing a lot of file system features that wine relies on.

Mmathew2214 2019-08-19 github

what exact file system features are required for proton that CIFS doesn't provide?

SSimplyCorbett 2019-09-28 github

Just to clarify your issue is related to symbolic linking the entire common library, including proton, and not specific games correct?

Ttreymerkley 2019-09-28 github

Yes, I believe so. It's been a while since I tried to install a proton app on the share, so let me try it again and I'll report back. The issue might've been resolved since then.

SSimplyCorbett 2019-09-28 github

Yes, I believe so. It's been a while since I tried to install a proton app on the share, so let me try it again and I'll report back. The issue might've been resolved since then.

Well my issue is that when you create the library on steam within NFS/Samba it can't launch proton games. But if you symbolic link the games manually from local -> Samba it works fine. I tried the entire common folder at one point, didn't work though from my initial testing.

If your issue is something different, not sure why my help request was closed and linked here. :)

Kkisak-valve maintainer 2019-09-29 github

Hello @tsalwierz, this is a substantially different scenario than you described in https://github.com/ValveSoftware/steam-for-linux/issues/6538. My understanding is that the game dependencies that get installed on first run of a game are handled by Proton when it is enabled and not the Steam client, which makes the Proton issue tracker the right place to investigate your issue instead of the steam-for-linux issue tracker.

The free space check is separate and being tracked at https://github.com/ValveSoftware/steam-for-linux/issues/1496.

FFrederick888 2020-04-25 github

tl;dr

Mount samba drive with mfsymlinks to solve this issue.

Long version

What didn't work

1. SMBv3 w/ POSIX Extensions

To properly support posix symlinks over SMBv3 it requires POSIX Extensions, which is not implemented yet in Linux.

2. SMBv1 w/ UNIX Extensions

Server side: Add server min protocol = NT1 to smb.conf (if you run Samba >= 4.11)
Client side: Mount with vers=1.0

Problem: Symlinks pointing to /dev/* can be created, however hidden from the mount point. Reason unknown (I rg'ed the codes of CIFS module and Samba server really quickly, didn't find much info. I'd appreciate it if anyone can provide some insights).

What else to consider

Some filenames are not shown correctly cos they are reserved in MS Windows when mounting a Samba share with mfsymlinks and SMBv3. For instance,

$ touch com1
$ ls
CR23RR~9

Thankfully the kernel can still recognise the original filenames and so far I haven't noticed any side-effects. If this is a concern, I found out that this can be avoided by using mfsymlinks with SMBv1.

Finally another issue with Samba, or any network fs perhaps, is that Wine seems to do quite a lot of (random?) IO during initialisation. (~1min for my game to load over a gigabit ethernet link.) If you only access the Steam library via 1 or 2 machines, it's probably better to keep the Wine directory on your local disk, e.g. ln -s ~/.local/share/Steam/steamapps/compatdata /to/samba/SteamLibrary/steamapps/compatdata.

LLukeShortCloud 2021-03-13 github

My Samba share works great on Windows but not on Linux. When I click on "PLAY" the game tries to load for one second and then says "PLAY" again indicating that it never ran. There are no Steam logs generated for my games, either.

Here are my mount options:

$ mount | grep smb
\\<SERVER_HOTSNAME>\<SAMBA_SHARE> on /smb type cifs (rw,relatime,vers=1.0,cache=strict,username=<USER>,uid=1000,forceuid,gid=1000,forcegid,addr=<IP_ADDRESS>,10,soft,unix,posixpaths,serverino,mapposix,acl,mfsymlinks,rsize=1048576,wsize=65536,bsize=1048576,echo_interval=60,actimeo=1,_netdev)

Here are the related Samba settings I am using that, from what I have read, are required:

[global]
   acl allow execute always = yes
   server min protocol = NT1

All of the server and client settings mentioned in this GitHub issue have already been applied. I have also tried with (and without) a symlink to my local drive for the compatdata folder.

LLukeShortCloud 2021-03-13 github

Interestingly enough, manually running Proton games outside of Steam works perfectly fine.

STEAM_COMPAT_DATA_PATH="$HOME/.steam/steam/steamapps/compatdata/448510" WINEPREFIX="$HOME/.steam/steam/steamapps/compatdata/448510/pfx" "$HOME/.steam/root/compatibilitytools.d/Proton-6.1-GE-2/proton" run /smb/steam/steamapps/common/Overcooked/Overcooked.exe

UPDATE 1: I have tracked down a permissions issue (none of my files are executable) and confirmed it is an issue with my Samba server configuration. I will report back with my findings once I get it all figured out.

UPDATE 2: In one terminal I started steam-runtime so I could see the Steam output. In terminal two, I started a game with steam-runtime steam://launch/976730/option1 (Halo MCC without EAC). In terminal one, I saw the permission error. A Steam Linux Runtime script was not executable.

/bin/sh: line 1: /smb/steam/steamapps/common/SteamLinuxRuntime_soldier/_v2-entry-point: Permission denied

The Samba container I was using provided a very opinionated configuration file that forced files to be non-executable. I had to remove the following global configuration options (alternatively, though not recommended, a person can reconfigure these to make all files executable) and restart the server:

  • create mask
  • force create mode
  • directory mask
  • force directory mode
  • security mask
  • force security mask

Then I deleted the Steam Linux Runtime files and verified files via Steam so that it could redownload the files with the correct permissions.

$ rm -rf  /smb/steam/steamapps/common/SteamLinuxRuntime_soldier/*

It works perfect now! Hope this helps others in the future.