-
Notifications
You must be signed in to change notification settings - Fork 174
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
Steam crashes at launch with libgudev 238 #9805
Comments
Hello @camperboy1000, |
Same issue here |
Same here on
Downgrading |
Running into this issue myself I found this post on the Arch Forums. |
For what it's worth, |
thanks, downgrading packages fixed my suddenly broken steam as well |
Got it working for me. Edit: Actually it looks like the reset was enough, i updated libgudev and steam still works. |
In my case lib32-libgudev was a required dep of lib32-gst-plugins-good, which i don't really need anyway. Removing the package solved my issue. |
@GithubUser5462 are you saying you updated both Downgrading Removal of the lib32 version isn't an option for me as I have Proton installed on my system. Upstream issue filed for Arch's |
Yes i ran |
On advice of Arch maintainers, issue opened upstream with |
I just experienced the same bug on a fully updated arch system with the latest steam beta, downgrading both |
Can confirm that downgrading both libgudev and lib32-libgudev to version 237-2 works as well. |
The package that had
|
To iterate on this further and to also reiterate what has been said on the respective issue trackers, the issue lies with Steam's runtime super old 32 bit version of |
After debugging for quite some time, here are my findings: If you aren't interested in details, skip to the end for solutions. The problemThe assertion fails because a member in the struct Placing a breakpoint at this function shows that calls to it use the Steam-provided version of
However, calls to the function where the assertion fails,
The version provided by Steam is much, much older than the version provided by the system. These two versions are not ABI-compatible, hence the difference in soversion.
Solutions
Other solutionsNote that while these solutions do work, using them only avoids the issue. In the future, if another library were to use new
|
I had this issue today after upgrading as well. Arch/EndeavourOS with KDE. Downgrading the two libgudev packages mentioned by GithubUser5462 and doing a steam reset got it working for me. |
Ditto for the update and then steam core dump. |
Did these two and it worked great. On Vanilla Arch myself. I tried to uninstall lib32-libgudev at first but I was stopped bercause proton-ge-custom was using it as a dependency. This issue showed for me first when I updated proton-ge-custom within the last 24 hours so maybe there is something to investigate there. |
I found just installing libnm and lib32-libnm from the Arch repo fixed it, no need to downgrade or install anything else. I'm running EndeavourOS. |
There is an Arch bug 75157 to add lib32-libnm/lib32-va as (opt)depends just over an year ago. |
I solved it after installing the lib32-libnm. The 'lib32-' prefix is necessary. |
Just uninstall lib32-libgudev, I am using Arch. |
Thanks for an incredibly detailed response. I'm sure there will be much more discussion soon but just one quick point for now (emphasis mine):
From the mighty Wiki (emphasis mine) (https://wiki.archlinux.org/title/PKGBUILD#optdepends):
optdepends dependencies aren't installed alongside the package by default. If they're brought in by another package (say This sounds mostly similar to "Recommends" except that it's not installed by default. However it also seems like an anti-pattern where the optional dependencies are sometimes functionally necessary as opposed to just enabling optional features. At any rate, this is being discussed across several Arch Linux issues including the one I linked previously. |
That sounds to me as though Arch
The problem here is that in principle, the Steam Runtime provides nearly everything Steam needs, making an equivalent library at OS level merely a nice-to-have that might have more features or fewer bugs - but because certain combinations of newer libraries will crash, we can easily get dependency relationships that aren't even representable by common package managers, like "if you have libfoo >= 3 then you also need libbar". |
Same problem on gentoo. |
If this installs a 32-bit (i386) version of |
In principle this should be the good workaround, but unfortunately, this is not completely true: archlinux/libudev0-shim#4 prevents that from working the way it should in distros that package this shim (at least Arch, Debian and Ubuntu, possibly others). The Steam Runtime cannot unconditionally prefer dependencies provided by the system, because part of the purpose of the Steam Runtime is being able to run Steam and Steam games on older "LTS" distributions such as Debian stable/oldstable, Ubuntu LTS and the RHEL/CentOS family, and it sometimes provides backported libraries that are newer than the versions in the oldest OS that is supported (notably SDL). When that happens, the Steam Runtime must detect it, and use its own backported library if necessary - but we can only do that if the versions compare in the intended order. I'm going to look into whether we can work around this in the Steam Runtime, but it would be nice to fix this upstream in Arch's libudev0-shim rather than having to work around it. Gentoo has a slightly different libudev.so.0 shim and that one should work OK, because if the Steam Runtime can't identify whether a library is older or newer (in particular if no symlinks are involved at all), then it prefers the host OS copy. |
Until the issues with In some environments it might also be necessary to install a 32-bit I'm looking at possible solutions for this on the Steam Runtime side, but if it's solvable from there then it will take some time. |
We've been able to backport a somewhat more recent libudev for the Steam Runtime while maintaining compatibility with older distributions and eudev, so a future Steam beta will hopefully resolve this. Having both 64- and 32-bit system copies of Until then, the workaround that I'd recommend is as described in my previous comment: install a 32-bit system copy of |
I installed Sorry for my poor English. |
on Gentoo I've fixed with echo sys-libs/libudev-compat abi_x86_32 > /etc/portage/package.use/steam
emerge -vq sys-libs/libudev-compat |
I commented above that my Steam was working with I installed |
@MathSquared the Arch shim has a bug that would prevent if from working reliably see archlinux/libudev0-shim#4. It also has a secondary issue, which you might exhibit if you rebuild it archlinux/libudev0-shim#3 Not much we can do about either - it's up-to the Arch devs to press the Merge button. |
…onditional This works around the libgudev compatibility issue. There is more than one way to work around it, but this seems like the best. Closes: #336 Closes: https://bugs.gentoo.org/910699 Signed-off-by: James Le Cuirot <chewi@gentoo.org>
Is this actually still an issue? I added 32-bit "libudev0" as a dependency on Gentoo to address this yesterday, but now a user tells me the problem had already gone away in the mean time. I build most things with 32-bit, so I haven't been able to tell myself. |
"It's complicated". Whether it is an issue depends on the exact combination of libraries that you have installed on the host system, and on how lucky you have been. I would recommend that packagers should include a solution or workaround on the packaging side: typically the workaround will be low-effort and make the package work considerably more reliably, reducing the number of bug reports that the packager receives, which seems like a good deal to me. As I said in #9805 (comment), a solution to this on the Steam Runtime side is in the pipeline and will hopefully be in a future Steam beta. I don't have control over Steam's release cycle, so I can't predict when this will happen. If all goes well, when this change has got all the way through the release pipeline to stable status, it will make the workarounds unnecessary (but also harmless, so there will be no need to rush to remove them).
Thank you, I think that is an appropriate change for Gentoo packaging. Gentoo's libudev0 shim is not installed in exactly the same way as Arch's (it doesn't suffer from archlinux/libudev0-shim#4), so I think this will act as a reliable workaround on Gentoo specifically (but not for anyone else). Non-Gentoo-based distributions that have a shim version of libudev0 implemented in terms of libudev1 tend to use the one that originated in Arch - for instance that's what we have in Debian. This is not (yet!) a reliable workaround as long as archlinux/libudev0-shim#3 and archlinux/libudev0-shim#4 are unfixed: archlinux/libudev0-shim#3 is fixed in Debian but not in Arch, and archlinux/libudev0-shim#4 is not fixed anywhere. The changes that are queued for a future Steam beta include a workaround for archlinux/libudev0-shim#4 which should make this more reliable. For users of non-Gentoo-based distributions like Arch, Debian and Ubuntu, my recommendation is still #9805 (comment). For example, in Debian's |
…so.0 Steam Runtime 1 'scout' is based on a library stack from 2012, so it includes libudev.so.0 v175, from before libudev was merged into systemd and bumped its SONAME to libudev.so.1. libudev.so.0 and libudev.so.1 mostly export the same symbols, and the symbols in libudev.so.0 don't use ELF symbol versioning, so if we load both libudev.so.0 and libudev.so.1 into the same process, libudev.so.0 will "win". This can cause crashes if another module of the same process calls functions that are unique to libudev.so.1, by sharing data structures between libraries that were never intended to share them. There is a libudev0-shim project, originating in Arch Linux and now offered by several other distributions such as Debian, which provides a drop-in replacement for the legacy libudev.so.0. Unfortunately, the legacy libudev.so.0 is versioned as .so.0.13.0, while Arch's shim is currently versioned as .so.0.0.9999 (archlinux/libudev0-shim#4), so we would normally assume our legacy version is actually newer. If we special-case Arch's shim to be considered to be newer than the Steam Runtime's legacy version, then we'll load the shim version whenever it's available at OS level, avoiding crashes. Part-of: steamrt/tasks#313 Helps: ValveSoftware/steam-for-linux#9805 Signed-off-by: Simon McVittie <smcv@collabora.com>
This change arrived in yesterday's Steam client beta release (1692041866, 14 August 2023), which should work correctly even without the workarounds that I previously recommended. In the fixed version, I would still recommend that packagers of the Steam client should give it at least a weak/optional dependency on 32-bit
This change was ValveSoftware/steam-runtime@2677a6e and is also included in yesterday's Steam client beta (1692041866, 14 August 2023). |
Yes. I had this issue after upgrading to |
This solved the problem for me, I'm using the latest packages too. |
Removing As said above, the good solution is now included in the Steam client beta branch, and will ship in the stable (general-availability) branch at some point in the future (I cannot predict a timeline for this, it depends what is happening in unrelated Steam development topics). If you cannot use the beta for whatever reason, better workarounds can be found in #9805 (comment). |
This updated runtime is now included in the general-availability (default, stable, non-beta) version of the Steam client. @kisak-valve, if there is no negative feedback in the next few days, I think we can close this issue. I don't see any release notes for this update in the usual place yet; the change seems to have gone out unannounced. The workaround mentioned in #9805 (comment) should no longer be needed, but it's harmless and might prevent unrelated crashes, so I would still recommend it to distros/packagers. |
Closing as fixed in the 2023-09-11 Steam client update. |
Your system information
Please describe your issue in as much detail as possible:
Arch Linux recently updated the
libgudev
andlib32-libgudev
packages to version238
in accordance with the release upstream. After updating, Steam crashes during launch. I have included the last couple lines before the crash below:Downgrading
libgudev
andlib32-libgudev
to version237-2
works.Steps for reproducing this issue:
libgudev
andlib32-libgudev
to version238-1
Temporary WorkaroundDowngrading thelibgudev
andlib32-libgudev
packages to version237-2
is a temporarily workaround to get Steam to launch. The downgrade AUR package can be used to do this. Remember to update these packages when this issue is fixed.Solutions
See this comment by devkarthin for a couple solutions.
The text was updated successfully, but these errors were encountered: