-
Notifications
You must be signed in to change notification settings - Fork 86
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
gconv modules fail to load from /usr/lib64/gconv on Void Linux + SLR #680
Comments
To confirm some facts about how your system is working, please capture a verbose log from a Void Linux system. The usual way to do this is to set the launch options of a game that uses SLR or Proton to Or if you're more comfortable with invoking SLR more directly, you can use a command like:
and redirect its output to a log file. |
The Steam Linux Runtime framework currently supports several models for how the multiarch/multilib
... and then assumes that the directory for It looks as though Void Linux is using a mixture of the Arch and ClearLinux layouts: the actual shared libraries are like Arch (32-bit |
Not exactly, on Void Linux all of the above are present
However If its recognizing the system as ClearLinux, is it failing to follow a symlink? If its recognizing the system as Arch what is it missing? |
Will do later |
pressure-vessel doesn't really specifically recognize the system as anything (that would scale really poorly - we'd have to implement specific code for everyone's favourite distro, and there are hundreds of major and minor variants). Instead, it assumes that the This is usually true on most distros - for instance on Arch Linux (which has the same on-disk physical layout, with a symlink The difference here is that on Void Linux it seems like the I think the shortest path to fixing this is likely to be teaching pressure-vessel to set
I think a better workaround would be If you set the Launch Options of a game that uses EAC to
does that work around the EAC issue? If yes, then that would be the short term workaround that I would suggest. |
@kisak-valve or @oreo639, please could you retitle this to "gconv modules fail to load from /usr/lib64/gconv on Void Linux + SLR" to set its scope? This looks like a distro-specific issue affecting Void Linux only (and maybe a few other distros that are unusual in the same way), and the suggested workaround is hopefully correct for Void Linux but would not work for other major distro families. I don't want to get non-Void-Linux users replying to this issue with unrelated EAC problems, that would just cause confusion and make it take longer to fix anything! |
If Void Linux developers want to make it not be an outlier in this way, the way to achieve that would be to ensure that the path you hard-code into your glibc as the place it wants to look for its gconv modules is the one that doesn't involve traversing a symlink: I don't know whether that's an option or whether it would break some other aspect of the OS design (this is the first time I've really looked at Void Linux!) but it's a simplification that might be helpful in general. As a side benefit, that would also make loading the modules very very slightly more efficient (although likely not enough to show up in anything except a highly artificial benchmark). |
Not really feasible afaict. Arch handles it by just having The other option to fix it on our end would be to make |
I see the problem. You want the architectures to be "symmetrical", so that you can use literally the same binaries for a purely i686 system that are also used as the 32-bit compatibility layer on an x86_64 system (like e.g. Debian does); but you also want the directory that physically contains the libraries for the system's primary architecture to be
In our taxonomy of "which OS has which quirks?", that would result in the OS being "the same shape" as ClearLinux and Solus, rather than Arch; but I realise the need for a mass rebuild probably makes it unachievable. |
On an affected system, with any For Proton/EAC users, it's likely to be To return to an official build of (This ends up setting |
Unfortunately, it seems that when passing glibc reads the configuration files for all the specified gconv paths (with the default ones last), however it seems to always try to open the module from the first path possible and simply fail if that module doesn't load. |
Ugh, that's really annoying, and seems like an oversight in glibc. As a plan B, it might be possible to make |
|
That's the situation on the host system, but I'm talking about the situation that the container runtime framework sets up inside the container (which is done programmatically). I'm looking into whether it's feasible to achieve that. |
While I'm looking into that, the information I asked for in #680 (comment) would still be a useful thing for someone to capture, so we have a better understanding of Void Linux and how it interacts with the container runtime framework. |
Here's the gist of invoking |
I'll do that as soon as i can, but no eta cuz we are getting unstable blackouts here |
No need now, @caszuu provided equivalent information (I'm assuming their system is the same as yours in all the ways that matter here). |
Here's a new build to try: https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/jobs/620187/artifacts/raw/_build/pressure-vessel-bin.tar.gz (from !726 v3). Same test procedure as described in #680 (comment). Whether this works or not, a new log as per #680 (comment) with the version under test, similar to the one @caszuu provided in #680 (comment), would be useful information. If all goes well, on Void Linux this should end up putting symlinks to the host system's
|
Seems to work: https://gist.github.com/oreo639/26fd5da965b64c4d01c6a40d8b4011c7
Thanks for bringing that up. I was confused how I had it but I realize what happened. |
Your system information
steamapps/common/SteamLinuxRuntime/VERSIONS.txt
?N/A
steamapps/common/SteamLinuxRuntime_soldier/VERSIONS.txt
?steamapps/common/SteamLinuxRuntime_sniper/VERSIONS.txt
?Please describe your issue in as much detail as possible:
Attempting to run 64-bit software that relies on
iconv()
, including Easy Anticheat, causesiconv()
to fail.On Void linux the $(libdir) used when compiling glibc is
/usr/lib{bits}
which results in glibc attempting to search for modules in/usr/lib64/gconv
, however, pressure-vessel only mounts the gconv modules to/usr/lib/gconv
and/usr/lib32/gconv
leaving/usr/lib64/gconv
as an empty directory causingiconv()
to fail to find any gconv modules.Steps for reproducing this issue:
--libdir=/usr/lib{bits}
: https://github.com/void-linux/void-packages/blob/master/srcpkgs/glibc/template#L67gcc iconv.c -o iconv
: https://gist.github.com/lesstif/626451b603e7e8a8d6b65df8eced29f9"$HOME/.local/share/Steam/steamapps/common/SteamLinuxRuntime_soldier"/_v2-entry-point --verb=waitforexitandrun -- ./iconv
and note that it outputs "not supported code"GCONV_PATH="/usr/lib/gconv"
to the beginning.See also: void-linux/void-packages#41388 (comment)
The text was updated successfully, but these errors were encountered: