2013-08-11 19:03:31 +08:00
#!/bin/bash
2021-01-24 23:10:15 +08:00
# Project: Linux Game Server Managers - LinuxGSM
2013-08-11 19:03:31 +08:00
# Author: Daniel Gibbs
2020-04-07 04:31:22 +08:00
# License: MIT License, Copyright (c) 2020 Daniel Gibbs
2017-05-05 04:39:38 +08:00
# Purpose: Linux Game Server Management Script
2018-12-16 08:05:29 +08:00
# Contributors: https://linuxgsm.com/contrib
# Documentation: https://docs.linuxgsm.com
2018-03-15 07:28:10 +08:00
# Website: https://linuxgsm.com
2016-10-31 06:42:12 +08:00
2017-05-05 04:39:38 +08:00
# DO NOT EDIT THIS FILE
2017-06-19 23:10:08 +08:00
# LinuxGSM configuration is no longer edited here
# To update your LinuxGSM config go to:
# lgsm/config-lgsm
2018-12-16 08:05:29 +08:00
# https://docs.linuxgsm.com/configuration/linuxgsm-config
2017-05-05 04:39:38 +08:00
2016-10-31 06:42:12 +08:00
# Debugging
2015-12-21 05:22:56 +08:00
if [ -f ".dev-debug" ] ; then
exec 5>dev-debug.log
BASH_XTRACEFD = "5"
set -x
fi
2021-02-08 07:36:57 +08:00
version = "v21.1.3"
2017-05-05 04:39:38 +08:00
shortname = "core"
2017-05-29 21:32:48 +08:00
gameservername = "core"
2020-05-03 07:02:21 +08:00
commandname = "CORE"
2019-11-26 07:11:02 +08:00
rootdir = $( dirname " $( readlink -f " ${ BASH_SOURCE [0] } " ) " )
selfname = $( basename " $( readlink -f " ${ BASH_SOURCE [0] } " ) " )
2020-05-19 16:53:48 +08:00
sessionname = $( echo " ${ selfname } " | cut -f1 -d"." )
2017-04-11 05:09:21 +08:00
lgsmdir = " ${ rootdir } /lgsm "
2017-04-17 05:24:53 +08:00
logdir = " ${ rootdir } /log "
2017-07-08 17:12:02 +08:00
lgsmlogdir = " ${ logdir } /lgsm "
2020-04-18 01:25:34 +08:00
steamcmddir = " ${ HOME } /.steam/steamcmd "
2017-04-17 05:24:53 +08:00
serverfiles = " ${ rootdir } /serverfiles "
2017-04-11 05:09:21 +08:00
functionsdir = " ${ lgsmdir } /functions "
tmpdir = " ${ lgsmdir } /tmp "
2019-06-14 02:36:32 +08:00
datadir = " ${ lgsmdir } /data "
2020-04-07 04:31:22 +08:00
lockdir = " ${ lgsmdir } /lock "
2019-06-14 02:36:32 +08:00
serverlist = " ${ datadir } /serverlist.csv "
serverlistmenu = " ${ datadir } /serverlistmenu.csv "
2017-04-14 20:43:45 +08:00
configdir = " ${ lgsmdir } /config-lgsm "
2017-05-29 21:32:48 +08:00
configdirserver = " ${ configdir } / ${ gameservername } "
2017-06-19 03:24:52 +08:00
configdirdefault = " ${ lgsmdir } /config-default "
2018-10-08 05:18:16 +08:00
userinput = " ${ 1 } "
2017-04-14 20:43:45 +08:00
2017-04-17 02:24:27 +08:00
## GitHub Branch Select
2016-10-31 06:42:12 +08:00
# Allows for the use of different function files
# from a different repo and/or branch.
githubuser = "GameServerManagers"
githubrepo = "LinuxGSM"
2017-06-19 22:09:34 +08:00
githubbranch = "master"
2017-04-09 22:06:44 +08:00
2019-06-14 02:36:32 +08:00
# Core function that is required first.
2017-04-15 22:50:16 +08:00
core_functions.sh( ) {
2019-11-26 07:11:02 +08:00
functionfile = " ${ FUNCNAME [0] } "
2021-02-20 06:05:56 +08:00
fn_bootstrap_fetch_file_github "lgsm/functions" "core_functions.sh" " ${ functionsdir } " "chmodx" "run" "noforcedl" "nohash"
2017-04-15 22:50:16 +08:00
}
2017-04-09 22:06:44 +08:00
# Bootstrap
2019-06-14 02:36:32 +08:00
# Fetches the core functions required before passed off to core_dl.sh.
2017-04-15 22:50:16 +08:00
fn_bootstrap_fetch_file( ) {
2017-04-17 04:03:48 +08:00
remote_fileurl = " ${ 1 } "
2020-05-19 16:53:48 +08:00
remote_fileurl_backup = " ${ 2 } "
remote_fileurl_name = " ${ 3 } "
remote_fileurl_backup_name = " ${ 4 } "
local_filedir = " ${ 5 } "
local_filename = " ${ 6 } "
chmodx = " ${ 7 :- 0 } "
run = " ${ 8 :- 0 } "
forcedl = " ${ 9 :- 0 } "
md5 = " ${ 10 :- 0 } "
2019-06-14 02:36:32 +08:00
# Download file if missing or download forced.
2017-10-21 20:13:31 +08:00
if [ ! -f " ${ local_filedir } / ${ local_filename } " ] || [ " ${ forcedl } " = = "forcedl" ] ; then
2020-05-19 16:53:48 +08:00
# If backup fileurl exists include it.
if [ -n " ${ remote_fileurl_backup } " ] ; then
# counter set to 0 to allow second try
counter = 0
remote_fileurls_array = ( remote_fileurl remote_fileurl_backup )
else
# counter set to 1 to not allow second try
counter = 1
remote_fileurls_array = ( remote_fileurl )
2016-03-15 08:25:56 +08:00
fi
2018-03-15 01:37:22 +08:00
2020-09-13 04:53:45 +08:00
for remote_fileurl_array in " ${ remote_fileurls_array [@] } " ; do
2020-05-19 16:53:48 +08:00
if [ " ${ remote_fileurl_array } " = = "remote_fileurl" ] ; then
fileurl = " ${ remote_fileurl } "
fileurl_name = " ${ remote_fileurl_name } "
elif [ " ${ remote_fileurl_array } " = = "remote_fileurl_backup" ] ; then
fileurl = " ${ remote_fileurl_backup } "
fileurl_name = " ${ remote_fileurl_backup_name } "
fi
counter = $(( counter+1))
if [ ! -d " ${ local_filedir } " ] ; then
mkdir -p " ${ local_filedir } "
fi
# Trap will remove part downloaded files if canceled.
trap fn_fetch_trap INT
# Larger files show a progress bar.
echo -en " fetching ${ fileurl_name } ${ local_filename } ...\c "
2020-11-29 21:20:56 +08:00
curlcmd = $( curl --connect-timeout 10 -s --fail -L -o " ${ local_filedir } / ${ local_filename } " " ${ fileurl } " 2>& 1)
2020-05-19 16:53:48 +08:00
2017-04-09 22:06:44 +08:00
local exitcode = $?
2020-05-19 16:53:48 +08:00
# Download will fail if downloads a html file.
if [ -f " ${ local_filedir } / ${ local_filename } " ] ; then
if [ -n " $( head " ${ local_filedir } / ${ local_filename } " | grep "DOCTYPE" ) " ] ; then
rm " ${ local_filedir : ? } / ${ local_filename : ? } "
local exitcode = 2
fi
fi
# On first try will error. On second try will fail.
2020-07-13 06:16:22 +08:00
if [ " ${ exitcode } " != 0 ] ; then
2020-05-19 16:53:48 +08:00
if [ ${ counter } -ge 2 ] ; then
echo -e "FAIL"
if [ -f " ${ lgsmlog } " ] ; then
fn_script_log_fatal " Downloading ${ local_filename } "
fn_script_log_fatal " ${ fileurl } "
fi
core_exit.sh
else
echo -e "ERROR"
if [ -f " ${ lgsmlog } " ] ; then
fn_script_log_error " Downloading ${ local_filename } "
fn_script_log_error " ${ fileurl } "
fi
2017-04-17 05:41:28 +08:00
fi
2017-04-09 22:06:44 +08:00
else
2020-05-19 16:53:48 +08:00
echo -en "OK"
sleep 0.3
echo -en "\033[2K\\r"
if [ -f " ${ lgsmlog } " ] ; then
fn_script_log_pass " Downloading ${ local_filename } "
fi
# Make file executable if chmodx is set.
if [ " ${ chmodx } " = = "chmodx" ] ; then
chmod +x " ${ local_filedir } / ${ local_filename } "
fi
# Remove trap.
trap - INT
break
2017-04-09 22:06:44 +08:00
fi
2020-05-19 16:53:48 +08:00
done
2015-12-13 03:55:57 +08:00
fi
2017-04-09 22:06:44 +08:00
2017-04-17 04:03:48 +08:00
if [ -f " ${ local_filedir } / ${ local_filename } " ] ; then
2020-05-19 16:53:48 +08:00
# Execute file if run is set.
2017-04-09 22:06:44 +08:00
if [ " ${ run } " = = "run" ] ; then
2019-11-25 18:00:54 +08:00
# shellcheck source=/dev/null
2017-04-17 04:03:48 +08:00
source " ${ local_filedir } / ${ local_filename } "
2017-04-09 22:06:44 +08:00
fi
fi
}
2017-04-17 03:20:15 +08:00
fn_bootstrap_fetch_file_github( ) {
github_file_url_dir = " ${ 1 } "
github_file_url_name = " ${ 2 } "
2020-10-11 05:14:19 +08:00
# If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
if [ " ${ githubbranch } " = = "master" ] && [ " ${ githubuser } " = = "GameServerManager" ] && [ " ${ commandname } " != "UPDATE-LGSM" ] ; then
2020-05-19 16:53:48 +08:00
remote_fileurl = " https://raw.githubusercontent.com/ ${ githubuser } / ${ githubrepo } / ${ version } / ${ github_file_url_dir } / ${ github_file_url_name } "
remote_fileurl_backup = " https://bitbucket.org/ ${ githubuser } / ${ githubrepo } /raw/ ${ version } / ${ github_file_url_dir } / ${ github_file_url_name } "
else
remote_fileurl = " https://raw.githubusercontent.com/ ${ githubuser } / ${ githubrepo } / ${ githubbranch } / ${ github_file_url_dir } / ${ github_file_url_name } "
remote_fileurl_backup = " https://bitbucket.org/ ${ githubuser } / ${ githubrepo } /raw/ ${ githubbranch } / ${ github_file_url_dir } / ${ github_file_url_name } "
fi
remote_fileurl_name = "GitHub"
remote_fileurl_backup_name = "Bitbucket"
2017-10-21 20:13:31 +08:00
local_filedir = " ${ 3 } "
local_filename = " ${ github_file_url_name } "
2017-04-17 03:20:15 +08:00
chmodx = " ${ 4 :- 0 } "
run = " ${ 5 :- 0 } "
2017-10-21 20:13:31 +08:00
forcedl = " ${ 6 :- 0 } "
2017-04-17 03:20:15 +08:00
md5 = " ${ 7 :- 0 } "
2019-06-14 02:36:32 +08:00
# Passes vars to the file download function.
2020-05-19 16:53:48 +08:00
fn_bootstrap_fetch_file " ${ remote_fileurl } " " ${ remote_fileurl_backup } " " ${ remote_fileurl_name } " " ${ remote_fileurl_backup_name } " " ${ local_filedir } " " ${ local_filename } " " ${ chmodx } " " ${ run } " " ${ forcedl } " " ${ md5 } "
2017-04-17 03:20:15 +08:00
}
2015-12-13 03:55:57 +08:00
2019-06-14 02:36:32 +08:00
# Installer menu.
2017-04-09 22:06:44 +08:00
2017-04-13 06:44:09 +08:00
fn_print_center( ) {
2019-11-26 07:11:02 +08:00
columns = $( tput cols)
2019-11-25 18:00:54 +08:00
line = " $* "
2017-04-13 06:44:09 +08:00
printf "%*s\n" $(( ( ${# line } + columns) / 2 )) " ${ line } "
}
2017-04-15 22:50:16 +08:00
2017-04-13 06:44:09 +08:00
fn_print_horizontal( ) {
2019-11-26 07:11:02 +08:00
printf '%*s\n' " ${ COLUMNS :- $( tput cols) } " '' | tr ' ' "="
2017-04-13 06:44:09 +08:00
}
2019-06-14 02:36:32 +08:00
# Bash menu.
2017-04-13 06:44:09 +08:00
fn_install_menu_bash( ) {
local resultvar = $1
title = $2
caption = $3
options = $4
fn_print_horizontal
2018-04-12 00:28:35 +08:00
fn_print_center " ${ title } "
fn_print_center " ${ caption } "
2017-04-13 06:44:09 +08:00
fn_print_horizontal
menu_options = ( )
while read -r line || [ [ -n " ${ line } " ] ] ; do
2019-10-14 07:37:43 +08:00
var = $( echo -e " ${ line } " | awk -F "," '{print $2 " - " $3}' )
2017-04-13 06:44:09 +08:00
menu_options += ( " ${ var } " )
2019-08-30 16:56:15 +08:00
done < " ${ options } "
2017-04-13 06:44:09 +08:00
menu_options += ( "Cancel" )
select option in " ${ menu_options [@] } " ; do
2020-03-11 06:02:31 +08:00
if [ " ${ option } " ] && [ " ${ option } " != "Cancel" ] ; then
2017-04-13 06:44:09 +08:00
eval " $resultvar =\" ${ option /% \ */ } \" "
fi
break
done
}
2019-06-14 02:36:32 +08:00
# Whiptail/Dialog menu.
2017-04-13 06:44:09 +08:00
fn_install_menu_whiptail( ) {
local menucmd = $1
local resultvar = $2
title = $3
caption = $4
options = $5
height = ${ 6 :- 40 }
width = ${ 7 :- 80 }
menuheight = ${ 8 :- 30 }
IFS = ","
menu_options = ( )
while read -r line; do
2019-10-14 07:37:43 +08:00
key = $( echo -e " ${ line } " | awk -F "," '{print $3}' )
val = $( echo -e " ${ line } " | awk -F "," '{print $2}' )
2019-06-14 02:36:32 +08:00
menu_options += ( " ${ val // \" } " " ${ key // \" } " )
2018-04-12 00:28:35 +08:00
done < " ${ options } "
OPTION = $( ${ menucmd } --title " ${ title } " --menu " ${ caption } " " ${ height } " " ${ width } " " ${ menuheight } " " ${ menu_options [@] } " 3>& 1 1>& 2 2>& 3)
2017-04-17 04:03:48 +08:00
if [ $? = = 0 ] ; then
2017-04-13 06:44:09 +08:00
eval " $resultvar =\" ${ OPTION } \" "
else
eval " $resultvar = "
2017-04-09 22:06:44 +08:00
fi
2017-04-13 06:44:09 +08:00
}
2017-04-09 22:06:44 +08:00
2019-06-14 02:36:32 +08:00
# Menu selector.
2017-04-13 06:44:09 +08:00
fn_install_menu( ) {
local resultvar = $1
local selection = ""
title = $2
caption = $3
options = $4
2019-06-14 02:36:32 +08:00
# Get menu command.
2017-04-13 06:44:09 +08:00
for menucmd in whiptail dialog bash; do
2020-02-16 09:01:23 +08:00
if [ " $( command -v " ${ menucmd } " ) " ] ; then
2018-04-12 00:28:35 +08:00
menucmd = $( command -v " ${ menucmd } " )
2017-04-13 06:44:09 +08:00
break
fi
done
2018-04-12 00:28:35 +08:00
case " $( basename " ${ menucmd } " ) " in
2017-04-13 06:44:09 +08:00
whiptail| dialog)
fn_install_menu_whiptail " ${ menucmd } " selection " ${ title } " " ${ caption } " " ${ options } " 40 80 30; ;
*)
fn_install_menu_bash selection " ${ title } " " ${ caption } " " ${ options } " ; ;
esac
eval " $resultvar =\" ${ selection } \" "
}
2019-06-14 02:36:32 +08:00
# Gets server info from serverlist.csv and puts in to array.
2017-04-13 06:44:09 +08:00
fn_server_info( ) {
2017-06-19 05:07:32 +08:00
IFS = ","
2017-06-19 06:14:41 +08:00
server_info_array = ( $( grep -aw " ${ userinput } " " ${ serverlist } " ) )
2017-04-13 06:44:09 +08:00
shortname = " ${ server_info_array [0] } " # csgo
2017-05-29 21:32:48 +08:00
gameservername = " ${ server_info_array [1] } " # csgoserver
2017-04-13 06:44:09 +08:00
gamename = " ${ server_info_array [2] } " # Counter Strike: Global Offensive
}
fn_install_getopt( ) {
userinput = "empty"
2019-10-14 07:37:43 +08:00
echo -e " Usage: $0 [option] "
2017-04-13 06:44:09 +08:00
echo -e ""
2019-10-14 07:37:43 +08:00
echo -e " Installer - Linux Game Server Managers - Version ${ version } "
echo -e "https://linuxgsm.com"
2017-04-13 06:44:09 +08:00
echo -e ""
echo -e "Commands"
2017-10-21 05:06:14 +08:00
echo -e "install\t\t| Select server to install."
2019-06-14 02:36:32 +08:00
echo -e " servername\t| Enter name of game server to install. e.g $0 csgoserver. "
2017-10-21 05:06:14 +08:00
echo -e "list\t\t| List all servers available for install."
2017-04-13 06:44:09 +08:00
exit
}
fn_install_file( ) {
2017-05-29 21:32:48 +08:00
local_filename = " ${ gameservername } "
2017-04-17 04:03:48 +08:00
if [ -e " ${ local_filename } " ] ; then
2017-04-13 06:44:09 +08:00
i = 2
2017-04-17 04:03:48 +08:00
while [ -e " ${ local_filename } - ${ i } " ] ; do
2019-11-26 07:11:02 +08:00
( ( i++ ) )
2017-04-13 06:44:09 +08:00
done
2017-04-17 04:03:48 +08:00
local_filename = " ${ local_filename } - ${ i } "
2017-04-13 06:44:09 +08:00
fi
2017-04-17 04:03:48 +08:00
cp -R " ${ selfname } " " ${ local_filename } "
sed -i -e " s/shortname=\"core\"/shortname=\" ${ shortname } \"/g " " ${ local_filename } "
2017-05-29 21:32:48 +08:00
sed -i -e " s/gameservername=\"core\"/gameservername=\" ${ gameservername } \"/g " " ${ local_filename } "
2019-10-14 07:37:43 +08:00
echo -e " Installed ${ gamename } server as ${ local_filename } "
echo -e ""
2017-05-27 19:25:48 +08:00
if [ ! -d " ${ serverfiles } " ] ; then
2019-10-14 07:37:43 +08:00
echo -e " ./ ${ local_filename } install "
2017-05-27 19:25:48 +08:00
else
2019-10-14 07:37:43 +08:00
echo -e "Remember to check server ports"
echo -e " ./ ${ local_filename } details "
2017-05-28 04:07:55 +08:00
fi
2019-10-14 07:37:43 +08:00
echo -e ""
2017-04-13 06:44:09 +08:00
exit
}
2018-10-08 05:18:16 +08:00
# Prevent LinuxGSM from running as root. Except if doing a dependency install.
2017-04-17 04:03:48 +08:00
if [ " $( whoami) " = = "root" ] ; then
2018-10-08 05:18:16 +08:00
if [ " ${ userinput } " = = "install" ] || [ " ${ userinput } " = = "auto-install" ] || [ " ${ userinput } " = = "i" ] || [ " ${ userinput } " = = "ai" ] ; then
if [ " ${ shortname } " = = "core" ] ; then
2019-10-14 07:37:43 +08:00
echo -e "[ FAIL ] Do NOT run this script as root!"
2018-10-08 05:18:16 +08:00
exit 1
fi
elif [ ! -f " ${ functionsdir } /core_functions.sh " ] || [ ! -f " ${ functionsdir } /check_root.sh " ] || [ ! -f " ${ functionsdir } /core_messages.sh " ] ; then
2019-10-14 07:37:43 +08:00
echo -e "[ FAIL ] Do NOT run this script as root!"
2017-04-13 06:44:09 +08:00
exit 1
else
core_functions.sh
check_root.sh
fi
2017-04-09 22:06:44 +08:00
fi
2019-06-14 02:36:32 +08:00
# LinuxGSM installer mode.
if [ " ${ shortname } " = = "core" ] ; then
2019-06-29 09:06:55 +08:00
# Download the latest serverlist. This is the complete list of all supported servers.
2021-02-20 06:05:56 +08:00
fn_bootstrap_fetch_file_github "lgsm/data" "serverlist.csv" " ${ datadir } " "nochmodx" "norun" "forcedl" "nohash"
2019-06-29 09:06:55 +08:00
if [ ! -f " ${ serverlist } " ] ; then
2019-10-14 07:37:43 +08:00
echo -e "[ FAIL ] serverlist.csv could not be loaded."
2019-06-29 09:06:55 +08:00
exit 1
fi
2019-06-14 02:36:32 +08:00
if [ " ${ userinput } " = = "list" ] || [ " ${ userinput } " = = "l" ] ; then
2017-04-13 06:44:09 +08:00
{
2021-01-24 23:18:59 +08:00
tail -n +1 " ${ serverlist } " | awk -F "," '{print $2 "\t" $3}'
2017-04-13 06:44:09 +08:00
} | column -s $'\t' -t | more
exit
2017-06-19 05:07:32 +08:00
elif [ " ${ userinput } " = = "install" ] || [ " ${ userinput } " = = "i" ] ; then
2021-01-24 23:18:59 +08:00
tail -n +1 " ${ serverlist } " | awk -F "," '{print $1 "," $2 "," $3}' > " ${ serverlistmenu } "
2019-06-14 02:36:32 +08:00
fn_install_menu result "LinuxGSM" "Select game server to install." " ${ serverlistmenu } "
2017-04-13 06:44:09 +08:00
userinput = " ${ result } "
fn_server_info
2017-05-29 21:32:48 +08:00
if [ " ${ result } " = = " ${ gameservername } " ] ; then
2017-04-13 06:44:09 +08:00
fn_install_file
2017-04-17 03:25:30 +08:00
elif [ " ${ result } " = = "" ] ; then
2019-10-14 07:37:43 +08:00
echo -e "Install canceled"
2017-04-13 06:44:09 +08:00
else
2019-10-14 07:37:43 +08:00
echo -e "[ FAIL ] menu result does not match gameservername"
echo -e " result: ${ result } "
echo -e " gameservername: ${ gameservername } "
2017-04-13 06:44:09 +08:00
fi
2020-03-11 06:02:31 +08:00
elif [ " ${ userinput } " ] ; then
2017-04-13 06:44:09 +08:00
fn_server_info
2017-10-21 02:32:33 +08:00
if [ " ${ userinput } " = = " ${ gameservername } " ] || [ " ${ userinput } " = = " ${ gamename } " ] || [ " ${ userinput } " = = " ${ shortname } " ] ; then
2017-04-13 06:44:09 +08:00
fn_install_file
2017-10-21 02:32:33 +08:00
else
2019-10-14 07:37:43 +08:00
echo -e "[ FAIL ] unknown game server"
2017-04-13 06:44:09 +08:00
fi
else
fn_install_getopt
fi
2017-04-16 20:52:36 +08:00
2019-06-14 02:36:32 +08:00
# LinuxGSM server mode.
2017-04-09 22:06:44 +08:00
else
2017-04-15 22:50:16 +08:00
core_functions.sh
2018-10-08 05:18:16 +08:00
if [ " ${ shortname } " != "core-dep" ] ; then
2019-06-14 02:36:32 +08:00
# Load LinuxGSM configs.
2018-10-08 05:18:16 +08:00
# These are required to get all the default variables for the specific server.
# Load the default config. If missing download it. If changed reload it.
if [ ! -f " ${ configdirdefault } /config-lgsm/ ${ gameservername } /_default.cfg " ] ; then
mkdir -p " ${ configdirdefault } /config-lgsm/ ${ gameservername } "
2021-02-20 06:05:56 +08:00
fn_fetch_config " lgsm/config-default/config-lgsm/ ${ gameservername } " "_default.cfg" " ${ configdirdefault } /config-lgsm/ ${ gameservername } " "_default.cfg" "nochmodx" "norun" "noforcedl" "nohash"
2017-04-17 05:41:28 +08:00
fi
2018-10-08 05:18:16 +08:00
if [ ! -f " ${ configdirserver } /_default.cfg " ] ; then
mkdir -p " ${ configdirserver } "
2020-05-19 16:53:48 +08:00
echo -en "copying _default.cfg...\c"
2017-05-29 21:32:48 +08:00
cp -R " ${ configdirdefault } /config-lgsm/ ${ gameservername } /_default.cfg " " ${ configdirserver } /_default.cfg "
2020-07-18 06:56:35 +08:00
if [ $? != 0 ] ; then
2018-09-11 04:50:51 +08:00
echo -e "FAIL"
2017-04-17 05:41:28 +08:00
exit 1
else
2018-09-11 04:50:51 +08:00
echo -e "OK"
2017-04-17 05:41:28 +08:00
fi
2018-10-08 05:18:16 +08:00
else
function_file_diff = $( diff -q " ${ configdirdefault } /config-lgsm/ ${ gameservername } /_default.cfg " " ${ configdirserver } /_default.cfg " )
if [ " ${ function_file_diff } " != "" ] ; then
2020-05-19 16:53:48 +08:00
fn_print_warn_nl "_default.cfg has altered. reloading config."
echo -en "copying _default.cfg...\c"
2018-10-08 05:18:16 +08:00
cp -R " ${ configdirdefault } /config-lgsm/ ${ gameservername } /_default.cfg " " ${ configdirserver } /_default.cfg "
2020-07-18 06:56:35 +08:00
if [ $? != 0 ] ; then
2018-10-08 05:18:16 +08:00
echo -e "FAIL"
exit 1
else
echo -e "OK"
fi
fi
fi
2021-01-24 22:34:02 +08:00
fi
# Configs have to be loaded twice to allow start startparameters to pick up all vars
# shellcheck source=/dev/null
source " ${ configdirserver } /_default.cfg "
# Load the common.cfg config. If missing download it.
if [ ! -f " ${ configdirserver } /common.cfg " ] ; then
2021-02-20 06:05:56 +08:00
fn_fetch_config "lgsm/config-default/config-lgsm" "common-template.cfg" " ${ configdirserver } " "common.cfg" " ${ chmodx } " "nochmodx" "norun" "noforcedl" "nohash"
2019-11-25 18:00:54 +08:00
# shellcheck source=/dev/null
2021-01-24 22:34:02 +08:00
source " ${ configdirserver } /common.cfg "
else
# shellcheck source=/dev/null
source " ${ configdirserver } /common.cfg "
fi
# Load the secrets-common.cfg config. If missing download it.
if [ ! -f " ${ configdirserver } /secrets-common.cfg " ] ; then
2021-02-20 06:05:56 +08:00
fn_fetch_config "lgsm/config-default/config-lgsm" "secrets-common-template.cfg" " ${ configdirserver } " "secrets-common.cfg" " ${ chmodx } " "nochmodx" "norun" "noforcedl" "nohash"
2021-01-24 22:34:02 +08:00
# shellcheck source=/dev/null
source " ${ configdirserver } /secrets-common.cfg "
else
# shellcheck source=/dev/null
source " ${ configdirserver } /secrets-common.cfg "
fi
# Load the instance.cfg config. If missing download it.
if [ ! -f " ${ configdirserver } / ${ selfname } .cfg " ] ; then
2021-02-20 06:05:56 +08:00
fn_fetch_config "lgsm/config-default/config-lgsm" "instance-template.cfg" " ${ configdirserver } " " ${ selfname } .cfg " "nochmodx" "norun" "noforcedl" "nohash"
2021-01-24 22:34:02 +08:00
# shellcheck source=/dev/null
source " ${ configdirserver } / ${ selfname } .cfg "
else
# shellcheck source=/dev/null
source " ${ configdirserver } / ${ selfname } .cfg "
fi
# Load the secrets-instance.cfg config. If missing download it.
if [ ! -f " ${ configdirserver } /secrets- ${ selfname } .cfg " ] ; then
2021-02-20 06:05:56 +08:00
fn_fetch_config "lgsm/config-default/config-lgsm" "secrets-instance-template.cfg" " ${ configdirserver } " " secrets- ${ selfname } .cfg " "nochmodx" "norun" "noforcedl" "nohash"
2021-01-24 22:34:02 +08:00
# shellcheck source=/dev/null
source " ${ configdirserver } /secrets- ${ selfname } .cfg "
else
# shellcheck source=/dev/null
source " ${ configdirserver } /secrets- ${ selfname } .cfg "
fi
# Use eval if startparameters are only in _default.cfg to ensure all vars in startparameters are set.
if ! grep -qE "^[[:blank:]]*startparameters=" " ${ configdirserver } /common.cfg " " ${ configdirserver } / ${ selfname } .cfg " " ${ configdirserver } /secrets-common.cfg " " ${ configdirserver } /secrets- ${ selfname } .cfg " ; then
if [ " ${ shortname } " = = "wurm" ] ; then
2020-12-29 22:48:22 +08:00
# shellcheck source=/dev/null
2021-01-24 22:34:02 +08:00
source " ${ servercfgfullpath } "
2020-12-29 22:48:22 +08:00
fi
2018-09-11 04:50:51 +08:00
2021-01-24 22:34:02 +08:00
if [ -n " ${ preexecutable } " ] ; then
eval preexecutable = " $( sed -nr 's/^ *preexecutable=(.*)$/\1/p' " ${ configdirserver } /_default.cfg " ) "
2018-10-08 05:18:16 +08:00
fi
2021-01-24 22:34:02 +08:00
eval startparameters = " $( sed -nr 's/^ *startparameters=(.*)$/\1/p' " ${ configdirserver } /_default.cfg " ) "
fi
# Load the linuxgsm.sh in to tmpdir. If missing download it.
if [ ! -f " ${ tmpdir } /linuxgsm.sh " ] ; then
2021-02-20 06:05:56 +08:00
fn_fetch_file_github "" "linuxgsm.sh" " ${ tmpdir } " "chmodx" "norun" "noforcedl" "nohash"
2017-04-29 02:03:46 +08:00
fi
2021-01-24 22:34:02 +08:00
2019-06-14 02:36:32 +08:00
# Enables ANSI colours from core_messages.sh. Can be disabled with ansi=off.
2018-09-11 04:50:51 +08:00
fn_ansi_loader
2019-06-14 02:36:32 +08:00
# Prevents running of core_exit.sh for Travis-CI.
2017-06-21 03:43:29 +08:00
if [ " ${ travistest } " != "1" ] ; then
getopt = $1
core_getopt.sh
fi
2019-06-29 08:45:28 +08:00
fi