2023-08-13 15:45:11 -04:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
2023-08-14 12:35:32 -04:00
|
|
|
# Retrieves the script's directory and cd's into it.
|
|
|
|
script_dir="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
cd ${script_dir}
|
|
|
|
|
|
|
|
# Check if the current directory is inside a Git repository.
|
|
|
|
if [ -d .git ] || git rev-parse --is-inside-work-tree > /dev/null 2>&1 ; then
|
|
|
|
# Pull updated scripts from CoastalCommits.
|
|
|
|
echo "Updating scripts..."
|
|
|
|
git pull
|
|
|
|
echo "Scripts updated!"
|
|
|
|
echo "Server must be restarted for script updates to take effect."
|
|
|
|
else
|
|
|
|
echo "WARNING: This directory is not a Git repository. Script updates will not be automatically fetched."
|
|
|
|
fi
|
|
|
|
|
2023-08-14 12:21:54 -04:00
|
|
|
# If config.sh exists, fetch variables from it
|
|
|
|
if [ -f "config.sh" ]; then
|
|
|
|
source config.sh
|
2023-08-15 01:36:41 -04:00
|
|
|
configpath="config.sh"
|
2023-08-14 12:21:54 -04:00
|
|
|
echo "Loaded configuration from config.sh"
|
|
|
|
else
|
|
|
|
# If config.sh doesn't exist, check if config.sh.example exists
|
|
|
|
if [ -f "config.sh.example" ]; then
|
|
|
|
# Fetch variables from config.sh.example
|
|
|
|
echo "WARNING: config.sh file does not exist, falling back on default configuration."
|
|
|
|
source config.sh.example
|
2023-08-15 01:36:41 -04:00
|
|
|
configpath="config.sh.example"
|
2023-08-14 12:33:50 -04:00
|
|
|
echo "Loaded configuration from config.sh.example"
|
2023-08-14 12:21:54 -04:00
|
|
|
else
|
|
|
|
# Handle the scenario when both files are missing
|
|
|
|
echo "FATAL: Configuration files are missing! Cannot start the Factorio server."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
2023-08-13 16:31:36 -04:00
|
|
|
|
2023-08-15 02:50:41 -04:00
|
|
|
# Load the last downloaded Factorio version from config.sh, if available
|
|
|
|
if [ "$configpath" = "config.sh" ]; then
|
|
|
|
last_downloaded_version=$(grep -oP 'last_downloaded_version=\K[^"]*' "$configpath")
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
last_download_version="None"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
last_downloaded_version="None"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check if the last downloaded version matches the current version
|
|
|
|
if [ "$last_downloaded_version" != "$version" ] || [ "$last_downloaded_version" = "stable" ] || [ "$last_downloaded_version" = "latest" ]; then
|
|
|
|
echo "Fetching Factorio binary..."
|
|
|
|
wget "https://factorio.com/get-download/${version}/headless/linux64" -O factorio_headless.tar.xz
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "FATAL: There is not a headless linux64 build available for the version you've selected in your ${configpath} file."
|
|
|
|
echo "FATAL: See this website for a list of all Factorio versions: https://factorio.com/download/archive/"
|
|
|
|
rm -f factorio_headless.tar.xz
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
echo "Extracting Factorio binary..."
|
|
|
|
tar -xf factorio_headless.tar.xz --strip-components=1 --overwrite
|
|
|
|
echo "Factorio binary updated!"
|
2023-08-15 02:29:51 -04:00
|
|
|
rm -f factorio_headless.tar.xz
|
2023-08-15 02:50:41 -04:00
|
|
|
else
|
|
|
|
echo "Not updating Factorio binary, as the existing version matches the version stated in the configuration file."
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Update the last downloaded version in the config.sh file
|
|
|
|
if [ "$configpath" = "config.sh" ]; then
|
|
|
|
sed -i "/last_downloaded_version=.*/i # This parameter is used for auto-updating the Factorio binary." "$configpath"
|
|
|
|
sed -i "/last_downloaded_version=.*/i # Do not change this parameter unless you know what you're doing!" "$configpath"
|
|
|
|
sed -i "s/last_downloaded_version=.*/last_downloaded_version=\"$version\"/" "$configpath"
|
2023-08-15 01:36:41 -04:00
|
|
|
fi
|
2023-08-13 15:45:11 -04:00
|
|
|
|
|
|
|
# This checks if the ./saves/$save_name.zip save file exists or not...
|
|
|
|
if [ ! -f "./saves/${save_name}.zip" ]; then
|
|
|
|
# ...if not, create the save file
|
|
|
|
./bin/x64/factorio ${extra_params_create} --create "./saves/${save_name}.zip"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# This creates a byobu session that starts the server.
|
|
|
|
byobu new-session -d -s factorio "./bin/x64/factorio ${extra_params_start_server} --start-server ./saves/${save_name}.zip"
|
|
|
|
|
|
|
|
# This attaches the current terminal to the byobu session.
|
|
|
|
# Comment this out if you don't want this functionality.
|
2023-08-14 12:05:57 -04:00
|
|
|
byobu attach -t factorio
|
2023-08-15 02:50:41 -04:00
|
|
|
|
|
|
|
|
|
|
|
# Load the last downloaded Factorio version from config.sh, if available
|
|
|
|
if [ "$configpath" = "config.sh" ]; then
|
|
|
|
last_downloaded_version=$(grep -oP 'last_downloaded_version=\K[^"]*' "$configpath")
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
last_download_version="None"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
last_downloaded_version="None"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check if the last downloaded version matches the current version
|
|
|
|
if [ "$last_downloaded_version" != "$version" ] || [ "$last_downloaded_version" = "stable" ] || [ "$last_downloaded_version" = "latest" ]; then
|
|
|
|
echo "Fetching Factorio binary..."
|
|
|
|
wget "https://factorio.com/get-download/${version}/headless/linux64" -O factorio_headless.tar.xz
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "FATAL: There is not a headless linux64 build available for the version you've selected in your ${configpath} file."
|
|
|
|
echo "FATAL: See this website for a list of all Factorio versions: https://factorio.com/download/archive/"
|
|
|
|
rm -f factorio_headless.tar.xz
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
echo "Extracting Factorio binary..."
|
|
|
|
tar -xf factorio_headless.tar.xz --strip-components=1 --overwrite
|
|
|
|
echo "Factorio binary updated!"
|
|
|
|
rm -f factorio_headless.tar.xz
|
|
|
|
else
|
|
|
|
echo "Not updating Factorio binary, as the existing version matches the version stated in the configuration file."
|
|
|
|
|
|
|
|
# Update the last downloaded version in the config.sh file
|
|
|
|
if [ -f "$configpath" ]; then
|
|
|
|
sed -i "s/last_downloaded_version=.*/last_downloaded_version=\"$version\"/" "$configpath"
|
|
|
|
fi
|
|
|
|
fi
|