Steam mit Debian 9 Stretch Linux

Intro

Der Steam-Client dürfte auf Debian Jessie ausgerichtet sein und benötigt bei mir unter dieser Version keine Tricks bei der Installation.
Für Debian Stretch dagegen musste ich noch einige veraltete Libraries im Steam-Verzeichnis löschen und aus dem Debian-Repository aktuellere Versionen nachinstallieren (siehe Abschnitt Debian Stretch).

Spiele-Galerie

Zur Veranschaulichung habe ich einige Screenshots hochgeladen.

Vorbereitung (Beispiel)

Ziel: Debian-Installation - ähnlich SteamOS - auf einer externen SSD, angeschlossen über USB3 an einem Acer-Notebook

Hardware:
  • Acer Aspire V 17 Nitro (VN7-792G-52FY)
  • 2 CDs/DVDs für die Debian-Installations-CD und die rEFInd-Boot-CD
  • renkforce SSD/HDD Enclosure (für den Anschluss der SSD) am USB3-Port
  • Samsung V-NAND SSD 850 EVO 250GB (schnell und ausreichend Platz fürs Betriebssystem und einen Teil der Spieledaten)
  • optional TV
  • optional GamePad (XBox 360 Controller mit Kabel)

Software:

Betriebssystem-Installation

Zur Veranschaulichung gibt es Installationsvideos für VirtualBox und virt-manager.

  • Debian-Installations-CD erstellen.
  • rEFInd-Boot-CD erstellen.
  • Notebook starten - die SSD noch nicht über USB3 anstecken. (*1)
  • Debian-Installations-CD einlegen.
  • Sobald das erste Menü erscheint, die SSD über USB3 anstecken.
  • Sprache auswählen, gewünschte Desktop-Umgebung angeben, optional Proxy konfigurieren, die SSD partitionieren (bevorzugt ext4, weil eventuell zur Zeit noch stabiler als btrfs), zuletzt GRUB auf die SSD installieren.
  • Nun neu starten, rEFInd-Boot-CD einlegen und Debian im Boot-Menü auswählen.
  • Das Grundsystem ist damit installiert und kann nach Bedarf angepasst werden.
*1 ... wird die externe SSD vorm Booten angesteckt, könnte sie als erste System-Festplatte und die interne Festplatte als zweite Festplatte erkannt werden. Dies kann zu Problemen zwischen Festplattenpartitionierung und dem späteren Booten führen - welche Festplatte wird zuerst initialisiert? welche ist sda und welche sdb?

Debian anpassen

Bevor man Steam installiert, sollte man Debian noch nach Wunsch einrichten.

Optional:

Proprietäre Grafiktreiber sollte man nach dem Steam-Client installieren, da dieser sonst unter Umständen nicht startet.

Vorinstallation

Der Steam-Client möchte während der Installation Packages installieren, weswegen der ausführende Nutzer sudo-Rechte haben sollte. Es hilft auch bei den kommenden Installationsschritten.

i386-Architektur / 32Bit-System

Der Steam-Client ist vorwiegend für ein 32Bit-System entwickelt worden, nicht für ein 64Bit-System.
Die meisten neueren OS-Installationen (wie diese Installationsanleitung) werden auf 64Bit basieren.
Deswegen muss zum 64Bit-System eine 32Bit-Laufzeitumgebung installiert werden, welche mit der 64Bit-Laufzeitumgebung co-existiert.
dpkg --add-architecture i386
aptitude update
aptitude upgrade

Andernfalls meldet der Steam-Client einen Fehler bei der Installation.

Installation relevanter Programme und Packages/Bibliotheken/Libraries

Der Steam-Client installiert alle notwendigen Packages automatisch. Möchte man dennoch vorgreifen, werden folgende installiert
sudo aptitude install curl libcurl3 zenity zenity-common
sudo aptitude install libgl1-mesa-dri:i386 libgl1-mesa-glx:i386 libc6:i386

Steam-Installation / steam.deb

Die in der Vorbereitung erwähnte steam.deb downloaden. gdebi aus dem Debian-Repository installieren
sudo aptitude install gdebi


danach steam.deb installieren
sudo gdebi steam.deb


Eine Internetverbindung voraussetzend wird damit der Steam-Client heruntergeladen und installiert (runde 200MB).

Steam-Start / steam / steam.sh

Es stehen unterschiedliche Möglichkeiten für den Start des Programm zur Verfügung.

Start übers Programm-Menü

Meist wird Steam unter Games oder Spiele auffindbar sein.

Start über eine Konsole

In einer Konsole (konsole, xterm, ...) reicht das Eingeben von steam.

Eventuell ist der Direktaufruf des Steam-Skripts erforderlich
bash ~/.steam/steam.sh"


Nativer Modus

Möchte man die Libraries des Steam-Clients umgehen und die nativen Debian-Libraries nutzen, fügt man ein NATIV=0 davor an.
STEAM_NATIV=0 steam


Hierzu sollten alle Debian-Libaries installiert sein. Sollte Steam nicht problemfrei starten, könnte einem die Ausgabe des Konsolenaufrufs helfen. Siehe Feststellung fehlender Libraries.

Debian Stretch

Da Debian Stretch laufend aktualisiert wird, sind einige Libraries des Steam-Clients veraltet und müssen durch neuere aus dem Debian-Repository ersetzt werden.

Je nachdem, ob man Steam im Nativ-Modus nutzt (hauptsächliche Verwendung von Debian-Libs) oder nur die Minimalanzahl von Debian-Libraries für einen fehlerfreien Start, unterscheidet sich die Menge der zu installierenden Libraries: siehe späterer Abschnitt Feststellung fehlender Libraries

Programme TODO

Der Steam-Client setzt mehrere Programme voraus - wie curl und xterm:
sudo aptitude install curl python-apt xterm xz-utils zenity libgl1-mesa-dri:i386 libgl1-mesa-glx:i386 libc6:i386


Veraltete Libraries löschen

Vorher zur Sicherheit ein Backup von ~/.steam/steam/ubuntu12_32/steam-runtime/ anlegen!

Bei meiner Steam-Installation müssen folgenden Libraries gelöscht werden
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libxcb.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libxcb.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libgpg-error.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu/libgpg-error.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libgcc_s.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libgcc_s.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libstdc++.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libtinfo.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu/libtinfo.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libpcre.so.*
rm -f ~/.steam/steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu/libpcre.so.*

Ein so.* erspart mir die Angabe der genauen Versionsnummer.

Für Steam-Client-Aufruf notwendige Libraries TODO

sudo aptitude install libc, usw.


Gesamtliste (weitgehend) aller genutzten nativen Libraries TODO

sudo aptitude install libxtst6:i386 libxfixes3:i386 libxrandr2:i386 libxext6:i386 libx11-6:i386 libgl1:i386 libglib2.0-0:i386 libgtk-3-0:i386 libgtk2.0-0:i386 libpulse0:i386 libgdk-pixbuf2.0-0:i386 libstdc++6:i386 libcurl3:i386 libopenal1:i386 libcanberra-gtk3-0:i386 libnm0:i386 libdbus-glib-1-2:i386 libusb-1.0-0:i386 libnm-glib4:i386 libnm-util2:i386


Problemlösung

Feststellung genutzter Libraries

Der Steam-Client nutzt zum Einen Steam-spezifische Libraries, die eigens für den Steam-Client erstellt wurden, und zum anderen allgemein gebräuchliche Libraries, welche auch in den Debian-Repositories enthalten sind.
Da für den Steam-Client Debian bzw. Ubuntu als Grundsystem gewählt wurde, ist die Installation weiterer Libraries recht einfach.

Zur Feststellung der notwendigen "fremden" Libraries sieht man in den Steam-spezifischen Libraries nach, welche fremden Libraries aufgerufen werden.
Man findet mit google mehrere Konsolenbefehl-Vorschlüge.

https://wiki.archlinux.org/index.php/Steam/Troubleshooting#Native_runtime:
32Bit:
cd ~/.steam/ubuntu12_32/
file * | grep ELF | cut -d: -f1 | LD_LIBRARY_PATH=. xargs ldd | grep 'not found' | sort | uniq
64Bit:
cd ~/.steam/ubuntu12_64/
file * | grep ELF | cut -d: -f1 | LD_LIBRARY_PATH=. xargs ldd | grep 'not found' | sort | uniq

TODO!

"Not found" gibt die Libraries wider, welche aufgerufen jedoch nicht gefunden werden.
Das Ergebnis meiner Suche findet sich im früheren Kapitel Gesamtliste (weitgehend) aller genutzten nativen Libraries.

Systemweite Verlinkung

Im Nativen Modus wird nicht auf die Steam-spezifischen Libraries zugegriffen. Deswegen muss man eventuell einige der Steam-Libs ins Standard-Library-Verzeichnis verlinken muss, damit der Steam-Client startet.

ln -s /home/rabbit/.steam/bin32/libtier0_s.so /lib/i386-linux-gnu/libtier0_s.so
ln -s /home/rabbit/.steam/bin32/libtier0_s.so /lib/i386-linux-gnu/libtier0_s.so
ln -s /home/rabbit/.steam/bin32/libv8.so /lib/i386-linux-gnu/libv8.so
ln -s /home/rabbit/.steam/bin32/libavcodec.so.56 /lib/i386-linux-gnu/libavcodec.so.56
ln -s /home/rabbit/.steam/bin32/libvideo.so /lib/i386-linux-gnu/libvideo.so
ln -s /home/rabbit/.steam/bin32/libavformat.so.56 /lib/i386-linux-gnu/libavformat.so.56
ln -s /home/rabbit/.steam/bin32/libavutil.so.54 /lib/i386-linux-gnu/libavutil.so.54
ln -s /home/rabbit/.steam/bin32/libvstdlib_s.so /lib/i386-linux-gnu/libvstdlib_s.so
ln -s /home/rabbit/.steam/bin32/libswscale.so.3 /lib/i386-linux-gnu/libswscale.so.3
ln -s /home/rabbit/.steam/bin32/libavresample.so.2 /lib/i386-linux-gnu/libavresample.so.2
ln -s /home/rabbit/.steam/bin32/libicuuc.so /lib/i386-linux-gnu/libicuuc.so
ln -s /home/rabbit/.steam/bin32/libicui18n.so /lib/i386-linux-gnu/libicui18n.so
ln -s /home/rabbit/.steam/bin64/libGLESv2.so /lib/x86_64-linux-gnu/libGLESv2.so

Sonstiges

Grafik

Nachdem der Steam-Client lauffähig ist und man ihn getestet hat, könnte man Grafiktreiber mit mehr Performance installieren (siehe Hardware / Benchmarks).

Benchmarks

Stimmt die erwartete Leistung, ließen sich Benchmarks (siehe Hardware / Benchmarks) durchführen