diff options
| author | Robert Massaioli <rmassaioli@atlassian.com> | 2024-10-13 18:17:41 +1100 |
|---|---|---|
| committer | Robert Massaioli <rmassaioli@atlassian.com> | 2024-10-13 18:17:41 +1100 |
| commit | a7cb6d15c29e5e3936c7b77b6afaeab616be8940 (patch) | |
| tree | 6a8baf902d38a623b78d3fe7d7c93581ea4ebcbb /util | |
| parent | 9884a9771718ea7444039677ed9992418e1d6c09 (diff) | |
Upload and download saves from Factorio servers.
Diffstat (limited to 'util')
| -rw-r--r-- | util/download-latest-save.bash | 67 | ||||
| -rw-r--r-- | util/upload-save.bash | 52 |
2 files changed, 119 insertions, 0 deletions
diff --git a/util/download-latest-save.bash b/util/download-latest-save.bash new file mode 100644 index 0000000..2a84660 --- /dev/null +++ b/util/download-latest-save.bash @@ -0,0 +1,67 @@ +#!/bin/bash + +# Check if remote name is provided +if [ $# -ne 1 ]; then + echo "Usage: $0 <remote_name>" + exit 1 +fi + +remote_name="$1" + +# Generate a human-readable timestamp +timestamp=$(date +"%Y-%m-%d_%H-%M-%S") + +# SSH into the remote instance to find the most recent save file +ssh_output=$(ssh "ec2-user@$remote_name" << EOF + # Record the current directory + current_dir=\$(pwd) + + # Find the save directory + savedir=\$(sudo mount | grep nfs4 | cut -f3 -d ' ' | xargs -I {} echo "{}/saves") + echo "Save directory: \$savedir" + + if [ -z "\$savedir" ]; then + echo "ERROR: Save directory not found" + exit 1 + fi + + # Find the most recently modified file in the save directory + latest_file=\$(sudo ls -t \$savedir | head -1) + + if [ -z "\$latest_file" ]; then + echo "ERROR: No files found in the save directory" + exit 1 + fi + + echo "Latest save file: \$latest_file" + + # Copy the latest file to the current directory + sudo cp "\$savedir/\$latest_file" "\$current_dir/" + + # Change ownership of the copied file to ec2-user + sudo chown ec2-user:ec2-user "\$current_dir/\$latest_file" + + echo "\$current_dir/\$latest_file" +EOF +) + +# Check if there was an error in the SSH command +if echo "$ssh_output" | grep -q "ERROR:"; then + echo "$ssh_output" + exit 1 +fi + +# Extract the full path of the latest file +latest_file_path=$(echo "$ssh_output" | tail -n 1) + +# Extract just the filename +latest_file=$(basename "$latest_file_path") + +# Download the file from the remote instance to the current local directory with the new filename +new_filename="${remote_name}_${timestamp}_${latest_file}" +scp "ec2-user@$remote_name:$latest_file_path" "./$new_filename" + +# Clean up the temporary file on the remote instance +ssh "ec2-user@$remote_name" "rm -f $latest_file_path" + +echo "Download complete. The latest save file has been saved as '$new_filename' in your current directory."
\ No newline at end of file diff --git a/util/upload-save.bash b/util/upload-save.bash new file mode 100644 index 0000000..9c66030 --- /dev/null +++ b/util/upload-save.bash @@ -0,0 +1,52 @@ +#!/bin/bash + +# Check if both arguments are provided +if [ $# -ne 2 ]; then + echo "Usage: $0 <path_to_MySave.zip> <ec2_address>" + exit 1 +fi + +# Get the file path and EC2 address from command line arguments +save_file="$1" +ec2_address="$2" + +# Check if the file exists +if [ ! -f "$save_file" ]; then + echo "File not found: $save_file" + exit 1 +fi + +# Upload the save file to the EC2 instance +echo "Uploading save file to EC2 instance..." +scp "$save_file" "ec2-user@$ec2_address:~/" + +# SSH into the EC2 instance and perform the required operations +ssh "ec2-user@$ec2_address" << EOF + # Get the Factorio container ID + container_id=\$(docker ps | grep factoriotools/factorio | awk '{print \$1}' | cut -c1-3) + + if [ -z "\$container_id" ]; then + echo "Factorio container not found" + exit 1 + fi + + echo "Factorio container ID: \$container_id" + + # Find the save directory + savedir=\$(mount | grep nfs4 | cut -f3 -d ' ' | xargs -I {} echo "{}/saves") + echo "Save directory: \$savedir" + + # Move the uploaded save to the right location + sudo mv ~/$(basename "$save_file") \$savedir + + # Touch the save file to update its timestamp + sudo touch \$savedir/$(basename "$save_file") + + # Force kill the Factorio docker container + echo "Killing Factorio container..." + docker kill \$container_id + + echo "Save file uploaded and container restarted. Please wait 30 seconds for the server to come back online." +EOF + +echo "Script completed. The server should load your new save file when it restarts."
\ No newline at end of file |
