From 679a6c0f31399f9c976c5e21e8ddc7df8f76c10f Mon Sep 17 00:00:00 2001 From: Adam Semenenko Date: Mon, 25 Oct 2021 21:17:59 +0200 Subject: [PATCH 1/8] Expose config file locations as env vars (Based on PR #367, fixes #356) --- docker/files/docker-entrypoint.sh | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/docker/files/docker-entrypoint.sh b/docker/files/docker-entrypoint.sh index ccd7273c..3188f40b 100755 --- a/docker/files/docker-entrypoint.sh +++ b/docker/files/docker-entrypoint.sh @@ -13,6 +13,24 @@ mkdir -p "$MODS" mkdir -p "$SCENARIOS" mkdir -p "$SCRIPTOUTPUT" +# Initialize Factorio server configuration files location variables..." +SERVER_SETTINGS_FILE="${SERVER_SETTINGS_FILE:$CONFIG/server-settings.json}" +SERVER_ID_FILE="${SERVER_ID_FILE:$CONFIG/server-id.json}" +ADMINLIST_FILE="${ADMINLIST_FILE:-$CONFIG/server-adminlist.json}" +WHITELIST_FILE="${WHITELIST_FILE:-$CONFIG/server-whitelist.json}" +BANLIST_FILE="${BANLIST_FILE:-$CONFIG/server-banlist.json}" +echo "SERVER_SETTINGS_FILE=$SERVER_SETTINGS_FILE" +echo "SERVER_ID_FILE=$SERVER_ID_FILE" +echo "ADMINLIST_FILE=$ADMINLIST_FILE" +echo "WHITELIST_FILE=$WHITELIST_FILE" +echo "BANLIST_FILE=$BANLIST_FILE" +mkdir -p "$SERVER_SETTINGS_FILE" +mkdir -p "$SERVER_ID_FILE" +mkdir -p "$ADMINLIST_FILE" +mkdir -p "$WHITELIST_FILE" +mkdir -p "$BANLIST_FILE" + + if [[ ! -f $CONFIG/rconpw ]]; then # Generate a new RCON password if none exists pwgen 15 1 >"$CONFIG/rconpw" @@ -78,14 +96,14 @@ fi FLAGS=(\ --port "$PORT" \ - --server-settings "$CONFIG/server-settings.json" \ - --server-banlist "$CONFIG/server-banlist.json" \ + --server-settings "$SERVER_SETTINGS_FILE" \ + --server-banlist "$SERVER_ID_FILE" \ --rcon-port "$RCON_PORT" \ - --server-whitelist "$CONFIG/server-whitelist.json" \ + --server-whitelist "$ADMINLIST_FILE" \ --use-server-whitelist \ - --server-adminlist "$CONFIG/server-adminlist.json" \ + --server-adminlist "$WHITELIST_FILE" \ --rcon-password "$(cat "$CONFIG/rconpw")" \ - --server-id /factorio/config/server-id.json \ + --server-id "$BANLIST_FILE" \ ) if [[ $LOAD_LATEST_SAVE == true ]]; then From 0139141859272b150b0a83297ea97bfba50c4845 Mon Sep 17 00:00:00 2001 From: Adam Semenenko Date: Mon, 25 Oct 2021 21:52:57 +0200 Subject: [PATCH 2/8] add - to fix setting defaults values for settings and ID files --- docker/files/docker-entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/files/docker-entrypoint.sh b/docker/files/docker-entrypoint.sh index 3188f40b..5e12b53d 100755 --- a/docker/files/docker-entrypoint.sh +++ b/docker/files/docker-entrypoint.sh @@ -14,8 +14,8 @@ mkdir -p "$SCENARIOS" mkdir -p "$SCRIPTOUTPUT" # Initialize Factorio server configuration files location variables..." -SERVER_SETTINGS_FILE="${SERVER_SETTINGS_FILE:$CONFIG/server-settings.json}" -SERVER_ID_FILE="${SERVER_ID_FILE:$CONFIG/server-id.json}" +SERVER_SETTINGS_FILE="${SERVER_SETTINGS_FILE:-$CONFIG/server-settings.json}" +SERVER_ID_FILE="${SERVER_ID_FILE:-$CONFIG/server-id.json}" ADMINLIST_FILE="${ADMINLIST_FILE:-$CONFIG/server-adminlist.json}" WHITELIST_FILE="${WHITELIST_FILE:-$CONFIG/server-whitelist.json}" BANLIST_FILE="${BANLIST_FILE:-$CONFIG/server-banlist.json}" From 76c4d0c537810ee6ce8f2acb083aa32bb34cadf8 Mon Sep 17 00:00:00 2001 From: aSemy Date: Mon, 25 Oct 2021 22:00:51 +0200 Subject: [PATCH 3/8] fix mismatched flags and files, and alphabetically order them --- docker/files/docker-entrypoint.sh | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docker/files/docker-entrypoint.sh b/docker/files/docker-entrypoint.sh index 5e12b53d..8cd99009 100755 --- a/docker/files/docker-entrypoint.sh +++ b/docker/files/docker-entrypoint.sh @@ -14,21 +14,21 @@ mkdir -p "$SCENARIOS" mkdir -p "$SCRIPTOUTPUT" # Initialize Factorio server configuration files location variables..." -SERVER_SETTINGS_FILE="${SERVER_SETTINGS_FILE:-$CONFIG/server-settings.json}" -SERVER_ID_FILE="${SERVER_ID_FILE:-$CONFIG/server-id.json}" ADMINLIST_FILE="${ADMINLIST_FILE:-$CONFIG/server-adminlist.json}" -WHITELIST_FILE="${WHITELIST_FILE:-$CONFIG/server-whitelist.json}" BANLIST_FILE="${BANLIST_FILE:-$CONFIG/server-banlist.json}" -echo "SERVER_SETTINGS_FILE=$SERVER_SETTINGS_FILE" -echo "SERVER_ID_FILE=$SERVER_ID_FILE" +SERVER_ID_FILE="${SERVER_ID_FILE:-$CONFIG/server-id.json}" +SERVER_SETTINGS_FILE="${SERVER_SETTINGS_FILE:-$CONFIG/server-settings.json}" +WHITELIST_FILE="${WHITELIST_FILE:-$CONFIG/server-whitelist.json}" echo "ADMINLIST_FILE=$ADMINLIST_FILE" -echo "WHITELIST_FILE=$WHITELIST_FILE" echo "BANLIST_FILE=$BANLIST_FILE" -mkdir -p "$SERVER_SETTINGS_FILE" -mkdir -p "$SERVER_ID_FILE" +echo "SERVER_ID_FILE=$SERVER_ID_FILE" +echo "SERVER_SETTINGS_FILE=$SERVER_SETTINGS_FILE" +echo "WHITELIST_FILE=$WHITELIST_FILE" mkdir -p "$ADMINLIST_FILE" -mkdir -p "$WHITELIST_FILE" mkdir -p "$BANLIST_FILE" +mkdir -p "$SERVER_ID_FILE" +mkdir -p "$SERVER_SETTINGS_FILE" +mkdir -p "$WHITELIST_FILE" if [[ ! -f $CONFIG/rconpw ]]; then @@ -96,14 +96,14 @@ fi FLAGS=(\ --port "$PORT" \ - --server-settings "$SERVER_SETTINGS_FILE" \ - --server-banlist "$SERVER_ID_FILE" \ + --rcon-password "$(cat "$CONFIG/rconpw")" \ --rcon-port "$RCON_PORT" \ - --server-whitelist "$ADMINLIST_FILE" \ + --server-adminlist "$ADMINLIST_FILE" \ + --server-banlist "$BANLIST_FILE" \ + --server-id "$SERVER_ID_FILE" \ + --server-settings "$SERVER_SETTINGS_FILE" \ + --server-whitelist "$WHITELIST_FILE" \ --use-server-whitelist \ - --server-adminlist "$WHITELIST_FILE" \ - --rcon-password "$(cat "$CONFIG/rconpw")" \ - --server-id "$BANLIST_FILE" \ ) if [[ $LOAD_LATEST_SAVE == true ]]; then From 1550f4689b0913d8a56a6c7ee369f5b72a908485 Mon Sep 17 00:00:00 2001 From: aSemy Date: Mon, 25 Oct 2021 22:01:46 +0200 Subject: [PATCH 4/8] use server-settings file variable as target for the default file --- docker/files/docker-entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/files/docker-entrypoint.sh b/docker/files/docker-entrypoint.sh index 8cd99009..b55decbd 100755 --- a/docker/files/docker-entrypoint.sh +++ b/docker/files/docker-entrypoint.sh @@ -36,9 +36,9 @@ if [[ ! -f $CONFIG/rconpw ]]; then pwgen 15 1 >"$CONFIG/rconpw" fi -if [[ ! -f $CONFIG/server-settings.json ]]; then +if [[ ! -f $SERVER_SETTINGS_FILE ]]; then # Copy default settings if server-settings.json doesn't exist - cp /opt/factorio/data/server-settings.example.json "$CONFIG/server-settings.json" + cp /opt/factorio/data/server-settings.example.json "$SERVER_SETTINGS_FILE" fi if [[ ! -f $CONFIG/map-gen-settings.json ]]; then From 8c2fc392239eeb0f05987adff4cf3f2b40d1a8af Mon Sep 17 00:00:00 2001 From: aSemy Date: Mon, 25 Oct 2021 22:12:19 +0200 Subject: [PATCH 5/8] update environment variable documentation to include config files --- README.md | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d826e8bc..4a38f77f 100644 --- a/README.md +++ b/README.md @@ -257,16 +257,21 @@ The `server-settings.json` file may then contain the variable references like th These are the environment variables which can be specified at container run time. -| Variable Name | Description | Default | Available in | -| - | - | - | - | -| GENERATE_NEW_SAVE | Generate a new save if one does not exist before starting the server | false | 0.17+ | -| LOAD_LATEST_SAVE | Load latest when true. Otherwise load SAVE_NAME | true | 0.17+ | -| PORT | UDP port the server listens on | 34197 | 0.15+ | -| RCON_PORT | TCP port the rcon server listens on | 27015 | 0.15+ | -| SAVE_NAME | Name to use for the save file | _autosave1 | 0.17+ | -| TOKEN | factorio.com token | | 0.17+ | -| UPDATE_MODS_ON_START | If mods should be updated before starting the server | | 0.17+ | -| USERNAME | factorio.com username | | 0.17+ | | +| Variable Name | Description | Default | Available in | +| -------------------- | -------------------------------------------------------------------- | ------------------------------------ | ------------ | +| GENERATE_NEW_SAVE | Generate a new save if one does not exist before starting the server | `false` | 0.17+ | +| LOAD_LATEST_SAVE | Load latest when true. Otherwise load SAVE_NAME | `true` | 0.17+ | +| PORT | UDP port the server listens on | `34197` | 0.15+ | +| RCON_PORT | TCP port the rcon server listens on | `27015` | 0.15+ | +| SAVE_NAME | Name to use for the save file | `_autosave1` | 0.17+ | +| TOKEN | factorio.com token | | 0.17+ | +| UPDATE_MODS_ON_START | If mods should be updated before starting the server | | 0.17+ | +| USERNAME | factorio.com username | | 0.17+ | +| ADMINLIST_FILE | Path to server adminlist file | `/server-adminlist.json` | | +| BANLIST_FILE | Path to server banlist file | `/server-banlist.json` | | +| SERVER_ID_FILE | Path to server ID file | `/server-id.json` | | +| SERVER_SETTINGS_FILE | Path to server settings file | `/server-settings.json` | | +| WHITELIST_FILE | Path to server whitelist file | `/server-whitelist.json` | | **Note:** All environment variables are compared as strings From b6505176c1fb3410dd40e3afbc5dfd9c2d21dc15 Mon Sep 17 00:00:00 2001 From: aSemy Date: Mon, 25 Oct 2021 22:20:27 +0200 Subject: [PATCH 6/8] remove unnecessary echos --- docker/files/docker-entrypoint.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docker/files/docker-entrypoint.sh b/docker/files/docker-entrypoint.sh index b55decbd..f610f30a 100755 --- a/docker/files/docker-entrypoint.sh +++ b/docker/files/docker-entrypoint.sh @@ -19,11 +19,6 @@ BANLIST_FILE="${BANLIST_FILE:-$CONFIG/server-banlist.json}" SERVER_ID_FILE="${SERVER_ID_FILE:-$CONFIG/server-id.json}" SERVER_SETTINGS_FILE="${SERVER_SETTINGS_FILE:-$CONFIG/server-settings.json}" WHITELIST_FILE="${WHITELIST_FILE:-$CONFIG/server-whitelist.json}" -echo "ADMINLIST_FILE=$ADMINLIST_FILE" -echo "BANLIST_FILE=$BANLIST_FILE" -echo "SERVER_ID_FILE=$SERVER_ID_FILE" -echo "SERVER_SETTINGS_FILE=$SERVER_SETTINGS_FILE" -echo "WHITELIST_FILE=$WHITELIST_FILE" mkdir -p "$ADMINLIST_FILE" mkdir -p "$BANLIST_FILE" mkdir -p "$SERVER_ID_FILE" From 19aa00129c3a7470469c9ca56ed9070120f2ad64 Mon Sep 17 00:00:00 2001 From: aSemy Date: Mon, 25 Oct 2021 22:24:19 +0200 Subject: [PATCH 7/8] use dirname to only make the parent directory of the config files --- docker/files/docker-entrypoint.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docker/files/docker-entrypoint.sh b/docker/files/docker-entrypoint.sh index f610f30a..25623800 100755 --- a/docker/files/docker-entrypoint.sh +++ b/docker/files/docker-entrypoint.sh @@ -13,18 +13,17 @@ mkdir -p "$MODS" mkdir -p "$SCENARIOS" mkdir -p "$SCRIPTOUTPUT" -# Initialize Factorio server configuration files location variables..." +# Initialize Factorio server configuration files location variables... ADMINLIST_FILE="${ADMINLIST_FILE:-$CONFIG/server-adminlist.json}" BANLIST_FILE="${BANLIST_FILE:-$CONFIG/server-banlist.json}" SERVER_ID_FILE="${SERVER_ID_FILE:-$CONFIG/server-id.json}" SERVER_SETTINGS_FILE="${SERVER_SETTINGS_FILE:-$CONFIG/server-settings.json}" WHITELIST_FILE="${WHITELIST_FILE:-$CONFIG/server-whitelist.json}" -mkdir -p "$ADMINLIST_FILE" -mkdir -p "$BANLIST_FILE" -mkdir -p "$SERVER_ID_FILE" -mkdir -p "$SERVER_SETTINGS_FILE" -mkdir -p "$WHITELIST_FILE" - +mkdir -p "$(dirname "$ADMINLIST_FILE")" +mkdir -p "$(dirname "$BANLIST_FILE")" +mkdir -p "$(dirname "$SERVER_ID_FILE")" +mkdir -p "$(dirname "$SERVER_SETTINGS_FILE")" +mkdir -p "$(dirname "$WHITELIST_FILE")" if [[ ! -f $CONFIG/rconpw ]]; then # Generate a new RCON password if none exists From 0e067ece1db3ebae766a31a4bd1c0a47c340b578 Mon Sep 17 00:00:00 2001 From: aSemy Date: Mon, 25 Oct 2021 22:30:26 +0200 Subject: [PATCH 8/8] make config file var name match the filename (add SERVER_ prefix) --- docker/files/docker-entrypoint.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docker/files/docker-entrypoint.sh b/docker/files/docker-entrypoint.sh index 25623800..7e6820da 100755 --- a/docker/files/docker-entrypoint.sh +++ b/docker/files/docker-entrypoint.sh @@ -14,16 +14,16 @@ mkdir -p "$SCENARIOS" mkdir -p "$SCRIPTOUTPUT" # Initialize Factorio server configuration files location variables... -ADMINLIST_FILE="${ADMINLIST_FILE:-$CONFIG/server-adminlist.json}" -BANLIST_FILE="${BANLIST_FILE:-$CONFIG/server-banlist.json}" +SERVER_ADMINLIST_FILE="${SERVER_ADMINLIST_FILE:-$CONFIG/server-adminlist.json}" +SERVER_BANLIST_FILE="${SERVER_BANLIST_FILE:-$CONFIG/server-banlist.json}" SERVER_ID_FILE="${SERVER_ID_FILE:-$CONFIG/server-id.json}" SERVER_SETTINGS_FILE="${SERVER_SETTINGS_FILE:-$CONFIG/server-settings.json}" -WHITELIST_FILE="${WHITELIST_FILE:-$CONFIG/server-whitelist.json}" -mkdir -p "$(dirname "$ADMINLIST_FILE")" -mkdir -p "$(dirname "$BANLIST_FILE")" +SERVER_WHITELIST_FILE="${SERVER_WHITELIST_FILE:-$CONFIG/server-whitelist.json}" +mkdir -p "$(dirname "$SERVER_ADMINLIST_FILE")" +mkdir -p "$(dirname "$SERVER_BANLIST_FILE")" mkdir -p "$(dirname "$SERVER_ID_FILE")" mkdir -p "$(dirname "$SERVER_SETTINGS_FILE")" -mkdir -p "$(dirname "$WHITELIST_FILE")" +mkdir -p "$(dirname "$SERVER_WHITELIST_FILE")" if [[ ! -f $CONFIG/rconpw ]]; then # Generate a new RCON password if none exists @@ -92,11 +92,11 @@ FLAGS=(\ --port "$PORT" \ --rcon-password "$(cat "$CONFIG/rconpw")" \ --rcon-port "$RCON_PORT" \ - --server-adminlist "$ADMINLIST_FILE" \ - --server-banlist "$BANLIST_FILE" \ + --server-adminlist "$SERVER_ADMINLIST_FILE" \ + --server-banlist "$SERVER_BANLIST_FILE" \ --server-id "$SERVER_ID_FILE" \ --server-settings "$SERVER_SETTINGS_FILE" \ - --server-whitelist "$WHITELIST_FILE" \ + --server-whitelist "$SERVER_WHITELIST_FILE" \ --use-server-whitelist \ )