Ein Steam-Update macht unter Arch Linux erneut Probleme
Posted on Sunday, 04 September 2016 in Linux
Das altbekannte Problem: Der Steam-Client unter Arch Linux führt sein gewohntes Update durch und startet danach plötzlich nicht mehr. Die übliche Prozedur besteht darin, Steam über ein Terminal zu starten und anhand der Ausgaben zu verstehen, was das Problem ist. Wie sonst auch tauchten die gewohnten libGL Fehler und Meldungen auf. Dazwischen auch mal eine Erwähnung von SDL2. Das Paket lib32-libsdl ist schon installiert, aber Steam benötigt jetzt wohl auch die Version 2:
sudo pacman -S lib32-sdl2
Paket installiert und zum Testen ein weiterer Versuch im Terminal: Die Meldung zu SDL2 ist verschwunden, aber immer noch kein erfolgreicher Start und vermeintlich altbekannte Ausgaben:
libGL error: unable to load driver: some_driver_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: some_driver
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
Es sah für mich so aus, als läge das Problem wie sonst auch bei den Steam Laufzeitbibliotheken, die bei Updates immer mal wieder erneuert und, falls nicht vorhanden, so wieder installiert werden. Da die Pakete unter Arch Linux in der Regel sehr neu sind, kommt es oft zu Problemen zwischen den veralteten Bibliotheken von Steam und dem System selbst. Dies wirkt sich in Fehlern wie den oben gezeigten aus. Die Standardlösung für dieses Problem ist meistens, die betroffenen Bibliotheken ausfindig zu machen und zu löschen, damit als Fallback auf die systemeigenen Bibliotheken zurückgegriffen wird:
find ~/.steam/root/ \( -name "libgcc_s.so*" -o -name "libstdc++.so*" -o -name "libxcb.so*" \) -print -delete
Manchmal kann es auch sein, dass eine andere Bibliothek wie libgcrypt Probleme bereitet. Nur: Diesmal halfen all die bekannten Lösungsstrategien nicht weiter. Steam startete einfach nicht.
Nach unzähligen erfolglosen Versuchen lag die Lösung für mich letztlich darin, die betroffenen Bibliotheken an Ort und Stelle zu belassen und stattdessen über ein env LD_PRELOAD Steam zu starten. So wird dem System über die Umgebungsvariable LD_PRELOAD mitgeteilt, dass die darin aufgeführten Bibliotheken zuerst geladen werden sollen und andere mit gleichem Namen entsprechend ignoriert werden. Konkret sind es folgende Bibliotheken, bzw. der gesamte Befehl zum erfolgreichen Start sieht folgendermaßen aus:
env LD_PRELOAD='/usr/$LIB/libstdc++.so.6 /usr/$LIB/libgcc_s.so.1 /usr/$LIB/libxcb.so.1 /usr/$LIB/libgpg-error.so' steam
Da ich aber nicht immer diesen Befehl eingeben will, sondern Steam auch mal gerne über die grafische Desktop-Umgebung starte, habe ich versucht, diese Lösung dauerhaft in meinem System zu verankern. Dazu habe ich den Starter in mein lokales Benutzerverzeichnis kopiert:
cp /usr/share/applications/steam.desktop ~/.local/share/applications/
Das hat den Vorteil, dass das System, sollte es mehrere Starter geben, den unter ~/.local/share/applications/ bevorzugt. Also die lokale Kopie mit einem Editor geöffnet und die Zeile Exec=/usr/bin/steam %U ziemlich zu Beginn der Datei durch folgende ersetzt:
Exec=env LD_PRELOAD='/usr/$LIB/libstdc++.so.6 /usr/$LIB/libgcc_s.so.1 /usr/$LIB/libxcb.so.1 /usr/$LIB/libgpg-error.so' /usr/bin/steam %U
Danach sicherheitshalber noch die Desktopumgebung neugestartet, damit auch die richtigen Starter für die Programme eingelesen sind und versucht, Steam über das Icon meiner Oberfläche zu starten. Und siehe da, es startet ohne Murren!
Da bei Updates nur die selbst installierten Starter überschrieben werden, in diesem Fall die steam.desktop unter /usr/share/applications, bleibt die Datei unter ~/.local/share/applications unangetastet, weswegen es sich bei dieser Lösung hoffentlich um eine dauerhafte handelt.