mirror of
				https://github.com/factoriotools/factorio-docker.git
				synced 2025-10-31 17:08:08 +01:00 
			
		
		
		
	Fix ARM64 emulation support in all entrypoints
- Add shared setup-exec.sh script to handle ARM64 emulation logic - Update scenario.sh and scenario2map.sh to use box64 emulation on ARM64 - Refactor docker-entrypoint.sh and docker-entrypoint-rootless.sh to use shared script - Ensures all factorio binary calls work correctly on ARM64 platforms Fixes #585 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
		| @@ -53,10 +53,8 @@ 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 | ||||
| source "${INSTALLED_DIRECTORY}/setup-exec.sh" | ||||
|  | ||||
| # Update config path | ||||
| sed -i '/write-data=/c\write-data=\/factorio/' /opt/factorio/config/config.ini | ||||
|   | ||||
| @@ -56,11 +56,9 @@ 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 | ||||
| source "${INSTALLED_DIRECTORY}/setup-exec.sh" | ||||
|  | ||||
| sed -i '/write-data=/c\write-data=\/factorio/' /opt/factorio/config/config.ini | ||||
|  | ||||
|   | ||||
| @@ -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,11 @@ 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="" | ||||
| source "${INSTALLED_DIRECTORY}/setup-exec.sh" | ||||
|  | ||||
| exec $EXEC /opt/factorio/bin/x64/factorio \ | ||||
|   --port "$PORT" \ | ||||
|   --start-server-load-scenario "$SERVER_SCENARIO" \ | ||||
|   --preset "$PRESET" \ | ||||
|   | ||||
| @@ -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,9 @@ 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="" | ||||
| source "${INSTALLED_DIRECTORY}/setup-exec.sh" | ||||
|  | ||||
| exec $EXEC /opt/factorio/bin/x64/factorio \ | ||||
|   --scenario2map "$SERVER_SCENARIO" | ||||
|   | ||||
							
								
								
									
										16
									
								
								docker/files/setup-exec.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								docker/files/setup-exec.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
		Reference in New Issue
	
	Block a user