Von Factorio

November 29, 2018 in linux, nextcloud ‐ 2 min read

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.

https://www.youtube.com/watch?v=KVvXv1Z6EY8

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.

image

 

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