diff --git a/docker/files/docker-entrypoint-rootless.sh b/docker/files/docker-entrypoint-rootless.sh index 129dc4fb..2b91698a 100755 --- a/docker/files/docker-entrypoint-rootless.sh +++ b/docker/files/docker-entrypoint-rootless.sh @@ -53,10 +53,9 @@ fi # In rootless mode, we don't need to handle user switching or chown # The container runs as the specified user from the start EXEC="" -if [[ -f /bin/box64 ]]; then - # Use emulator for ARM hosts - EXEC="/bin/box64" -fi +# Setup ARM64 emulation support +# shellcheck disable=SC1091 +source "${INSTALLED_DIRECTORY}/setup-exec.sh" # Update config path sed -i '/write-data=/c\write-data=\/factorio/' /opt/factorio/config/config.ini diff --git a/docker/files/docker-entrypoint.sh b/docker/files/docker-entrypoint.sh index 05277d52..fd9537bc 100755 --- a/docker/files/docker-entrypoint.sh +++ b/docker/files/docker-entrypoint.sh @@ -41,10 +41,10 @@ if [[ $NRTMPSAVES -gt 0 ]]; then fi if [[ ${UPDATE_MODS_ON_START:-} == "true" ]]; then - ${INSTALLED_DIRECTORY}/docker-update-mods.sh + "${INSTALLED_DIRECTORY}"/docker-update-mods.sh fi -${INSTALLED_DIRECTORY}/docker-dlc.sh +"${INSTALLED_DIRECTORY}"/docker-dlc.sh EXEC="" if [[ $(id -u) == 0 ]]; then @@ -56,11 +56,10 @@ if [[ $(id -u) == 0 ]]; then # Drop to the factorio user EXEC="runuser -u factorio -g factorio --" fi -if [[ -f /bin/box64 ]]; then - # Use an emulator to run on ARM hosts - # this only gets installed when the target docker platform is linux/arm64 - EXEC="$EXEC /bin/box64" -fi + +# Setup ARM64 emulation support +# shellcheck disable=SC1091 +source "${INSTALLED_DIRECTORY}/setup-exec.sh" sed -i '/write-data=/c\write-data=\/factorio/' /opt/factorio/config/config.ini diff --git a/docker/files/scenario.sh b/docker/files/scenario.sh index f108ca63..a98d9d9c 100755 --- a/docker/files/scenario.sh +++ b/docker/files/scenario.sh @@ -1,5 +1,6 @@ #!/bin/bash set -eoux pipefail +INSTALLED_DIRECTORY=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")") if [[ -z ${1:-} ]]; then echo "No argument supplied" @@ -31,7 +32,12 @@ if [[ ! -f $CONFIG/map-settings.json ]]; then cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json" fi -exec /opt/factorio/bin/x64/factorio \ +# Setup ARM64 emulation support +EXEC="" +# shellcheck disable=SC1091 +source "${INSTALLED_DIRECTORY}/setup-exec.sh" + +exec $EXEC /opt/factorio/bin/x64/factorio \ --port "$PORT" \ --start-server-load-scenario "$SERVER_SCENARIO" \ --preset "$PRESET" \ diff --git a/docker/files/scenario2map.sh b/docker/files/scenario2map.sh index 94c4dd23..7f40d3a2 100755 --- a/docker/files/scenario2map.sh +++ b/docker/files/scenario2map.sh @@ -1,5 +1,6 @@ #!/bin/bash set -eoux pipefail +INSTALLED_DIRECTORY=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")") if [[ -z ${1:-} ]]; then echo "No argument supplied" @@ -23,5 +24,10 @@ if [[ ! -f $CONFIG/map-settings.json ]]; then cp /opt/factorio/data/map-settings.example.json "$CONFIG/map-settings.json" fi -exec /opt/factorio/bin/x64/factorio \ +# Setup ARM64 emulation support +EXEC="" +# shellcheck disable=SC1091 +source "${INSTALLED_DIRECTORY}/setup-exec.sh" + +exec $EXEC /opt/factorio/bin/x64/factorio \ --scenario2map "$SERVER_SCENARIO" diff --git a/docker/files/setup-exec.sh b/docker/files/setup-exec.sh new file mode 100644 index 00000000..5ab85338 --- /dev/null +++ b/docker/files/setup-exec.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Setup EXEC variable for running Factorio with ARM64 emulation support +# This script handles ARM64 emulation and can be combined with user switching as needed + +# If EXEC is not already set, initialize it +if [[ -z "${EXEC:-}" ]]; then + EXEC="" +fi + +if [[ -f /bin/box64 ]]; then + # Use an emulator to run on ARM hosts + # this only gets installed when the target docker platform is linux/arm64 + EXEC="$EXEC /bin/box64" +fi + +export EXEC \ No newline at end of file