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:
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:
Schritt 2:
Falls ihr noch nicht Git installiert habt, solltet ihr das nun nachholen:
Schritt 3:
Als nächstes benötigen wir NuGet. Diesen installieren wir ganz gewohnt:
Allerdings wird NuGet noch nicht funktionieren, da es noch Zertifikate benötigt:
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:
Schritt 5:
Jetzt müssen wir die benötigten Libraries installieren. Hierfür benutzen wir einfach NuGet:
Schritt 6:
Jetzt müssen wir noch den DepotDownloader compilen. Das bewerkstelligen wir mit dem bei Mono mitgelieferten Compiler.
Schritt 7:
Nun haben wir den DepotDownloader compiled. Dieser befindet sich nun im bin/Debug-Ordner. Ihr könnt ihn einfach verschieben:
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:
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):
#!/bin/bash
username=''
password=''
os=''
destdir=/home/Steam_Downloads
[ -z "$1" ] && echo "Usage: $(basename $0) <app-id>" && exit 1
targetdir="${destdir}/$1"
[ ! -d $destdir ] && mkdir -p $destdir
[ ! -d $targetdir ] && mkdir -p $targetdir
mono DepotDownloader.exe -app $1 -username ${username} -password ${password} -dir ${targetdir} -os ${os} -remember-password
Alles anzeigen
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:
Damit kann man das Ganze im Speicher halten ohne ein Fenster SSH-Client offen zu haben. Dafür einfach
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
kann man sich alle aktiven Screens anzeigen lassen und mit
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.