Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Vorhergehende Überarbeitung | |||
— | public:sonstiges:unterhaltung:spiele:switche_versenken [2021/10/14 20:34] (aktuell) – netali | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Switche versenken ====== | ||
+ | Switche versenken ist eine Variante von Schiffe versenken, bei der zunächst virtuelle Schiffe gesetzt und dann durch Kabelstecken versenkt werden müssen. | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Das hier ist eine **neue** Version des Switche versenken Spieles. Die alte Version befindet sich [[public: | ||
+ | </ | ||
+ | |||
+ | ===== Hardwarevoraussetzungen ===== | ||
+ | * Beliebige HP-Switches (die Software ist getestet mit mehreren 2650er Switchen oder jeweils einem 54er Switch) | ||
+ | * Ein Server zum Hosten des Spiels und zum Abfangen der SNMP-Traps (ein einfacher Raspberry Pi zum Beispiel) | ||
+ | * 2 Laptops für die Spieler | ||
+ | * Einige Patchkabel | ||
+ | * Ein weiterer Switch, um alle Switche und die Laptops und den Server miteinander zu verbinden | ||
+ | |||
+ | ===== Einrichtung der Switche ===== | ||
+ | Allgemein ist es vorgesehen, dass das Spielfeld jedes Spielers aus einer 12x6 Matrix aus Switchports besteht. Bei einem 54er Switch sind das beispielsweise 3 übereinander liegende Module (in diesem Beispiel jeweils immer die Module A, C und E) oder falls keine 54er Switche zur Verfügung stehen, können auch mehrere 1HE-Switche mit mindestens 24 Ports gestacked werden. Für die Einrichtung beider Szenarien folgt nun eine Anleitung: | ||
+ | |||
+ | ==== Mit jeweils 3 1HE Switchen pro Spieler ==== | ||
+ | - Zunächst sollten die Switche alle eine statische IP im Netz des Servers zugeordnet bekommen | ||
+ | * In diesem Beispiel wird nun davon ausgegangen, | ||
+ | * Weiterhin hat in diesem Beispiel der Server die IP '' | ||
+ | - Nun sollte noch die maximale VLAN-Grenze der Switche auf 100 erhöht werden, da jeder Spiele-Port ein eigenes VLAN bekommt, damit es nicht schlimm ist, wenn Loops gesteckt werden | ||
+ | * Dies kann man am einfachsten tun, indem man '' | ||
+ | - Wenn das getan ist, muss der Switch einmal rebooten, um das VLAN-Limit zu erhöhen | ||
+ | - Wenn er wieder an ist, kann die restliche Konfiguration automatisch erledigt werden, da es sonst sehr mühsam ist, an 3*24 Ports ein eigenes VLAN anzulegen | ||
+ | * Dafür gibt es [[https:// | ||
+ | * Zum Benutzen des Scripts muss der ausführende Rechner die Switche erreichen können und die Software '' | ||
+ | * Wenn diese Voraussetzungen erfüllt sind, kann das Script mit '' | ||
+ | * Für einen 2650er 50 Port Switch, bei dem die Ports 1-24 als Spielfeld und 25-48 als Linkerzeuger dienen und 49-50 zum Uplink vorgesehen sind, kann mit oben erwähnten Beispiel-Werten Switch 1 konfiguriert werden: | ||
+ | * '' | ||
+ | |||
+ | ==== Mit jeweils einem 54er Switch pro Spieler ==== | ||
+ | - Als erstes wird hierbei vorausgesetzt, | ||
+ | - Zunächst sollten die Switche alle eine statische IP im Netz des Servers zugeordnet bekommen | ||
+ | * In diesem Beispiel wird nun davon ausgegangen, | ||
+ | * Weiterhin hat in diesem Beispiel der Server die IP '' | ||
+ | - Nun sollte noch die maximale VLAN-Grenze der Switche auf 100 erhöht werden, da jeder Spiele-Port ein eigenes VLAN bekommt, damit es nicht schlimm ist, wenn Loops gesteckt werden | ||
+ | * Dies kann man am einfachsten tun, indem man '' | ||
+ | - Wenn das getan ist, muss der Switch einmal rebooten, um das VLAN-Limit zu erhöhen | ||
+ | - Wenn er wieder an ist, kann die restliche Konfiguration automatisch erledigt werden, da es sonst sehr mühsam ist, an 3*24 Ports ein eigenes VLAN anzulegen | ||
+ | * Dafür gibt es [[https:// | ||
+ | * Zum Benutzen des Scripts muss der ausführende Rechner die Switche erreichen können und die Software '' | ||
+ | * Wenn diese Voraussetzungen erfüllt sind, kann das Script mit '' | ||
+ | * Nun kann mit oben genannten Beispielwerten der erste Switch so konfiguriert werden: | ||
+ | * '' | ||
+ | |||
+ | ===== Einrichtung des Servers ===== | ||
+ | Für die Erklärung wird von folgenden Beispielwerten ausgegangen (Erläuterungen folgen unten): | ||
+ | * Der Server hat die IP '' | ||
+ | * Die SNMP-Community lautet '' | ||
+ | * Der SNMP-Trap-Handler liegt unter ''/ | ||
+ | * Das Frontend wird unter ''/ | ||
+ | * Das Backend wird unter ''/ | ||
+ | * Das venv für das Backend liegt unter ''/ | ||
+ | * Der WSGI-Socket liegt unter ''/ | ||
+ | * Die systemd-Unit für das Backend liegt unter ''/ | ||
+ | |||
+ | Die Einrichtung erfolgt nun so: | ||
+ | - Software installieren: | ||
+ | * '' | ||
+ | - snmptrapd einrichten: | ||
+ | - Das passende Handle-Script aus [[https:// | ||
+ | * Hier liegen aktuell Handle-Scripts für 2650er und 54er Switche vor. Falls andere Switche verwendet werden, kann mithilfe des dev-handle-Scripts nachgeschaut werden, wie die OIDs für das Linkup-Event und die Portnummer heißen und dann kann entsprechend ein Script abgewandelt werden. | ||
+ | - Die snmptrapd.conf unter ''/ | ||
+ | * < | ||
+ | authCommunity log, | ||
+ | traphandle default / | ||
+ | </ | ||
+ | - snmptrapd aktivieren und starten '' | ||
+ | - Installieren und Konfigurieren des Backends | ||
+ | - Das [[https:// | ||
+ | - Eine MySQL-Datenbank anlegen und mit dem Datenbank-Schema aus dem Backend-Repo befüllen und auch gleich einen MySQL-Benutzer mit Zugriff auf diese DB anlegen | ||
+ | - Ein venv für das Backend anlegen | ||
+ | - '' | ||
+ | - '' | ||
+ | - '' | ||
+ | - '' | ||
+ | - '' | ||
+ | - '' | ||
+ | - Unter Beispielsweise ''/ | ||
+ | * < | ||
+ | from flaskapp.app import app | ||
+ | |||
+ | if __name__ == " | ||
+ | app.run() | ||
+ | </ | ||
+ | - Unter Beispielsweise ''/ | ||
+ | * < | ||
+ | [uwsgi] | ||
+ | chdir = / | ||
+ | wsgi-file = wsgi.py | ||
+ | callable = app | ||
+ | |||
+ | master = true | ||
+ | processes = 5 | ||
+ | |||
+ | socket = / | ||
+ | chmod-socket = 660 | ||
+ | vacuum = true | ||
+ | |||
+ | die-on-term = true | ||
+ | </ | ||
+ | - Socket-Verzeichnis unter Beispielsweise ''/ | ||
+ | - Backend-Beispielconfig kopieren und anpassen | ||
+ | * Die Config befindet sich in diesem Beispiel unter ''/ | ||
+ | * Am Ende muss dort eine Datei namens '' | ||
+ | * Die '' | ||
+ | - Die systemd-Unit für das Backend anlegen (mit unseren Beispielpfaden): | ||
+ | * < | ||
+ | [Unit] | ||
+ | Description=uWSGI Instanz für swv-backend | ||
+ | After=network.target | ||
+ | |||
+ | [Service] | ||
+ | User=www-data | ||
+ | Group=www-data | ||
+ | WorkingDirectory=/ | ||
+ | Environment=" | ||
+ | ExecStart=/ | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </ | ||
+ | - Die systemd-Unit aktivieren und starten: | ||
+ | * '' | ||
+ | - Installieren und Konfigurieren des Frontends | ||
+ | - Das [[https:// | ||
+ | - Im ausgecheckten Repo unter '' | ||
+ | - Frontend bauen: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | - Den nginx Konfigurieren: | ||
+ | * Erneut mit unseren Beispielwerten: | ||
+ | * < | ||
+ | server { | ||
+ | listen 80 default_server; | ||
+ | listen [::]:80 default_server; | ||
+ | root / | ||
+ | |||
+ | index index.html index.htm index.nginx-debian.html; | ||
+ | |||
+ | server_name _; | ||
+ | |||
+ | location / { | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | | ||
+ | location /api/ { | ||
+ | uwsgi_pass unix:/// | ||
+ | include uwsgi_params; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | - Den nginx reloaden: | ||
+ | * '' | ||
+ | - Fertig (Wenn alles geklappt hat, dann sollte das Spiel nun von beiden Laptops aus unter '' | ||
+ | - Wenn eine Runde fertig ist, kann das Spiel händisch durch das aufrufen von '' | ||