Benutzer-Werkzeuge

Webseiten-Werkzeuge


fastdownload

Fastdownload

Die Geschwindigkeit der direkten Downloads bei Gameservern mit der HL1- und HL2-Engine ist begrenzt, damit der Gameserver durch die Downloads nicht beeinträchtigt wird. Da bei der HL2-Engine sehr große Downloads vorkommen, hatte Valve den Fastdownlod eingeführt. Der Download der Customdateien wird auf einen Webserver umgeleitet. Dies wird nur durch eine Konsolen-Variablen (sv_downloadurl) definiert. Seit der HL2-Engine wird auch die Bz2-Kompression unterstützt. Maps lassen sich so um die Hälfte verkleinern. Der Serveradmin kann selber entscheiden, welche Dateien er komprimiert und welche nicht.

Voraussetzungen

  • Ein Webspace, welcher keine Einschränkungen hat.
  • Genügend freier Traffic, da ansonsten beim Provider für den zusätzlichen Traffic gezahlt werden muss.
  • Die URL darf nicht länger als 127 Zeichen sein.
  • FTP-Zugangs-Daten vom Webspace
  • http-Adresse vom Webspace
  • Ein FTP-Client1)

Für den Fastdownload wird Webspace benötigt. Es wird nur das HTTP-Protokoll unterstützt und kein anderes2). Durch den Fastdownload kann ein hohes Trafficaufkommen verursacht werden. In der Regel eignen sich kostenlose Webspaceprovider nicht für den Einsatz des Fastdownloads. Viele limitieren die Dateigröße, verbieten bestimmte Dateitypen und erlauben keine direkten Downloads usw. Die meisten kostenlosen Webspaceprovider setzen sehr wirkungsvolle Techniken ein, um die Verwendung des Fastdownloads zu verhindern und haben dies auch in ihren AGB ausdrücklich verboten. Bei http://www.webhostlist.de/ gibt es eine Übersicht und einen Vergleich vieler kostenpflichtiger Provider. Falls ein Root-Server zur Verfügung steht, kann ggf. auf diesem auch ein Webserver eingerichtet werden.

Kostenlose Angebote

Es gibt hin und wieder Communitys, welche den Fastdownload anbieten oder einen Service dazu anbieten.

Erläuterung

Jegliche Dateien, die heruntergeladen werden, müssen sich auf dem Webspace im gleichen Verzeichnis befinden, wie auf dem Gameserver. Das Wurzelverzeichnis ist das Verzeichnis der Modifikation. Durch die Konsolen-Variablen sv_downloadurl wird die URL zum Webspace angegeben, welches dann als Wurzelverzeichnis für den Download verwendet wird. Bei einem Wurzelverzeichnis, handelt es sich um ein Verzeichis, dass sich logisch in der höchstem Ebene der Verzeichnisstruktur befindet. Es muss sozusagen die Verzeichnis- und Dateistruktur des Gameservers nachgebildet werden. Da immer nur der veränderte Inhalt heruntergeladen wird, brauchen nur diese Dateien auf den Webspace hochgeladen werden. Die anderen Dateien haben die Spieler ja bereits in ihrem Steam-Zwischenspeicher. Durch ein Beispiel lässt sich der Vorgang einfacher verstehen.

Beispiel

In diesen fiktiven Beispiel haben wir einen „Counter-Strike Source“-Server mit der Map gg_aim_shotty laufen.

Tabellarische Übersicht

Beschreibung Pfad/URL
Gameserver
Absoluter Pfad zur Map auf dem Gameserver (Linux) /home/gameserver/srcds/cstrike/maps/gg_aim_shotty.bsp
Absoluter Pfad zur Map auf dem Gameserver (Windows) C:\gameserver\srcds\cstrike\maps\gg_aim_shotty.bsp
Webserver
Pfad des erreichbaren Inhalts im Web3) auf dem Webserver (per FTP-Zugriff) /httpdocs
Unterverzeichnis in dem sich die Customdateien auf dem Webserver befinden xyz/abc
Daraus resultierender absoluter Pfad auf dem Webserver (per FTP-Zugriff) /httpdocs/xyz/abc
Erreichbare URL des Webservers
URL zum Webspace http://sourceserver.info/
URL zum Webspace für den Fastdownload http://sourceserver.info/xyz/abc/

Die Konsolen-Variable sv_downloadurl wurde dementsprechend auf http://sourceserver.info/xyz/abc gesetzt. Die Map befindet sich wie alle Maps im Verzeichnis maps. Verbindet sich ein Spieler mit dem Server, der diese Map noch nicht hat, leitet der Server den Download automatisch auf http://sourceserver.info/xyz/abc/maps/gg_aim_shotty.bsp.bz2 um. Befindet sich die komprimierte Version nicht auf dem Webserver, wird danach die nicht komprimierte Datei angefordert.

Tabellarische Übersicht

Beschreibung Pfad/URL
sv_downloadurl "http://sourceserver.info/xyz/abc"
relativer Pfad der ersten angeforderten Datei (komprimierte Version) maps/gg_aim_shotty.bsp.bz2
relativer Pfad der zweiten angeforderten Datei, wenn der Download der komprimierten Datei erfolglos war (nicht komprimierte Version) maps/gg_aim_shotty.bsp
Die vom Gameserver automatisch generierte URL zur benötigten Datei (komprimierte Version) http://sourceserver.info/xyz/abc/maps/gg_aim_shotty.bsp.bz2
Die vom Gameserver automatisch generierte URL zur benötigten Datei, wenn der Download der komprimierten Datei erfolglos war http://sourceserver.info/xyz/abc/maps/gg_aim_shotty.bsp

Befindet sich weder die komprimierte noch die unkomprimierte Datei auf dem Webspace, kann der Client die Datei nicht herunterladen. Die Datei wird auch nicht vom Gameserver heruntergeladen.

Einfach ausgedrückt, muss man nichts anderes machen, als das Verzeichnis der Modifikation vom Game-Server auf den Webserver zu kopieren. Nicht benötigte Dateien und Verzeichnisse4) können ausgelassen werden. Verzeichnisse von Plugins und die cfg-Verzeichnisse sollten tunlichst ausgelassen werden, weil sonst z.B. jemand mit Kenntnis der sv_downloadurl die server.cfg oder sonstige wichtige Dateien auslesen könnte.

Der Webserver sollte also nur eine Spiegelung des Game-Servers sein, wie in unserem fiktiven Beispiel auf http://sourceserver.info/xyz/abc

Viele sind immer der Meinung, dass sich die Dateien im Verzeichnis cstrike auf dem Webserver befinden müssen. Anstatt des Unterverzeichnisses cstrike oder das Verzeichnis aus unserem fiktiven Beispiels xyz/abc könnte man auch ein anderes Verzeichnis wählen. Das steht jedem frei. Stattdessen kann auch einfach das Verzeichnis des Webroots ohne Unterverzeichnisse genommen werden. Nach unserem Beispiel wäre dies dann http://sourceserver.info. Es sollte jedoch darauf geachtet werden, dass die gesamte URL nicht länger als 127 Zeichen ist. Die Zeichenfolge http:// wird auch mitgezählt.

Die Konsolen-Variable sv_downloadurl muss nur auf das Stammverzeichnis zeigen, nicht aber auf jedes beinhaltendes Verzeichns. Folgendes wäre nach unserem fiktiven Beispiel falsch:

sv_downloadurl Bemerkung
http://sourceserver.info/xyz/abc/cstrike cstrike am Ende muss weg
http://sourceserver.info/xyz/abc/cstrike/maps cstrike/maps wäre komplett falsch
http://sourceserver.info/xyz/ABC Falsches Verzeichnis, die Groß- ud Kleinschreibung muss auf Linux-Servern beachtet werden.

Verzeichnis- und Dateirechte

Ein Großteil der Webserver in Deutschland laufen auf einem Apache2 unter Linux. Bei unixoiden Systemen unterscheidet sich die Zugriffsrechte mit denen unter Windows.
Es ist wichtig, dass der Eigentümer den Dateien genügend Zugriffsrechte zuweist, damit der Webserver, welcher fast immer mit unter einem anderen Benutzer läuft, auf die Verzeichnisse und Dateien zugreifen kann.

Erklärung

Quelle: Unix-Dateirechte
Es gibt insgesamt drei Benutzerklassen:

  1. Eigentümer (engl. user oder owner, Eigentümer), ein spezielles Benutzerkonto am Computer
  2. Gruppe (engl. group), eine spezielle Unix-Benutzergruppe
  3. Sonstige (engl. world), jeder andere, der nicht der Eigentümer oder ein Mitglied der Inhabergruppe ist.

Die effektiven Rechte, die ein Benutzer an einer Datei hat, werden in der hier genannten Reihenfolge vergeben. So hat beispielsweise der Besitzer einer Datei all die Rechte, die ihm in dieser Position gegeben sind, ungeachtet der Rechte, die er als Gruppenmitglied hätte.

Der Eigentümer hat als einziger die Möglichkeit, die Dateirechte seiner Datei zu ändern oder den Dateiinhaber bzw. die -gruppe zu ändern Diesen drei Benutzerklassen können die Rechte zugewiesen werden.
Grundlegende Rechte:

  • Lesen: Der Benutzer darf aus der Datei lesen oder, im Falle eines Verzeichnisses, seinen Inhalt auslesen, allerdings keine Dateirechte dieser Dateien erfahren. Dieses Recht wird oft durch den Buchstaben „r“ für englisch read („lesen“) dargestellt und daher auch R-Bit genannt.
  • Schreiben: Der Benutzer darf in die Datei schreiben bzw. Dateien und Unterverzeichnisse in dem Verzeichnis erstellen, bearbeiten, umbenennen, löschen und deren Dateirechte verändern. Dieses Recht wird oft durch den Buchstaben „w“ für englisch write („schreiben“) dargestellt und daher auch W-Bit genannt.
  • Ausführen: Der Benutzer darf die Datei als Programm ausführen bzw. in das Verzeichnis wechseln und dort Dateien oder Unterverzeichnise erreichen. Ohne das Lesen-Recht darf der Verzeichnisinhalt jedoch nicht ausgelesen werden. Dieses Recht wird oft durch den Buchstaben „x“ für englisch execute („ausführen“) dargestellt und daher auch X-Bit genannt.

Im Gegensatz zu Access Control Lists werden Rechte nicht vererbt. Neu erstellte Dateien in einem Verzeichnis haben demnach nicht notwendigermaßen die gleichen Rechte wie dieses Verzeichnis.
Bei allen FTP-Clienten kann für diese Zugriffsrechte ein HEX-Wert angegeben werden, welcher sich aus drei Stellen zusammensetzt. Dabei werden die Attribute in der Reihenfolge für Eigentümer, Gruppe und Sonstige gesetzt. Anhand der Addition der einzelnen Attribute wird für die Benutzerklassen festgelegt, welche Zugriffsrechte sie besitzen.
Diese setzen sich folgendermaßen zusammen:

1 lesen
2 schreiben
4 ausführen

Durch Addition der einzelnen Rechte, lassen sich beliebige Kombinationen festlegen.

Praxis

FTP-Benutzer und Benutzer des Webservers sind immer unterschiedlich. Oft befinden sich diese beiden Benutzer auch nicht in den gleichen Gruppen. Verzeichnissen und Dateien müssen ausreichend Attribute zugewiesen werden, da ansonsten der Zugriff vom Webserver auf die Verzeichnisse bzw. Dateien nicht erlaubt wird.

  • FTP-Benutzer und Webserver befinden sich nicht in den gleichen Gruppe. Verzeichnissen müssen in diesem Fall die Attribute 7555) zugewiesen werden. Dateien müssen die Attribute 6446) zugewiesen werden.
  • FTP-Benutzer und Webserver befinden sich in den gleichen Gruppe. Verzeichnissen müssen in diesem Fall die Attribute 7507) zugewiesen werden. Dateien müssen die Attribute 6408) zugewiesen werden.

Bei diesen beiden Beispielen handelt es sich um die minimalen Rechte, welche vergeben werden müssen. Höhere Rechte beeinträchtigen den Zugriff nicht, sind aber unnötig. Durch ausprobieren der beiden Möglichkeiten kann man testen, ob FTP-Benutzer und Webserver sich in der gleichen Gruppe befinden. Es kann aber auch ggf. beim Hoster einfach nachgefragt werden.

Schreibweise

Da der größte Teil der Webserver in Deutschland auf einem Linux-Server laufen, wird hier zwischen Groß- und Kleinschreibung unterschieden. Es ist darauf zu achten, dass die Schreibweise korrekt ist. Windows unterscheidet Pfade nicht mit Groß- und Kleinschreibung. Das ist der häufigste Fehler, der gemacht wird.

Ressourcen-Datei

Eine Vielzahl von Maps bringen benötigen auch noch andere Dateien. Das sind eigene Models, Sounds und Texturen. Diese Dateien werden nur heruntergeladen, wenn diese auch in der .res-Datei definiert sind. Fehlt die Ressourcen-Datei, werden die zusätzlichen Dateien nicht heruntergeladen. Ausgeschlossen sind die Navigationsdateien für Bots und Geiseln. Diese werden immer heruntergeladen, wenn sie existieren.

Kompression

Einzelne Dateien können nach Wunsch auch im bzip2 Format komprimiert werden. Es können nicht mehrere Dateien in einem Archiv zusammengefasst werden. Mit Bzip2 können auch nur einzelne Dateien komprimiert werden. Bei einer komrpimierten Datei wird immer das Suffix .bz2 am Dateinamen angehängt. Aus de_testmap.bsp wird dann de_testmap.bsp.bz2.

Tools

Scripts für die Kompression

Um die Arbeit zum komprimieren der Dateien zu automatisieren, kann man einfache Befehle bzw. Scripte unter Linux oder Batchdateien unter Windows nutzen.

Linux

Unter Linux kann man mit einfachen Trick entweder alle oder nur bestimmte Dateitypen mit bzip2 inklusive Unterverzeichnisse komprimieren.

Alle Dateien komprimieren und Originaldateien erhalten:

find /pfad/ -type f -exec bzip2 -9k  '{}' \;

Dateien mit der Endung bsp, mp3 und wav komprimieren und Originaldateien erhalten:

find /pfad/ -type f -name *.bsp -exec bzip2 -9k  '{}' \;
find /pfad/ -type f -name *.mp3 -exec bzip2 -9k  '{}' \;
find /pfad/ -type f -name *.wav -exec bzip2 -9k  '{}' \;

Lässt man bei bzip2 den Parameter k weg, so werden die Originaldateien nach erfolgreicher Kompression gelöscht.

Es gibt noch das Tool pbzip2, welches mehrere CPU-Kerne zur Komprimierung der Dateien verwendet. Der Client kann diese Dateien aber leider nicht vernünftig entpacken. Es ist deswegen von pbzip2 abzuraten.

Windows

Unter Windows muss das Programm bzip2 installiert werden. Es kann über gnuwin32.sourceforge.net bezogen werden. Dateien können dann in Verzeichnissen komprimiert werden.

xcopy /E /Y /I copy c:\gameserver\srcds\cstrike\maps c:\webserver\httpdocs\xyz
bzip2 -9k c:\webserver\httpdocs\xyz

Bei diesem Beispiel werden alle Maps nach c:\webserver\httpdocs\xyz kopiert. Nach dem Kopieren werden die Dateiern komprimiert. Die alten Dateien bleiben erhalten. Bei erneuter Ausführung werden alle unkomprimierten Dateien überschrieben. Neu hinzugefügte Dateien werden auch kopiert. Durch Ausführen von bzip2 mit der Option -k werden die alten Dateien beibehalten. Bereits komprimierte Dateien werden nicht erneut komprimiert, was Zeit spart. Leider durchläuft bzip2 nicht automatisch alle Unterverzeichnisse.

Traffichijacking unterbinden

Viele Admins haben Angst davor, dass ihr Fastdownload auch für andere Server durch Dritte ausgenutzt wird und dadurch Traffic erzeugt wird, der durch den Mieter des Webspace ggf. bezahlt werden muss. Bei allen Angeboten gibt es freie Kontingente an Traffic, welche kostenfrei sind. Da auf den meisten Webservern der Apache Webserver verwendet wird, kann durch eine .htaccess-Datei das herunterladen von Dateien auf eine IP im Referer beschränkt werden. Bei dem Fastdownload wird vom Clienten immer der Referer mit der aktuellen IP des Gameservers über den HTTP-Header an den Webserver übergeben.

Referer

Bei diesem Beispiel könnte ein Client nur Dateien vom Webserver herunterladen, wenn er sich zum Server mit der IP 192.168.0.1 verbindet. Wichtig ist dabei, dass Punkte mit dem Zeichen \ geschüzt werden, da sie ansonsten falsch verarbeitet würden.

SetEnvIfNoCase Referer hl2://192\.168\.0\.1 allow_download
Order Deny,Allow
Allow from env=allow_download
Deny from all

Verzeichnis-Index

Manche Webserver sind standardmäßig so eingerichtet, dass bei einer fehlenden index-Datei9) das Verzeichnis mit dem Inhalt aufgelistet wird. So können andere Leute durch Eingabe der URL sehen, was sich auf dem Webserver befindet und sogar in den Unterverzeichnissen nachsehen. Ein fremder Gameserver-Admin kann dan z.B. sehen, was für Maps sich auf dem Webserver befinden und könnten so ihren eigenen Gameserver dementsprechend anpassen.
Durch Hinzufügen folgender Zeile in der Datei .htaccess, kann das automatisch vom Webserver generierte Index abgeschaltet werden:

options -indexes

Software für Webserver

Es gibt viel kostenfreie Software für Windows. Unter Linux kann mit der Paketverwaltung der jeweiligen Distribution bequem Apache1, Apache2, LightHTTPd oder andere Webserver eingerichtet werden. Es ist gerade auf Lan-Partys von Vorteil einen Webserver für den Fastdownload bereitzustellen. So werden sehr große Maps innerhalb Sekunden heruntergeladen, während Gameserver ohne Fastdownload recht lange zum Übertragen der Maps benötigen. Der Webserver muss sich nicht auf dem gleichen Host befinden, auf dem der Gameserver läuft.

Windows

Paket/Programm Beschreibung
Light HTTPd Ein kleiner aber schneller Webserver
Apache-Webserver Der Apache1- und Apache2-Webserver wird dort angeboten.
XAMPP Fertiges Paket eines Apache2-Webservers mit Zusätzen für Linux und Windows

Fehlerquellen

  • Groß- und Kleinschreibung der Pfade (Verzeichnisse und Dateinamen).
  • Wird eine Map durch einen Admin gewechselt, dafür aber die falsche Groß- und Kleinschreibung verwendet, wechselt der Server zwar die Map, fordert aber auch die Map in der falschen Schreibweise an. Bei Webservern, welche unter Windows laufen, ist das nicht weiter schlimm. Da aber zu 90% der deutschen Webserver unter Linux laufen und diese zwischen der Schreibweise unterscheiden, kommt es zu einem Fehler. Die Datei kann nicht heruntergeladen werden. Dies trifft auch auf falsche Einträge der maplist.txt und mypcycle.txt zu.
  • Verwendung von kostenlosen Webspace. Man kann meist davon ausgehen, dass das der Fastdownload generell durch den Anbieter unterbunden wird. Wenn man nichts dazu findet, kann man den Provider vorher Fragen, ob die Nutzung des Fastdownloads gestattet ist.
  • Ein Slash “/“ am Ende der URL von sv_downloadurl. Der Server hängt am Ende automatisch ein slash mit an. Es gibt vereinzelt Anbieter mit Apache1-Servern. Diese Server interpretieren doppelte und mehrfache slashes als Verzeichnis. Der Download der Dateien funktioniert dann nicht. Im Gegensatz dazu ignorieren Apache2-Server doppelte und mehrfache slashes.
2) manche denken, dass auch FTP funktioniert
3) sourceserver.info
4) alle original Valve-Dateien
5) Eigentümer: lesen, schreiben, ausführen
Gruppe: lesen und ausführen
Sonstige: lesen und ausführen
6) Eigentümer: lesen und schreiben
Gruppe: lesen
Sonstige: lesen
7) Eigentümer: lesen, schreiben, ausführen
Gruppe: lesen und ausführen
Sonstige: keine Rechte
8) Eigentümer: lesen und schreiben
Gruppe: lesen
Sonstige: keine Rechte
9) index.htm, index.html, index.php
fastdownload.txt · Zuletzt geändert: 2012/04/02 21:09 von DeaD_EyE