Mit dem Raspberry Steamspiele downloaden

  • Hallo,

    ich bin relativ neu hier im Forum. Allerdings kam ich erst vor kurzem auf Idee meinen Raspberry als Downloader für Steamspiele zu verwenden, damit ich meinen PC nicht durchlaufen lassen muss und mir ein Raspberry angesichts meiner langsamen Internetverbindung und meiner Stromrechnung doch sinnvoller erscheint. Nach einiger Recherche bin ich aber zu dem Schluss gekommen, dass scheinbar noch niemand eine Lösung gefunden hat um den Raspberry als Steamdownloader zu nutzen oder aber seine Lösung nicht mit dem Internet teilen wollte.
    Nun habe ich aber eine Lösung gefunden und möchte diese mit euch teilen.

    Ich möchte erwähnen, dass ich selber nicht die Variante gegangen bin, die ich hier zeige. Ich habe mir Arbeit erspart und habe das Ganze mit wenigen Klicks in Visual Studio gemacht, allerdings habe ich natürlich auch die Variante von unten durchgeführt und ausgiebig getestet.

    So beginnen wir mal. Ich bin während meiner Recherchen auf SteamKit2 gestoßen, eine Implementation von der Steam-API für das .Net-Framework. Dieselben Entwickler haben auch ein Tool namens "DepotDownloader" entwickelt, welche eben SteamKit2 benutzt um Spiele/Programme anhand der App-ID herunterzuladen.
    Ich werde euch deshalb zeigen wie ihr diesen DepotDownloader installieren könnt, allerdings möchte ich sagen, dass dieser DepotDownloader nur über die Shell funktioniert und keinerlei GUI hat. Wer etwas programmieren kann, kann sich natürlich dazu irgendwas zusammenbasteln.

    Also Schritt 1:
    Zunächst benötigen wir die Mono-Runtime, damit wir den DepotDownloader überhaupt ausführen können.

    Dafür müssen wir ein paar Quellen hinzufügen:

    Code
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    echo "deb http://download.mono-project.com/repo/debian raspbianjessie main" | sudo tee /etc/apt/sources.list.d/mono-official.list
    sudo apt-get update

    Danach können wir einfach Mono installieren:

    Code
    sudo apt-get install mono-complete

    Schritt 2:
    Falls ihr noch nicht Git installiert habt, solltet ihr das nun nachholen:

    Code
    sudo apt-get install git-core

    Schritt 3:
    Als nächstes benötigen wir NuGet. Diesen installieren wir ganz gewohnt:

    Code
    sudo apt-get install nuget

    Allerdings wird NuGet noch nicht funktionieren, da es noch Zertifikate benötigt:

    Code
    sudo certmgr -ssl -m https://go.microsoft.com
    sudo certmgr -ssl -m https://nugetgallery.blob.core.windows.net
    sudo certmgr -ssl -m https://nuget.org

    Auf die Fragen ob wir die Zertifikate importieren wollen antworten wir immer mit "y".
    Nun ist NuGet funktionsfähig.

    Schritt 4:
    Nachdem wir das gemeistert haben laden wir den DepotDownloader herunter. Sein Quellcode liegt offen auf Github: Github
    Als dieses Tutorial geschrieben wird ist der aktuellste Release die Version 2.1.1 Diese ist allerdings schon recht alt und funktioniert auch nicht mehr. Deshalb klonen wir uns das Repository:

    Code
    git clone https://github.com/SteamRE/DepotDownloader.git
    cd DepotDownloader

    Schritt 5:
    Jetzt müssen wir die benötigten Libraries installieren. Hierfür benutzen wir einfach NuGet:

    Code
    nuget restore DepotDownloader.sln

    Schritt 6:
    Jetzt müssen wir noch den DepotDownloader compilen. Das bewerkstelligen wir mit dem bei Mono mitgelieferten Compiler.

    Code
    msbuild /p:Configuration=Release DepotDownloader.sln

    Schritt 7:
    Nun haben wir den DepotDownloader compiled. Dieser befindet sich nun im bin/Debug-Ordner. Ihr könnt ihn einfach verschieben:

    Code
    mkdir ~/SteamDL
    mv DepotDownloader/bin/Release/* ~/SteamDL
    cd ~/SteamDL

    Nun könnt ihr das geklonte Repository löschen. Die Nutzung des DepotDownloaders ist sehr einfach. Ihr benötigt zunächst die App-ID des Programmes, welches ihr downloaden wollt. Diese App-ID könnt ihr bspw. hier finden: SteamDB.info
    Dann solltet ihr folgende optionale Parameter wissen(zu finden in der Readme vom DepotDownloader-Repository):
    -username = Euer Username in Steam, wird benötigt wenn ihr gekaufte Programme downloaden wollt, ansonsten kann man Username und Passwort weglassen. Der Downloader nutzt dann automatisch einen anonymen Account
    -password = Euer Passwort
    -dir = Der Ordnerpfad in welchen das Programm gedownloadet werden soll
    -all-platforms = Wenn ihr alle Plattformen downloaden wollt
    -depot = Eine bestimmte Depot-ID. Wenn ihr bspw. nur die Dateien für Windows downloaden wollt.


    So kann man den DepotDownloader zum Beispiel so aufrufen:

    Code
    mono DepotDownloader.exe -app 8930 -username [Nutzername] -password [Passwort] -dir ~/Downloads/ -os [Ziel-OS] -remember-password

    Der DepotDownloader würde dann Sid Meier's Civilization V in den Ordner den Downloadordner downloaden und sich zusätzlich eine Login-Key für Steam sichern, um sich ohne Password und Authentication-Code anmelden zu können.


    Hinweis: Der DepotDownloader nutzt die Steam-API. Deshalb wird er bei jedem Download nach einem Authentifizierungscode fragen, wenn dies bei eurem Account eingestellt ist. Ich nutze deshalb die Steam-App zum schnellen Eingeben.

    Hinweis: Der DepotDownloader kann Downloads unterbrechen beziehungsweise abgebrochene Downloads wiederaufnehmen. Allerdings dauert dieser Vorgang immer, da er alle Dateien durchgeht bis er die Stelle findet, wo er aufgehört hat.

    Dann noch zwei Dinge:
    Ich empfehle für die Installation der Spiele/Programme die Nutzung von einer externen Festplatte, da eine SD-Karte dann doch recht klein ist. Diese Festplatte kann man dann an seinen PC anschließen oder per Samba(FTP ginge wohl auch) zugreifbar machen, die Daten kann man dann per Netzwerk übertragen.
    Das Importieren in Steam ist auch schnell bewerkstelligt.
    Zuerst beendet man Steam, damit es nicht dazwischen funkt. Dann öffnet man seinen Steam-Ordner(also Programme/Programme(x86)\Steam), öffnet den Ordner "steamapps\common" und erstellt dort einen Ordner mit dem Namen des Spieles. Also bspw. "Sid Meier's Civilization V". In diesen Ordner packt man dann alle heruntergeladenen Dateien.
    Nun sucht man in dem Ordner noch nach einer Datei namens "installscript.vdf" bzw. allgemein nach einer VDF-Datei. Wenn man dieses Skript findet löscht man es.
    Jetzt kann man Steam wieder starten und den Download starten.
    Steam sollte dann alle Dateien prüfen und fehlende/kaputte Dateien ersetzen.
    Da es doch etwas umständlich sein kann immer diese lange Kommandozeile zu tippen, war meigrafd so nett und hat ein kleines Script geschrieben, welches ich etwas erweitert habe(bin kein Bash-Experte, aber es sollte funktionieren):


    In dieses muss man seinen Username und sein Passwort eintragen. Wenn man will kann man den Downloadordner noch ändern. Das Skript erstellt dann im Downloadordner einen Unterordner mit der AppID und lädt dort alles rein.

    Am Ende noch ein sehr kleiner Hinweis:
    Da der DepotDownloader ein Terminal belegt bis er fertig ist, empfehle ich die Verwendung von Screen:

    Code
    sudo apt-get install screen

    Damit kann man das Ganze im Speicher halten ohne ein Fenster SSH-Client offen zu haben. Dafür einfach

    Code
    screen bash


    aufrufen.
    Daraufhin kann man den Downloader starten. Dann drückt man Strg+A gefolgt von Strg+D. Nun ist die Sitzung im Speicher des Raspberry's aktiv.

    Mit

    Code
    screen -list

    kann man sich alle aktiven Screens anzeigen lassen und mit

    Code
    screen -r [ID des Screens]

    kann man einen Screen wiederaufnehmen.

    Damit kann man den Raspberry ruhig durchlaufen lassen ohne einen aktiven PC.

    So das ist jetzt das Ende meines kleinen Tutorials. Ich hoffe ich konnte jemandem damit helfen. Ich habe das Ganze natürlich getestet mit einem Raspberry Pi Model B+.

    LG

    Edit:
    -Fehler bezüglich Plattform behoben
    -Erklärung bezüglich Importierung in Steam
    -Git-Installation hinzugefügt
    -Skript von meigrafd hinzugefügt

    Edit #2:
    -Mozroot-Befehl entfernt, da der Support eingestellt wurde
    -Problem mit veralteter SteamKit-Version behoben
    -Zertifikatsproblem angemerkt und Lösungsvorschlag eingefügt
    -Buildbefehl bezüglich Releaseversion erweitert

    Edit #3:

    -Problem mit veralteter Mono-Version behoben(behebt auch Probleme mit den Zertifikaten)

    -Befehle auf den neuesten Stand gebracht

    -Kleinere Änderungen

    Edit #4:

    -Kommandozeilen-Parameter aktualisiert. Der DepotDownloader beherrscht inzwischen einen OS-Parameter und kann sich die Anmeldedaten merken.

    3 Mal editiert, zuletzt von ChOoSeMyNaMe (3. Dezember 2017 um 15:31)

    • Offizieller Beitrag

    Sehr schön beschrieben und für die mit langsamen Inet sicher einen blick wert. anschliessend muss man nur die xGB Grossen Spiele auch schnell genug vom Pi runterkriegen ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Und wie kriegt man dann die heruntergeladenen Steamdateien auf dem PC installiert? :s Kann man den Pi wiederum auf dem PC als Steam-Server oder so definieren?


    //EDIT: Das Paket "git-core" fehlt auch noch um "git clone" verwenden zu können ;)

    //EDIT2: Hier ein Script:

    Bash
    #!/bin/bash
    username=''
    password=''
    destdir=/home/Steam_Downloads
    
    
    [ -z "$1" ] && echo "Usage: $(basename $0) <app-id>" && exit 1
    [ ! -d $destdir ] && mkdir -p $destdir
    mono DepotDownloader.exe -app $1 -username ${username} -password ${password} -dir $destdir

  • Und wie kriegt man dann die heruntergeladenen Steamdateien auf dem PC installiert? :s Kann man den Pi wiederum auf dem PC als Steam-Server oder so definieren?

    Ich installiere die Spiele immer auf einer externen Festplatte und schließe diese dann später an meinen PC an. Dann schiebe ich die Dateien in meinen Steam-Ordner unter steamapps/common/[Spielname]. In Steam braucht man nur noch den Download zu starten und Steam überprüft alle Dateien, die vorhanden sind. Wenn nichts falsch gemacht hat oder keine Dateien fehlen, dann kann man gleich spielen. Ansonsten lädt Steam halt noch das Fehlende herunter.

    Alternativ kann man auch einen Samba-Server einrichten und dann die Festplatte über das Netzwerk als Steam-Bibliotheksordner festlegen. Das ist aber etwas komplizierter und auch eher suboptimal.

    LG

    Einmal editiert, zuletzt von ChOoSeMyNaMe (24. Mai 2016 um 21:05)

  • Hab diesen Beitrag vor ein paar Tagen gefunden und heute mal ausprobiert. Leider bekomme ich es einfach nicht auf meinen Pi zum laufen und wollte mal Fragen ob hier mir jemand helfen kann.
    Hab das ganze erfolgreich compiliert und kann es auch ausführen bloß kommt nach "Connecting to Steam3..." ungefähr 30 mal die Meldung "Reconnecting" und am Ende ein Meldung "Timeout connecting to Steam3. Unable to get stream3 credentials."
    Also wird anscheint keine Verbindung aufgebaut. Mein PI hat natürlich Internet Zugang und läuft mit Raspbian "Jessie". Unter mein Windows Rechner der am selben Switch hängt läuft das ganze ohne Probleme.
    Ist es möglich das dieses Mono Runtime kein Internet bekommt und gibt es eine einfache Möglichkeit herauszufinden woran es liegt?

    Update: Ich kann ein ganz einfaches C# Programm mit den Internet verbinden und Wireshark spuckt mir Fehler auf den TLSv1 Protocol aus. Der Pi Antwortet mit "Certificate Unknown" auf das Zertifikat von Steam. Anscheint bekomme ich eine TLS Extension (iso.3.6.1.4.1.11129.2.4.2) von Steam die selbst Wireshark nicht kennt. Jemand eine Idee was da passiert?

    Einmal editiert, zuletzt von Craftplorer (21. September 2016 um 22:08)


  • Hab diesen Beitrag vor ein paar Tagen gefunden und heute mal ausprobiert. Leider bekomme ich es einfach nicht auf meinen Pi zum laufen und wollte mal Fragen ob hier mir jemand helfen kann.
    Hab das ganze erfolgreich compiliert und kann es auch ausführen bloß kommt nach "Connecting to Steam3..." ungefähr 30 mal die Meldung "Reconnecting" und am Ende ein Meldung "Timeout connecting to Steam3. Unable to get stream3 credentials."

    Update: Ich kann ein ganz einfaches C# Programm mit den Internet verbinden und Wireshark spuckt mir Fehler auf den TLSv1 Protocol aus. Der Pi Antwortet mit "Certificate Unknown" auf das Zertifikat von Steam. Anscheint bekomme ich eine TLS Extension (iso.3.6.1.4.1.11129.2.4.2) von Steam die selbst Wireshark nicht kennt. Jemand eine Idee was da passiert?

    Jo, das Problem kenne ich. Das kommt daher, dass in SteamKit die Serverlisten anfangs veraltet bzw hardcodet sind. In der Regel aktualisiert SteamKit das automatisch, aber wenn das Zertifikat natürlich blockiert ist geht das nicht.
    Als erstes würde ich versuchen das Zertifikat als sicher einstufen zu lassen, aber das muss ich auch erstmal selbst testen.
    Ich habe auch vor ein paar Monaten mit der Arbeit an einem besseren Downloader begonnen auf Basis des DepotDownloaders. Dieser soll dann eine HTTP-API besitzen und dann per PC ferngesteuert werden und auch die Pakete zusammenfassen können.
    Allerdings habe ich im Moment recht wenig Zeit dafür, außerdem bin ich mir nicht sicher ob ich das dann einfach so veröffentlichen darf.

    LG

  • Ist zwar sehr schön beschrieben, ich habe nur ein Problem, und weiß nicht, wie ich es lösen kann.
    Nach dem "xbuild" Befehl kommen diese Fehler:


  • Ist zwar sehr schön beschrieben, ich habe nur ein Problem, und weiß nicht, wie ich es lösen kann.
    Nach dem "xbuild" Befehl kommen diese Fehler:

    Der Fehler liegt nicht direkt beim DepotDownloader. Laut dem Issue-Tracker auf Github ist das Problem bekannt. Die Lösung wäre zuerst SteamKit zu clonen, die Abhängigkeiten mit Nuget aufzulösen, zu kompilieren und dann beim kompilieren vom DepotDownloader auf die selbstkompilierte Version zu verweisen(bzw. die selbstkompilierten im Nuget-Verzeichnis ersetzen).
    Ich werde in den nächsten Tagen die Anleitung dementsprechend ergänzen und vermutlich auch um das Zertifikatsproblem erweitern.

    LG

  • Ich bin leider wieder am Verzweifeln...
    Ich habe nun die Anleitung mehrmals durchgeführt immer wieder probiert und probiert...
    Ich habe es auch mit einer alten Raspbian Version probiert.

    Leider so ein Ergebnis hier:

  • Hallo.

    Ich verwende eine aktuelle Raspbian Konfiguration auf meinem Raspberry und scheitere schon bei der nuget-Installation (Package not found). Brauche ich bestimmte Vorbedingungen erfüllt damit ich das installieren kann?

    Vielen Dank
    flügelmann


  • Hallo.

    Ich verwende eine aktuelle Raspbian Konfiguration auf meinem Raspberry und scheitere schon bei der nuget-Installation (Package not found). Brauche ich bestimmte Vorbedingungen erfüllt damit ich das installieren kann?

    Vielen Dank
    flügelmann

    Hallo Flügelmann, ich habe gerade probiert das ganze mit der Ubuntu Mate Distribution für den RPi 2 und 3 zu installieren und es hat funktioniert.
    Ich hoffe, dass du im Besitz eines 2er oder 3er's bist.

    Grüße ClemontX und ein schönes Wochenende

  • Ich grüße dich

    Ich spiele auch total gerne solche Games und muss sagen, dass ich es allgemein alles über den PC mache. Habe mich unter anderem nach neuen spielen schlau gemacht und bin dann auf die Slotmaschienen Spiele gestoßen. Ich spiele Automaten Games schon ne Weile aber war halt wieder Zeit für was neues :)
    Downloaden mache ich ja immer so, dass das über meine 100er Leitung relativ schnell geht mit dem Download. Ich kann mich da nicht beklagen. Kostet ja nichts und man hat ne Menge Spaß.

    Wäre aber auch interessant, hier paar Meinungen zu hören.
    Bisher sind ja schon echt viele Informationen zusammen gekommen.

    Einmal editiert, zuletzt von RinPiketru (30. Mai 2017 um 13:04)

  • Hi ChOoSeMyNaMe!

    Ich bin komplett neu zum Raspberry und habe bisher nur Retropie mit einem Schritt für Schritt Tutorial installieren können, ohne zu wissen was da überhaupt passiert. Die einzigen Begriffe die ich kenne sind sudo und cd, wobei ich nur die Bedeutung von Sudo kenne.

    Als kompletter Noob frage ich, brauche ich irgendwelche Voraussetzungen um das hier auszuprobieren? Zum Beispiel brauch ich was auf der MicroSD oder ist die einfach leer? Also bisher weiß ich nur das ich nen Lan Kabel, Stromversorgung, Tastatur brauch.

    Einmal editiert, zuletzt von ToMMyGun (1. Juni 2017 um 13:26)


  • Hi ChOoSeMyNaMe!

    Ich bin komplett neu zum Raspberry und habe bisher nur Retropie mit einem Schritt für Schritt Tutorial installieren können, ohne zu wissen was da überhaupt passiert. Die einzigen Begriffe die ich kenne sind sudo und cd, wobei ich nur die Bedeutung von Sudo kenne.

    Als kompletter Noob frage ich, brauche ich irgendwelche Voraussetzungen um das hier auszuprobieren? Zum Beispiel brauch ich was auf der MicroSD oder ist die einfach leer? Also bisher weiß ich nur das ich nen Lan Kabel, Stromversorgung, Tastatur brauch.


    Hallo ToMMyGun,
    Puuuh. Aller Anfang ist schwer.
    Du brauchst zumindest eine sd Karte auf der raspbian installiert ist.
    Wenn du das hast und einen internetzugang hast kannst du prinzipiell loslegen.
    Wenn du noch nicht weißt wie man ein aktuelles raspbian mit Inetzugang einrichtet ist das hier etwas zu früh. Dann solltet du dir erst einmal ein paar Anfänger tutorials genehmigen oder dir ein paar Bücher ausleihen oder kaufen.

    Dieses tutorial werd ich auf jeden Fall auch mal ausprobieren. Danke Für die Arbeit!

  • Hallo zusammen,

    habe das Tutorial gerade ausprobiert (mit SteamKit 1.8.3), habe aber einen anderen Fehler beim Kompilieren:

    Code
    ContentDownloader.cs(338,17): error CS0103: The name `_' does not exist in the current context

    In der entsprechenden Datei steht an der Zeile folgendes:

    Code
    public static bool InitializeSteam3( string username, string password )
            {
               string loginKey = null;
    
    
               if ( username != null && Config.RememberPassword )
               {
                   _ = ConfigStore.TheConfig.LoginKeys.TryGetValue( username, out loginKey );
               }

    Hat jemand ne Idee warum der Fehler jetzt auftaucht und was ich tun kann?

    Danke!
    Automatisch zusammengefügt:
    Und nur eine Kleinigkeit zum Tutorial:

    Zitat von &quot;ChOoSeMyNaMe&quot; pid='223687' dateline='1464113875'

    Schritt 8:
    Nun müssen wir noch eine Kleinigkeit bearbeiten. Der DepotDownloader checkt nämlich immer das System auf dem er läuft und stellt dementsprechend dann nur die Depots zur Verfügung, die dem OS entsprechen. Und diese Funktion hebeln wir aus. Dazu greifen wir uns erstmal die entsprechende Datei:

    Code
    nano DepotDownloader/Utils.cs

    Die Datei heißt (jetzt) Util.cs, also

    Code
    nano DepotDownloader/Util.cs


    Automatisch zusammengefügt:
    EDIT:

    Ich habe das Problem lösen können indem ich mir die Änderungen im github angeschaut habe und die letzte Änderung (die genau die Zeile betraf) rückgängig gemacht habe.
    Die aktuelle Version scheint also nicht kompilierbar zu sein.
    Habe einen Issue im github eröffnet.

    Cheers,
    lavolpe

    Einmal editiert, zuletzt von lavolpe (10. August 2017 um 14:53)

  • Hallo zusammen,

    ich habe nun den DepotDownloader installiert und Zugang zu den Steam-Servern.
    Leider bekomme ich nun im Vrlauf der Downloads einen anderen Fehler

    Code
    Unhandled Exception:
    
    
    System.AggregateException: One or more errors occurred. ---> System.IO.IOException: Lock violation on path /media/nas/downloads/Steamapps/498240/_CommonRedist/Dire      ctX/Jun2010/DEC2006_d3dx9_32_x64.cab

    Eine Google-Recherche zu dem "Lock violation on path" Fehler ergibt, dass es anscheinend ein Fehler ist, der aus der Inkompatibilität von Mono und dem Raspberry Pi herrührt. (Mono und RasPi vertragen sich nicht).

    https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=11634

    Ein Lösungsvorschlag, allerdings zu einer anderen mono/raspbian-Problematik war, mono vollständig zu kompilieren (anscheinend sehr zeitaufwändig, und mit kompilieren kennen ich mich kaum aus.)


    Also zunächst hier die Frage: Kann sich jemand einen Reim drauf bilden? Kennt jemand das Problem?

    Danke!
    Lavolpe

  • Nach einigem Hin und Her habe ich es nun anscheinend geschafft, den DepotDownlaoder einigermassen auf einem RasPi 3 zum laufen zu bekommen.
    Der "Lock violation path" Fehler scheint mit einer neueren Version von Mono wieder zu verschwinden.

    Dafür muss man das mono Repository hinzufügen, über die Standard-Repositories wird soweit ich weiß eine ältere Version geladen mit der ich o.g. Probleme hatte.

    Ich würde dir also empfehlen, folgendes im Tutorial hinzuzufügen, um das mono-Repository hinzuzufügen.

    Code
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    echo "deb http://download.mono-project.com/repo/debian raspbianjessie main" | sudo tee /etc/apt/sources.list.d/mono-official.list
    sudo apt-get update

    Ein darauf folgendes

    Code
    sudo apt-get mono-complete


    installiert (momentan) mono 5.2.0

    Ich habe aber immer noch ab und zu Abstürze bei mono zu vermelden.

    Nichtsdestotrotz ist der DepotDownloader für mich eine super Sache. Zuvor habe ich immer meinen Laptop über Nacht für den Download angelassen, jetzt läufts automatisch 24/7 und ich kann die Downloads (über ssh) verfolgen. Außerdem pack ich die Spieldateien direkt auf meinen NAS der genug Platz hat, und bei Bedarf hole ich sie mir auf den Laptop. :thumbs1:

    :danke_ATDE:

    Einmal editiert, zuletzt von lavolpe (22. August 2017 um 13:44)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!