My Factorio Info

From Got Opinion Wiki
Jump to navigation Jump to search

Factorio Headless Setup

Resources:

Check that your version of glibc is >= 2.18.

robot01@apu01:~$ ldd --version
ldd (Ubuntu GLIBC 2.23-0ubuntu10) 2.23
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

Output of ldd command confirms glibc version >2.18.

Switch to $ cd /opt directory and download latest Factorio stable headless version (1.1.87 as of this writing)

$ sudo wget https://factorio.com/get-download/stable/headless/linux64
--2023-09-04 14:28:09--  https://factorio.com/get-download/stable/headless/linux64
Resolving factorio.com (factorio.com)... 2606:4700:20::681a:f58, 2606:4700:20::ac43:47c5, 2606:4700:20::681a:e58, ...
Connecting to factorio.com (factorio.com)|2606:4700:20::681a:f58|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://dl.factorio.com/releases/factorio_headless_x64_1.1.87.tar.xz?secure=4g154TPABPYOpo7oo2Cnvw,1693859289 [following]
--2023-09-04 14:28:09--  https://dl.factorio.com/releases/factorio_headless_x64_1.1.87.tar.xz?secure=4g154TPABPYOpo7oo2Cnvw,1693859289
Resolving dl.factorio.com (dl.factorio.com)... 2a02:6ea0:d800::2, 212.102.46.8
Connecting to dl.factorio.com (dl.factorio.com)|2a02:6ea0:d800::2|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 58853524 (56M) [application/octet-stream]
Saving to: ‘linux64’

linux64                           100%[==========================================================>]  56.13M  32.9MB/s    in 1.7s    

2023-09-04 14:28:11 (32.9 MB/s) - ‘linux64’ saved [58853524/58853524]

Rename file to match version (1.1.87 in this example)

$ sudo mv linux64 factorio_headless_x64_1.1.87.tar.xz

Extract archived and zipped file

$ sudo tar -xJf factorio_headless_x64_1.1.87.tar.xz
$ ls -l
total 57480
drwxr-xr-x 8 steamy steamy     4096 Sep  4 14:32 factorio
-rw-r--r-- 1 root   root   58853524 Jul  4 05:36 factorio_headless_x64_1.1.87.tar.xz

Remove file (save space, you can always download the file again, if needed)

robot01@apu01:/opt$ sudo rm factorio_headless_x64_1.1.87.tar.xz

Add a new user to run factorio and assign ownership of /opt/factorio directory to same user

$ sudo useradd factorio
$ sudo chown -R factorio:factorio /opt/factorio/


Verify permissions show factorio for both user and group

$ ls -l /opt/factorio


Test Factorio binary by switching to factorio user then start server

robot01@apu01:/opt$ sudo su - factorio
No directory, logging in with HOME=/
$

As factorio user create /opt/factorio/ saves directory. I used saves directory.

$ mkdir /opt/factorio/saves

Start server and look for something like "File /savename does not exist."

$ /opt/factorio/bin/x64/factorio --start-server savename
   0.000 2018-05-01 21:20:47; Factorio 0.16.36 (build 36253, linux64, headless)
   0.260 Operating system: Linux (Ubuntu 16.04)
   0.260 Program arguments: "/opt/factorio/bin/x64/factorio" "--start-server" "savename"
   0.260 Read data path: /opt/factorio/data
   0.260 Write data path: /opt/factorio [103696/111098MB]
   0.260 Binaries path: /opt/factorio/bin
   0.304 System info: [CPU: AMD G-T40E Processor, 2 cores, RAM: 3550 MB]
   0.304 Environment: DISPLAY=<unset>, WAYLAND_DISPLAY=<unset>
   0.305 Running in headless mode
   0.316 Error GlobalModSettings.cpp:107: Failed to migrate mod settings file: Error when opening /opt/factorio/mods/mod-settings.json for reading: No such file or directory
   0.322 Loading mod core 0.0.0 (data.lua)
   0.388 Loading mod base 0.16.36 (data.lua)
   1.063 Loading mod base 0.16.36 (data-updates.lua)
   1.313 Checksum for core: 1316978547
   1.313 Checksum of base: 4140083139
   2.006 Info PlayerData.cpp:67: Local player-data.json unavailable
   2.006 Info PlayerData.cpp:72: Cloud player-data.json unavailable
   2.012 Custom inputs active: 0
   2.015 Factorio initialised
   2.016 Info ServerSynchronizer.cpp:29: nextHeartbeatSequenceNumber(0) initialized Synchronizer nextTickClosureTick(0).
   2.016 Info ServerMultiplayerManager.cpp:698: mapTick(4294967295) changing state from(Ready) to(PreparedToHostGame)
   2.016 Info ServerMultiplayerManager.cpp:698: mapTick(4294967295) changing state from(PreparedToHostGame) to(CreatingGame)
   2.017 Loading map /savename
   2.017 Error ServerMultiplayerManager.cpp:96: MultiplayerManager failed: "File /savename does not exist."
   2.017 Info ServerMultiplayerManager.cpp:698: mapTick(4294967295) changing state from(CreatingGame) to(InitializationFailed)
   2.017 Info GlobalContext.cpp:694: Waiting for child processes to exit:
   2.020 Info ServerMultiplayerManager.cpp:142: Quitting multiplayer connection.
   2.020 Info ServerMultiplayerManager.cpp:698: mapTick(4294967295) changing state from(InitializationFailed) to(Closed)
   2.062 Info UDPSocket.cpp:206: Closing socket
   2.065 Goodbye

At this point you can load up saved games or create some games. Before that, I want to install Factorio init script

Exit from factorio user back to sudo account

$ exit
logout

Switch to /opt directory

$ cd /opt

I had to install git on my Ubuntu system

$ sudo apt install git

Clone Factorio init script from github

$ sudo git clone https://github.com/Bisa/factorio-init.git
Cloning into 'factorio-init'...
remote: Enumerating objects: 1028, done.
remote: Counting objects: 100% (145/145), done.
remote: Compressing objects: 100% (71/71), done.
remote: Total 1028 (delta 70), reused 121 (delta 60), pack-reused 883
Receiving objects: 100% (1028/1028), 265.92 KiB | 2.95 MiB/s, done.
Resolving deltas: 100% (584/584), done.
anon@steamnuc00:/opt$ git --version
git version 2.25.1

Validate factorio-init directory exists

$ ls -l /opt
drwxr-xr-x 8 steamy steamy     4096 Sep  4 14:53 factorio
drwxr-xr-x 5 root   root       4096 Sep  4 15:00 factorio-init

Change ownership to Factorio user

$ sudo chown -R steamy:steamy /opt/factorio-init/

Edit config.example and add your Factorio users.

$ sudo vi /opt/factorio-init/config.example

Here are my edits to config.example after making edits

$ grep -i steamy factorio-init/config.example                   
USERNAME=steamy
USERGROUP=steamy

Edit factorio.service.example with your default values

$ sudo vi /opt/factorio-init/extras/factorio.service.example

Here are my edits to factorio.service.example after making edits

$ grep -i steamy /opt/factorio-init/extras/factorio.service.example
User=steamy
Group=steamy

Make Factorio start on operating system boot and restart if failure (configurable - I kept defaults for now)

$ sudo cp /opt/factorio-init/extras/factorio.service.example /etc/systemd/system/factorio.service
$ sudo systemctl daemon-reload

Sysvinit

$ sudo ln -s /opt/factorio-init/factorio /etc/init.d/factorio
$ sudo chmod +x /opt/factorio-init/factorio

Show help

$ service factorio help
Usage: /etc/init.d/factorio COMMAND

Available commands:
  start                                                  Starts the server
  stop                                                   Stops the server
  restart                                                Restarts the server
  status                                                 Displays server status
  players-online                                         Shows online players
  players                                                Shows all players
  cmd [command/message]                                  Open interactive commandline or send a single command to the server
  log [--tail|-t]                                        Print the full server log, optionally tail the log to follow in real time
  chatlog [--tail|-t]                                    Print the current chatlog, optionally tail the log to follow in real time
  new-game name [map-gen-settings] [map-settings]        Stops the server and creates a new game with the specified
                                                         name using the specified map gen settings and map settings json files
  save-game name                                         Stops the server and saves game to specified save
  load-save name                                         Stops the server and loads the specified save
  install [tarball]                                      Installs the server with optional specified tarball
                                                         (omit to download and use the latest headless server from Wube)
  update [--dry-run]                                     Updates the server
  invocation                                             Outputs the invocation for debugging purpose
  listcommands                                           List all init-commands
  listsaves                                              List all saves
  version                                                Prints the binary version
  mod                                                    Manage mods (see /etc/init.d/factorio mod help for more information)
  help                                                   Shows this help message

Setup Autocompletion

$ sudo ln -s /opt/factorio-init/extras/bash_autocomplete /etc/bash_completion.d/factorio
$ sudo ln -s /opt/factorio-init/factorio /usr/local/bin/factorio

Copy example server settings (make any changes you want to copy)

$ sudo cp /opt/factorio/data/server-settings.example.json /opt/factorio/data/server-settings.json

Copy example configuration (make any changes you want to copy)

$ sudo cp /opt/factorio-init/config.example /opt/factorio-init/config

Make any changes to config ini

robot01@apu01:/opt/factorio$ sudo vi /opt/factorio/config/config.ini

Update headless server

download latest headless version

unzip and untar

sudo tar -xJf linux64

change permissions to your dedicated factorio user

sudo chown -R steamy:steamy factorio

launch game

Gaming