====== 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 [[:cvar]] (sv_downloadurl) definiert. Seit der HL2-Engine wird auch die [[wpde>bzip2|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-Client((z.B. [[http://www.filezilla.de]])) Für den Fastdownload wird Webspace benötigt. Es wird nur das HTTP-Protokoll unterstützt und kein anderes((manche denken, dass auch FTP funktioniert)). 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. * [[http://fastdl.tk]], [[http://fastdl.eu]] - Hosting von Maps * [[http://protect.brainless.us]] - sv_downloadurl vor Missbrauch schützen * [[http://www.ukgame.com/redirect/]] - kostenloser Fastdownload-Dienst ===== 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 [[:mods|Modifikation]]. Durch die [[:cvar]] ''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 [[:maps|Map]] auf dem Gameserver (Linux) |/home/gameserver/srcds/cstrike/maps/gg_aim_shotty.bsp | |Absoluter Pfad zur [[:maps|Map]] auf dem Gameserver (Windows) |C:\gameserver\srcds\cstrike\maps\gg_aim_shotty.bsp | | **Webserver** || |Pfad des erreichbaren Inhalts im Web((sourceserver.info)) 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 [[:cvar|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 [[:maps|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 Verzeichnisse((alle original Valve-Dateien)) 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 [[:cvar|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: [[wpde>Unix-Dateirechte]]\\ Es gibt insgesamt drei Benutzerklassen: - Eigentümer (engl. user oder owner, Eigentümer), ein spezielles Benutzerkonto am Computer - Gruppe (engl. group), eine spezielle Unix-Benutzergruppe - 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 755((Eigentümer: lesen, schreiben, ausführen\\ Gruppe: lesen und ausführen\\ Sonstige: lesen und ausführen)) zugewiesen werden. Dateien müssen die Attribute 644((Eigentümer: lesen und schreiben \\ Gruppe: lesen\\ Sonstige: lesen)) zugewiesen werden. * FTP-Benutzer und Webserver befinden sich in den gleichen Gruppe. Verzeichnissen müssen in diesem Fall die Attribute 750((Eigentümer: lesen, schreiben, ausführen\\ Gruppe: lesen und ausführen\\ Sonstige: keine Rechte)) zugewiesen werden. Dateien müssen die Attribute 640((Eigentümer: lesen und schreiben \\ Gruppe: lesen\\ Sonstige: keine Rechte)) 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. * Mehr über das Format: [[:dateitypen#resource-file_.res]] ==== 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 === * [[http://www.brainless.us/downloads.aspx?cid=1|SourceRSC (formerly CSRSC)]] komprimiert die Dateien und lädt sie auf dem Webserver per FTP-Zugriff hoch. * [[http://gnuwin32.sourceforge.net/packages/bzip2.htm|Bzip for Windows]] Kompresison Batch. * [[http://mastermo.at.tc/|ListenServerCreator und ModMaker]] kann zum installieren, updaten, warten des Servers verwendet werden. Das Uploaden der Dateien für den Fastdownload ist völlig automatisiert und benötigt nur die FTP-Daten des Webspace. === 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 [[http://gnuwin32.sourceforge.net/packages/bzip2.htm|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-Datei((index.htm, index.html, index.php)) 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 ^ | [[http://lhttpd.sourceforge.net/|Light HTTPd]] | Ein kleiner aber schneller Webserver | | [[http://httpd.apache.org|Apache-Webserver]] | Der Apache1- und Apache2-Webserver wird dort angeboten. | | [[http://www.apachefriends.org/de/xampp.html|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''.