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.
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.
Es gibt hin und wieder Communitys, welche den Fastdownload anbieten oder einen Service dazu anbieten.
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.
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. |
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.
Quelle: Unix-Dateirechte
Es gibt insgesamt drei Benutzerklassen:
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:
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.
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.
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.
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.
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.
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
.
Um die Arbeit zum komprimieren der Dateien zu automatisieren, kann man einfache Befehle bzw. Scripte unter Linux oder Batchdateien unter Windows nutzen.
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.
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.
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.
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
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
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.
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 |
maplist.txt
und mypcycle.txt
zu.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
.