Browse Source

Merge pull request #2197 from GameServerManagers/release/190217

Release/190217
pull/2212/head 190202
Daniel Gibbs 6 years ago
committed by GitHub
parent
commit
45fc8619e1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      .github/ISSUE_TEMPLATE/bug_report.md
  2. 10
      .github/ISSUE_TEMPLATE/feature_request.md
  3. 4
      .github/ISSUE_TEMPLATE/new-server-request.md
  4. 16
      .github/lock.yml
  5. 13
      PULL_REQUEST_TEMPLATE.md
  6. 130
      lgsm/config-default/config-lgsm/iosserver/_default.cfg
  7. 116
      lgsm/config-default/config-lgsm/rtcwserver/_default.cfg
  8. 2
      lgsm/data/serverlist.csv
  9. 2
      lgsm/functions/alert_discord.sh
  10. 18
      lgsm/functions/check_deps.sh
  11. 2
      lgsm/functions/check_permissions.sh
  12. 11
      lgsm/functions/fix_csgo.sh
  13. 25
      lgsm/functions/info_config.sh
  14. 8
      lgsm/functions/info_distro.sh
  15. 11
      lgsm/functions/info_glibc.sh
  16. 21
      lgsm/functions/info_messages.sh
  17. 8
      lgsm/functions/info_parms.sh
  18. 14
      lgsm/functions/install_config.sh
  19. 88
      lgsm/functions/install_server_files.sh
  20. 10
      lgsm/functions/query_gamedig.sh
  21. 4
      lgsm/functions/query_gsquery.py
  22. 2
      linuxgsm.sh

8
.github/ISSUE_TEMPLATE/bug_report.md

@ -23,13 +23,13 @@ Any general support issues on GitHub will be migrated to [LinuxGSM-Support](http
## User Story
As a \[user description], I want \[desired action] so that \[desired outcome].
As a [user description], I want [desired action] so that [desired outcome].
## Basic info
* Distro \[Ubuntu 18.04]
* Game \[Garry's Mod]
* Feature \[Monitor]
* Distro: [Ubuntu 18.04]
* Game: [Garry's Mod]
* Command: [Monitor]
## Further Information

10
.github/ISSUE_TEMPLATE/feature_request.md

@ -23,15 +23,13 @@ Any general support issues on GitHub will be migrated to [LinuxGSM-Support](http
## User Story
As a \[user description], I want \[desired action] so that \[desired outcome].
As a [user description], I want [desired action] so that [desired outcome].
## Basic info
As a \[user description], I want \[desired action] so that \[desired outcome]
* Distro \[Ubuntu 18.04]
* Game \[Garry's Mod]
* Feature \[Monitor]
* Distro: [Ubuntu 18.04]
* Game: [Garry's Mod]
* Command: [Monitor]
## Further Information

4
.github/ISSUE_TEMPLATE/new-server-request.md

@ -6,7 +6,7 @@ about: Suggest a new game server to be added
## What game server would you like adding?
\[game server]
[game server]
## Can you link to any tutorials or guides?
@ -19,7 +19,7 @@ Provide any useful documentation or resources that might help.
If yes Use SteamDB to get the appid. (https://steamdb.info).
\[appid]
[appid]
## Is the server supported on Linux?

16
.github/lock.yml

@ -1,9 +1,13 @@
# Configuration for lock-threads - https://github.com/dessant/lock-threads
# Configuration for Lock Threads - https://github.com/dessant/lock-threads
# Number of days of inactivity before a closed issue or pull request is locked
daysUntilLock: 365
# Issues and pull requests with these labels will not be locked. Set to `[]` to disable
# Skip issues and pull requests created before a given timestamp. Timestamp must
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
skipCreatedBefore: false
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
exemptLabels: []
# Label to add before locking, such as `outdated`. Set to `false` to disable
@ -15,6 +19,9 @@ lockComment: >
any recent activity after it was closed. Please open a new issue for
related bugs.
# Assign `resolved` as the reason for locking. Set to `false` to disable
setLockReason: false
# Limit to only `issues` or `pulls`
# only: issues
@ -25,4 +32,7 @@ lockComment: >
# lockLabel: outdated
# pulls:
# daysUntilLock: 30
# daysUntilLock: 30
# Repository to extend settings from
# _extends: repo

13
PULL_REQUEST_TEMPLATE.md

@ -6,15 +6,18 @@ Fixes #\[issue]
## Type of change
* [ ] Bug fix (non breaking change which fixes an issue)
* [ ] New feature (non breaking change which adds functionality)
* [ ] Refactor (non breaking change restructures existing code)
* [ ] Bug fix (change which fixes an issue)
* [ ] New feature (change which adds functionality)
* [ ] New Server (new server added)
* [ ] Refactor (restructures existing code)
* [ ] This change requires a documentation update
## Checklist
* [ ] My code follows the style guidelines of this project
* [ ] This pull request links to an issue
* [ ] I have performed a self review of my own code
* [ ] This pull request uses the `develop` branch as its base
* [ ] I have performed a self-review of my own code
* [ ] I have squashed commits
* [ ] I have commented my code, particularly in hard to understand areas
* [ ] I have made corresponding changes to the documentation
* [ ] I have made corresponding changes to the documentation if required

130
lgsm/config-default/config-lgsm/iosserver/_default.cfg

@ -0,0 +1,130 @@
##################################
######## Default Settings ########
##################################
# DO NOT EDIT WILL BE OVERWRITTEN!
# Copy settings from here and use them in either
# common.cfg - applies settings to every instance
# [instance].cfg - applies settings to a specific instance
#### Server Settings ####
## Server Start Settings | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0"
port="27015"
clientport="27005"
sourcetvport="27020"
defaultmap="8v8_vienna"
maxplayers="32"
## Server Start Command | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
fn_parms(){
parms="-game iosoccer -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers ${maxplayers}"
}
#### LinuxGSM Settings ####
## Notification Alerts
# (on|off)
# More info | https://docs.linuxgsm.com/alerts#more-info
postalert="off"
postdays="7"
posttarget="https://hastebin.com"
# Discord Alerts | https://docs.linuxgsm.com/alerts/discord
discordalert="off"
discordwebhook="webhook"
# Email Alerts | https://docs.linuxgsm.com/alerts/email
emailalert="off"
email="[email protected]"
emailfrom=""
# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt
iftttalert="off"
ifttttoken="accesstoken"
iftttevent="linuxgsm_alert"
# Mailgun Email Alerts | https://docs.linuxgsm.com/alerts/mailgun
mailgunalert="off"
mailguntoken="accesstoken"
mailgundomain="example.com"
mailgunemailfrom="[email protected]"
mailgunemail="[email protected]"
# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet
pushbulletalert="off"
pushbullettoken="accesstoken"
channeltag=""
# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover
pushoveralert="off"
pushovertoken="accesstoken"
# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
# You can add a custom cURL string eg proxy (useful in Russia) or else in "curlcustomstring".
# like a "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help", if you not need
# any custom string in curl - simple ignore this parameter.
telegramalert="off"
telegramtoken="accesstoken"
telegramchatid=""
curlcustomstring=""
## Updating | https://docs.linuxgsm.com/commands/update
updateonstart="off"
## Backup | https://docs.linuxgsm.com/commands/backup
maxbackups="4"
maxbackupdays="30"
stoponbackup="on"
## Logging | https://docs.linuxgsm.com/features/logging
consolelogging="on"
logdays="7"
#### LinuxGSM Advanced Settings ####
# ANSI Colors
ansi="on"
## SteamCMD Settings
# Server appid
appid="673990"
# Steam App Branch Select
# Allows to opt into the various Steam app branches. Default branch is "".
# Example: "-beta latest_experimental"
branch=""
## LinuxGSM Server Details
# Do not edit
gamename="IOSoccer"
engine="source"
#### Directories ####
# Edit with care
## Server Specific Directories
systemdir="${serverfiles}/iosoccer"
executabledir="${serverfiles}"
executable="./srcds_run"
servercfg="${servicename}.cfg"
servercfgdefault="server.cfg"
servercfgdir="${systemdir}/cfg"
servercfgfullpath="${servercfgdir}/${servercfg}"
## Backup Directory
backupdir="${rootdir}/backups"
## Logging Directories
logdir="${rootdir}/log"
gamelogdir="${systemdir}/logs"
lgsmlogdir="${logdir}/script"
consolelogdir="${logdir}/console"
lgsmlog="${lgsmlogdir}/${servicename}-script.log"
consolelog="${consolelogdir}/${servicename}-console.log"
alertlog="${lgsmlogdir}/${servicename}-alert.log"
postdetailslog="${lgsmlogdir}/${servicename}-postdetails.log"
## Logs Naming
lgsmlogdate="${lgsmlogdir}/${servicename}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"

116
lgsm/config-default/config-lgsm/rtcwserver/_default.cfg

@ -0,0 +1,116 @@
##################################
######## Default Settings ########
##################################
# DO NOT EDIT WILL BE OVERWRITTEN!
# Copy settings from here and use them in either
# common.cfg - applies settings to every instance
# [instance].cfg - applies settings to a specific instance
#### Server Settings ####
## Server Start Settings | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0"
port="27960"
defaultmap="mp_beach"
## Server Start Command | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
fn_parms(){
parms="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 1 +set net_ip ${ip} +set net_port ${port} +exec ${servercfg} +map ${defaultmap}"
}
#### LinuxGSM Settings ####
## Notification Alerts
# (on|off)
# More info | https://docs.linuxgsm.com/alerts#more-info
postalert="off"
postdays="7"
posttarget="https://hastebin.com"
# Discord Alerts | https://docs.linuxgsm.com/alerts/discord
discordalert="off"
discordwebhook="webhook"
# Email Alerts | https://docs.linuxgsm.com/alerts/email
emailalert="off"
email="[email protected]"
emailfrom=""
# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt
iftttalert="off"
ifttttoken="accesstoken"
iftttevent="linuxgsm_alert"
# Mailgun Email Alerts | https://docs.linuxgsm.com/alerts/mailgun
mailgunalert="off"
mailguntoken="accesstoken"
mailgundomain="example.com"
mailgunemailfrom="[email protected]"
mailgunemail="[email protected]"
# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet
pushbulletalert="off"
pushbullettoken="accesstoken"
channeltag=""
# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover
pushoveralert="off"
pushovertoken="accesstoken"
# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
# You can add a custom cURL string eg proxy (useful in Russia) or else in "curlcustomstring".
# like a "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help", if you not need
# any custom string in curl - simple ignore this parameter.
telegramalert="off"
telegramtoken="accesstoken"
telegramchatid=""
curlcustomstring=""
## Backup | https://docs.linuxgsm.com/commands/backup
maxbackups="4"
maxbackupdays="30"
stoponbackup="on"
## Logging | https://docs.linuxgsm.com/features/logging
consolelogging="on"
logdays="7"
#### LinuxGSM Advanced Settings ####
# ANSI Colors
ansi="on"
## LinuxGSM Server Details
# Do not edit
gamename="Return to Castle Wolfenstein"
engine="ioquake3"
#### Directories ####
# Edit with care
## Server Specific Directories
systemdir="${serverfiles}/main"
executabledir="${serverfiles}"
executable="./iowolfded.x86_64"
servercfg="${servicename}.cfg"
servercfgdefault="server.cfg"
servercfgdir="${systemdir}"
servercfgfullpath="${servercfgdir}/${servercfg}"
## Backup Directory
backupdir="${rootdir}/backups"
## Logging Directories
logdir="${rootdir}/log"
gamelogdir="${serverfiles}/Logs"
lgsmlogdir="${logdir}/script"
consolelogdir="${logdir}/console"
lgsmlog="${lgsmlogdir}/${servicename}-script.log"
consolelog="${consolelogdir}/${servicename}-console.log"
alertlog="${lgsmlogdir}/${servicename}-alert.log"
postdetailslog="${lgsmlogdir}/${servicename}-postdetails.log"
## Logs Naming
lgsmlogdate="${lgsmlogdir}/${servicename}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"

2
lgsm/data/serverlist.csv

@ -37,6 +37,7 @@ hldm,hldmserver,Half-Life: Deathmatch
hw,hwserver,Hurtworld
ins,insserver,Insurgency
inss,inssserver,Insurgency: Sandstorm
ios,iosserver,IOSoccer
jc2,jc2server,Just Cause 2
jc3,jc3server,Just Cause 3
kf,kfserver,Killing Floor
@ -61,6 +62,7 @@ ql,qlserver,Quake Live
qw,qwserver,Quake World
ro,roserver,Red Orchestra: Ostfront 41-45
ricochet,ricochetserver,Ricochet
rtcw,rtcwserver,Return to Castle Wolfenstein
rust,rustserver,Rust
rw,rwserver, Rising World
samp,sampserver,San Andreas Multiplayer

Can't render this file because it has a wrong number of fields in line 65.

2
lgsm/functions/alert_discord.sh

@ -16,7 +16,7 @@ escaped_alertbody="$(echo -n "${alertbody}" | jq -sRr "@json")"
json=$(cat <<EOF
{
"username":"LinuxGSM",
"avatar_url":"https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/data/alert_discord_logo.png",
"avatar_url":"https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/data/alert_discord_logo.png",
"file":"content",
"embeds": [{
"color": "2067276",

18
lgsm/functions/check_deps.sh

@ -10,7 +10,11 @@ fn_install_mono_repo(){
if [ "${monostatus}" != "0" ]; then
fn_print_dots "Adding Mono repository"
sleep 0.5
sudo -v > /dev/null 2>&1
if [ "${autoinstall}" == "1" ]; then
sudo -n true > /dev/null 2>&1
else
sudo -v > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
fn_print_info_nl "Automatically adding Mono repository."
fn_script_log_info "Automatically adding Mono repository."
@ -101,7 +105,11 @@ fn_install_universe_repo(){
fn_print_warning_nl "Ubuntu 18.04.1 contains a bug which means the sources.list file does not populate with the Ubuntu universe repository."
fn_print_information_nl "Attempting to add Universe Repo"
sleep 0.5
sudo -v > /dev/null 2>&1
if [ "${autoinstall}" == "1" ]; then
sudo -n true > /dev/null 2>&1
else
sudo -v > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
echo -en ".\r"
sleep 1
@ -228,7 +236,11 @@ fn_found_missing_deps(){
fn_print_warning_nl "jq is not available in the ${distroname} repository"
echo " * https://docs.linuxgsm.com/requirements/jq"
fi
sudo -v > /dev/null 2>&1
if [ "${autoinstall}" == "1" ]; then
sudo -n true > /dev/null 2>&1
else
sudo -v > /dev/null 2>&1
fi
if [ $? -eq 0 ]; then
fn_print_information_nl "Automatically installing missing dependencies."
fn_script_log_info "Automatically installing missing dependencies."

2
lgsm/functions/check_permissions.sh

@ -181,7 +181,7 @@ fn_sys_perm_fix_manually_msg(){
# Attempt to fix /sys related permission errors if sudo is available, exits otherwise
fn_sys_perm_errors_fix(){
sudo -v > /dev/null 2>&1
sudo -n true > /dev/null 2>&1
if [ $? -eq 0 ]; then
fn_print_dots "Automatically fixing /sys permissions"
sleep 0.5

11
lgsm/functions/fix_csgo.sh

@ -32,14 +32,3 @@ if [ -f "${servercfgdir}/valve.rc" ] && grep -E '^\s*exec\s*(default|joystick)\.
sed -i 's/^\s*exec\s*joystick.cfg/\/\/exec joystick.cfg/g' "${servercfgdir}/valve.rc" > /dev/null 2>&1
fn_fix_msg_end
fi
# Fixes: workshop map issue.
# http://forums.steampowered.com/forums/showthread.php?t=3170366.
if [ -f "${systemdir}/subscribed_collection_ids.txt" ]||[ -f "${systemdir}/subscribed_file_ids.txt" ]||[ -f "${systemdir}/ugc_collection_cache.txt" ]; then
fixname="workshop map"
fn_fix_msg_start
rm -f "${systemdir}/subscribed_collection_ids.txt"
rm -f "${systemdir}/subscribed_file_ids.txt"
rm -f "${systemdir}/ugc_collection_cache.txt"
fn_fix_msg_end
fi

25
lgsm/functions/info_config.sh

@ -318,7 +318,7 @@ fn_info_config_inss(){
rconenabled=${rconenabled:-"NOT SET"}
rconpassword=${rconpassword:-"NOT SET"}
rconport=${rconport:-"0"}
fi
fi
}
fn_info_config_minecraft(){
if [ ! -f "${servercfgfullpath}" ]; then
@ -589,6 +589,26 @@ fn_info_config_risingworld(){
fi
}
fn_info_config_rtcw(){
if [ ! -f "${servercfgfullpath}" ]; then
rconpassword="${unavailable}"
servername="${unavailable}"
serverpassword="${unavailable}"
maxplayers="${zero}"
else
rconpassword=$(grep "rconpassword" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set rconpassword//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
servername=$(grep "sv_hostname" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set sv_hostname//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
serverpassword=$(grep "g_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set g_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
maxplayers=$(grep "sv_maxclients" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
# Not Set
rconpassword=${rconpassword:-"NOT SET"}
servername=${servername:-"NOT SET"}
serverpassword=${serverpassword:-"NOT SET"}
maxplayers=${maxplayers:-"0"}
fi
}
fn_info_config_seriousengine35(){
if [ ! -f "${servercfgfullpath}" ]; then
servername="${unavailable}"
@ -1198,6 +1218,9 @@ elif [ "${shortname}" == "pz" ]; then
# ARMA 3
elif [ "${shortname}" == "arma3" ]; then
fn_info_config_realvirtuality
# Return to Castle Wolfenstein
elif [ "${shortname}" == "rtcw" ]; then
fn_info_config_rtcw
# Rising World
elif [ "${shortname}" == "rw" ]; then
fn_info_config_risingworld

8
lgsm/functions/info_distro.sh

@ -89,8 +89,10 @@ days=$(( uptime/60/60/24 ))
## Average server load
load=$(uptime|awk -F 'load average: ' '{ print $2 }')
## Memory information
## CPU information
cpumodel=$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')
cpucores=$(awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo)
cpufreuency=$(awk -F: ' /cpu MHz/ {freq=$2} END {print freq " MHz"}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')
## Memory information
# Available RAM and swap.
@ -232,4 +234,4 @@ if [ ! "$(command -v jq 2>/dev/null)" ]; then
fi
fi
fi
fi
fi

11
lgsm/functions/info_glibc.sh

@ -77,7 +77,7 @@ elif [ "${shortname}" == "kf2" ]; then
glibcfix="no"
elif [ "${shortname}" == "tu" ]; then
glibcrequired="2.15"
glibcfix="no"
glibcfix="no"
elif [ "${gamename}" == "Mumble" ]; then
glibcrequired="NOT REQUIRED"
glibcfix="no"
@ -102,6 +102,9 @@ elif [ "${gamename}" == "Quake 3: Arena" ]; then
elif [ "${gamename}" == "Quake Live" ]; then
glibcrequired="2.15"
glibcfix="no"
elif [ "${gamename}" == "Return to Castle Wolfenstein" ]; then
glibcrequired="2.1"
glibcfix="no"
elif [ "${shortname}" == "rw" ]; then
glibcrequired="2.14"
glibcfix="no"
@ -112,11 +115,11 @@ elif [ "${gamename}" == "Squad" ]; then
glibcrequired="2.17"
glibcfix="no"
elif [ "${gamename}" == "Sven Co-op" ]; then
glibcrequired="2.18"
glibcrequired="2.24"
glibcfix="no"
elif [ "${shortname}" == "sbots" ]; then
glibcrequired="2.17"
glibcfix="no"
glibcfix="no"
elif [ "${gamename}" == "Team Fortress 2" ]; then
glibcrequired="2.15"
glibcfix="yes"
@ -206,7 +209,7 @@ elif [ "${engine}" == "source" ]; then
glibcfix="no"
elif [ "${engine}" == "goldsource" ]; then
glibcrequired="2.3.4"
glibcfix="no"
glibcfix="no"
else
glibcrequired="UNKNOWN"
glibcfix="no"

21
lgsm/functions/info_messages.sh

@ -74,6 +74,12 @@ fn_info_message_performance(){
echo -e "${blue}Avg Load:\t${default}${load}"
} | column -s $'\t' -t
echo -e ""
{
echo -e "${blue}CPU Model:\t${default}${cpumodel}"
echo -e "${blue}CPU Cores:\t${default}${cpucores}"
echo -e "${blue}CPU Frequency:\t${default}${cpufreuency}"
} | column -s $'\t' -t
echo -e ""
{
echo -e "${blue}Mem:\t${blue}total\tused\tfree\tcached\tavailable${default}"
echo -e "${blue}Physical:\t${default}${physmemtotal}\t${physmemused}\t${physmemfree}\t${physmemcached}\t${physmemavailable}${default}"
@ -489,7 +495,7 @@ fn_info_message_ports(){
fi
done
# engines/games that require editing the parms
local ports_edit_array=( "goldsource" "Factorio" "Hurtworld" "iw3.0" "Rust" "spark" "source" "starbound" "unreal4" "realvirtuality")
local ports_edit_array=( "goldsource" "Factorio" "Hurtworld" "iw3.0" "ioquake3" "Rust" "spark" "source" "starbound" "unreal4" "realvirtuality")
for port_edit in "${ports_edit_array[@]}"
do
if [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]||[ "${shortname}" == "${port_edit}" ]; then
@ -858,6 +864,15 @@ fn_info_message_risingworld(){
} | column -s $'\t' -t
}
fn_info_message_rtcw(){
echo -e "netstat -atunp | grep iowolfded"
echo -e ""
{
echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
echo -e "> Game\tINBOUND\t${port}\tudp"
} | column -s $'\t' -t
}
fn_info_message_rust(){
echo -e "netstat -atunp | grep Rust"
echo -e ""
@ -1209,7 +1224,7 @@ fn_info_message_select_engine(){
elif [ "${gamename}" == "Stationeers" ]; then
fn_info_message_stationeers
elif [ "${shortname}" == "sbots" ]; then
fn_info_message_sbots
fn_info_message_sbots
elif [ "${gamename}" == "TeamSpeak 3" ]; then
fn_info_message_teamspeak3
elif [ "${gamename}" == "Tower Unite" ]; then
@ -1218,6 +1233,8 @@ fn_info_message_select_engine(){
fn_info_message_mta
elif [ "${gamename}" == "Mumble" ]; then
fn_info_message_mumble
elif [ "${gamename}" == "Return to Castle Wolfenstein" ]; then
fn_info_message_rtcw
elif [ "${gamename}" == "Rust" ]; then
fn_info_message_rust
elif [ "${gamename}" == "Wurm Unlimited" ]; then

8
lgsm/functions/info_parms.sh

@ -77,6 +77,7 @@ fn_info_parms_projectzomboid(){
fn_info_parms_quakeworld(){
port=${port:-"0"}
queryport=${port}
}
fn_info_parms_quake2(){
@ -92,6 +93,11 @@ fn_info_parms_risingworld(){
}
fn_info_parms_rtcw(){
port=${port:-"0"}
defaultmap=${defaultmap:-"NOT SET"}
}
fn_info_parms_rust(){
servername=${servername:-"NOT SET"}
port=${port:-"0"}
@ -188,6 +194,8 @@ elif [ "${shortname}" == "qw" ]; then
fn_info_parms_quakeworld
elif [ "${shortname}" == "q2" ]||[ "${shortname}" == "q3" ]; then
fn_info_parms_quake2
elif [ "${shortname}" == "rtcw" ]; then
fn_info_parms_rtcw
# Rust
elif [ "${shortname}" == "rust" ]; then
fn_info_parms_rust

14
lgsm/functions/install_config.sh

@ -55,7 +55,7 @@ fn_default_config_remote(){
# Copys local default config to server config location
fn_default_config_local(){
echo "copying ${servercfgdefault} config file."
echo "copying ${servercfgdefault} config file."
cp -nv "${servercfgfullpathdefault}" "${servercfgfullpath}"
sleep 0.5
}
@ -373,6 +373,12 @@ elif [ "${gamename}" == "Insurgency" ]; then
fn_fetch_default_config
fn_default_config_remote
fn_set_config_vars
elif [ "${gamename}" == "IOSoccer" ]; then
gamedirname="IOSoccer"
array_configs+=( server.cfg )
fn_fetch_default_config
fn_default_config_remote
fn_set_config_vars
elif [ "${gamename}" == "Just Cause 2" ]; then
gamedirname="JustCause2"
array_configs+=( config.lua )
@ -487,6 +493,12 @@ elif [ "${gamename}" == "Ricochet" ]; then
fn_fetch_default_config
fn_default_config_remote
fn_set_config_vars
elif [ "${gamename}" == "Return to Castle Wolfenstein" ]; then
gamedirname="ReturnToCastleWolfenstein"
array_configs+=( server.cfg )
fn_fetch_default_config
fn_default_config_remote
fn_set_config_vars
elif [ "${gamename}" == "Rust" ]; then
gamedirname="Rust"
fn_check_cfgdir

88
lgsm/functions/install_server_files.sh

@ -9,46 +9,46 @@ local commandaction="Install"
local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_install_server_files(){
if [ "${gamename}" == "Battlefield: 1942" ]; then
remote_fileurl="http://files.linuxgsm.com/BattleField1942/bf1942_lnxded-1.61-hacked-to-1.612.full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="bf1942_lnxded-1.61-hacked-to-1.612.full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="a86a5d3cd64ca59abcc9bb9f777c2e5d"
elif [ "${gamename}" == "BrainBread" ]; then
if [ "${shortname}" == "bf1942" ]; then
remote_fileurl="https://files.linuxgsm.com/BattleField1942/bf1942_lnxded-1.61-hacked-to-1.612.full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="bf1942_lnxded-1.61-hacked-to-1.612.full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="a86a5d3cd64ca59abcc9bb9f777c2e5d"
elif [ "${shortname}" == "bb" ]; then
remote_fileurl="https://files.linuxgsm.com/BrainBread/brainbread-v1.2-linuxserver.tar.bz2"; local_filedir="${tmpdir}"; local_filename="brainbread-v1.2-linuxserver.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="5c729a7e9eecfa81b71a6a1f7267f0fd"
elif [ "${gamename}" == "Call of Duty" ]; then
remote_fileurl="http://files.linuxgsm.com/CallOfDuty/cod-lnxded-1.5b-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="cod-lnxded-1.5-large.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="19629895a4cf6fd8f6d1ee198b5304cd"
elif [ "${gamename}" == "Call of Duty: United Offensive" ]; then
remote_fileurl="http://files.linuxgsm.com/CallOfDutyUnitedOffensive/coduo-lnxded-1.51b-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="coduo-lnxded-1.51b-full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="f1804ef13036e2b4ab535db000b19e97"
elif [ "${gamename}" == "Call of Duty 2" ]; then
remote_fileurl="http://files.linuxgsm.com/CallOfDuty2/cod2-lnxded-1.3-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="cod2-lnxded-1.3-full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="078128f83d06dc3d7699428dc2870214"
elif [ "${gamename}" == "Call of Duty 4" ]; then
remote_fileurl="http://files.linuxgsm.com/CallOfDuty4/cod4x18_dedrun.tar.bz2"; local_filedir="${tmpdir}"; local_filename="cod4x18_dedrun.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="bebdfc1755626462bdaad49f6f926c08"
elif [ "${gamename}" == "Call of Duty: World at War" ]; then
remote_fileurl="http://files.linuxgsm.com/CallOfDutyWorldAtWar/codwaw-lnxded-1.7-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="codwaw-lnxded-1.7-full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="0489697ff3bf678c109bfb377d1b7895"
elif [ "${shortname}" == "cod" ]; then
remote_fileurl="https://files.linuxgsm.com/CallOfDuty/cod-lnxded-1.5b-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="cod-lnxded-1.5-large.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="19629895a4cf6fd8f6d1ee198b5304cd"
elif [ "${shortname}" == "coduo" ]; then
remote_fileurl="https://files.linuxgsm.com/CallOfDutyUnitedOffensive/coduo-lnxded-1.51b-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="coduo-lnxded-1.51b-full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="f1804ef13036e2b4ab535db000b19e97"
elif [ "${shortname}" == "cod2" ]; then
remote_fileurl="https://files.linuxgsm.com/CallOfDuty2/cod2-lnxded-1.3-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="cod2-lnxded-1.3-full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="078128f83d06dc3d7699428dc2870214"
elif [ "${shortname}" == "cod4" ]; then
remote_fileurl="https://files.linuxgsm.com/CallOfDuty4/cod4x18_1772_dedrun.tar.bz2"; local_filedir="${tmpdir}"; local_filename="cod4x18_1772_dedrun.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="de29f29d79f9cc24574b838daa501e46"
elif [ "${shortname}" == "codwaw" ]; then
remote_fileurl="https://files.linuxgsm.com/CallOfDutyWorldAtWar/codwaw-lnxded-1.7-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="codwaw-lnxded-1.7-full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="0489697ff3bf678c109bfb377d1b7895"
elif [ "${shortname}" == "etl" ]; then
remote_fileurl="http://files.linuxgsm.com/WolfensteinEnemyTerritory/etlegacy-v2.75-i386-et-260b.tar.bz2"; local_filedir="${tmpdir}"; local_filename="etlegacy-v2.75-i386-et-260b.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="92d7d4c26e0a295daed78cef623eeabb"
elif [ "${gamename}" == "GoldenEye: Source" ]; then
remote_fileurl="http://files.linuxgsm.com/GoldenEyeSource/GoldenEye_Source_v5.0.6_full_server.tar.bz2"; local_filedir="${tmpdir}"; local_filename="GoldenEye_Source_v5.0.6_full_server.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="c45c16293096706e8b5e2cd64a6f2931"
elif [ "${gamename}" == "Natural Selection" ]; then
remote_fileurl="http://files.linuxgsm.com/NaturalSelection/ns_dedicated_server_v32.tar.bz2"; local_filedir="${tmpdir}"; local_filename="ns_dedicated_server_v32.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="499cf63324b76925ada6baf5f2eacd67"
elif [ "${gamename}" == "Quake 2" ]; then
remote_fileurl="http://files.linuxgsm.com/Quake2/quake2-3.20-glibc-i386-full-linux2.0.tar.bz2"; local_filedir="${tmpdir}"; local_filename="quake2-3.20-glibc-i386-full-linux2.0.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="0b8c7e2d51f40b56b328c69e986e7c5f"
elif [ "${gamename}" == "Quake 3: Arena" ]; then
remote_fileurl="http://files.linuxgsm.com/Quake3/quake3-1.32c-x86-full-linux.tar.bz2"; local_filedir="${tmpdir}"; local_filename="quake3-1.32c-x86-full-linux.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="fd7258d827474f67663dda297bff4306"
elif [ "${gamename}" == "QuakeWorld" ]; then
remote_fileurl="http://files.linuxgsm.com/QuakeWorld/nquake.server.linux.083116.full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="nquake.server.linux.083116.full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="75a409cf08d808f075e4dacdc7b21b78"
elif [ "${gamename}" == "Unreal Tournament 2004" ]; then
remote_fileurl="http://files.linuxgsm.com/UnrealTournament2004/ut2004-server-3369-2-ultimate-linux.tar.bz2"; local_filedir="${tmpdir}"; local_filename="ut2004-server-3369-2-ultimate-linux.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="67c5e2cd9c2a4b04f163962ee41eff54"
elif [ "${gamename}" == "Unreal Tournament 99" ]; then
remote_fileurl="http://files.linuxgsm.com/UnrealTournament99/ut99-server-451-ultimate-linux.tar.bz2"; local_filedir="${tmpdir}"; local_filename="ut99-server-451-ultimate-linux.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="49cb24d0550ff6ddeaba6007045c6edd"
elif [ "${gamename}" == "Unreal Tournament" ]; then
remote_fileurl="https://files.linuxgsm.com/WolfensteinEnemyTerritory/etlegacy-v2.75-i386-et-260b.tar.bz2"; local_filedir="${tmpdir}"; local_filename="etlegacy-v2.75-i386-et-260b.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="92d7d4c26e0a295daed78cef623eeabb"
elif [ "${shortname}" == "ges" ]; then
remote_fileurl="https://files.linuxgsm.com/GoldenEyeSource/GoldenEye_Source_v5.0.6_full_server.tar.bz2"; local_filedir="${tmpdir}"; local_filename="GoldenEye_Source_v5.0.6_full_server.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="c45c16293096706e8b5e2cd64a6f2931"
elif [ "${shortname}" == "ns" ]; then
remote_fileurl="https://files.linuxgsm.com/NaturalSelection/ns_dedicated_server_v32.tar.bz2"; local_filedir="${tmpdir}"; local_filename="ns_dedicated_server_v32.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="499cf63324b76925ada6baf5f2eacd67"
elif [ "${shortname}" == "q2" ]; then
remote_fileurl="https://files.linuxgsm.com/Quake2/quake2-3.20-glibc-i386-full-linux2.0.tar.bz2"; local_filedir="${tmpdir}"; local_filename="quake2-3.20-glibc-i386-full-linux2.0.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="0b8c7e2d51f40b56b328c69e986e7c5f"
elif [ "${shortname}" == "q3" ]; then
remote_fileurl="https://files.linuxgsm.com/Quake3/quake3-1.32c-x86-full-linux.tar.bz2"; local_filedir="${tmpdir}"; local_filename="quake3-1.32c-x86-full-linux.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="fd7258d827474f67663dda297bff4306"
elif [ "${shortname}" == "qw" ]; then
remote_fileurl="https://files.linuxgsm.com/QuakeWorld/nquake.server.linux.083116.full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="nquake.server.linux.083116.full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="75a409cf08d808f075e4dacdc7b21b78"
elif [ "${shortname}" == "ut2k4" ]; then
remote_fileurl="https://files.linuxgsm.com/UnrealTournament2004/ut2004-server-3369-2-ultimate-linux.tar.bz2"; local_filedir="${tmpdir}"; local_filename="ut2004-server-3369-2-ultimate-linux.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="67c5e2cd9c2a4b04f163962ee41eff54"
elif [ "${shortname}" == "ut99" ]; then
remote_fileurl="https://files.linuxgsm.com/UnrealTournament99/ut99-server-451-ultimate-linux.tar.bz2"; local_filedir="${tmpdir}"; local_filename="ut99-server-451-ultimate-linux.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="49cb24d0550ff6ddeaba6007045c6edd"
elif [ "${shortname}" == "ut" ]; then
remote_fileurl="https://s3.amazonaws.com/unrealtournament/UnrealTournament-Client-XAN-3395761-Linux.zip"; local_filedir="${tmpdir}"; local_filename="UnrealTournament-Server-XAN-3395761-Linux.zip"; chmodx="noexecute" run="norun"; force="noforce"; md5="f04ad5b96865b19613303331ff4075eb"
elif [ "${gamename}" == "Unreal Tournament 3" ]; then
remote_fileurl="http://files.linuxgsm.com/UnrealTournament3/UT3-linux-server-2.1.tar.bz2"; local_filedir="${tmpdir}"; local_filename="UT3-linux-server-2.1.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="2527437b46f1b47f20228d27d72395a6"
elif [ "${gamename}" == "Vampire Slayer" ]; then
elif [ "${shortname}" == "ut3" ]; then
remote_fileurl="https://files.linuxgsm.com/UnrealTournament3/UT3-linux-server-2.1.tar.bz2"; local_filedir="${tmpdir}"; local_filename="UT3-linux-server-2.1.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="2527437b46f1b47f20228d27d72395a6"
elif [ "${shortname}" == "vs" ]; then
remote_fileurl="https://files.linuxgsm.com/VampireSlayer/vs_l-6.0_full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="vs_l-6.0_full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="38a79e44b98578bbdc5b15818493a066"
elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
remote_fileurl="http://files.linuxgsm.com/WolfensteinEnemyTerritory/enemy-territory.260b.tar.bz2"; local_filedir="${tmpdir}"; local_filename="enemy-territory.260b.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="f833f514bfcdd46b42c111f83350c5a7"
elif [ "${gamename}" == "San Andreas Multiplayer" ]; then
remote_fileurl="http://files.sa-mp.com/samp037svr_R2-1.tar.gz"; local_filedir="${tmpdir}"; local_filename="samp037svr_R2-1.tar.gz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="93705e165550c97484678236749198a4"
elif [ "${shortname}" == "wet" ]; then
remote_fileurl="https://files.linuxgsm.com/WolfensteinEnemyTerritory/enemy-territory.260b.tar.bz2"; local_filedir="${tmpdir}"; local_filename="enemy-territory.260b.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="f833f514bfcdd46b42c111f83350c5a7"
elif [ "${shortname}" == "samp" ]; then
remote_fileurl="https://files.sa-mp.com/samp037svr_R2-1.tar.gz"; local_filedir="${tmpdir}"; local_filename="samp037svr_R2-1.tar.gz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="93705e165550c97484678236749198a4"
fi
fn_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}"
fn_dl_extract "${local_filedir}" "${local_filename}" "${serverfiles}"
@ -124,7 +124,7 @@ fn_install_server_files_steamcmd(){
}
echo ""
echo "Installing ${gamename} Server"
echo "Installing ${shortname} Server"
echo "================================="
sleep 0.5
@ -132,20 +132,20 @@ if [ -n "${appid}" ]; then
fn_install_server_files_steamcmd
fi
if [ "${gamename}" == "TeamSpeak 3" ]; then
if [ "${shortname}" == "ts3" ]; then
update_ts3.sh
elif [ "${gamename}" == "Minecraft" ]; then
elif [ "${shortname}" == "mc" ]; then
install_minecraft_eula.sh
update_minecraft.sh
elif [ "${gamename}" == "Mumble" ]; then
elif [ "${shortname}" == "mumble" ]; then
update_mumble.sh
elif [ "${gamename}" == "Multi Theft Auto" ]; then
elif [ "${shortname}" == "mta" ]; then
update_mta.sh
elif [ "${gamename}" == "Factorio" ]; then
elif [ "${shortname}" == "fctr" ]; then
update_factorio.sh
install_factorio_save.sh
elif [ -z "${appid}" ]||[ "${gamename}" == "GoldenEye: Source" ]||[ "${gamename}" == "Base Defense" ]||[ "${gamename}" == "BrainBread" ]||[ "${shortname}" == "ns" ]||[ "${shortname}" == "vs" ]; then
if [ "${gamename}" == "Unreal Tournament" ]; then
elif [ -z "${appid}" ]||[ "${shortname}" == "ges" ]||[ "${shortname}" == "bd" ]||[ "${shortname}" == "bb" ]||[ "${shortname}" == "ns" ]||[ "${shortname}" == "vs" ]; then
if [ "${shortname}" == "Unreal Tournament" ]; then
install_unreal_tournament_eula.sh
fi
fn_install_server_files

10
lgsm/functions/query_gamedig.sh

@ -30,6 +30,14 @@ if [ "$(command -v gamedig 2>/dev/null)" ]&&[ "$(command -v jq 2>/dev/null)" ];
fi
done
local engine_query_array=( quake )
for engine_query in "${engine_query_array[@]}"
do
if [ "${engine_query}" == "${engine}" ]; then
gamedigengine="protocol-quake1"
fi
done
local engine_query_array=( idtech2 iw2.0 )
for engine_query in "${engine_query_array[@]}"
do
@ -38,7 +46,7 @@ if [ "$(command -v gamedig 2>/dev/null)" ]&&[ "$(command -v jq 2>/dev/null)" ];
fi
done
local engine_query_array=( idtech3 quake iw3.0 )
local engine_query_array=( idtech3 iw3.0 )
for engine_query in "${engine_query_array[@]}"
do
if [ "${engine_query}" == "${engine}" ]; then

4
lgsm/functions/query_gsquery.py

@ -18,8 +18,8 @@ class gsquery:
self.default_buffer_length = 1024
#
sourcequery=[ 'avalanche3.0','madness','quakelive','realvirtuality','refractor','source','goldsource','spark','starbound','unity3d', 'unreal4', 'wurm' ]
idtech3query=['idtech3','quake','iw3.0']
idtech2query=['idtech2','iw2.0']
idtech3query=['idtech3','iw3.0']
idtech2query=['idtech2','quake','iw2.0']
minecraftquery=['minecraft','lwjgl2']
if self.option.engine in sourcequery:
self.query_prompt_string = b'\xFF\xFF\xFF\xFFTSource Engine Query\0'

2
linuxgsm.sh

@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x
fi
version="190106"
version="190217"
shortname="core"
gameservername="core"
rootdir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"

Loading…
Cancel
Save