PBeM-Spiele
Aktuelle Zeit: 28.07.2017 01:44

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 13.01.2017 18:57 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 1976
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
p0p0c4t3p3t3l hat geschrieben:
So Uralt ist er ja nicht :D
Optiplex 780 SFF Core2Duo 3GHz 4GbRAM HD160Gb


Hah, das it doch ein prima Gerät, der würde bei mir nicht im Keller stehen (besonders mit dem schicken Gehäuse). Ich entwickle Eressea auf einem Latitude E6220, der ist besser, aber auch nur eine Notlösung, weil mein DEsktop kaputt ist, der in etwa die Specs von deinem Gerät hat.

Dann mal los. Wie weit sind wir denn, und was kann ich helfen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 13.01.2017 19:17 
Offline
Frischling
Frischling

Registriert: 05.01.2017 14:40
Beiträge: 16
Wohnort: Madrid, Spain
Bin derzeit noch auf der Arbeit.
Größte Zweifel hab ich bei den Themen

Zitat:
TODO: fetchmailrc and procmailrc examples TODO: echeck, optional?
TODO: how to compress reports and send email (steal from s/preview).


Ich denke einfache Beispiele würden schon reichen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 13.01.2017 20:49 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 1976
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
p0p0c4t3p3t3l hat geschrieben:
TODO: fetchmailrc and procmailrc examples
TODO: echeck, optional?

Ich denke einfache Beispiele würden schon reichen.


Ich erkläre mal, wie ich es mache, und erzähle dann, was daran alles suboptimal ist.

Status Quo
Meine .procmailrc enthält Regeln, die bei eingegangenem Befehl ein Python-Skript startet, das die Mail auseinander zwirbelt, und als Textdatei ins Dateisystem legt. Die Regeln sehen so aus:

Code:
:0
* ^Subject:.*ERE.* BEF.*
| $HOME/bin/orders-accept 2 de

:0
* ^Subject:.*ERE.* ORD.*
| $HOME/bin/orders-accept 2 en


Das sind zwei, weil ich mir für ECheck merken muss, in welcher Sprache die Befehle kamen (das kriegt das Skript als Parameter mit gegeben). Wenn man nur in einer Sprache spielt, oder keine ECheck-Antworten schickt, kann man sich das sparen. Ohne ECheck wird eh alles einfacher.

Fetchmail läuft als Dämon (An der Kommandozeile mit -d 300 für alle 5 Minuten Mail holen), weil mein Rechner permanent am Internet ist, wenn man auf Dial-Up ist (wie in den frühen Jahren des Spieles) muss man das von einem Skript aus triggern, glaube ich. Das habe ich aber nie miterlebt.

procmail selbst wird von fetchmail ausgelöst. Meine .fetchmailrc sieht so aus:

Code:
poll mail.kn-bremen.de with proto POP3
    user 'eressea' there with password '********' is eressea here
    options nokeep
    sslfingerprint 'B0:BD:0C:FF:90:88:28:3E:35:25:C2:85:0A:FD:F6:86'
    mda "/usr/bin/procmail -f %F -d %T";


Das holt also die Mail vom user eressea mit POP3 bei mail.kn-bremen.de ab, mit dem Passwort, dass ich hier nicht sage, merkt sich die löscht die Mail anschliessend vom Server (nokeep), und liefert die Mails dann eine nach der anderen an den MDA aus (per stdin an in das procmail-Kommando), macht also einen procmail-Prozess per Mail. Der Prozess forkt dann das o.g. orders-accept Skript. Früher hat das Skript auch ECheck sofort mit gemacht, damit habe ich mir den Server mal gekillt, weil eine rieisge Menge Mails am Samstag Abend kamen, jede hat ein Trippel aus procmail, python und ECheck Prozessen gestartet, und ECheck hatte eine Endlos-Schleife, die ein Spieler scheinbar gefunden hatte (von dem die ganzen Mails waren). Bravo. So also besser nicht implementieren.

Das SSL Zertifikat des Servers ist self-signed und machte mal Probleme, deshalb ist der Fingerprint dort mit angegeben, aber normal braucht man den nicht, glaube ich.

Fehlt also nur das sagenumwobene Skript, dass die Mails liest. Das kann MIME Attachments lesen, und muss die Befehle in UTF-8 umwandeln. Dann legt es sie (bei mir) in ~/eressea/game-2/orders.dir ab, ein Verzeichnis, dass jede Woche vor der Auswertung rotiert wird (umbenannt in orders.dir.turn). Jede Befehlsabgabe ist eine einzelne Datei, deren Datum im Filesystem nach dem Date: Header der Email gesetzt wird. Die Auswertung nimmt diese Dateien in chronologischer Reihenfolge (ls -rt), und schmeißt sie alle hintereinander mit cat in eine gemeinsame Datei orders.turn, die den Input für den Server darstellt.

Hier ist mein orders-accept Skript:
https://github.com/eressea/server/blob/ ... ers-accept

Das Skript schreibt außerdem eine Datei orders.queue, in der Metadaten stehen: Dateiname, Absender, Sprache, die für einen ECheck-Prozess verwendet werden. Das ist ein Cronjob, der auch alle 5 Minuten läuft, und diese Datei anschaut. Wenn was drin steht, wird Echeck über die Datei gemacht, und eine Mail mit dem Ergebnis an die Absender-Adresse geschickt. Außerdem testet dieses Skript auch noch das Passwort, was nicht zu einer Ablehnung der Befehle führt (das macht der Server chon selber), aber zu einer Warnung an den Spieler.

Das Skript ist diese hier:
https://github.com/eressea/server/blob/ ... rs-process

Kritik
Das ganze ist ziemliches Hack. Metadaten liegen in Dateien, die teilweise mit Lockfiles gegen gleichzeitige Benutzung gesperrt sind, teilweise nicht (aua). Die orders.queue Datei ist ganz schlimm. Der ECheck-Cron regt sich bei jeder Auswertung einmal auf, weil die Dateien, die in orders.queue stehen, nicht mehr im orders.dir Verzeichnis liegen, weil das seitdem vom Auswertungs-Prozess rotiert wurde. Die Befehls-Dateien müssen eindeutige Namen haben, was ganz sicher eine Race-Condition hat. Ich hänge einfach eine Zahl an die Absende-Adresse, gucke ob es die Datei mit dem Namen schon gibt, und erhöhe die Zahl um 1, bis dem nicht so ist, dann speichere ich. Wenn das zwei Prozesse gleichzeitig machen, geht das bestimmt schief, aber es scheint eh niemand auf die "Befehle erhalten" Emails zu schauen... Das ganze hat nur unzulängliches logging, wenn also mal etwas schief geht, ist es schwer nachvollziehbar, was los war.

Ich würde da heute eine SQLite Datenbank für den ganzen Kram benutzen, wenn ich es neu machen würde. Für die Interaktion mit ECheck, die Metadaten (Absender, Dateiname, Datum), und den Passwort-Check mindestens. Andereseits soll man ja in "Running System" niemals anrühren, deshalb ist das alles nur auf meiner Featurewunsch-Liste, zu der ich wohl eh nie kommen werde.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 13.01.2017 21:04 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 1976
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
Zitat:
TODO: how to compress reports and send email (steal from s/preview).


Befehle komprimieren und versenden ist ein ganz alter Prozess, und in dem Skript sind eine riesige Menge Altlasten. Es gab z.B. mal eine Phase, da war der Rechner, der die Mail verschickt hat, nicht der selbe wie der, auf dem die AW lief (weil nur ein Rechner im Haus genug RAM hatte, um das zu machen), und da war ein kompliziertes rsync mit im Spiel. Davon ist sicher noch etwas zu finden, wenn man nur sucht.

Generell ist das Problem, dass der Server unkomprimierte Textdateien schreibt, im Verzeichnis reports/, mit Namen turn-faction.{nr,cr,txt}. zip oder gzip wird erst in einem Folgeschritt gemacht, und bei E2-E4 von einem Skript, dass alle Parteien auf einen Rutsch komprimiert, und dann erst Mails schickt. Die Metadaten dafür stehen in reports/reports.txt und sehen so aus:

faction=ufo:email=enno.rehling@gmail.com:lang=de:compression=zip:reports=cr,txt,nr

Das im TODO erwähnte bash-Skript s/preview ist neueren Datums, und macht die Testauswertung am Sonntag morgen. Die erhalten aber nicht einmal eine Handvoll Spieler, alle Reporte zu komprimieren wäre da totale Zeitvergeudung, deshalb kann es zippen plus versenden für eine einzelne Partei. Die Funktion, die das macht, ist in https://github.com/eressea/server/blob/ ... review#L89, ignoriert die kompressions-Methode, und macht einfach immer .zip Dateien. Das würde ich für ein neues Spiel überhaupt nur noch zulassen, der Aufwand, mehr als eine Kompression anzubieten, ist zu hoch. Der Server hat einen Befehl dafür, die reports.txt muss die Daten enthalten, das Skript muss das parsen, etc., und der Gewinn von gzip oder bz2 waren vielleicht früher mal ein paar Pfennige, als das noch per Dial-Up über Arcor raus ging, heute schert es niemanden.

Was haben wir noch?

VORAUSBEFEHLE, PASSWORT, REPORT sind drei weitere Befehle, die meine .procmailrc versteht, und hinter denen Skripte stecken, aber die sind alle entweder kaputt, oder doof implementiert. REPORT ist das einzige, was viel benutzt wird, und dem Spielleiter genug Arbeit abnimmt, als dass sich die Implementation gelohnt hat, aber auch dazu führt, dass große Allianzen untereinander Passworte teilen, um Gesamt-CRs anzulegen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 13.01.2017 23:17 
Offline
Frischling
Frischling

Registriert: 05.01.2017 14:40
Beiträge: 16
Wohnort: Madrid, Spain
Danke, dass Du Dir die Zeit nimmst und die Mühe machst, alles zu erklären.
Ich experimentiere damit jetzt ein wenig dieses Wochenende.

Noch ein recht banale Feststellung :oops: :
Ich will eigentlich auch mitspielen, hab aber auch einen unlauteren Vorteil, dass ich theoretisch die Karte schon kenne.
Wie bist Du damit umgegangen/gehst damit um?

Und in dem Zusammenhang noch eine Frage:
Für den Fall, wir sind 8 Spieler auf 2 Inseln verteilt. Erweitert sich die Welt automatisch, wenn jemand "über den Rand" segelt? Werden dann neue Inseln generiert?

Danke und schönes Wochenende!!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 14.01.2017 04:31 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 1976
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
p0p0c4t3p3t3l hat geschrieben:
Danke, dass Du Dir die Zeit nimmst und die Mühe machst, alles zu erklären.
Ich experimentiere damit jetzt ein wenig dieses Wochenende.

Noch ein recht banale Feststellung :oops: :
Ich will eigentlich auch mitspielen, hab aber auch einen unlauteren Vorteil, dass ich theoretisch die Karte schon kenne.
Wie bist Du damit umgegangen/gehst damit um?


Das musst Du Katja und Christian fragen. Ich bin erst seit Runde 50 oder so dabei. Ich glaube, die Karte ist nicht so geheim und wichtig, und wenn man nicht gezielt nach den Laen-Bergen in der Umgebung sucht, oder den Nachbarn in ihren Report schaut, kann man das halbwegs fair halten. Wenn man mit den richtigen Leuten spielt, werfen die Dir auch keinen Betrug vor, sondern vertrauen, dass Du Deine Partei von der Spielleitung trennen kannst.

Meine aktuelle Partei macht explizit keine Bündnisse, und ist weitestgehend friedlich.

Zitat:
Und in dem Zusammenhang noch eine Frage:
Für den Fall, wir sind 8 Spieler auf 2 Inseln verteilt. Erweitert sich die Welt automatisch, wenn jemand "über den Rand" segelt? Werden dann neue Inseln generiert?


Früher war das so, und daraus sind die "Chaos" Regionen im Norden der 1. Welt entstanden. Heute kann man an den Rand segeln, und dort ist dann einfach nichts. Ich weiss aus dem Kopf nicht, ob das eine Option ist, die man an- und ausschalten kann, fürchte aber eher, dass es den Code dazu nicht mehr gibt. Was wäre Dir denn am liebsten? In E3 und E4 ist die Welt ja z.B. nicht erweiterbar, sondern schließt Torus-förmig wieder an sich selbst an, das halte ich für so eine kleine Welt auch für das Beste. Mit 8 Parteien habe ich noch nie gespielt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 14.01.2017 13:20 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 1976
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
Enno hat geschrieben:
Früher war das so, und daraus sind die "Chaos" Regionen im Norden der 1. Welt entstanden. Heute kann man an den Rand segeln, und dort ist dann einfach nichts. Ich weiss aus dem Kopf nicht, ob das eine Option ist, die man an- und ausschalten kann, fürchte aber eher, dass es den Code dazu nicht mehr gibt.


Wie der Zufall es will, kam dazu gerade vor ein paar Tagen ein Bugreport von einem Spieler, der ans Ende der Welt gesegelt ist, und dort eine Feuerwand erwartet: https://bugs.eressea.de/view.php?id=2271

Früher hat der Code das automatisch gemacht. Wenn eine Region nicht 6 Nachbarn hatte, aber ein Mindestalter erreicht, dann wurden die "leeren" Regionen mit Feuerwand-Hexen gefüllt. Diesen Code scheint es also in der Tat nicht mehr zu geben, dafür schreibe ich mal im Rahmen dieses Bugreports ein neues Lua-Modul. Ausserdem habe ich einen Plan für das Aussetzen neuer Spieler in E2, der ähnliche Arbeit erfordert, wenn ich dazu komme, sollte das auch ein gutes Beispiel werden.

Insgesamt halte ich aber die Torus-Welt noch immer für die beste Lösung, wenn man kein "endloses" Spiel plant.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 14.01.2017 14:06 
Offline
Frischling
Frischling

Registriert: 05.01.2017 14:40
Beiträge: 16
Wohnort: Madrid, Spain
Gibt es den eine Möglichkeit, die Parteien per Hand zu seeden?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 14.01.2017 14:18 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 1976
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
p0p0c4t3p3t3l hat geschrieben:
Gibt es den eine Möglichkeit, die Parteien per Hand zu seeden?


Aus dem GM-Editor Interface, so dass man eine Region aussucht, und dann Email und Rasse wählt? Nein, das gibt es nicht. Wäre sicher für Anfänger praktisch, aber ich habe das für meine Spiele immer entweder einem Programm überlassen, oder von Hand gemacht. Also, Welt erzeugen, im GM-Editor ansehen, Koordinaten von Startregionen raussuchen, und dann ein single-use Skript machen, dass die Region mit get_region(x,y) findet, und mit faction.create() dort eine Partei aussetzt.

Vielleicht sollte ich das wohl mal machen, so ein Curses-Interface zur Erzeugung von Parteien, Einheiten und anderem. Aber so lange ich es selber nicht brauche, ist das recht weit hinten in meiner Liste.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 14.01.2017 14:24 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 1976
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
Falls Du mal bei etwas kompliziertem Schritt-für-Schritt Hilfe willst, haben wir übrigens auch einen Slack-Chat für Eressea. Der wird bisher wenig genutzt, wäre aber für neue Spielleiter vielleicht genau das richtige. PN mir mit Name und Email, dann lade ich Dich ein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 16.01.2017 15:41 
Offline
Frischling
Frischling

Registriert: 05.01.2017 14:40
Beiträge: 16
Wohnort: Madrid, Spain
PN geschickt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 19.01.2017 15:39 
Offline
Frischling
Frischling

Registriert: 05.01.2017 14:40
Beiträge: 16
Wohnort: Madrid, Spain
Eine schnelle Frage zwischen durch.
Nach dem die Anfangsreport erstellt wurden, kommen die ersten Befelhle in Ordner "order.0".
Kommen die dann alle in eine Datei? Wie heißt die?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 19.01.2017 18:04 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 1976
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
p0p0c4t3p3t3l hat geschrieben:
Eine schnelle Frage zwischen durch.
Nach dem die Anfangsreport erstellt wurden, kommen die ersten Befelhle in Ordner "order.0".
Kommen die dann alle in eine Datei? Wie heißt die?


Unsicher, ob ich die Frage richtig verstehe, deshalb erkläre ich mal das ganze Drumherum:

Es gibt eine Textdatei namens turn im Spielverzeichnis, da steht die aktuelle Runde drin. Die wird vom Server geschrieben, und von allen Skripten verwendet. Vor der Auswertung wird der Ordner orders.dir in orders.dir.$turn umbenannt, und dann werden alle Befehls-Emails darin in eine gemeinsame Datei orders.$turn kombiniert. Diese Datei liest der Server dann ein (er kennt die aktuelle Runde, weil er die mit -t als Kommandozeilen-Argument bekommt).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 19.01.2017 18:51 
Offline
Frischling
Frischling

Registriert: 05.01.2017 14:40
Beiträge: 16
Wohnort: Madrid, Spain
Genau das wollte ich wissen.
Danke.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Eressea Server aufsetzen
BeitragVerfasst: 19.01.2017 20:11 
Offline
Frischling
Frischling

Registriert: 05.01.2017 14:40
Beiträge: 16
Wohnort: Madrid, Spain
Ok, ich wollte mal eine Proberunde laufen lassen mit einer Partei.
Ich habe eine Partei geseedet, den T0-Report erstellt und für die Partei Befehle geeschrieben.
Diese sind im Ordner orders.dir.0 in einer Datei namens orders.0.

Dann wollte ich die Auswertung mit ./eressea -t 0 run-turn.lua starten..

Bekomme dann folgende Fehlermeldung

Zitat:
charles@p0p0debian:~/eressea/game-1$ ./eressea -t 0 run-turn.lua
ERROR: Lua call failed.
run-turn.lua:209: module 'eressea.v1' not found:
no field package.preload['eressea.v1']
no file '/usr/local/share/lua/5.2/eressea/v1.lua'
no file '/usr/local/share/lua/5.2/eressea/v1/init.lua'
no file '/usr/local/lib/lua/5.2/eressea/v1.lua'
no file '/usr/local/lib/lua/5.2/eressea/v1/init.lua'
no file '/usr/share/lua/5.2/eressea/v1.lua'
no file '/usr/share/lua/5.2/eressea/v1/init.lua'
no file './eressea/v1.lua'
no file '/home/charles/eressea/server/scripts/eressea/v1.lua'
no file '/home/charles/eressea/server/scripts/eressea/v1/init.lua'
no file '/home/charles/eressea/server/scripts/eressea/v1.lua'
no file '/home/charles/eressea/server/scripts/eressea/v1/init.lua'
no file '/home/charles/eressea/server/lunit/eressea/v1.lua'
no file '/home/charles/eressea/server/lunit/eressea/v1/init.lua'
no file '/usr/local/lib/lua/5.2/eressea/v1.so'
no file '/usr/lib/x86_64-linux-gnu/lua/5.2/eressea/v1.so'
no file '/usr/lib/lua/5.2/eressea/v1.so'
no file '/usr/local/lib/lua/5.2/loadall.so'
no file './eressea/v1.so'
no file '/usr/local/lib/lua/5.2/eressea.so'
no file '/usr/lib/x86_64-linux-gnu/lua/5.2/eressea.so'
no file '/usr/lib/lua/5.2/eressea.so'
no file '/usr/local/lib/lua/5.2/loadall.so'
no file './eressea.so'
stack traceback:
[C]: in function 'require'
run-turn.lua:209: in main chunk
[C]: in function 'dofile'
eressea: /home/charles/eressea/git/src/bindings.c:1188: eressea_run: Assertion `!"Lua syntax error? check log."' failed.
Aborted



Ich denke mal ich muss noch mehr Dateien aus E2 kopieren und in einem eigenen V1 Ordner speichern.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
Webhosting by sunrise design ohg