Heimnetz-Arena
Die Heimnetz-Arena ist ein kleiner Wettkampfserver für dich und deine Mitspieler: mit Konten, Einladungen, Bot-Uploads in fünf Sprachen, einer Warteschlange, gemeinsamer Elo und Replays direkt im Browser. Hochgeladene Bots laufen isoliert.

Voraussetzungen
Die Arena läuft nur unter Linux. Mitspieler mit Windows können trotzdem mitmachen: Sie öffnen die Arena im Browser und laden dort ihre Bots hoch.
- Linux mit Bubblewrap (
bwrap) undprlimit - die Kobaltmeer-Python-Umgebung
- für Uploads in C++
g++, für C#, Go und Rust die passenden Compiler (optional überpython3 scripts/setup_language_tools.py, siehe Andere Sprachen)
Lässt sich die Isolation nicht aufbauen, startet die Arena nicht ersatzweise ungeschützt.
Starten und einrichten
Im Kobaltmeer-Ordner:
./start_arena.sh
# Browser: http://127.0.0.1:8770
Beim ersten Start legt die Arena einen privaten Datenordner an
(Standard: ~/.local/share/kobaltmeer/arena) und darin eine Datei setup-code.txt.
Ihren Pfad nennt das Terminal. Trage den Code in die Ersteinrichtung ein und wähle
Benutzernamen und ein Passwort mit mindestens zehn Zeichen. Dieses erste Konto ist
der Administrator. Es gibt keine voreingestellten Passwörter.
Einen anderen Datenordner, ein anderes Profil oder andere Spielwerte wählst du beim Start:
./start_arena.sh --data ~/.local/share/kobaltmeer/classic-arena --profile classic --size 32
Zum Sichern den Server beenden und den Datenordner kopieren.
Mitspieler einladen
./start_arena.sh --lan
Die Arena ist dann im Heimnetz unter http://IP-DEINES-RECHNERS:8770 erreichbar.
Firewall und Router werden nicht verändert, und es wird nichts im Internet freigegeben.
Als Administrator zeigst du mit „Einladungscode anzeigen“ einen Code an, mit dem sich Mitspieler ein eigenes Konto anlegen. Der Code gilt für alle, bis er erneuert wird.
./start_arena.sh --lan --cert server.crt --key server.key.
Die Arena ist für das Heimnetz gedacht, nicht als öffentlicher Internetdienst.
Bots hochladen
- Botname und Sprache wählen.
- Eine einzelne UTF-8-Quelldatei bis 64 KB auswählen.
- „Version hochladen“ drücken und warten, bis sie „Startbereit“ ist.
| Sprache | Datei | Hinweise |
|---|---|---|
| Python | z. B. mein_bot.py |
class Bot(BaseBot); Kobaltmeer-SDK und NumPy verfügbar; auch exportierte NeuroBots |
| C++ | .cpp |
C++17, #include "kobaltmeer.hpp" möglich |
| C# | Bot.cs |
.NET 10, System.Text.Json, keine NuGet-Pakete |
| Go | bot.go |
Standardbibliothek, kein cgo |
| Rust | bot.rs |
Standardbibliothek und das mitgelieferte serde_json |
Die Arena kompiliert selbst. Eigene Buildskripte, Pakete oder fertige Programme werden nicht angenommen. Jeder geänderte Upload wird eine neue Version; alte Versionen bleiben für ihre Spiele erhalten. Den Quellcode sehen nur du und die Administration. Andere sehen Namen, Versionen, Ergebnisse und Replays.
Herausfordern und Elo
Wähle eine eigene Version, einen Gegner und einen Karten-Seed, dann „Herausfordern“. Jede Herausforderung spielt zwei Partien, eine pro Startplatz. Die eingebauten Bots stehen ebenfalls als Gegner bereit.
- Elo startet bei 1.500 mit K = 32; es zählen die Ränge der Engine.
- Fällt ein Bot aus, verliert er die Wertung; fallen beide aus, bleibt die Partie ungewertet.
- Je Konto sind drei offene Herausforderungen und insgesamt 40 Versionen möglich.
- Wird der Server zwischendurch beendet, setzt er offene Aufträge beim nächsten Start fort.
„Ansehen“ öffnet ein Replay direkt im Viewer, „Datei“ lädt es herunter. „Ligabericht herunterladen“ exportiert die Rangliste.
Wie die Isolation funktioniert
Hochgeladene Bots laufen mit eigenen Mount-, Netzwerk-, Prozess-, Benutzer- und IPC-Namespaces. Sie sehen nur ihr eigenes Botpaket und schreibgeschützte Laufzeitdateien, aber weder dein Home-Verzeichnis noch die Arena-Datenbank, Konten oder fremde Bots. Netzwerkzugriff gibt es nicht.
| Grenze | Wert |
|---|---|
| Speicher (virtueller Adressraum) | 512 MiB (Go 2 GiB, C# 4 GiB, mit 128 MiB Heap-Vorgabe) |
| CPU-Zeit je Prozess | 20 Sekunden |
| Prozesse / offene Dateien | 32 / 64 |
Dateigröße / /tmp |
16 MiB / 16 MiB |
| Antwortzeit je Zug | wie im normalen Spiel, Standard 500 ms |
Für das Kompilieren gelten eigene, großzügigere Grenzen.
Konten verwenden gesalzene PBKDF2-Passworthashes, Sitzungen HttpOnly-Cookies mit SameSite=Strict, und Änderungen sind durch CSRF-Token geschützt. Anmeldeversuche, Uploadgröße und Warteschlange sind begrenzt. Die Isolation ist eine Linux-Kernel-Grenze und keine virtuelle Maschine.