Ich spiele in meiner Freizeit unter Anderem ein Spiel namens Factorio.
Kurz zusammengefasst ist Factorio ein Spiel in dem es darum geht eine Produktion zu automatisieren.
Dieses Video erklärt das Konzept des Spiels sehr gut.
Das Spiel lässt sich mit mehreren Spielern auf einem Server spielen.
Es gibt einen super Docker Container für Factorio, der es einem erlaubt im Handumdrehen einen Server aufzusetzen.
Leider gibt es kein einfaches Feature andere Spieler Maps auf den Server laden zu lassen, also habe ich mit Nextcloud mal eine Lösung zusammengeklöppelt.
Was Ihr braucht:
- Einen Docker Host auf dem der dtandersen/factorio Container läuft
- Eine ressource, von der Ihr Savegames herunterladen und eine Datei prüfen könnt
Die Idee:
- Der Docker Host führt jede Minute ein script (siehe unten) aus
Fügt hierzu in der /etc/crontab folgende Zeile hinzu und benutzt den Pfad, wo Ihr das script abgelegt habt.
* * * * * root /path/to/script.sh
- In diesem Script wird der Inhalt einer Textdatei in einer Ressource eurer Wahl über ssh geprüft
- Ist der Inhalt dieser Datei nicht 1, passiert nichts
- Ist der Inhalt dieser Datei 1 wird das Script ausgeführt
Das Script:
- Stoppt docker
- Verschiebt die aktuelle map in ein Backupverzeichnis
- löscht das aktuelle Savegame
- Vebindet sich mit einer ressource, *.zip herunter und legt es in das Savegameverzeichnis
- Ändert den Owner des Savegames, so dass der Docker Container damit arbeiten kann
- Startet docker wieder
- Schreibt ein Log in die Ressource
Verzeichnisse:
- Savegame location, gemounted vom Container /opt/factorio/save
Ihr müsst das Script noch von Hand anpassen, genauso wie ssh keys generieren.
Es ist nicht schön, es ist nicht sauber aber es funktioniert.
Cheers,
Ori
#!/bin/bash
factorio=$(ssh root@IP ‘cat path/to/Checkme.txt’)
if (echo $factorio | grep -q “1”)
then
service docker stop
cp /opt/factorio/saves/save.zip /opt/factorio/backup_save/save.zip
rm -rf /opt/factorio/saves/*
scp root@IP:/path/to/savegame/\*.zip /opt/factorio/saves/.
chown -R 845:845 /opt/factorio/saves
service docker start
ssh root@192.168.122.79 ‘echo “0” > path/to/Checkme.txt’
ssh root@192.168.122.79 ‘echo “Server rebooted at $(date +\%d-\%m-\%Y-\%H-\%M-\%S)” >> path/to/RebootLog.txt’
factorio=0
else
echo “DEBUG ME SEMPAI”
fi