This is an aid for Factorio headless server owners. It fetches update packages from factorio.com for you, so that you can then apply the update with minimal downtime.
This is a Python 3 script using a single non-standard library, Requests.
To install the required dependency, you should need do no more than run pip install requests
(or, in case of emergency, easy_install requests
). If this
does not work, you are encouraged to read the linked documentation and try to
figure out what's gone wrong.
From there, it's really simple: open a shell on the machine running your
headless server, fetch the updater script, and run it (try it with --help
first!). Here's an example session:
[narc@odin ~/src/factorio-updater]% python update_factorio.py --help
usage: update_factorio.py [-h] [-d] [-v] [-l] [-u USER] [-t TOKEN]
[-p PACKAGE] [-f FOR_VERSION] [-O OUTPUT_PATH]
[-a APPLY_TO] [-D] [-x]
Fetches Factorio update packages (e.g., for headless servers)
optional arguments:
-h, --help show this help message and exit
-d, --dry-run Don't download files, just state which updates would
be downloaded.
-v, --verbose Print URLs and stuff as they happen.
-l, --list-packages Print a list of valid packages (e.g., 'core-
linux_headless64', etc.).
-c CREDENTIALS_FILE, --credentials-file CREDENTIALS_FILE
Path to server-settings.json or player-data.json, for
loading credentials.
-u USER, --user USER Your Factorio service username, from
server-settings.json or player-data.json.
-t TOKEN, --token TOKEN
Your Factorio service token, also from
server-settings.json or player-data.json.
-p PACKAGE, --package PACKAGE
Which Factorio package to look for updates for, e.g.,
'core-linux_headless64' for a 64-bit Linux headless
Factorio. Use '--list-packages' to fetch an updated
list.
-f FOR_VERSION, --for-version FOR_VERSION
Which Factorio version you currently have, e.g.,
'0.12.2'. If empty, query the Factorio binary given in
'--apply-to' for its version.
-O OUTPUT_PATH, --output-path OUTPUT_PATH
Where to put downloaded files.
-a APPLY_TO, --apply-to APPLY_TO
Apply the updates using the chosen binary.
-D, --delete-after-applying
Delete update archives after successfully applying
their contents. Ignored if '--apply-to' was not
provided.
-x, --experimental Download experimental versions, too (otherwise only
stable updates are considered).
[narc@odin ~/src/factorio-updater]% python3 update_factorio.py -xDa ~/srv/factorio/bin/x64/factorio
Auto-detected starting version as 0.15.10 from binary.
Applying update with `/home/narc/srv/factorio/bin/x64/factorio --apply-update /tmp/core-linux_headless64-0.15.10-0.15.11-update.zip`.
Update applied, deleting temporary file /tmp/core-linux_headless64-0.15.10-0.15.11-update.zip.
Applying update with `/home/narc/srv/factorio/bin/x64/factorio --apply-update /tmp/core-linux_headless64-0.15.11-0.15.12-update.zip`.
Update applied, deleting temporary file /tmp/core-linux_headless64-0.15.11-0.15.12-update.zip.
Applying update with `/home/narc/srv/factorio/bin/x64/factorio --apply-update /tmp/core-linux_headless64-0.15.12-0.15.13-update.zip`.
Update applied, deleting temporary file /tmp/core-linux_headless64-0.15.12-0.15.13-update.zip.
[narc@odin ~/src/factorio-updater]% ls /tmp/core-linux_headless64*
zsh: no matches found: /tmp/core-linux_headless64*
The keen-eyed will have noticed the options for --user
and --token
. These
allow you to supply a username and token normally used by the Factorio services
(like the in-game updater and authenticated multiplayer). Having them will
allow you to download (and potentially apply) more updates than unauthenticated
checks.
The username and token may be present in your server-settings.json
or in a
Factorio client's player-data.json
. As the server owner, you would have put
them into the server-settings.json
in the first place, so we'll document
where they live on the client:
C:\Games\Factorio
, or
maybe ~/Desktop/Factorio
.%APPDATA%\Factorio
~/.factorio
~/Library/Application Support/factorio
player-data.json
. Open it with any editor capable of showing plain text files
(e.g., Notepad).You are looking for lines like these:
"service-username": "Narc",
"service-token": "xyz123abc456def789ghijklmnopqr"
These are the username and token you can provide.
If you happen to have some desire to download updates for a non-headless version (not normally recommended, but sometimes needs must), you must authenticate to be able to see these updates. Here's an example session:
[narc@odin ~/src/factorio-updater]% python update_factorio.py -u Narc -t xyz123abc456def789ghijklmnopqr --list-packages
Available packages:
core-win64
core-mac
core-linux_headless64
core-win32
core-linux32
core-linux64
[narc@odin ~/src/factorio-updater]% mkdir update-packages
[narc@odin ~/src/factorio-updater]% python update_factorio.py -u Narc -t xyz123abc456def789ghijklmnopqr -O update-packages -p core-win64 -f 0.14.23 -x
Wrote update-packages/core-win64-0.14.23-0.15.1-update.zip, apply with `factorio --apply-update update-packages/core-win64-0.14.23-0.15.1-update.zip`
Wrote update-packages/core-win64-0.15.1-0.15.2-update.zip, apply with `factorio --apply-update update-packages/core-win64-0.15.1-0.15.2-update.zip`
[...]
Wrote update-packages/core-win64-0.15.12-0.15.13-update.zip, apply with `factorio --apply-update update-packages/core-win64-0.15.12-0.15.13-update.zip`
You can now take any Factorio Windows 64-bit, version 0.14.23 and up, and apply the updates from the update-packages
directory just like the in-game updater would.
The source of Factorio Update Helper is Copyright 2015-2017 Octav "narc" Sandulescu. It is licensed under the MIT license, available in this package in the file LICENSE.md.
1 API key was invalidated during the development of this script.