heute möchte ich euch etwas zeigen. Es betrifft diesmal den Serveraufbau. Ich erkläre es so, dass es Anfänger verstehen können. Viele knallen Befehle rein, ohne zu wissen, was das überhaupt bringt. "Hauptsache es fixt den Fehler". Dem möchte ich ein Ende setzen und ein besseres Verständnis zum Server bringen.
Zu beginn erst einmal erkläre ich euch eine grundlegende Wichtigkeit, was die Server betrifft. Es geht hier um den Aufbau, welcher enorm wichtig ist, wenn wir irgendetwas daran tunen wollen. Wie ist der Server überhaupt aufgebaut? Zu diesen Zwecken möchte ich euch einen optimalen Aufbau vorzeigen.
Bei vielen Rootservern ist es so:
home -> game und dann beginnt erstmal das große Wirrwarr. Die einen haben noch einen CH1 Ordner o. ä., andere beginnen mit game_1, andere mit game1_1 usw.. Auf jeden Fall müssen wir uns aber im Klaren sein, wie unser Server aufgebaut ist. Haben wir sowas wie game1_1 und das in tausenden Ordnern, enden wir in einer großen Unübersichtlichkeit.
Deswegen wäre es ratsam folgendes zutun: In unserem Basisordner (also /home/game/) erstellen wir am besten 2 Ordner. CH1 und CH2. Dort hin kommen dann die einzelnen Cores: game1 und game2. Mehr brauchen wir für die vereinzelten Channels nicht.
Nun schauen wir uns an. Was passiert, wenn wir die Gamecore nun in z. B. dem CH1 Ordner in game1 reinpacken und dort einfach starten? Häufig wird euch erstmal das begegnen:
Code:
Permission denied
Nun wird uns aber sofort ein Fehler entgegen kommen. Warum? Weil er gewisse Ordner nicht finden kann: locale und data fehlen ihm. Diese braucht er, um wichtige Informationen zu laden. Wir könnten die Ordner nun einfach reinkopieren, aber bei mehreren Cores wird das lästig. Darum bietet uns FreeBSD die sogenannten Symlinks. Diese machen nichts weiter wie "wenn du den Ordner aufrufst, gelangst du plötzlich zu dem". Es ist einfach eine Weiterleitung, welche uns so weiter hilft, dass wir nur 1x den Ordner locale und data hochladen müssen (und es ist dabei wirklich VÖLLIG egal, wo!) und dann einfach eine symlink dazu erstellen können.
Ihr werdet aber mehr darüber verstehen, wenn die Erklärung fertig ist^^
Wir erstellen Symlinks so: Zuerst mittels cd in das Verzeichnis game1 wechseln. Also cd /home/game/CH1/game1/ und danach können wir damit einen symlink erstellen:
Code:
ln -s /pfad/zu/dem/ordner
Dasselbe können wir auch mit der game-Datei machen. Wir könnten es mit praktisch allem machen: syslog, syserr, mark.tga, etc... Jedoch ist es nicht immer sinnvoll.
So, nun stellt sich für uns die Frage: Was macht dann eigentlich den Core einzigartig? Die Antwort: Die CONFIG! Wenn Ihr wirklich NUR die CONFIG habt, könnt Ihr mit symlinks auf die Ordner locale und data führen und mit einem symlink zur gamecore führen. Fertig, dann habt ihr einen Core komplett aufgebaut! Mehr braucht ihr wirklich nicht. Das ist schon alles. Und so könnt Ihr Core für Core aufbauen. Denkt daran, das seine normale Core bis zu 35 Maps fassen sollte und dieses Limit nicht überschreiten sollte. Wie das geht, zeige ich euch auch schnell.
Im Ordner locale/germany/maps findet Ihr die Datei index. In ihr sind alle maps aufgelistet und einer bestimmten Zahl aufgeführt. Die Zahl steht immer links und rechts davon der Ordner. Somit findet Ihr heraus, welche Map welchen index hat. Diese könnt Ihr dann getrost so einsortieren, wie Ihr sie in der gamecore haben wollt. Ihr könnt z. B. die alten Affendungeons einfach aus der Core entfernen. Je weniger maps, desto besser. Je weniger Kerne laufen müssen, desto besser!
Was ist aber nun besonderes an den CONFIGs?
Besonders an diesen sind folgende Einstellungen:
Code:
CHANNEL: PORT: P2P_PORT:
Wie man sieht, sind das die einzigen Unterschiede zwischen den CONFIGs. Es gibt keine eindeutige Identifikationsnummer oder sonst irgendetwas - man kann so viele Kerne hinzufügen, wie man will und so viele abrücken, wie man will. Man muss nur mindestens 1 Core für den Worldserver, also die ganzen Maps usw. und einen Authserver. Um einen Core zum Auth-Server zu machen, muss man nichts weiter tun, als folgendes in die CONFIG reinschreiben:
AUTH_SERVER: master
Schon ist der Core als Auth eingestellt und fährt als solchen hoch.
Nun sollte jedem langsam ein Lichtchen brennen. Man kann so viele Cores hinzufügen, wie man will und so viele wegmachen, wie man möchte. Zudem unterscheiden sich die Cores nur an ihrer CONFIG. Bei den Cores kann man symlinks zu bestimmten Ordnern oder Dateien machen. Deshalb:
- Ist es völlig egal, wo die game-Ordner sind!
- Ist es völlig egal, wo locale und data sind, es müssen nur Verlinkungen existieren!
- Ist es völlig egal, wie die game-Ordner angeordnet sind! Der Aufbau kann also variieren, wie man will!
Das ganze zeigt also eine relativ freizügige aber stabile Verkettung und Verankerung der einzelnen Komponenten. Man kann frei wählen, wo sie stehen sollen und wie sie funktionieren sollen, aber im Endeffekt sind Worldserver (alle gamecores außer der, die als auth deklariert wurde), Authserver und der Datenbankchache (ist der db-Ordner) essentiell wichtig. Wo sie stecken und wie die Verlinkungen aussehen, sind aber völlig egal!
Und nun kommen wir auch zu dem wichtigen Teil dieses langen Guides. Ihr könnt selbst entscheiden, wie die Serverfiles angeordnet sind. Ihr könnt sie verstecken, sodass man erstmal nachschauen muss, wo sie sind (z. B. indem ihr die Serverfiles nach /usr/ports packt). Ihr könnt sie aber auch aufteilen, der eine Teil kommt nach /var/db/, der andere nach /usr/ports und der letzte nach /usr/local oder so. Wie immer ihr wollt! Nur die formalen Gegebenheiten müssen passen, sodass der Server starten kann! Was der Großteil der Community auch nie geändert hat, ist der Name der Gamecore! In Wahrheit muss sie nicht Game heißen, sondern kann viele Namen anwenden. So könnt Ihr sie z. B. wie euren Server benennen! Das spart Übersicht und erleichtert euch später die shut.sh zum Schließen des Servers.
Und zu guter letzt natürlich fehlt uns das Wissen über die start.sh und shut.sh. Bisher benutzen viele die alte Methode: Man benutzt eine mitgelieferte start.sh und zum schließen cd'd die shut.sh in jedes Verzeichnis, zieht sich aus der Datei pid die Prozessid und killt diese. Die Methode kann klappen, jedoch ist es viel besser und schneller, wenn man es anders tut.
start.sh könnte so aussehen:
Code:
cd /home/game/db/ && ./db sleep 1 cd /home/game/CH1/game1 && ./game sleep 0 ch /home/game/CH1/game2 && ./game sleep 0 ...
Die shut.sh gestaltet sich noch einfacher:
Code:
killall -9 game && sleep 0 killall -9 db && sleep 1
Wenn Ihr alles verstanden habt (zur Not den Guide 2x lesen, weil es für Anfänger etwas komplexerer ist, hat man aber die Materie verstanden, ist es super einfach), dann könnt Ihr euren Serveraufbau so ändern und optimieren, dass ihr nur die nötigen Maps drauf habt und einen Überblick über den Server haben könnt. Zudem könnt Ihr den Server unter Umständen in > 5 Sekunden komplett neu starten.
Falls noch was offen steht: Für Fragen, Lob und/oder Kritik bin ich gerne hier im Thread da!
Liebe Grüße,
.Alessa






