diff --git a/.github/request-info.yml b/.github/request-info.yml new file mode 100644 index 000000000..a1441d5cc --- /dev/null +++ b/.github/request-info.yml @@ -0,0 +1,15 @@ +# Configuration for request-info - https://github.com/behaviorbot/request-info + +# *Required* Comment to reply with +requestInfoReplyComment: > + We require more information for this issue. + https://linuxgsm.com/support/#guide + +# *OPTIONAL* default titles to check against for lack of descriptiveness +# MUST BE ALL LOWERCASE +#requestInfoDefaultTitles: +# - update readme.md +# - updates + +# *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given +requestInfoLabelToAdd: Status: needs more info \ No newline at end of file diff --git a/.github/support.yml b/.github/support.yml new file mode 100644 index 000000000..01cde2963 --- /dev/null +++ b/.github/support.yml @@ -0,0 +1,15 @@ +# Configuration for support-requests - https://github.com/dessant/support-requests + +# Label used to mark issues as support requests +supportLabel: "Type: support" +# Comment to post on issues marked as support requests. Add a link +# to a support page, or set to `false` to disable +supportComment: > + We use the issue tracker exclusively for bug reports and feature requests. + However, this issue appears to be a support request. Please use our + support channels to get help with the project. + https://linuxgsm.com/support/ +# Whether to close issues marked as support requests +close: true +# Whether to lock issues marked as support requests +lock: false diff --git a/.github/welcome.yml b/.github/welcome.yml new file mode 100644 index 000000000..3d0c15e7d --- /dev/null +++ b/.github/welcome.yml @@ -0,0 +1,21 @@ +# Configuration for welcome - https://github.com/behaviorbot/welcome + +# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome + +# Comment to be posted to on first time issues +newIssueWelcomeComment: > + Thanks for opening your first issue. Be sure to follow the issue template! and guide for posting. https://linuxgsm.com/support/#guide + +# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome + +# Comment to be posted to on PRs from first time contributors in your repository +newPRWelcomeComment: > + Thanks for opening this pull request! Please check out our contributing guidelines. + +# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge + +# Comment to be posted to on pull requests merged by a first time user +firstPRMergeComment: > + Congrats on merging your first pull request! Thank you for supporting LinuxGSM! + +# It is recommend to include as many gifs and emojis as possible \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 1ae96fc9c..c5bfa204d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,6 +36,8 @@ jobs: include: - stage: jobs script: bash tests/tests_jc2server.sh + - # stage name not required + script: bash tests/tests_fctrserver.sh - # stage name not required script: bash tests/tests_ts3server.sh - # stage name not required diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 689670e99..7f503c4db 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -1,8 +1,17 @@ Please select the "Preview" tab above to view this message correctly. -Please note that this is an issue tracker for **LinuxGSM** related bugs and feature requests and **not** for the games themselves. +Follow **[this guide](https://linuxgsm.com/support/#guide)** to make sure you post the correct info. +For general support visit the **[steam group](https://linuxgsm.com/steam)** -**Therefore personal server issues on GitHub will be closed without a kiss.** +GitHub is **ONLY** for: +* LinuxGSM bugs +* feature suggestions +* code contributions -Please follow **[this article](https://github.com/GameServerManagers/LinuxGSM/wiki/Support)** for optimal assistance -and do not forget to remove this text before opening the issue. +GitHub is **NOT** for: +* General support +* Specific game server issues (e.g CS:GO, TF2) +* Dedicated server issues (e.g Ubuntu, CentOS) +* Anything not directly related to LinuxGSM development + +**Any general support issues on GitHub will be closed.** \ No newline at end of file diff --git a/README.md b/README.md index aa705981f..c7d0c8beb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![LinuxGSM](https://img.shields.io/badge/-LinuxGSM-2b2b2b.svg?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACsAAABACAYAAACDbo5ZAAAGD0lEQVR4AcWYa2wUVRvHz75c2vJ2disXoUBEVIioRAx%2BMIFA1IRwUS6KCCiIKBrvhEYiiGm5iBgk8QOGEgUUDYTttmVZWFr2UmwURS6iYAoCtmisElSsdHdbkT7%2BTzoNy%2BGc2dm54C%2F5Rdkz85x%2FZ86ZOXOYXYhIg3Phx%2FA4PAcv6f%2Btg5vhHJjP3EcZsgsshufJHH%2FAJbDztQ7aG35J1vgCXn%2BtgvrgEbLHYei9FmE3kDOUuh10OGwjZ7gEh7kZ9gNyllK3gnrg7%2BQs56DHjbCDyB0GuRF2ArnDeDfCziF3mO1G2FfJHRa4EXYpuUOxG2GXkzuUuBH2TXKH5W6ELSV3eM%2BNsOUk5yQcAY8p2uvgSPitor3MjbB1UOQXOFBvHwpbhPYWOExvL4SNUOQ7p4P2JTlzhOPmCu0vCu1PQpE2WOhk2MdJjk9y7HNwP1wEPUJbAcmZ6WTYrYolnifbxZBiibnFySHQCkUaLdY7C0V4%2FT5OhF1JcuIW6%2B0lOcvsBi2Ezao3j8Ov7Quwj52w60jNKIs1R5GatVaDDoEXSU4D7GSxbidYT3IuwjusFK0mNUVMwaZNNbl%2B%2F87hoVCom0HthaQmnG3QB0lNPcxlCvz%2B0GtlZTuorCxYYlA%2FDzbY%2FnrAgV3hCVLzCDMgEAi9wMMi9IIM%2FUwnNXWwi5mwRaSmmmXA798xq%2F3Khp420VeE1LyS6eQeBhttSXgzywCCToIUCOyYZvKLOWWwkdfd6ORVpGYJM0F5efDe9mEQHGty2BWTmhVGO4PNBmOoKzMBxmo%2FhD25dWvljSbD5hjMkb9gT9lJq63Mzi1bKkbjloc7xBWtwiRrDASCVRi%2FRxA8if%2BvrawMTzYI%2FACpeUv2KFFtDcUyTKilCHcis8G1Ga7wHpLzG8wVFs1K7jaeUKHZfIxmkj9%2FM4S9x9RGiMEudo0QbCVu9Xqn5PWEwLUk5%2FP0iaXac53I0kAH9Sau4m54lo%2FdTMfyekLYKQZ7ub34AbMMlmw5irC2VYTN0fuVMYMf8JHxJ7L7YYXAlSRnI2%2F8RtH4siTsDMz%2BZ5yS15OEXUxyDjGD1%2BvEq8MG16CDzY6JepKwT6geYbzxb0XjGMl7vwGSgzZIwo4nOa1M8Yr9Afb%2Fj8L21%2FsXaeaNZ2A6KTiEASph%2F0vF80cn4tokqu79fzfCUk2vfF4%2FFdFGEjGPHvg2yWrsDG%2F4%2BqpZB8jPOiXjWk0y5iXdM3XhKUvxBTA9UvHuvNPh%2Bzb%2BWj10z6nwuHWBbQFMvNCjKnn7qd1jS%2Fnx9VX3b6jC%2BbwOr5eMe3%2B83IcW4%2F3qgT%2BUTbA9srGaiHsn8AKiF6Ld%2FxF%2FOx6eeAJXabvK78MTTornNMd6XJTVR7%2Fj9bBjhFxV%2FMc1kJOAy2AeA%2FgrV4mFVDZFCqm8rEJ6qysCAWqK9iaztRJRbWXa4moFTELOav7jY%2FqAvoXp0Gc9NX7bIZl17%2FZl0rC1wRLeno0NvP%2B0CTcYNnS8wW6CtzNANaxzKqo9hRNOQ8rGo7tmSsMe2zWdt2frqVRcm5s2fofCgawDNHRNxnyfqgsYez4y4ADCjRM9H73hsNWafILTQdaFiSTj%2BQ%2FxA6yH7d%2BCmR8XbYr0a7VTF2N4siSsb5qdos3R6%2FjGxpULFfw7EfORnbrI9TAToX0sD40%2F2ylcGdh2Rdhg%2BSf2gka9jRTqK9%2BGwgHz7RTfVbHxirDhivdthYUvMRX8aYAD9lstvi%2B0aDL2DUZ0eCBUNNVG0IP65FLTWqPdiqdC0koHTVXe7iyNRG23QotBEy1RbTAzQyrmnYUT2rLsoA13JpcB4eVC2daBM1g2JGLekmwf5On7EJfngfZTNnVSce8bFjaTmQdvs%2FXmO%2FJVpoXdx3RSUe9O00Fj3nUdy0RLgRHiHXOPGW1h2uKZ07c9rG%2Bxyefp23pQeyBIEQoavYlakrG8fnrY5yHn2fbxXzAgw7m8bT5zkkSk4C7cpmOK21esB%2FXAQ5DzFfTo43%2BF%2FDzf0eZ4wZ3MDSjMcvD6nIeOahGgia%2FyU3HforTPkWkwnakdn0cI9jqfbPjD%2FuQLJr6644snlgX%2FApOMoyd1R5%2FxAAAAAElFTkSuQmCC)](https://linuxgsm.com) [![Build Status](https://travis-ci.org/GameServerManagers/LinuxGSM.svg?branch=master)](https://travis-ci.org/GameServerManagers/LinuxGSM) -[![Under Development](https://badge.waffle.io/GameServerManagers/LinuxGSM.svg?label=Under%20Development&title=Under%20Development)](http://waffle.io/GameServerManagers/LinuxGSM) +[![Under Development](https://badge.waffle.io/GameServerManagers/LinuxGSM.svg?label=Status:%20under%20development&title=Under%20Development)](http://waffle.io/GameServerManagers/LinuxGSM) [![Discord](https://discordapp.com/api/guilds/127498813903601664/widget.png?style=shield)](https://linuxgsm.com/discord) [![MIT Licence](https://badges.frapsoft.com/os/mit/mit.svg?v=103)](https://github.com/GameServerManagers/LinuxGSM/blob/master/LICENSE) [![made-with-bash](https://img.shields.io/badge/-Made%20with%20Bash-1f425f.svg?logo=image%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE3MDg2QTAyQUZCMzExRTVBMkQxRDMzMkJDMUQ4RDk3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE3MDg2QTAzQUZCMzExRTVBMkQxRDMzMkJDMUQ4RDk3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTcwODZBMDBBRkIzMTFFNUEyRDFEMzMyQkMxRDhEOTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTcwODZBMDFBRkIzMTFFNUEyRDFEMzMyQkMxRDhEOTciLz4gPC9yZGY6RGVzY3JpcHRpb24%2BIDwvcmRmOlJERj4gPC94OnhtcG1ldGE%2BIDw%2FeHBhY2tldCBlbmQ9InIiPz6lm45hAAADkklEQVR42qyVa0yTVxzGn7d9Wy03MS2ii8s%2BeokYNQSVhCzOjXZOFNF4jx%2BMRmPUMEUEqVG36jo2thizLSQSMd4N8ZoQ8RKjJtooaCpK6ZoCtRXKpRempbTv5ey83bhkAUphz8fznvP8znn%2B%2F3NeEEJgNBoRRSmz0ub%2FfuxEacBg%2FDmYtiCjgo5NG2mBXq%2BH5I1ogMRk9Zbd%2BQU2e1ML6VPLOyf5tvBQ8yT1lG10imxsABm7SLs898GTpyYynEzP60hO3trHDKvMigUwdeaceacqzp7nOI4n0SSIIjl36ao4Z356OV07fSQAk6xJ3XGg%2BLCr1d1OYlVHp4eUHPnerU79ZA%2F1kuv1JQMAg%2BE4O2P23EumF3VkvHprsZKMzKwbRUXFEyTvSIEmTVbrysp%2BWr8wfQHGK6WChVa3bKUmdWou%2BjpArdGkzZ41c1zG%2Fu5uGH4swzd561F%2BuhIT4%2BLnSuPsv9%2BJKIpjNr9dXYOyk7%2FBZrcjIT4eCnoKgedJP4BEqhG77E3NKP31FO7cfQA5K0dSYuLgz2TwCWJSOBzG6crzKK%2BohNfni%2Bx6OMUMMNe%2Fgf7ocbw0v0acKg6J8Ql0q%2BT%2FAXR5PNi5dz9c71upuQqCKFAD%2BYhrZLEAmpodaHO3Qy6TI3NhBpbrshGtOWKOSMYwYGQM8nJzoFJNxP2HjyIQho4PewK6hBktoDcUwtIln4PjOWzflQ%2Be5yl0yCCYgYikTclGlxadio%2BBQCSiW1UXoVGrKYwH4RgMrjU1HAB4vR6LzWYfFUCKxfS8Ftk5qxHoCUQAUkRJaSEokkV6Y%2F%2BJUOC4hn6A39NVXVBYeNP8piH6HeA4fPbpdBQV5KOx0QaL1YppX3Jgk0TwH2Vg6S3u%2BdB91%2B%2FpuNYPYFl5uP5V7ZqvsrX7jxqMXR6ff3gCQSTzFI0a1TX3wIs8ul%2Bq4HuWAAiM39vhOuR1O1fQ2gT%2F26Z8Z5vrl2OHi9OXZn995nLV9aFfS6UC9JeJPfuK0NBohWpCHMSAAsFe74WWP%2BvT25wtP9Bpob6uGqqyDnOtaeumjRu%2ByFu36VntK%2FPA5umTJeUtPWZSU9BCgud661odVp3DZtkc7AnYR33RRC708PrVi1larW7XwZIjLnd7R6SgSqWSNjU1B3F72pz5TZbXmX5vV81Yb7Lg7XT%2FUXriu8XLVqw6c6XqWnBKiiYU%2BMt3wWF7u7i91XlSEITwSAZ%2FCzAAHsJVbwXYFFEAAAAASUVORK5CYII%3D)](https://www.gnu.org/software/bash/) diff --git a/images/icons/centos-icon-32.png b/images/icons/centos-icon-32.png deleted file mode 100644 index fb03f304e..000000000 Binary files a/images/icons/centos-icon-32.png and /dev/null differ diff --git a/images/icons/debian-icon-32.png b/images/icons/debian-icon-32.png deleted file mode 100644 index 93650c5d0..000000000 Binary files a/images/icons/debian-icon-32.png and /dev/null differ diff --git a/images/icons/ubuntu-icon-32.png b/images/icons/ubuntu-icon-32.png deleted file mode 100644 index 92be4b5a1..000000000 Binary files a/images/icons/ubuntu-icon-32.png and /dev/null differ diff --git a/images/logo/README.md b/images/logo/README.md deleted file mode 100644 index 4c3b9e790..000000000 --- a/images/logo/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# LinuxGSM - Official Logos -For Reference the original design can be found here. -http://twolofbees.com/artwork.php?iid=870 \ No newline at end of file diff --git a/images/logo/apple-touch-icon-precomposed.png b/images/logo/apple-touch-icon-precomposed.png deleted file mode 100644 index d5dabc953..000000000 Binary files a/images/logo/apple-touch-icon-precomposed.png and /dev/null differ diff --git a/images/logo/assets/lgsm-font-pt_sans.zip b/images/logo/assets/lgsm-font-pt_sans.zip deleted file mode 100644 index 15d1b0ff3..000000000 Binary files a/images/logo/assets/lgsm-font-pt_sans.zip and /dev/null differ diff --git a/images/logo/assets/lgsm-font-source_code_pro.zip b/images/logo/assets/lgsm-font-source_code_pro.zip deleted file mode 100644 index 2de7decf0..000000000 Binary files a/images/logo/assets/lgsm-font-source_code_pro.zip and /dev/null differ diff --git a/images/logo/assets/svg/linuxgsm_black_gradiant_vector.svg b/images/logo/assets/svg/linuxgsm_black_gradiant_vector.svg deleted file mode 100644 index 7d2b129c9..000000000 --- a/images/logo/assets/svg/linuxgsm_black_gradiant_vector.svg +++ /dev/null @@ -1,238 +0,0 @@ - - - - - Stycil Tux - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Stycil Tux - - - Cheeseness (Josh Bush) - - - - - tux linux icon - - - A stylised stencil (a "stycil" - isn't that catchy) inspired by Larry Ewing's Tux illustration. -http://en.wikipedia.org/wiki/Tux - -You're under no obligation to do so, but if you do something with this, drop me a line - I'd love to hear about it. -cheese@twolofbees.com - 2012-01-02 - - http://twolofbees.com/uploads/2012/stycil_tux.svg - http://twolofbees.com/artwork.php?iid=870 - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/logo/assets/svg/linuxgsm_black_gradiant_vector_full.svg b/images/logo/assets/svg/linuxgsm_black_gradiant_vector_full.svg deleted file mode 100644 index bd6fef8c5..000000000 --- a/images/logo/assets/svg/linuxgsm_black_gradiant_vector_full.svg +++ /dev/null @@ -1,304 +0,0 @@ - - - - - Stycil Tux - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Stycil Tux - - - Cheeseness (Josh Bush) - - - - - tux linux icon - - - A stylised stencil (a "stycil" - isn't that catchy) inspired by Larry Ewing's Tux illustration. -http://en.wikipedia.org/wiki/Tux - -You're under no obligation to do so, but if you do something with this, drop me a line - I'd love to hear about it. -cheese@twolofbees.com - 2012-01-02 - - http://twolofbees.com/uploads/2012/stycil_tux.svg - http://twolofbees.com/artwork.php?iid=870 - - - - - - - - - - - - - - - - - - - - - - - - - - - - Linux Game Server Managers_ - - diff --git a/images/logo/assets/svg/linuxgsm_black_vector.svg b/images/logo/assets/svg/linuxgsm_black_vector.svg deleted file mode 100644 index 594b44b1e..000000000 --- a/images/logo/assets/svg/linuxgsm_black_vector.svg +++ /dev/null @@ -1,286 +0,0 @@ - - - - - Stycil Tux - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Stycil Tux - - - Cheeseness (Josh Bush) - - - - - tux linux icon - - - A stylised stencil (a "stycil" - isn't that catchy) inspired by Larry Ewing's Tux illustration. -http://en.wikipedia.org/wiki/Tux - -You're under no obligation to do so, but if you do something with this, drop me a line - I'd love to hear about it. -cheese@twolofbees.com - 2012-01-02 - - http://twolofbees.com/uploads/2012/stycil_tux.svg - http://twolofbees.com/artwork.php?iid=870 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/logo/assets/svg/linuxgsm_white_vector.svg b/images/logo/assets/svg/linuxgsm_white_vector.svg deleted file mode 100644 index 5e169f3d3..000000000 --- a/images/logo/assets/svg/linuxgsm_white_vector.svg +++ /dev/null @@ -1,248 +0,0 @@ - - - - - Stycil Tux - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Stycil Tux - - - Cheeseness (Josh Bush) - - - - - tux linux icon - - - A stylised stencil (a "stycil" - isn't that catchy) inspired by Larry Ewing's Tux illustration. -http://en.wikipedia.org/wiki/Tux - -You're under no obligation to do so, but if you do something with this, drop me a line - I'd love to hear about it. -cheese@twolofbees.com - 2012-01-02 - - http://twolofbees.com/uploads/2012/stycil_tux.svg - http://twolofbees.com/artwork.php?iid=870 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/logo/assets/svg/linuxgsm_white_vector_full.svg b/images/logo/assets/svg/linuxgsm_white_vector_full.svg deleted file mode 100644 index 676937d60..000000000 --- a/images/logo/assets/svg/linuxgsm_white_vector_full.svg +++ /dev/null @@ -1,324 +0,0 @@ - - - - - Stycil Tux - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Stycil Tux - - - Cheeseness (Josh Bush) - - - - - tux linux icon - - - A stylised stencil (a "stycil" - isn't that catchy) inspired by Larry Ewing's Tux illustration. -http://en.wikipedia.org/wiki/Tux - -You're under no obligation to do so, but if you do something with this, drop me a line - I'd love to hear about it. -cheese@twolofbees.com - 2012-01-02 - - http://twolofbees.com/uploads/2012/stycil_tux.svg - http://twolofbees.com/artwork.php?iid=870 - - - - - - - - - - - - - - - - - - - - - - - - - - - - Linux Game Server Managers__ - - - - - diff --git a/images/logo/facebook.png b/images/logo/facebook.png deleted file mode 100644 index d70602c4e..000000000 Binary files a/images/logo/facebook.png and /dev/null differ diff --git a/images/logo/lgsm-dark-full.png b/images/logo/lgsm-dark-full.png deleted file mode 100644 index 405c0d7c9..000000000 Binary files a/images/logo/lgsm-dark-full.png and /dev/null differ diff --git a/images/logo/lgsm-dark-square-114.png b/images/logo/lgsm-dark-square-114.png deleted file mode 100644 index d5dabc953..000000000 Binary files a/images/logo/lgsm-dark-square-114.png and /dev/null differ diff --git a/images/logo/lgsm-dark-square-16.png b/images/logo/lgsm-dark-square-16.png deleted file mode 100644 index e66d2b3be..000000000 Binary files a/images/logo/lgsm-dark-square-16.png and /dev/null differ diff --git a/images/logo/lgsm-dark-square-184.png b/images/logo/lgsm-dark-square-184.png deleted file mode 100644 index 9dbce0f28..000000000 Binary files a/images/logo/lgsm-dark-square-184.png and /dev/null differ diff --git a/images/logo/lgsm-dark-square-24.png b/images/logo/lgsm-dark-square-24.png deleted file mode 100644 index a05a6e3d7..000000000 Binary files a/images/logo/lgsm-dark-square-24.png and /dev/null differ diff --git a/images/logo/lgsm-dark-square-512.png b/images/logo/lgsm-dark-square-512.png deleted file mode 100644 index e56a92932..000000000 Binary files a/images/logo/lgsm-dark-square-512.png and /dev/null differ diff --git a/images/logo/lgsm-dark-square-64.png b/images/logo/lgsm-dark-square-64.png deleted file mode 100644 index 65df40ad2..000000000 Binary files a/images/logo/lgsm-dark-square-64.png and /dev/null differ diff --git a/images/logo/lgsm-light-full.png b/images/logo/lgsm-light-full.png deleted file mode 100644 index e8dcd92a8..000000000 Binary files a/images/logo/lgsm-light-full.png and /dev/null differ diff --git a/images/logo/lgsm_full.png b/images/logo/lgsm_full.png deleted file mode 100644 index 3b1631ab5..000000000 Binary files a/images/logo/lgsm_full.png and /dev/null differ diff --git a/images/logo/lgsmbutton.png b/images/logo/lgsmbutton.png deleted file mode 100644 index 9aa7efaa7..000000000 Binary files a/images/logo/lgsmbutton.png and /dev/null differ diff --git a/images/wallpaper/LinuxGSM_wallpaper.png b/images/wallpaper/LinuxGSM_wallpaper.png deleted file mode 100644 index 9ba739434..000000000 Binary files a/images/wallpaper/LinuxGSM_wallpaper.png and /dev/null differ diff --git a/images/wallpaper/LinuxGSM_wallpaper_2.png b/images/wallpaper/LinuxGSM_wallpaper_2.png deleted file mode 100644 index d4d5e27c3..000000000 Binary files a/images/wallpaper/LinuxGSM_wallpaper_2.png and /dev/null differ diff --git a/lgsm/config-default/config-lgsm/etlserver/_default.cfg b/lgsm/config-default/config-lgsm/etlserver/_default.cfg new file mode 100644 index 000000000..f1b711fcc --- /dev/null +++ b/lgsm/config-default/config-lgsm/etlserver/_default.cfg @@ -0,0 +1,104 @@ +################################## +######## 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 Command | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters#additional-parameters +fn_parms(){ + parms="+set net_strict 1 +set fs_homepath ${serverfiles} +exec ${servercfg}" +} + +#### LinuxGSM Settings #### + +## Notification Alerts +# (on|off) + +# More info | https://github.com/GameServerManagers/LinuxGSM/wiki/Alerts#more-info +postalert="off" +postdays="7" +posttarget="https://hastebin.com" + +# Discord Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Discord +discordalert="off" +discordwebhook="webhook" + +# Email Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Email +emailalert="off" +email="email@example.com" +emailfrom="" + +# IFTTT Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/IFTTT +iftttalert="off" +ifttttoken="accesstoken" +iftttevent="linuxgsm_alert" + +# Mailgun Email Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/mailgun +mailgunalert="off" +mailguntoken="accesstoken" +mailgundomain="example.com" +mailgunemailfrom="alert@example.com" +mailgunemail="email@myemail.com" + +# Pushbullet Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushbullet +pushbulletalert="off" +pushbullettoken="accesstoken" +channeltag="" + +# Pushover Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushover +pushoveralert="off" +pushovertoken="accesstoken" + +# Telegram Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Telegram +telegramalert="off" +telegramtoken="accesstoken" +telegramchatid="" + +## Backup | https://github.com/GameServerManagers/LinuxGSM/wiki/Backup +maxbackups="4" +maxbackupdays="30" +stoponbackup="on" + +## Logging | https://github.com/GameServerManagers/LinuxGSM/wiki/Logging +consolelogging="on" +logdays="7" + +#### LinuxGSM Advanced Settings #### + +## LinuxGSM Server Details +# Do not edit +gamename="ET: Legacy" +engine="idtech3" + +#### Directories #### +# Edit with care + +## Server Specific Directories +systemdir="${serverfiles}" +executabledir="${systemdir}" +executable="./etlded" +servercfg="${servicename}.cfg" +servercfgdefault="server.cfg" +servercfgdir="${systemdir}/etmain" +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" diff --git a/lgsm/config-default/config-lgsm/rwserver/_default.cfg b/lgsm/config-default/config-lgsm/rwserver/_default.cfg new file mode 100644 index 000000000..7bf824059 --- /dev/null +++ b/lgsm/config-default/config-lgsm/rwserver/_default.cfg @@ -0,0 +1,118 @@ +################################## +######## 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://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters +javaram="2048" # -Xmx$2048M + +## Server Start Command | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters#additional-parameters +fn_parms(){ +parms="" +} + +#### LinuxGSM Settings #### + +## Notification Alerts +# (on|off) + +# More info | https://github.com/GameServerManagers/LinuxGSM/wiki/Alerts#more-info +postalert="off" +postdays="7" +posttarget="https://hastebin.com" + +# Discord Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Discord +discordalert="off" +discordwebhook="webhook" + +# Email Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Email +emailalert="off" +email="email@example.com" +emailfrom="" + +# IFTTT Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/IFTTT +iftttalert="off" +ifttttoken="accesstoken" +iftttevent="linuxgsm_alert" + +# Mailgun Email Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/mailgun +mailgunalert="off" +mailguntoken="accesstoken" +mailgundomain="example.com" +mailgunemailfrom="alert@example.com" +mailgunemail="email@myemail.com" + +# Pushbullet Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushbullet +pushbulletalert="off" +pushbullettoken="accesstoken" +channeltag="" + +# Pushover Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushover +pushoveralert="off" +pushovertoken="accesstoken" + +# Telegram Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Telegram +telegramalert="off" +telegramtoken="accesstoken" +telegramchatid="" + +## Updating | https://github.com/GameServerManagers/LinuxGSM/wiki/Update +updateonstart="off" + +## Backup | https://github.com/GameServerManagers/LinuxGSM/wiki/Backup +maxbackups="4" +maxbackupdays="30" +stoponbackup="on" + +## Logging | https://github.com/GameServerManagers/LinuxGSM/wiki/Logging +consolelogging="on" +logdays="7" + +#### LinuxGSM Advanced Settings #### + +## SteamCMD Settings +# Server appid +appid="339010" +# 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="Rising World" +engine="risingworld" + +#### Directories #### +# Edit with care + +## Server Specific Directories +systemdir="${serverfiles}" +executabledir="${serverfiles}" +executable="java -Xmx${javaram}m -jar ${serverfiles}/server.jar" +servercfg="server.properties" +servercfgdefault="server.properties" +servercfgdir="${serverfiles}" +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" diff --git a/lgsm/config-default/config-lgsm/ut3server/_default.cfg b/lgsm/config-default/config-lgsm/ut3server/_default.cfg index f701b563d..3469c4940 100644 --- a/lgsm/config-default/config-lgsm/ut3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ut3server/_default.cfg @@ -11,7 +11,7 @@ ## Server Start Settings | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters ip="0.0.0.0" port="7777" -queryport="25300" +queryport="6500" defaultmap="VCTF-Suspense" game="UTGameContent.UTVehicleCTFGame_Content" mutators="" #"UTGame.UTMutator_Instagib,UTGame.UTMutator_LowGrav" diff --git a/lgsm/data/serverlist.csv b/lgsm/data/serverlist.csv index 687357cfc..397da4f75 100644 --- a/lgsm/data/serverlist.csv +++ b/lgsm/data/serverlist.csv @@ -58,6 +58,7 @@ qw,qwserver,Quake World ro,roserver,Red Orchestra: Ostfront 41-45 ricochet,ricochetserver,Ricochet rust,rustserver,Rust +rw,rwserver, Rising World samp,sampserver,San Andreas Multiplayer ss3,ss3server,Serious Sam 3: BFE sb,sbserver,Starbound @@ -74,4 +75,5 @@ ut2k4,ut2k4server,Unreal Tournament 2004 ut3,ut3server,Unreal Tournament 3 ut99,ut99server,Unreal Tournament 99 wet,wetserver,Wolfenstein: Enemy Territory +etl,etlserver,ET: Legacy zps,zpsserver,Zombie Panic! Source diff --git a/lgsm/functions/alert.sh b/lgsm/functions/alert.sh index 31df0e18c..07abe0fb7 100644 --- a/lgsm/functions/alert.sh +++ b/lgsm/functions/alert.sh @@ -45,12 +45,12 @@ fn_alert_restart(){ } fn_alert_restart_query(){ - fn_script_log_info "Sending alert: Restarted: ${gsquerycmd}" + fn_script_log_info "Sending alert: Restarted: ${servicename}" alertsubject="Alert - ${servicename} - Restarted" alertemoji="🚨" alertsound="2" alerturl="not enabled" - alertbody="gsquery.py failed to query: ${gsquerycmd}" + alertbody="Unable to query: ${servicename}" } fn_alert_update(){ diff --git a/lgsm/functions/alert_discord.sh b/lgsm/functions/alert_discord.sh index acef4f533..70da55e02 100644 --- a/lgsm/functions/alert_discord.sh +++ b/lgsm/functions/alert_discord.sh @@ -39,7 +39,7 @@ json=$(cat </dev/null)" ]; then - dpkg-query -W -f='${Status}' ${deptocheck} 2>/dev/null | grep -q -P '^install ok installed' + elif [ -n "$(command -v apt 2>/dev/null)" ]; then + dpkg-query -W -f='${Status}' "${deptocheck}" 2>/dev/null | grep -q -P '^install ok installed' depstatus=$? elif [ -n "$(command -v yum 2>/dev/null)" ]; then - yum -q list installed ${deptocheck} > /dev/null 2>&1 + yum -q list installed "${deptocheck}" > /dev/null 2>&1 depstatus=$? fi @@ -132,11 +132,11 @@ fn_found_missing_deps(){ sleep 0.5 fn_print_error_nl "Checking dependencies: missing: ${red}${array_deps_missing[@]}${default}" fn_script_log_error "Checking dependencies: missing: ${array_deps_missing[@]}" - sleep 1 + sleep 0.5 if [ -n monocheck ]; then fn_add_mono_repo fi - sleep 1 + sleep 0.5 sudo -v > /dev/null 2>&1 if [ $? -eq 0 ]; then fn_print_information_nl "Automatically installing missing dependencies." @@ -149,11 +149,11 @@ fn_found_missing_deps(){ sleep 1 echo -en " \r" if [ -n "$(command -v dpkg-query 2>/dev/null)" ]; then - cmd="sudo dpkg --add-architecture i386; sudo apt-get update; sudo apt-get -y install ${array_deps_missing[@]}" - eval ${cmd} + cmd="sudo dpkg --add-architecture i386; sudo apt update; sudo apt -y install ${array_deps_missing[@]}" + eval "${cmd}" elif [ -n "$(command -v yum 2>/dev/null)" ]; then cmd="sudo yum -y install ${array_deps_missing[@]}" - eval ${cmd} + eval "${cmd}" fi if [ $? != 0 ]; then fn_print_failure_nl "Unable to install dependencies" @@ -167,7 +167,7 @@ fn_found_missing_deps(){ fn_print_warning_nl "$(whoami) does not have sudo access. Manually install dependencies." fn_script_log_warn "$(whoami) does not have sudo access. Manually install dependencies." if [ -n "$(command -v dpkg-query 2>/dev/null)" ]; then - echo " sudo dpkg --add-architecture i386; sudo apt-get update; sudo apt-get install ${array_deps_missing[@]}" + echo " sudo dpkg --add-architecture i386; sudo apt update; sudo apt install ${array_deps_missing[@]}" elif [ -n "$(command -v yum 2>/dev/null)" ]; then echo " sudo yum install ${array_deps_missing[@]}" fi @@ -198,7 +198,7 @@ if [ "${function_selfname}" == "command_install.sh" ]; then echo "=================================" fi -# Check will only run if using apt-get or yum +# Check will only run if using apt or yum if [ -n "$(command -v dpkg-query 2>/dev/null)" ]; then # Generate array of missing deps array_deps_missing=() @@ -252,7 +252,7 @@ if [ -n "$(command -v dpkg-query 2>/dev/null)" ]; then elif [ "${gamename}" == "Battlefield: 1942" ]; then array_deps_required+=( libncurses5:i386 ) # Call of Duty - elif [ "${gamename}" == "Call of Duty" ]||[ "${gamename}" == "Call of Duty 2" ]; then + elif [ "${gamename}" == "Call of Duty" ]||[ "${gamename}" == "Call of Duty: United Offensive" ]||[ "${gamename}" == "Call of Duty 2" ]; then array_deps_required+=( libstdc++5:i386 ) # Factorio elif [ "${gamename}" == "Factorio" ]; then @@ -348,7 +348,7 @@ elif [ -n "$(command -v yum 2>/dev/null)" ]; then elif [ "${gamename}" == "Battlefield: 1942" ]; then array_deps_required+=( ncurses-libs.i686 ) # Call of Duty - elif [ "${gamename}" == "Call of Duty" ]||[ "${gamename}" == "Call of Duty 2" ]; then + elif [ "${gamename}" == "Call of Duty" ]||[ "${gamename}" == "Call of Duty: United Offensive" ]||[ "${gamename}" == "Call of Duty 2" ]; then array_deps_required+=( compat-libstdc++-33.i686 ) # Factorio elif [ "${gamename}" == "Factorio" ]; then diff --git a/lgsm/functions/check_ip.sh b/lgsm/functions/check_ip.sh index 57971725a..507a1a51a 100644 --- a/lgsm/functions/check_ip.sh +++ b/lgsm/functions/check_ip.sh @@ -14,18 +14,19 @@ if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${gamename}" != "Mumble" ]&&[ "${travi else ipcommand="ip" fi - getip=$(${ipcommand} -o -4 addr|awk '{print $4}'|grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}'|grep -v 127.0.0) - getipwc=$(${ipcommand} -o -4 addr|awk '{print $4}'|grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}'|grep -vc 127.0.0) + getip=$(${ipcommand} -o -4 addr| awk '{print $4}' | grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}' | grep -v 127.0.0) + getipwc=$(${ipcommand} -o -4 addr| awk '{print $4}' | grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}' | grep -vc 127.0.0) info_config.sh + info_parms.sh # IP is not set to specific IP if [ "${ip}" == "0.0.0.0" ]||[ "${ip}" == "" ]; then fn_print_dots "Check IP" - sleep 1 + sleep 0.5 # Multiple interfaces if [ "${getipwc}" -ge "2" ]; then fn_print_fail "Check IP: Multiple IP addresses found." - sleep 1 + sleep 0.5 echo -en "\n" # IP is set within game config if [ "${ipsetinconfig}" == "1" ]; then @@ -57,7 +58,7 @@ if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${gamename}" != "Mumble" ]&&[ "${travi # Single interface elif [ "${ipsetinconfig}" == "1" ]; then fn_print_fail "Check IP: IP address not set in game config." - sleep 1 + sleep 0.5 echo -en "\n" fn_print_information "Specify the IP you want to bind within ${servercfg}.\n" echo -en " * location: ${servercfgfullpath}\n" @@ -74,7 +75,7 @@ if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${gamename}" != "Mumble" ]&&[ "${travi else fn_print_info_nl "Check IP: ${getip}" fn_script_log_info "IP automatically set as: ${getip}" - sleep 1 + sleep 0.5 ip="${getip}" fi fi diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh index 125b9904d..7498925e1 100644 --- a/lgsm/functions/check_permissions.sh +++ b/lgsm/functions/check_permissions.sh @@ -9,17 +9,17 @@ local commandname="CHECK" fn_check_ownership(){ if [ -f "${rootdir}/${selfname}" ]; then - if [ $(find "${rootdir}/${selfname}" -not -user $(whoami)|wc -l) -ne "0" ]; then + if [ "$(find "${rootdir}/${selfname}" -not -user $(whoami) | wc -l)" -ne "0" ]; then selfownissue=1 fi fi if [ -d "${functionsdir}" ]; then - if [ $(find "${functionsdir}" -not -user $(whoami)|wc -l) -ne "0" ]; then + if [ "$(find "${functionsdir}" -not -user $(whoami) | wc -l)" -ne "0" ]; then funcownissue=1 fi fi if [ -d "${serverfiles}" ]; then - if [ $(find "${serverfiles}" -not -user $(whoami)|wc -l) -ne "0" ]; then + if [ "$(find "${serverfiles}" -not -user $(whoami) | wc -l)" -ne "0" ]; then filesownissue=1 fi fi @@ -31,13 +31,13 @@ fn_check_ownership(){ { echo -e "User\tGroup\tFile\n" if [ "${selfownissue}" == "1" ]; then - find "${rootdir}/${selfname}" -not -user $(whoami) -printf "%u\t\t%g\t%p\n" + find "${rootdir}/${selfname}" -not -user "$(whoami)" -printf "%u\t\t%g\t%p\n" fi if [ "${funcownissue}" == "1" ]; then - find "${functionsdir}" -not -user $(whoami) -printf "%u\t\t%g\t%p\n" + find "${functionsdir}" -not -user "$(whoami)" -printf "%u\t\t%g\t%p\n" fi if [ "${filesownissue}" == "1" ]; then - find "${serverfiles}" -not -user $(whoami) -printf "%u\t\t%g\t%p\n" + find "${serverfiles}" -not -user "$(whoami)" -printf "%u\t\t%g\t%p\n" fi } | column -s $'\t' -t | tee -a "${lgsmlog}" @@ -54,7 +54,7 @@ fn_check_ownership(){ fn_check_permissions(){ if [ -d "${functionsdir}" ]; then - if [ $(find "${functionsdir}" -type f -not -executable|wc -l) -ne "0" ]; then + if [ "$(find "${functionsdir}" -type f -not -executable | wc -l)" -ne "0" ]; then fn_print_fail_nl "Permissions issues found" fn_script_log_fatal "Permissions issues found" fn_print_information_nl "The following files are not executable:" @@ -102,9 +102,9 @@ fn_check_permissions(){ userexecperm="${execperm:0:1}" groupexecperm="${execperm:1:1}" # Check for invalid user permission - if [ "${userexecperm}" == "0" ] || [ "${userexecperm}" == "2" ] || [ "${userexecperm}" == "4" ] || [ "${userexecperm}" == "6" ]; then + if [ "${userexecperm}" == "0" ]||[ "${userexecperm}" == "2" ]||[ "${userexecperm}" == "4" ]||[ "${userexecperm}" == "6" ]; then # If user permission is invalid, then check for invalid group permissions - if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ] || [ "${groupexecperm}" == "6" ]; then + if [ "${groupexecperm}" == "0" ]||[ "${groupexecperm}" == "2" ]||[ "${groupexecperm}" == "4" ]||[ "${groupexecperm}" == "6" ]; then # If permission issues are found fn_print_warn_nl "Permissions issue found" fn_script_log_warn "Permissions issue found" @@ -122,14 +122,14 @@ fn_check_permissions(){ # Grab the first and second digit for user and group permission userexecperm="${execperm:0:1}" groupexecperm="${execperm:1:1}" - if [ "${userexecperm}" == "0" ] || [ "${userexecperm}" == "2" ] || [ "${userexecperm}" == "4" ] || [ "${userexecperm}" == "6" ]; then - if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ] || [ "${groupexecperm}" == "6" ]; then + if [ "${userexecperm}" == "0" ]||[ "${userexecperm}" == "2" ]||[ "${userexecperm}" == "4" ]||[ "${userexecperm}" == "6" ]; then + if [ "${groupexecperm}" == "0" ]||[ "${groupexecperm}" == "2" ]||[ "${groupexecperm}" == "4" ]||[ "${groupexecperm}" == "6" ]; then # If errors are still found fn_print_fail_nl "The following file could not be set executable:" ls -l "${executabledir}/${execname}" fn_script_log_warn "The following file could not be set executable:" fn_script_log_info "${executabledir}/${execname}" - if [ "${monitorflag}" == 1 ]; then + if [ "${monitorflag}" == "1" ]; then alert="permissions" alert.sh fi @@ -171,7 +171,7 @@ fn_sys_perm_fix_manually_msg(){ fn_script_log_info "To fix this issue, run the following command as root:" echo " chmod a+rx /sys /sys/class /sys/class/net" fn_script_log "chmod a+rx /sys /sys/class /sys/class/net" - sleep 1 + sleep 0.5 if [ "${monitorflag}" == 1 ]; then alert="permissions" alert.sh @@ -184,7 +184,7 @@ fn_sys_perm_errors_fix(){ sudo -v > /dev/null 2>&1 if [ $? -eq 0 ]; then fn_print_dots "Automatically fixing /sys permissions" - sleep 2 + sleep 0.5 fn_script_log_info "Automatically fixing /sys permissions." if [ "${sysdirpermerror}" == "1" ]; then sudo chmod a+rx "/sys" @@ -200,13 +200,13 @@ fn_sys_perm_errors_fix(){ if [ "${sysdirpermerror}" == "1" ]||[ "${classdirpermerror}" == "1" ]||[ "${netdirpermerror}" == "1" ]; then fn_print_error "Could not fix /sys permissions" fn_script_log_error "Could not fix /sys permissions." - sleep 1 + sleep 0.5 # Show the user how to fix fn_sys_perm_fix_manually_msg else fn_print_ok_nl "Automatically fixing /sys permissions" fn_script_log_pass "Permissions in /sys fixed" - sleep 1 + sleep 0.5 fi else # Show the user how to fix @@ -221,7 +221,7 @@ fn_sys_perm_error_process(){ if [ "${sysdirpermerror}" == "1" ]||[ "${classdirpermerror}" == "1" ]||[ "${netdirpermerror}" == "1" ]; then fn_print_error_nl "Permission error(s) found in /sys" fn_script_log_error "Permission error(s) found in /sys" - sleep 1 + sleep 0.5 # Run the fix fn_sys_perm_errors_fix fi diff --git a/lgsm/functions/check_status.sh b/lgsm/functions/check_status.sh index 706b57f63..4fb1bfa31 100644 --- a/lgsm/functions/check_status.sh +++ b/lgsm/functions/check_status.sh @@ -12,7 +12,7 @@ if [ "${gamename}" == "TeamSpeak 3" ]; then # 1: Server is running # 0: Server seems to have died # 0: No server running (ts3server.pid is missing) - status=$(${executabledir}/ts3server_startscript.sh status servercfgfullpathfile=${servercfgfullpath}) + status=$("${executabledir}/ts3server_startscript.sh" status servercfgfullpathfile=${servercfgfullpath}) if [ "${status}" == "Server is running" ]; then status=1 else @@ -25,12 +25,12 @@ elif [ "${gamename}" == "Mumble" ]; then info_config.sh # 1: Server is listening # 0: Server is not listening, considered closed - mumblepid=$(netstat -nap 2>/dev/null | grep udp | grep ${port} | grep murmur | awk '{ print $6 }' | awk -F'/' '{ print $1 }') + mumblepid=$(netstat -nap 2>/dev/null | grep udp | grep "${port}" | grep murmur | awk '{ print $6 }' | awk -F'/' '{ print $1 }') if [ -z "${mumblepid}" ]; then status=0 else status=1 fi else - status=$(tmux list-sessions 2>&1 | awk '{print $1}' | grep -Ec "^${servicename}:") + status=$(tmux list-sessions -F "#{session_name}" 2>/dev/null | grep -Ecx "^${servicename}") fi diff --git a/lgsm/functions/check_steamcmd.sh b/lgsm/functions/check_steamcmd.sh index 1c0b4b492..f47abf359 100644 --- a/lgsm/functions/check_steamcmd.sh +++ b/lgsm/functions/check_steamcmd.sh @@ -40,7 +40,6 @@ fn_check_steamcmd_user(){ fi steamuser="anonymous" steampass='' - sleep 1 fi } @@ -53,7 +52,7 @@ fn_check_steamcmd_sh(){ else fn_print_error_nl "SteamCMD is missing" fn_script_log_error "SteamCMD is missing" - sleep 1 + sleep 0.5 fn_install_steamcmd fi elif [ "${function_selfname}" == "command_install.sh" ]; then diff --git a/lgsm/functions/check_system_requirements.sh b/lgsm/functions/check_system_requirements.sh index 16babcbac..e0a3dbd01 100644 --- a/lgsm/functions/check_system_requirements.sh +++ b/lgsm/functions/check_system_requirements.sh @@ -39,8 +39,8 @@ if [ -n "${ramrequirementmb}" ]; then sleep 0.5 # Warn the user fn_print_warn_nl "Check RAM: ${ramrequirementgb}G required, ${physmemtotal} available" - sleep 1 + sleep 0.5 echo " * ${gamename} server may fail to run or experience poor performance." - sleep 1 + sleep 0.5 fi fi diff --git a/lgsm/functions/command_backup.sh b/lgsm/functions/command_backup.sh index a651f50fe..b2df4be6d 100644 --- a/lgsm/functions/command_backup.sh +++ b/lgsm/functions/command_backup.sh @@ -17,7 +17,7 @@ fn_backup_trap(){ echo -ne "backup ${backupname}.tar.gz..." fn_print_canceled_eol_nl fn_script_log_info "Backup ${backupname}.tar.gz: CANCELED" - sleep 1 + sleep 0.5 rm -f "${backupdir}/${backupname}.tar.gz" | tee -a "${lgsmlog}" echo -ne "backup ${backupname}.tar.gz..." fn_print_removed_eol_nl @@ -44,9 +44,9 @@ fn_backup_init(){ info_distro.sh fn_print_dots "Backup starting" fn_script_log_info "Backup starting" - sleep 1 + sleep 0.5 fn_print_ok "Backup starting" - sleep 1 + sleep 0.5 echo -ne "\n" if [ ! -d "${backupdir}" ]||[ "${backupcount}" == "0" ]; then fn_print_info_nl "There are no previous backups" @@ -59,11 +59,11 @@ fn_backup_init(){ daysago="${lastbackupdaysago} days ago" fi echo " * Previous backup was created ${daysago}, total size ${lastbackupsize}" - sleep 1 + sleep 0.5 fi } -# Check if server is started and wether to stop it +# Check if server is started and whether to stop it fn_backup_stop_server(){ check_status.sh # Server is stopped @@ -80,7 +80,7 @@ fn_backup_stop_server(){ else fn_print_warn_nl "${servicename} will be stopped during the backup" fn_script_log_warn "${servicename} will be stopped during the backup" - sleep 4 + sleep 5 serverstopped="yes" exitbypass=1 command_stop.sh @@ -131,7 +131,7 @@ fn_backup_compression(){ fn_script_log_fatal "Starting backup" else fn_print_ok_eol - sleep 1 + sleep 0.5 fn_print_ok_nl "Completed: ${backupname}.tar.gz, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')" fn_script_log_pass "Backup created: ${backupname}.tar.gz, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')" fi @@ -153,18 +153,18 @@ fn_backup_prune(){ if [ "${backupquotadiff}" -gt "0" ]||[ "${backupsoudatedcount}" -gt "0" ]; then fn_print_dots "Pruning" fn_script_log_info "Backup pruning activated" - sleep 1 + sleep 0.5 fn_print_ok_nl "Pruning" - sleep 1 + sleep 0.5 # If maxbackups greater or equal to backupsoutdatedcount, then it is over maxbackupdays if [ "${backupquotadiff}" -ge "${backupsoudatedcount}" ]; then # Display how many backups will be cleared echo " * Pruning: ${backupquotadiff} backup(s) has exceeded the ${maxbackups} backups limit" fn_script_log_info "Pruning: ${backupquotadiff} backup(s) has exceeded the ${maxbackups} backups limit" - sleep 1 + sleep 0.5 fn_print_dots "Pruning: Clearing ${backupquotadiff} backup(s)" fn_script_log_info "Pruning: Clearing ${backupquotadiff} backup(s)" - sleep 1 + sleep 0.5 # Clear backups over quota find "${backupdir}"/ -type f -name "*.tar.gz" -printf '%T@ %p\n' | sort -rn | tail -${backupquotadiff} | cut -f2- -d" " | xargs rm fn_print_ok_nl "Pruning: Clearing ${backupquotadiff} backup(s)" @@ -174,16 +174,16 @@ fn_backup_prune(){ # Display how many backups will be cleared echo " * Pruning: ${backupsoudatedcount} backup(s) are older than ${maxbackupdays} days." fn_script_log_info "Pruning: ${backupsoudatedcount} backup(s) older than ${maxbackupdays} days." - sleep 1 + sleep 0.5 fn_print_dots "Pruning: Clearing ${backupquotadiff} backup(s)." fn_script_log_info "Pruning: Clearing ${backupquotadiff} backup(s)" - sleep 1 + sleep 0.5 # Clear backups over quota find "${backupdir}"/ -type f -mtime +"${maxbackupdays}" -exec rm -f {} \; fn_print_ok_nl "Pruning: Clearing ${backupquotadiff} backup(s)" fn_script_log_pass "Pruning: Cleared ${backupquotadiff} backup(s)" fi - sleep 1 + sleep 0.5 fi fi } diff --git a/lgsm/functions/command_console.sh b/lgsm/functions/command_console.sh index a6fd07dc1..e7d9a6ac9 100644 --- a/lgsm/functions/command_console.sh +++ b/lgsm/functions/command_console.sh @@ -24,19 +24,19 @@ if ! fn_prompt_yn "Continue?" Y; then echo Exiting; return fi fn_print_dots "Accessing console" -sleep 1 +sleep 0.5 check_status.sh if [ "${status}" != "0" ]; then fn_print_ok_nl "Accessing console" fn_script_log_pass "Console accessed" - sleep 1 - tmux attach-session -t ${servicename} + sleep 0.5 + tmux attach-session -t "${servicename}" fn_print_ok_nl "Closing console" fn_script_log_pass "Console closed" else fn_print_error_nl "Server not running" fn_script_log_error "Failed to access: Server not running" - sleep 1 + sleep 0.5 if fn_prompt_yn "Do you want to start the server?" Y; then exitbypass=1 command_start.sh diff --git a/lgsm/functions/command_debug.sh b/lgsm/functions/command_debug.sh index 07f7611c2..270d23e5f 100644 --- a/lgsm/functions/command_debug.sh +++ b/lgsm/functions/command_debug.sh @@ -40,7 +40,7 @@ if [ -n "${glibcrequired}" ]; then : elif [ "${glibcrequired}" == "UNKNOWN" ]; then echo -e "${blue}GLIBC required:\t${red}${glibcrequired}" - elif [ "$(printf '%s\n'${glibcrequired}'\n' ${glibcversion} | sort -V | head -n 1)" != "${glibcrequired}" ]; then + elif [ "$(printf '%s\n'${glibcrequired}'\n' "${glibcversion}" | sort -V | head -n 1)" != "${glibcrequired}" ]; then if [ "${glibcfix}" == "yes" ]; then echo -e "${blue}GLIBC required:\t${red}${glibcrequired} ${default}(${green}Using GLIBC fix${default})" else @@ -80,12 +80,12 @@ fi fn_print_info_nl "Stopping any running servers" fn_script_log_info "Stopping any running servers" -sleep 1 +sleep 0.5 exitbypass=1 command_stop.sh fn_print_dots "Starting debug" fn_script_log_info "Starting debug" -sleep 1 +sleep 0.5 fn_print_ok_nl "Starting debug" # Create lockfile @@ -95,7 +95,8 @@ fn_script_log_info "${rootdir}/${lockselfname}" # trap to remove lockfile on quit. trap fn_lockfile_trap INT -cd "${executabledir}" +cd "${executabledir}" || exit +# Note: do not add double quotes to ${executable} ${parms} if [ "${engine}" == "source" ]||[ "${engine}" == "goldsource" ]; then ${executable} ${parms} -debug elif [ "${engine}" == "realvirtuality" ]; then diff --git a/lgsm/functions/command_details.sh b/lgsm/functions/command_details.sh index 53d72a833..3474ae3ac 100644 --- a/lgsm/functions/command_details.sh +++ b/lgsm/functions/command_details.sh @@ -12,10 +12,11 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" # Run checks and gathers details to display. check.sh info_config.sh +info_parms.sh info_distro.sh info_glibc.sh -info_parms.sh info_messages.sh +query_gamedig.sh fn_info_message_distro fn_info_message_performance fn_info_message_disk diff --git a/lgsm/functions/command_dev_clear_functions.sh b/lgsm/functions/command_dev_clear_functions.sh new file mode 100644 index 000000000..bf3026c53 --- /dev/null +++ b/lgsm/functions/command_dev_clear_functions.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# command_dev_clear_functions.sh function +# Author: Daniel Gibbs +# Website: https://linuxgsm.com +# Description: Deletes the contents of the functions dir. + +echo "=================================" +echo "Clear Functions" +echo "=================================" +echo "" +if fn_prompt_yn "Do you want to delete all functions?" Y; then + rm -rfv "${functionsdir}/*" +fi +core_exit.sh \ No newline at end of file diff --git a/lgsm/functions/command_dev_detect_deps.sh b/lgsm/functions/command_dev_detect_deps.sh index 8999b2f93..e65bb47d9 100644 --- a/lgsm/functions/command_dev_detect_deps.sh +++ b/lgsm/functions/command_dev_detect_deps.sh @@ -4,8 +4,8 @@ # Website: https://linuxgsm.com # Description: Detects dependencies the server binary requires. -local commandname="DEPS-DETECT" -local commandaction="Deps-Detect" +local commandname="DETECT-DEPS" +local commandaction="Detect-Deps" local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" echo "=================================" @@ -24,9 +24,9 @@ files=$(find "${serverfiles}" | wc -l) find "${serverfiles}" -type f -print0 | while IFS= read -r -d $'\0' line; do if [ "${readelf}" == "eu-readelf" ]; then - ${readelf} -d "${line}" 2>/dev/null|grep NEEDED|awk '{ print $4 }'|sed 's/\[//g;s/\]//g' >> "${tmpdir}/.depdetect_readelf" + ${readelf} -d "${line}" 2>/dev/null | grep NEEDED| awk '{ print $4 }' | sed 's/\[//g;s/\]//g' >> "${tmpdir}/.depdetect_readelf" else - ${readelf} -d "${line}" 2>/dev/null|grep NEEDED|awk '{ print $5 }'|sed 's/\[//g;s/\]//g' >> "${tmpdir}/.depdetect_readelf" + ${readelf} -d "${line}" 2>/dev/null | grep NEEDED | awk '{ print $5 }' | sed 's/\[//g;s/\]//g' >> "${tmpdir}/.depdetect_readelf" fi echo -n "${i} / ${files}" $'\r' ((i++)) @@ -114,7 +114,7 @@ fi echo "" echo "Required Librarys" echo "=================================" -sort "${tmpdir}/.depdetect_readelf" |uniq +sort "${tmpdir}/.depdetect_readelf" | uniq echo -en "\n" rm -f "${tmpdir}/.depdetect_centos_line" rm -f "${tmpdir}/.depdetect_centos_list" diff --git a/lgsm/functions/command_dev_detect_glibc.sh b/lgsm/functions/command_dev_detect_glibc.sh index 38018ef27..e76213cb1 100644 --- a/lgsm/functions/command_dev_detect_glibc.sh +++ b/lgsm/functions/command_dev_detect_glibc.sh @@ -5,6 +5,10 @@ # Description: Automatically detects the version of GLIBC that is required. # Can check a file or directory recursively. +local commandname="DETECT-GLIBC" +local commandaction="Detect-Glibc" +local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" + echo "=================================" echo "GLIBC Requirements Checker" echo "=================================" @@ -31,18 +35,18 @@ echo "" files=$(find "${serverfiles}" | wc -l) find "${serverfiles}" -type f -print0 | while IFS= read -r -d $'\0' line; do - glibcversion=$(objdump -T "${line}" 2>/dev/null|grep -oP "GLIBC[^ ]+" |grep -v GLIBCXX|sort|uniq|sort -r --version-sort| head -n 1) + glibcversion=$(objdump -T "${line}" 2>/dev/null | grep -oP "GLIBC[^ ]+" | grep -v GLIBCXX | sort | uniq | sort -r --version-sort | head -n 1) if [ "${glibcversion}" ]; then echo "${glibcversion}: ${line}" >>"${tmpdir}/detect_glibc_files.tmp" fi - objdump -T "${line}" 2>/dev/null|grep -oP "GLIBC[^ ]+" >>"${tmpdir}/detect_glibc.tmp" + objdump -T "${line}" 2>/dev/null | grep -oP "GLIBC[^ ]+" >>"${tmpdir}/detect_glibc.tmp" echo -n "${i} / ${files}" $'\r' ((i++)) done echo "" cat "${tmpdir}/detect_glibc_files.tmp" echo "" -cat "${tmpdir}/detect_glibc.tmp"|sort|uniq|sort -r --version-sort +cat "${tmpdir}/detect_glibc.tmp" | sort | uniq | sort -r --version-sort rm "${tmpdir}/detect_glibc.tmp" rm "${tmpdir}/detect_glibc_files.tmp" diff --git a/lgsm/functions/command_dev_detect_ldd.sh b/lgsm/functions/command_dev_detect_ldd.sh index b4758cdb8..95898c4e4 100644 --- a/lgsm/functions/command_dev_detect_ldd.sh +++ b/lgsm/functions/command_dev_detect_ldd.sh @@ -5,6 +5,10 @@ # Description: Automatically detects required deps using ldd. # Can check a file or directory recursively. +local commandname="DETECT-LDD" +local commandaction="Detect-LDD" +local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" + echo "=================================" echo "Shared Object dependencies Checker" echo "=================================" @@ -25,14 +29,14 @@ echo "" files=$(find "${serverfiles}" | wc -l) find "${serverfiles}" -type f -print0 | while IFS= read -r -d $'\0' line; do - #ldd -v $line 2>/dev/null|grep "=>" >>"${tmpdir}/detect_ldd.tmp" - if [ -n "$(ldd "${line}" 2>/dev/null |grep -v "not a dynamic executable")" ]; then + if ldd "${line}" 2>/dev/null | grep -v "not a dynamic executable" + then echo "${line}" >> "${tmpdir}/detect_ldd.tmp" - ldd "${line}" 2>/dev/null |grep -v "not a dynamic executable" >> "${tmpdir}/detect_ldd.tmp" - - if [ -n "$(ldd "${line}" 2>/dev/null |grep -v "not a dynamic executable"|grep "not found")" ]; then + ldd "${line}" 2>/dev/null | grep -v "not a dynamic executable" >> "${tmpdir}/detect_ldd.tmp" + if ldd "${line}" 2>/dev/null | grep -v "not a dynamic executable" | grep "not found" + then echo "${line}" >> "${tmpdir}/detect_ldd_not_found.tmp" - ldd "${line}" 2>/dev/null |grep -v "not a dynamic executable"|grep "not found" >> "${tmpdir}/detect_ldd_not_found.tmp" + ldd "${line}" 2>/dev/null | grep -v "not a dynamic executable" | grep "not found" >> "${tmpdir}/detect_ldd_not_found.tmp" fi fi echo -n "$i / $files" $'\r' diff --git a/lgsm/functions/command_dev_query_raw.sh b/lgsm/functions/command_dev_query_raw.sh new file mode 100644 index 000000000..ae0d539c1 --- /dev/null +++ b/lgsm/functions/command_dev_query_raw.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# command_dev_query_raw.sh function +# Author: Daniel Gibbs +# Website: https://gameservermanagers.com +# Description: Raw gamedig output of the server. + +local commandname="QUERY-RAW" +local commandaction="QUERY-RAW" +local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" + +echo "=================================" +echo "Gamedig Raw Output" +echo "=================================" +echo"" +if [ ! "$(command -v gamedig 2>/dev/null)" ]; then + fn_print_failure_nl "gamedig not installed" +fi +if [ ! "$(command -v jq 2>/dev/null)" ]; then + fn_print_failure_nl "jq not installed" +fi + +check.sh +info_config.sh +info_parms.sh +if [ "${engine}" == "idtech3_ql" ]; then + local engine="quakelive" +elif [ "${gamename}" == "Killing Floor 2" ]; then + local engine="unreal4" +fi + +query_gamedig.sh +echo "gamedig --type \"${gamedigengine}\" --host \"${ip}\" --port \"${port}\"|jq" +echo"" +echo "${gamedigraw}" | jq +echo"" +echo "=================================" +echo "gsquery Raw Output" +echo "=================================" +echo"" +echo "./query_gsquery.py -a \"${ip}\" -p \"${port}\" -e \"${engine}\"" +if [ ! -f "${functionsdir}/query_gsquery.py" ]; then + fn_fetch_file_github "lgsm/functions" "query_gsquery.py" "${functionsdir}" "chmodx" "norun" "noforce" "nomd5" +fi +"${functionsdir}"/query_gsquery.py -a "${ip}" -p "${port}" -e "${engine}" \ No newline at end of file diff --git a/lgsm/functions/command_fastdl.sh b/lgsm/functions/command_fastdl.sh index ca6d5cdea..630778e59 100644 --- a/lgsm/functions/command_fastdl.sh +++ b/lgsm/functions/command_fastdl.sh @@ -271,7 +271,7 @@ fn_fastdl_gmod(){ fi # Clear addons directory in fastdl echo -en "clearing addons dir from fastdl dir..." - sleep 1 + sleep 0.5 rm -R "${fastdldir:?}/addons" exitcode=$? if [ ${exitcode} -ne 0 ]; then @@ -286,7 +286,7 @@ fn_fastdl_gmod(){ # Correct content that may be into a lua directory by mistake like some darkrpmodification addons if [ -d "${fastdldir}/lua" ]; then echo -en "correcting DarkRP files..." - sleep 2 + sleep 1 cp -Rf "${fastdldir}/lua/"* "${fastdldir}" exitcode=$? if [ ${exitcode} -ne 0 ]; then @@ -302,7 +302,7 @@ fn_fastdl_gmod(){ totalfiles=$(wc -l < "${tmpdir}/fastdl_files_to_compress.txt") # Calculates total file size while read dufile; do - filesize=$(du -b "${dufile}"| awk '{ print $1 }') + filesize=$(du -b "${dufile}" | awk '{ print $1 }') filesizetotal=$(( ${filesizetotal} + ${filesize} )) done <"${tmpdir}/fastdl_files_to_compress.txt" fi diff --git a/lgsm/functions/command_mods_install.sh b/lgsm/functions/command_mods_install.sh index a02771687..b26bb9e06 100644 --- a/lgsm/functions/command_mods_install.sh +++ b/lgsm/functions/command_mods_install.sh @@ -16,7 +16,7 @@ fn_print_header # Displays a list of installed mods fn_mods_installed_list -if [ ${installedmodscount} -gt 0 ]; then +if [ "${installedmodscount}" -gt "0" ]; then echo "Installed addons/mods" echo "=================================" # Go through all available commands, get details and display them to the user @@ -85,7 +85,7 @@ if [ -f "${modsinstalledlistfullpath}" ]; then if [ -n "$(sed -n "/^${modcommand}$/p" "${modsinstalledlistfullpath}")" ]; then fn_print_warning_nl "${modprettyname} is already installed" fn_script_log_warn "${modprettyname} is already installed" - sleep 1 + sleep 0.5 echo " * Any configs may be overwritten." if ! fn_prompt_yn "Continue?" Y; then echo Exiting; core_exit.sh diff --git a/lgsm/functions/command_mods_remove.sh b/lgsm/functions/command_mods_remove.sh index b2700b683..4ecdacfed 100644 --- a/lgsm/functions/command_mods_remove.sh +++ b/lgsm/functions/command_mods_remove.sh @@ -58,7 +58,7 @@ fn_script_log_info "Removing ${modsfilelistsize} files from ${modprettyname}" echo -e "removing ${modprettyname}" echo -e "* ${modsfilelistsize} files to be removed" echo -e "* location: ${modinstalldir}" -sleep 1 +sleep 0.5 # Go through every file and remove it modfileline="1" tput sc diff --git a/lgsm/functions/command_mods_update.sh b/lgsm/functions/command_mods_update.sh index a2274277d..b80e4416e 100644 --- a/lgsm/functions/command_mods_update.sh +++ b/lgsm/functions/command_mods_update.sh @@ -66,7 +66,7 @@ for ((ulindex=0; ulindex < ${#installedmodslist[@]}; ulindex++)); do echo -e " * ${yellow}${modprettyname}${default} (retain common custom files)" fi done -sleep 1 +sleep 0.5 ## Update # List all installed mods and apply update diff --git a/lgsm/functions/command_monitor.sh b/lgsm/functions/command_monitor.sh index cf1cbdd5e..f68fa2e33 100644 --- a/lgsm/functions/command_monitor.sh +++ b/lgsm/functions/command_monitor.sh @@ -4,12 +4,82 @@ # Contributor: UltimateByte # Website: https://linuxgsm.com # Description: Monitors server by checking for running processes. -# then passes to monitor_gsquery.sh. +# then passes to gamedig and gsquery. local commandname="MONITOR" local commandaction="Monitor" local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" +fn_monitor_loop(){ +# Will query up to 5 times every 15 seconds. +# Query will wait up to 60 seconds to confirm server is down giving server time if changing map. +for queryattempt in {1..5}; do + fn_print_dots "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: " + fn_print_querying_eol + fn_script_log_info "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt} : QUERYING" + sleep 0.5 + if [ "${querymethod}" == "gamedig" ]; then + query_gamedig.sh + elif [ "${querymethod}" == "gsquery" ]; then + if [ ! -f "${functionsdir}/query_gsquery.py" ]; then + fn_fetch_file_github "lgsm/functions" "query_gsquery.py" "${functionsdir}" "chmodx" "norun" "noforce" "nomd5" + fi + "${functionsdir}"/query_gsquery.py -a "${ip}" -p "${queryport}" -e "${engine}" > /dev/null 2>&1 + querystatus="$?" + elif [ "${querymethod}" == "telnet" ]; then + bash -c 'exec 3<> /dev/tcp/'${ip}'/'${queryport}'' + querystatus="$?" + fi + + if [ "${querystatus}" == "0" ]; then + # Server query OK + sleep 0.5 + fn_print_ok "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: " + fn_print_ok_eol_nl + fn_script_log_pass "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt}: OK" + exitcode=0 + monitorpass=1 + core_exit.sh + else + # Server query FAIL + fn_script_log_info "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt}: FAIL" + fn_print_fail "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: " + fn_print_fail_eol + sleep 0.5 + # monitor try gamedig first then gsquery before restarting + if [ "${querymethod}" == "gsquery" ]; then + if [ "${totalseconds}" -ge "59" ]; then + # Server query FAIL for over 59 seconds reboot server + fn_print_fail "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: " + fn_print_fail_eol_nl + fn_script_log_error "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt}: FAIL" + sleep 0.5 + + # Send alert if enabled + alert="restartquery" + alert.sh + command_restart.sh + core_exit.sh + fi + elif [ "${querymethod}" == "gamedig" ]; then + if [ "${totalseconds}" -ge "29" ]; then + break + fi + fi + + # Seconds counter + for seconds in {1..15}; do + fn_print_fail "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: WAIT" + totalseconds=$((totalseconds + 1)) + sleep 1 + if [ "${seconds}" == "15" ]; then + break + fi + done + fi +done +} + fn_monitor_check_lockfile(){ # Monitor does not run it lockfile is not found if [ ! -f "${rootdir}/${lockselfname}" ]; then @@ -22,102 +92,104 @@ fn_monitor_check_lockfile(){ fn_monitor_check_update(){ # Monitor will not check if update is running. - if [ "$(ps -ef|grep "${selfname} update"|grep -v grep|wc -l)" != "0" ]; then + if [ "$(ps -ef | grep "${selfname} update" | grep -v grep | wc -l)" != "0" ]; then fn_print_error_nl "SteamCMD is currently checking for updates" fn_script_log_error "SteamCMD is currently checking for updates" - sleep 1 + sleep 0.5 core_exit.sh fi } -fn_monitor_msg_checking(){ +fn_monitor_check_session(){ fn_print_dots "Checking session: " fn_print_checking_eol fn_script_log_info "Checking session: CHECKING" - sleep 1 -} - -fn_monitor_teamspeak3(){ + sleep 0.5 if [ "${status}" != "0" ]; then fn_print_ok "Checking session: " fn_print_ok_eol_nl fn_script_log_pass "Checking session: OK" else - fn_print_error "Checking session: ${ts3error}: " + if [ "${gamename}" == "TeamSpeak 3" ]; then + fn_print_error "Checking session: ${ts3error}: " + elif [ "${gamename}" == "Mumble" ]; then + fn_print_error "Checking session: Not listening to port ${queryport}" + else + fn_print_error "Checking session: " + fi fn_print_fail_eol_nl - fn_script_log_error "Checking session: ${ts3error}: FAIL" - failurereason="${ts3error}" + fn_script_log_error "Checking session: FAIL" alert="restart" alert.sh fn_script_log_info "Monitor is starting ${servername}" - sleep 1 + sleep 0.5 command_restart.sh fi + sleep 0.5 } -fn_monitor_mumble(){ - if [ "${status}" != "0" ]; then - fn_print_ok "Checking session: " - fn_print_ok_eol_nl - fn_script_log_pass "Checking session: OK" - else - fn_print_error "Checking session: Not listening to port ${port}" - fn_print_fail_eol_nl - fn_script_log_error "Checking session: Not listening to port ${port}" - failurereason="Checking session: Not listening to port ${port}" - alert="restart" - alert.sh - fn_script_log_info "Monitor is starting ${servername}" - sleep 1 - command_restart.sh - fi -} -fn_monitor_tmux(){ - # checks that tmux session is running - if [ "${status}" != "0" ]; then - fn_print_ok "Checking session: " - fn_print_ok_eol_nl - fn_script_log_pass "Checking session: OK" - # runs gsquery check on game with specific engines. - local allowed_engines_array=( avalanche2.0 avalanche3.0 goldsource idtech2 idtech3 idtech3_ql iw2.0 iw3.0 madness quake refractor realvirtuality source spark starbound unity3d unreal unreal2 unreal4 ) - for allowed_engine in "${allowed_engines_array[@]}" - do - if [ "${allowed_engine}" == "starbound" ]; then - info_config.sh - if [ "${queryenabled}" == "true" ]; then - monitor_gsquery.sh - fi - elif [ "${allowed_engine}" == "${engine}" ]; then - monitor_gsquery.sh +fn_monitor_query(){ + fn_script_log_info "Querying port: query enabled" + # engines that work with query + local allowed_engines_array=( avalanche2.0 avalanche3.0 goldsource idtech2 idtech3 idtech3_ql iw2.0 iw3.0 madness quake refractor realvirtuality source spark starbound unity3d unreal unreal2 unreal4 ) + for allowed_engine in "${allowed_engines_array[@]}" + do + if [ "${allowed_engine}" == "${engine}" ]; then + if [ "${engine}" == "idtech3_ql" ]; then + local engine="quakelive" + elif [ "${gamename}" == "Killing Floor 2" ]; then + local engine="unreal4" fi - done - else - fn_print_error "Checking session: " - fn_print_fail_eol_nl - fn_script_log_error "Checking session: FAIL" - alert="restart" - alert.sh - fn_script_log_info "Monitor is starting ${servername}" - sleep 1 - command_restart.sh - fi + + # will first attempt to use gamedig then gsquery + totalseconds=0 + local query_methods_array=( gamedig gsquery ) + for query_method in "${query_methods_array[@]}" + do + if [ "${query_method}" == "gamedig" ]; then + # will bypass gamedig if not installed + if [ "$(command -v gamedig 2>/dev/null)" ]&&[ "$(command -v jq 2>/dev/null)" ]; then + if [ -z "${monitorpass}" ]; then + querymethod="${query_method}" + fn_monitor_loop + fi + fi + else + if [ -z "${monitorpass}" ]; then + querymethod="${query_method}" + fn_monitor_loop + fi + fi + done + fi + done +} + +fn_monitor_query_telnet(){ + querymethod="telnet" + fn_monitor_loop } monitorflag=1 fn_print_dots "${servername}" -sleep 1 +sleep 0.5 check.sh logs.sh info_config.sh +info_parms.sh fn_monitor_check_lockfile fn_monitor_check_update -fn_monitor_msg_checking -if [ "${gamename}" == "TeamSpeak 3" ]; then - fn_monitor_teamspeak3 -elif [ "${gamename}" == "Mumble" ]; then - fn_monitor_mumble +fn_monitor_check_session +# Query has to be enabled in Starbound config +if [ "${gamename}" == "Starbound" ]; then + if [ "${queryenabled}" == "true" ]; then + fn_monitor_query + fi +elif [ "${gamename}" == "TeamSpeak 3" ]; then + fn_monitor_query_telnet else - fn_monitor_tmux + fn_monitor_query fi -core_exit.sh + +core_exit.sh \ No newline at end of file diff --git a/lgsm/functions/command_postdetails.sh b/lgsm/functions/command_postdetails.sh index 6e2cd94a4..9bd635086 100644 --- a/lgsm/functions/command_postdetails.sh +++ b/lgsm/functions/command_postdetails.sh @@ -74,7 +74,7 @@ fi if [ "${posttarget}" == "http://pastebin.com" ] ; then fn_print_dots "Posting details to pastbin.com for ${postexpire}" - sleep 1 + sleep 0.5 # grab the return from 'value' from an initial visit to pastebin. csrftoken=$(${curlpath} -s "${posttarget}" | sed -n 's/^.*input type="hidden" name="csrf_token_post" value="\(.*\)".*$/\1/p') @@ -94,7 +94,7 @@ if [ "${posttarget}" == "http://pastebin.com" ] ; then echo " Please share the following url for support: ${pdurl}" elif [ "${posttarget}" == "https://hastebin.com" ] ; then fn_print_dots "Posting details to hastebin.com" - sleep 1 + sleep 0.5 # hastebin is a bit simpler. If successful, the returned result # should look like: {"something":"key"}, putting the reference that # we need in "key". TODO - error handling. -CedarLUG diff --git a/lgsm/functions/command_start.sh b/lgsm/functions/command_start.sh index 43ce5480e..208910942 100644 --- a/lgsm/functions/command_start.sh +++ b/lgsm/functions/command_start.sh @@ -15,24 +15,16 @@ fn_start_teamspeak3(){ fn_script_log_warn "${servercfgfullpath} is missing" echo " * Creating blank ${servercfg}" fn_script_log_info "Creating blank ${servercfg}" - sleep 2 + sleep 1 echo " * ${servercfg} can remain blank by default." fn_script_log_info "${servercfgfullpath} can remain blank by default." - sleep 2 + sleep 1 echo " * ${servercfg} is located in ${servercfgfullpath}." fn_script_log_info "${servercfg} is located in ${servercfgfullpath}." sleep 5 touch "${servercfgfullpath}" fi - sleep 1 - check_status.sh - if [ "${status}" != "0" ]; then - fn_print_info_nl "${servername} is already running" - fn_script_log_error "${servername} is already running" - if [ -z "${exitbypass}" ]; then - core_exit.sh - fi - fi + sleep 0.5 if [ -f "${lgsmlog}" ]; then mv "${lgsmlog}" "${lgsmlogdate}" fi @@ -52,7 +44,7 @@ fn_start_teamspeak3(){ else ./ts3server_startscript.sh start inifile="${servercfgfullpath}" > /dev/null 2>&1 fi - sleep 1 + sleep 0.5 check_status.sh if [ "${status}" == "0" ]; then fn_print_fail_nl "Unable to start ${servername}" @@ -81,26 +73,15 @@ fn_start_tmux(){ fi # Log rotation - check_status.sh - if [ "${status}" == "0" ]; then - fn_script_log_info "Rotating log files" - if [ "${engine}" == "unreal2" ]; then - if [ -f "${gamelog}" ]; then - mv "${gamelog}" "${gamelogdate}" - fi - fi + fn_script_log_info "Rotating log files" + if [ "${engine}" == "unreal2" ]&&[ -f "${gamelog}" ]; then + mv "${gamelog}" "${gamelogdate}" + fi + if [ -f "${lgsmlog}" ]; then mv "${lgsmlog}" "${lgsmlogdate}" - mv "${consolelog}" "${consolelogdate}" fi - - # If server is already running exit - check_status.sh - if [ "${status}" != "0" ]; then - fn_print_info_nl "${servername} is already running" - fn_script_log_error "${servername} is already running" - if [ -z "${exitbypass}" ]; then - core_exit.sh - fi + if [ -f "${consolelog}" ]; then + mv "${consolelog}" "${consolelogdate}" fi # Create lockfile @@ -112,9 +93,9 @@ fn_start_tmux(){ touch "${consolelog}" # Get tmux version - tmuxversion="$(tmux -V|sed "s/tmux //"|sed -n '1 p')" + tmuxversion="$(tmux -V | sed "s/tmux //" | sed -n '1 p')" # Tmux compiled from source will return "master", therefore ignore it - if [ "$(tmux -V|sed "s/tmux //"|sed -n '1 p')" == "master" ]; then + if [ "$(tmux -V | sed "s/tmux //" | sed -n '1 p')" == "master" ]; then fn_script_log "Tmux version: master (user compiled)" echo "Tmux version: master (user compiled)" >> "${consolelog}" if [ "${consolelogging}" == "on" ]||[ -z "${consolelogging}" ]; then @@ -122,7 +103,7 @@ fn_start_tmux(){ fi elif [ -n "${tmuxversion}" ]; then # Get the digit version of tmux - tmuxversion="$(tmux -V|sed "s/tmux //"|sed -n '1 p'|tr -cd '[:digit:]')" + tmuxversion="$(tmux -V | sed "s/tmux //" | sed -n '1 p' | tr -cd '[:digit:]')" # tmux pipe-pane not supported in tmux versions < 1.6 if [ "${tmuxversion}" -lt "16" ]; then echo "Console logging disabled: Tmux => 1.6 required @@ -148,14 +129,14 @@ if [ "${consolelogging}" == "off" ]; then echo "Console logging disabled by user" >> "${consolelog}" fn_script_log_info "Console logging disabled by user" fi -sleep 1 +sleep 0.5 # If the server fails to start check_status.sh if [ "${status}" == "0" ]; then fn_print_fail_nl "Unable to start ${servername}" fn_script_log_fatal "Unable to start ${servername}" - sleep 1 + sleep 0.5 if [ -s "${lgsmlogdir}/.${servicename}-tmux-error.tmp" ]; then fn_print_fail_nl "Unable to start ${servername}: Tmux error:" fn_script_log_fatal "Unable to start ${servername}: Tmux error:" @@ -169,7 +150,8 @@ sleep 1 cat "${lgsmlogdir}/.${servicename}-tmux-error.tmp" | tee -a "${lgsmlog}" # Detected error https://linuxgsm.com/support - if [ $(grep -c "Operation not permitted" "${lgsmlogdir}/.${servicename}-tmux-error.tmp") ]; then + if grep -c "Operation not permitted" "${lgsmlogdir}/.${servicename}-tmux-error.tmp" + then echo "" echo "Fix" echo "=================================" @@ -206,19 +188,25 @@ sleep 1 } fn_print_dots "${servername}" -sleep 1 +sleep 0.5 check.sh +# Is the server already started +if [ "${status}" != "0" ]; then # $status comes from check_status.sh, which is run by check.sh for this command + fn_print_info_nl "${servername} is already running" + fn_script_log_error "${servername} is already running" + if [ -z "${exitbypass}" ]; then + core_exit.sh + fi +fi fix.sh info_config.sh logs.sh # Will check for updates is updateonstart is yes -if [ "${status}" == "0" ]; then - if [ "${updateonstart}" == "yes" ]||[ "${updateonstart}" == "1" ]||[ "${updateonstart}" == "on" ]; then - exitbypass=1 - unset updateonstart - command_update.sh - fi +if [ "${updateonstart}" == "yes" ]||[ "${updateonstart}" == "1" ]||[ "${updateonstart}" == "on" ]; then + exitbypass=1 + unset updateonstart + command_update.sh fi if [ "${gamename}" == "TeamSpeak 3" ]; then diff --git a/lgsm/functions/command_stop.sh b/lgsm/functions/command_stop.sh index 4740f2f92..7b8ce1597 100644 --- a/lgsm/functions/command_stop.sh +++ b/lgsm/functions/command_stop.sh @@ -33,8 +33,7 @@ fn_stop_graceful_ctrlc(){ fn_print_fail_eol_nl fn_script_log_error "Graceful: CTRL+c: FAIL" fi - sleep 1 - fn_stop_tmux + sleep 0.5 } # Attempts graceful shutdown by sending a specified command. @@ -44,7 +43,7 @@ fn_stop_graceful_cmd(){ fn_print_dots "Graceful: sending \"${1}\"" fn_script_log_info "Graceful: sending \"${1}\"" # sends specific stop command - tmux send -t "${servicename}" ${1} ENTER > /dev/null 2>&1 + tmux send -t "${servicename}" "${1}" ENTER > /dev/null 2>&1 # waits up to given seconds giving the server time to shutdown gracefully for ((seconds=1; seconds<=${2}; seconds++)); do check_status.sh @@ -63,8 +62,7 @@ fn_stop_graceful_cmd(){ fn_print_fail_eol_nl fn_script_log_error "Graceful: sending \"${1}\": FAIL" fi - sleep 1 - fn_stop_tmux + sleep 0.5 } # Attempts graceful of goldsource using rcon 'quit' command. @@ -84,8 +82,7 @@ fn_stop_graceful_goldsource(){ fn_print_ok "Graceful: sending \"quit\": ${seconds}: " fn_print_ok_eol_nl fn_script_log_pass "Graceful: sending \"quit\": OK: ${seconds} seconds" - sleep 1 - fn_stop_tmux + sleep 0.5 } # Attempts graceful of 7 Days To Die using telnet. @@ -115,7 +112,7 @@ fn_stop_telnet_sdtd(){ fn_stop_graceful_sdtd(){ fn_print_dots "Graceful: telnet" fn_script_log_info "Graceful: telnet" - sleep 1 + sleep 0.5 if [ "${telnetenabled}" == "false" ]; then fn_print_info_nl "Graceful: telnet: DISABLED: Enable in ${servercfg}" elif [ "$(command -v expect 2>/dev/null)" ]; then @@ -123,10 +120,10 @@ fn_stop_graceful_sdtd(){ for telnetip in 127.0.0.1 ${ip}; do fn_print_dots "Graceful: telnet: ${telnetip}" fn_script_log_info "Graceful: telnet: ${telnetip}" - sleep 1 + sleep 0.5 fn_stop_telnet_sdtd - completed=$(echo -en "\n ${sdtd_telnet_shutdown}"|grep "Completed.") - refused=$(echo -en "\n ${sdtd_telnet_shutdown}"|grep "Timeout or EOF") + completed=$(echo -en "\n ${sdtd_telnet_shutdown}" | grep "Completed.") + refused=$(echo -en "\n ${sdtd_telnet_shutdown}" | grep "Timeout or EOF") if [ -n "${refused}" ]; then fn_print_error "Graceful: telnet: ${telnetip}: " fn_print_fail_eol_nl @@ -142,7 +139,7 @@ fn_stop_graceful_sdtd(){ if [ -n "${completed}" ]; then for seconds in {1..30}; do fn_stop_telnet_sdtd - refused=$(echo -en "\n ${sdtd_telnet_shutdown}"|grep "Timeout or EOF") + refused=$(echo -en "\n ${sdtd_telnet_shutdown}" | grep "Timeout or EOF") if [ -n "${refused}" ]; then fn_print_ok "Graceful: telnet: ${telnetip}: " fn_print_ok_eol_nl @@ -173,8 +170,7 @@ fn_stop_graceful_sdtd(){ fn_print_fail_eol_nl fn_script_log_warn "Graceful: telnet: expect not installed: FAIL" fi - sleep 1 - fn_stop_tmux + sleep 0.5 } fn_stop_graceful_select(){ @@ -193,10 +189,8 @@ fn_stop_graceful_select(){ fn_stop_graceful_goldsource elif [ "${engine}" == "avalanche2.0" ]||[ "${engine}" == "avalanche3.0" ]||[ "${gamename}" == "Factorio" ]||[ "${engine}" == "unity3d" ]||[ "${engine}" == "unreal4" ]||[ "${engine}" == "unreal3" ]||[ "${engine}" == "unreal2" ]||[ "${engine}" == "unreal" ]||[ "${gamename}" == "Mumble" ]; then fn_stop_graceful_ctrlc - elif [ "${engine}" == "source" ]||[ "${engine}" == "quake" ]||[ "${engine}" == "idtech2" ]||[ "${engine}" == "idtech3" ]||[ "${engine}" == "idtech3_ql" ]||[ "${engine}" == "Just Cause 2" ]||[ "${engine}" == "projectzomboid" ]; then + elif [ "${engine}" == "source" ]||[ "${engine}" == "quake" ]||[ "${engine}" == "idtech2" ]||[ "${engine}" == "idtech3" ]||[ "${engine}" == "idtech3_ql" ]||[ "${engine}" == "Just Cause 2" ]||[ "${engine}" == "projectzomboid" ]||[ "${shortname}" == "rw" ]; then fn_stop_graceful_cmd "quit" 30 - else - fn_stop_tmux fi } @@ -218,7 +212,7 @@ fn_stop_ark(){ if [ "${#queryport}" -gt 0 ] ; then for (( pidcheck=0 ; pidcheck < ${maxpiditer} ; pidcheck++ )) ; do - pid=$(netstat -nap 2>/dev/null | grep ^udp[[:space:]] |\ + pid=$(netstat -nap 2>/dev/null | grep "^udp[[:space:]]" |\ grep ":${queryport}[[:space:]]" | rev | awk '{print $1}' |\ rev | cut -d\/ -f1) # @@ -228,7 +222,7 @@ fn_stop_ark(){ # and a valid numeric pid remains unchanged. if [ "${pid}" -gt 1 ]&&[ "${pid}" -le "$(cat "/proc/sys/kernel/pid_max")" ]; then fn_print_dots "Process still bound. Awaiting graceful exit: ${pidcheck}" - sleep 1 + sleep 0.5 else break # Our job is done here fi # end if for pid range check @@ -267,8 +261,6 @@ fn_stop_tmux(){ sleep 0.5 check_status.sh if [ "${status}" == "0" ]; then - # Remove lockfile - rm -f "${rootdir}/${lockselfname}" # ARK doesn't clean up immediately after tmux is killed. # Make certain the ports are cleared before continuing. if [ "${gamename}" == "ARK: Survival Evolved" ]; then @@ -277,28 +269,26 @@ fn_stop_tmux(){ fn_print_ok_nl "${servername}" fn_script_log_pass "Stopped ${servername}" else - fn_print_fail_nl "Unable to stop${servername}" - fn_script_log_fatal "Unable to stop${servername}" + fn_print_fail_nl "Unable to stop ${servername}" + fn_script_log_fatal "Unable to stop ${servername}" fi } # checks if the server is already stopped before trying to stop. fn_stop_pre_check(){ - if [ "${gamename}" == "TeamSpeak 3" ]; then - check_status.sh - if [ "${status}" == "0" ]; then - fn_print_info_nl "${servername} is already stopped" - fn_script_log_error "${servername} is already stopped" - else - fn_stop_teamspeak3 - fi +# Is the server already stopped + if [ "${status}" == "0" ]; then # $status comes from check_status.sh, which is run by check.sh for this command + fn_print_info_nl "${servername} is already stopped" + fn_script_log_error "${servername} is already stopped" + elif [ "${gamename}" == "TeamSpeak 3" ]; then + fn_stop_teamspeak3 else - if [ "${status}" == "0" ]; then - fn_print_info_nl "${servername} is already stopped" - fn_script_log_error "${servername} is already stopped" - else - fn_stop_graceful_select - fi + fn_stop_graceful_select + fi + # Check status again, a stop tmux session if needed + check_status.sh + if [ "${status}" != "0" ]; then + fn_stop_tmux fi } @@ -307,4 +297,8 @@ sleep 0.5 check.sh info_config.sh fn_stop_pre_check +# Remove lockfile +if [ -f "${rootdir}/${lockselfname}" ]; then + rm -f "${rootdir}/${lockselfname}" +fi core_exit.sh diff --git a/lgsm/functions/command_test_alert.sh b/lgsm/functions/command_test_alert.sh index e973007b8..ff5084696 100644 --- a/lgsm/functions/command_test_alert.sh +++ b/lgsm/functions/command_test_alert.sh @@ -9,7 +9,7 @@ local commandaction="Alert" local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" fn_print_dots "${servername}" -sleep 1 +sleep 0.5 check.sh info_config.sh alert="test" diff --git a/lgsm/functions/command_ts3_server_pass.sh b/lgsm/functions/command_ts3_server_pass.sh index 05acf0f6b..cbd3ad9ae 100644 --- a/lgsm/functions/command_ts3_server_pass.sh +++ b/lgsm/functions/command_ts3_server_pass.sh @@ -25,14 +25,14 @@ fn_serveradmin_password_prompt(){ fn_serveradmin_password_set(){ fn_print_info_nl "Starting server with new password..." fn_script_log_info "Starting server with new password" - sleep 1 + sleep 0.5 # Start server in "new password mode" ts3serverpass="1" exitbypass="1" command_start.sh fn_print_ok_nl "Password applied" fn_script_log_pass "New ServerAdmin password applied" - sleep 1 + sleep 0.5 } # Running functions diff --git a/lgsm/functions/command_update_linuxgsm.sh b/lgsm/functions/command_update_linuxgsm.sh index 0e7f65cf8..77e5ddc49 100644 --- a/lgsm/functions/command_update_linuxgsm.sh +++ b/lgsm/functions/command_update_linuxgsm.sh @@ -9,12 +9,12 @@ local commandaction="Update LinuxGSM" local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" fn_print_dots "Updating LinuxGSM" -sleep 1 +sleep 0.5 check.sh fn_script_log_info "Updating LinuxGSM" echo -ne "\n" -if [ -z "${legacymode}" ];then +if [ -z "${legacymode}" ]; then # Check and update _default.cfg echo -ne " checking config _default.cfg...\c" config_file_diff=$(diff "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" <(${curlpath} -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg")) @@ -75,7 +75,7 @@ fi # Check and update functions if [ -n "${functionsdir}" ]; then if [ -d "${functionsdir}" ]; then - cd "${functionsdir}" + cd "${functionsdir}" || exit for functionfile in * do echo -ne " checking function ${functionfile}...\c" @@ -97,7 +97,7 @@ if [ -n "${functionsdir}" ]; then elif [ "${function_file_diff}" != "" ]; then fn_print_update_eol_nl fn_script_log_info "checking function ${functionfile}: UPDATE" - rm -rf "${functionsdir}/${functionfile}" + rm -rf "${functionsdir:?}/${functionfile}" fn_update_function else fn_print_ok_eol_nl diff --git a/lgsm/functions/command_validate.sh b/lgsm/functions/command_validate.sh index a9cfc2721..cef68ce7c 100644 --- a/lgsm/functions/command_validate.sh +++ b/lgsm/functions/command_validate.sh @@ -17,9 +17,9 @@ fn_validation(){ echo -en "\n" fn_script_log_info "Validating files: SteamCMD" - sleep 1 + sleep 0.5 - cd "${steamcmddir}" + cd "${steamcmddir}" || exit # Detects if unbuffer command is available for 32 bit distributions only. info_distro.sh if [ "$(command -v stdbuf)" ]&&[ "${arch}" != "x86_64" ]; then @@ -27,9 +27,9 @@ fn_validation(){ fi if [ "${engine}" == "goldsource" ]; then - ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod ${appidmod} +app_update "${appid}" ${branch} +app_update "${appid}" ${branch} validate +quit| tee -a "${lgsmlog}" + ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" ${branch} +app_update "${appid}" ${branch} validate +quit | tee -a "${lgsmlog}" else - ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} validate +quit| tee -a "${lgsmlog}" + ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} validate +quit | tee -a "${lgsmlog}" fi if [ $? != 0 ]; then fn_print_fail_nl "Validating files: SteamCMD" @@ -45,7 +45,7 @@ fn_validation(){ fn_print_dots "Validating files:" sleep 0.5 fn_print_dots "Validating files: SteamCMD" -sleep 1 +sleep 0.5 check.sh check_status.sh if [ "${status}" != "0" ]; then diff --git a/lgsm/functions/command_wipe.sh b/lgsm/functions/command_wipe.sh index 370879832..7e38cf1ab 100644 --- a/lgsm/functions/command_wipe.sh +++ b/lgsm/functions/command_wipe.sh @@ -48,7 +48,7 @@ fn_wipe_server_remove_files(){ if [ -n "$(find "${serveridentitydir}" -type f -name "proceduralmap.*.sav")" ]; then currentaction="Removing procedural map save(s): ${serveridentitydir}/proceduralmap.*.sav" echo -en "Removing map saves proceduralmap.*.sav file(s)..." - sleep 1 + sleep 0.5 fn_script_log "${currentaction}" find "${serveridentitydir:?}" -type f -name "proceduralmap.*.sav" -delete fn_wipe_exit_code @@ -62,7 +62,7 @@ fn_wipe_server_remove_files(){ if [ -n "$(find "${serveridentitydir}" -type f -name "barren*.sav")" ]; then currentaction="Removing barren map save(s): ${serveridentitydir}/barren*.sav" echo -en "Removing barren map saves barren*.sav file(s)..." - sleep 1 + sleep 0.5 fn_script_log "${currentaction}" find "${serveridentitydir:?}" -type f -name "barren*.sav" -delete fn_wipe_exit_code @@ -76,7 +76,7 @@ fn_wipe_server_remove_files(){ if [ -n "$(find "${serveridentitydir}" -type f -name "proceduralmap.*.map")" ]; then currentaction="Removing map file(s): ${serveridentitydir}/proceduralmap.*.map" echo -en "Removing procedural map proceduralmap.*.map file(s)..." - sleep 1 + sleep 0.5 fn_script_log "${currentaction}" find "${serveridentitydir:?}" -type f -name "proceduralmap.*.map" -delete fn_wipe_exit_code @@ -90,7 +90,7 @@ fn_wipe_server_remove_files(){ if [ -n "$(find "${serveridentitydir}" -type f -name "barren*.map")" ]; then currentaction="Removing map file(s): ${serveridentitydir}/barren*.map" echo -en "Removing barren map barren*.map file(s)..." - sleep 1 + sleep 0.5 fn_script_log "${currentaction}" find "${serveridentitydir:?}" -type f -name "barren*.map" -delete fn_wipe_exit_code @@ -103,7 +103,7 @@ fn_wipe_server_remove_files(){ if [ -d "${serveridentitydir}/user" ]; then currentaction="Removing user directory: ${serveridentitydir}/user" echo -en "Removing user directory..." - sleep 1 + sleep 0.5 fn_script_log "${currentaction}" rm -rf "${serveridentitydir:?}/user" fn_wipe_exit_code @@ -116,7 +116,7 @@ fn_wipe_server_remove_files(){ if [ -d "${serveridentitydir}/storage" ]; then currentaction="Removing storage directory: ${serveridentitydir}/storage" echo -en "Removing storage directory..." - sleep 1 + sleep 0.5 fn_script_log "${currentaction}" rm -rf "${serveridentitydir:?}/storage" fn_wipe_exit_code @@ -129,7 +129,7 @@ fn_wipe_server_remove_files(){ if [ -n "$(find "${serveridentitydir}" -type f -name "Log.*.txt")" ]; then currentaction="Removing log files: ${serveridentitydir}/Log.*.txt" echo -en "Removing Log files..." - sleep 1 + sleep 0.5 fn_script_log "${currentaction}" find "${serveridentitydir:?}" -type f -name "Log.*.txt" -delete fn_wipe_exit_code @@ -152,12 +152,12 @@ if [ "${gamename}" == "Rust" ]; then echo Exiting; core_exit.sh fi fn_script_log_info "User selects to erase any user, storage, log and map data from ${serveridentitydir}" - sleep 1 + sleep 0.5 fn_wipe_server_process else fn_print_information_nl "No data to wipe was found" fn_script_log_info "No data to wipe was found." - sleep 1 + sleep 0.5 core_exit.sh fi # You can add an "elif" here to add another game or engine @@ -165,7 +165,7 @@ else # Game not listed fn_print_information_nl "Wipe is not available for this game" fn_script_log_info "Wipe is not available for this game." - sleep 1 + sleep 0.5 core_exit.sh fi diff --git a/lgsm/functions/compress_ut99_maps.sh b/lgsm/functions/compress_ut99_maps.sh index c75f674d1..0832ae997 100644 --- a/lgsm/functions/compress_ut99_maps.sh +++ b/lgsm/functions/compress_ut99_maps.sh @@ -22,7 +22,7 @@ if ! fn_prompt_yn "Start compression?" Y; then fi mkdir -pv "${compressedmapsdir}" > /dev/null 2>&1 rm -rfv "${serverfiles}/Maps/"*.unr.uz -cd "${systemdir}" +cd "${systemdir}" || exit for map in "${serverfiles}/Maps/"*; do ./ucc-bin compress "${map}" --nohomedir done diff --git a/lgsm/functions/core_dl.sh b/lgsm/functions/core_dl.sh index 359a4c8a6..ea23b8c7e 100644 --- a/lgsm/functions/core_dl.sh +++ b/lgsm/functions/core_dl.sh @@ -25,7 +25,7 @@ fn_dl_md5(){ # Runs MD5 Check if available if [ "${md5}" != "0" ]&&[ "${md5}" != "nomd5" ]; then echo -ne "verifying ${local_filename} with MD5..." - sleep 1 + sleep 0.5 local md5sumcmd=$(md5sum "${local_filedir}/${local_filename}"|awk '{print $1;}') if [ "${md5sumcmd}" != "${md5}" ]; then fn_print_fail_eol_nl @@ -88,7 +88,7 @@ fn_fetch_trap(){ echo -ne "downloading ${local_filename}..." fn_print_canceled_eol_nl fn_script_log_info "Downloading ${local_filename}...CANCELED" - sleep 1 + sleep 0.5 rm -f "${local_filedir}/${local_filename}" echo -ne "downloading ${local_filename}..." fn_print_removed_eol_nl diff --git a/lgsm/functions/core_exit.sh b/lgsm/functions/core_exit.sh index 58860d857..bc6c2331d 100644 --- a/lgsm/functions/core_exit.sh +++ b/lgsm/functions/core_exit.sh @@ -8,6 +8,9 @@ fn_exit_dev_debug(){ if [ -f "${rootdir}/.dev-debug" ]; then echo "" echo "${function_selfname} exiting with code: ${exitcode}" + if [ -f "${rootdir}/dev-debug.log" ]; then + grep "functionfile=" "${rootdir}/dev-debug.log" | sed 's/functionfile=//g' > "${rootdir}/dev-debug-function-order.log" + fi fi } diff --git a/lgsm/functions/core_functions.sh b/lgsm/functions/core_functions.sh index 0bea6c7a3..c43395dd2 100644 --- a/lgsm/functions/core_functions.sh +++ b/lgsm/functions/core_functions.sh @@ -249,6 +249,11 @@ fn_fetch_function # Dev +command_dev_clear_functions.sh(){ +functionfile="${FUNCNAME}" +fn_fetch_function +} + command_dev_debug.sh(){ functionfile="${FUNCNAME}" fn_fetch_function @@ -269,6 +274,11 @@ functionfile="${FUNCNAME}" fn_fetch_function } +command_dev_query_raw.sh(){ +functionfile="${FUNCNAME}" +fn_fetch_function +} + # Fix fix.sh(){ @@ -306,12 +316,23 @@ functionfile="${FUNCNAME}" fn_fetch_function } -fix_steamcmd.sh(){ +fix_glibc.sh(){ functionfile="${FUNCNAME}" fn_fetch_function } -fix_glibc.sh(){ + +fix_kf.sh(){ +functionfile="${FUNCNAME}" +fn_fetch_function +} + +fix_kf2.sh(){ +functionfile="${FUNCNAME}" +fn_fetch_function +} + +fix_mta.sh(){ functionfile="${FUNCNAME}" fn_fetch_function } @@ -321,22 +342,22 @@ functionfile="${FUNCNAME}" fn_fetch_function } -fix_kf.sh(){ +fix_rust.sh(){ functionfile="${FUNCNAME}" fn_fetch_function } -fix_kf2.sh(){ +fix_rw.sh(){ functionfile="${FUNCNAME}" fn_fetch_function } -fix_ut2k4.sh(){ +fix_steamcmd.sh(){ functionfile="${FUNCNAME}" fn_fetch_function } -fix_ut.sh(){ +fix_ut3.sh(){ functionfile="${FUNCNAME}" fn_fetch_function } @@ -346,7 +367,12 @@ functionfile="${FUNCNAME}" fn_fetch_function } -fix_mta.sh(){ +fix_ut2k4.sh(){ +functionfile="${FUNCNAME}" +fn_fetch_function +} + +fix_ut.sh(){ functionfile="${FUNCNAME}" fn_fetch_function } @@ -363,6 +389,11 @@ functionfile="${FUNCNAME}" fn_fetch_function } +info_gamedig.sh(){ +functionfile="${FUNCNAME}" +fn_fetch_function +} + info_glibc.sh(){ functionfile="${FUNCNAME}" fn_fetch_function @@ -426,9 +457,9 @@ functionfile="${FUNCNAME}" fn_fetch_function } -# Monitor +# Query -monitor_gsquery.sh(){ +query_gamedig.sh(){ functionfile="${FUNCNAME}" fn_fetch_function } diff --git a/lgsm/functions/core_getopt.sh b/lgsm/functions/core_getopt.sh index 9f9d87247..d88d25d2b 100644 --- a/lgsm/functions/core_getopt.sh +++ b/lgsm/functions/core_getopt.sh @@ -47,6 +47,8 @@ cmd_dev_debug=( "dev;developer" "command_dev_debug.sh" "Enable developer Mode." cmd_dev_detect_deps=( "dd;detect-deps" "command_dev_detect_deps.sh" "Detect required dependencies." ) cmd_dev_detect_glibc=( "dg;detect-glibc" "command_dev_detect_glibc.sh" "Detect required glibc." ) cmd_dev_detect_ldd=( "dl;detect-ldd" "command_dev_detect_ldd.sh" "Detect required dynamic dependencies." ) +cmd_dev_query_raw=( "qr;query-raw" "command_dev_query_raw.sh" "The raw output of gamedig and gsquery." ) +cmd_dev_clear_functions=( "cf;clear-functions" "command_dev_clear_functions.sh" "Delete the contents of the functions dir." ) ### Set specific opt here ### @@ -59,7 +61,7 @@ currentopt+=( "${cmd_update_linuxgsm[@]}" ) if [ "${gamename}" != "Battlefield: 1942" ]&&[ "${engine}" != "quake" ]&&[ "${engine}" != "idtech2" ]&&[ "${engine}" != "idtech3" ]&&[ "${engine}" != "iw2.0" ]&&[ "${engine}" != "iw3.0" ]&&[ "${gamename}" != "San Andreas Multiplayer" ]; then currentopt+=( "${cmd_update[@]}" ) # force update for SteamCMD only or MTA - if [ -n "${appid}" ] || [ "${gamename}" == "Multi Theft Auto" ]; then + if [ -n "${appid}" ]||[ "${gamename}" == "Multi Theft Auto" ]; then currentopt+=( "${cmd_force_update[@]}" ) fi fi @@ -130,16 +132,16 @@ currentopt+=( "${cmd_install[@]}" "${cmd_auto_install[@]}" ) ## Developer commands currentopt+=( "${cmd_dev_debug[@]}" ) if [ -f ".dev-debug" ]; then - currentopt+=( "${cmd_dev_detect_deps[@]}" "${cmd_dev_detect_glibc[@]}" "${cmd_dev_detect_ldd[@]}" ) + currentopt+=( "${cmd_dev_detect_deps[@]}" "${cmd_dev_detect_glibc[@]}" "${cmd_dev_detect_ldd[@]}" "${cmd_dev_query_raw[@]}" "${cmd_dev_clear_functions[@]}" ) fi ### Build list of available commands optcommands=() index="0" for ((index="0"; index < ${#currentopt[@]}; index+=3)); do - cmdamount="$(echo "${currentopt[index]}"| awk -F ';' '{ print NF }')" + cmdamount="$(echo "${currentopt[index]}" | awk -F ';' '{ print NF }')" for ((cmdindex=1; cmdindex <= ${cmdamount}; cmdindex++)); do - optcommands+=( "$(echo "${currentopt[index]}"| awk -F ';' -v x=${cmdindex} '{ print $x }')" ) + optcommands+=( "$(echo "${currentopt[index]}" | awk -F ';' -v x=${cmdindex} '{ print $x }')" ) done done @@ -174,11 +176,11 @@ for i in "${optcommands[@]}"; do # Seek and run command index="0" for ((index="0"; index < ${#currentopt[@]}; index+=3)); do - currcmdamount="$(echo "${currentopt[index]}"| awk -F ';' '{ print NF }')" + currcmdamount="$(echo "${currentopt[index]}" | awk -F ';' '{ print NF }')" for ((currcmdindex=1; currcmdindex <= ${currcmdamount}; currcmdindex++)); do - if [ "$(echo "${currentopt[index]}"| awk -F ';' -v x=${currcmdindex} '{ print $x }')" == "${getopt}" ]; then + if [ "$(echo "${currentopt[index]}" | awk -F ';' -v x=${currcmdindex} '{ print $x }')" == "${getopt}" ]; then # Run command - eval ${currentopt[index+1]} + eval "${currentopt[index+1]}" core_exit.sh break fi diff --git a/lgsm/functions/fix.sh b/lgsm/functions/fix.sh index 1d89cc4ee..2872b806f 100644 --- a/lgsm/functions/fix.sh +++ b/lgsm/functions/fix.sh @@ -11,18 +11,18 @@ local commandaction="Fix" # Messages that are displayed for some fixes fn_fix_msg_start(){ fn_print_dots "Applying ${fixname} fix: ${gamename}" - sleep 1 + sleep 0.5 fn_print_info "Applying ${fixname} fix: ${gamename}" fn_script_log_info "Applying ${fixname} fix: ${gamename}" - sleep 1 + sleep 0.5 } fn_fix_msg_start_nl(){ fn_print_dots "Applying ${fixname} fix: ${gamename}" - sleep 1 + sleep 0.5 fn_print_info "Applying ${fixname} fix: ${gamename}" fn_script_log_info "Applying ${fixname} fix: ${gamename}" - sleep 1 + sleep 0.5 } fn_fix_msg_end(){ @@ -56,6 +56,8 @@ if [ "${function_selfname}" != "command_install.sh" ]; then fix_ins.sh elif [ "${gamename}" == "Rust" ]; then fix_rust.sh + elif [ "${shortname}" == "rw" ]; then + fix_rw.sh elif [ "${gamename}" == "Multi Theft Auto" ]; then fix_mta.sh fi @@ -66,7 +68,7 @@ if [ "${function_selfname}" == "command_install.sh" ]; then echo "" echo "Applying ${gamename} Server Fixes" echo "=================================" - sleep 1 + sleep 0.5 if [ "${gamename}" == "Killing Floor" ]; then fix_kf.sh elif [ "${gamename}" == "Killing Floor 2" ]; then @@ -77,5 +79,7 @@ if [ "${function_selfname}" == "command_install.sh" ]; then fix_ut2k4.sh elif [ "${gamename}" == "Unreal Tournament" ]; then fix_ut.sh + elif [ "${gamename}" == "Unreal Tournament 3" ]; then + fix_ut3.sh fi fi diff --git a/lgsm/functions/fix_kf.sh b/lgsm/functions/fix_kf.sh index db8c07ba2..ad96678ef 100644 --- a/lgsm/functions/fix_kf.sh +++ b/lgsm/functions/fix_kf.sh @@ -12,15 +12,15 @@ echo "Applying WebAdmin ROOst.css fix." echo "http://forums.tripwireinteractive.com/showpost.php?p=585435&postcount=13" sed -i 's/none}/none;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css" sed -i 's/underline}/underline;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css" -sleep 1 +sleep 0.5 echo "Applying WebAdmin CharSet fix." echo "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1" sed -i 's/CharSet="iso-8859-1"/CharSet="utf-8"/g' "${systemdir}/UWeb.int" -sleep 1 +sleep 0.5 echo "applying server name fix." -sleep 1 +sleep 0.5 echo "forcing server restart..." -sleep 1 +sleep 0.5 command_start.sh sleep 5 command_stop.sh diff --git a/lgsm/functions/fix_kf2.sh b/lgsm/functions/fix_kf2.sh index 2a402e7d3..ad132bf72 100644 --- a/lgsm/functions/fix_kf2.sh +++ b/lgsm/functions/fix_kf2.sh @@ -12,7 +12,7 @@ fn_parms(){ parms="\"${defaultmap}?Game=KFGameContent.KFGameInfo_VersusSurvival\"" } -fn_print_information "starting Killing Floor 2 server to generate configs." +fn_print_information "starting ${gamename} server to generate configs." sleep 1 exitbypass=1 command_start.sh diff --git a/lgsm/functions/fix_mta.sh b/lgsm/functions/fix_mta.sh index 333705d42..f16064a96 100644 --- a/lgsm/functions/fix_mta.sh +++ b/lgsm/functions/fix_mta.sh @@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" if [ ! -f "${lgsmdir}/lib/libmysqlclient.so.16" ]; then fixname="libmysqlclient16" fn_fix_msg_start_nl - sleep 1 + sleep 0.5 fn_fetch_file "https://nightly.mtasa.com/files/modules/64/libmysqlclient.so.16" "${lgsmdir}/lib" "libmysqlclient.so.16" "chmodx" "norun" "noforce" "6c188e0f8fb5d7a29f4bc413b9fed6c2" fn_fix_msg_end fi diff --git a/lgsm/functions/fix_ro.sh b/lgsm/functions/fix_ro.sh index 66ebfdc52..0b4f41f15 100644 --- a/lgsm/functions/fix_ro.sh +++ b/lgsm/functions/fix_ro.sh @@ -12,18 +12,18 @@ echo "Applying WebAdmin ROOst.css fix." echo "http://forums.tripwireinteractive.com/showpost.php?p=585435&postcount=13" sed -i 's/none}/none;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css" sed -i 's/underline}/underline;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css" -sleep 1 +sleep 0.5 echo "Applying WebAdmin CharSet fix." echo "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1" sed -i 's/CharSet="iso-8859-1"/CharSet="utf-8"/g' "${systemdir}/uweb.int" -sleep 1 +sleep 0.5 echo "Applying Steam AppID fix." sed -i 's/1210/1200/g' "${systemdir}/steam_appid.txt" -sleep 1 +sleep 0.5 echo "applying server name fix." -sleep 1 +sleep 0.5 echo "forcing server restart..." -sleep 1 +sleep 0.5 command_start.sh sleep 5 command_stop.sh diff --git a/lgsm/functions/fix_rw.sh b/lgsm/functions/fix_rw.sh new file mode 100644 index 000000000..3ce85a699 --- /dev/null +++ b/lgsm/functions/fix_rw.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# LinuxGSM fix_rw.sh function +# Author: Daniel Gibbs +# Website: https://linuxgsm.com +# Description: Resolves startup issue with Rising World + +local commandname="FIX" +local commandaction="Fix" + +export LD_LIBRARY_PATH="${serverfiles}/linux64:${serverfiles}:$LD_LIBRARY_PATH" \ No newline at end of file diff --git a/lgsm/functions/fix_ut.sh b/lgsm/functions/fix_ut.sh index c797c7acb..aaaad40cb 100644 --- a/lgsm/functions/fix_ut.sh +++ b/lgsm/functions/fix_ut.sh @@ -11,4 +11,4 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" #Set Binary Executable echo "chmod +x ${executabledir}/${executable}" chmod +x "${executabledir}/${executable}" -sleep 1 \ No newline at end of file +sleep 0.5 \ No newline at end of file diff --git a/lgsm/functions/fix_ut2k4.sh b/lgsm/functions/fix_ut2k4.sh index a2ce302ec..b29b312c3 100644 --- a/lgsm/functions/fix_ut2k4.sh +++ b/lgsm/functions/fix_ut2k4.sh @@ -12,15 +12,15 @@ echo "applying WebAdmin ut2003.css fix." echo "http://forums.tripwireinteractive.com/showpost.php?p=585435&postcount=13" sed -i 's/none}/none;/g' "${serverfiles}/Web/ServerAdmin/ut2003.css" sed -i 's/underline}/underline;/g' "${serverfiles}/Web/ServerAdmin/ut2003.css" -sleep 1 +sleep 0.5 echo "applying WebAdmin CharSet fix." echo "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1" sed -i 's/CharSet="iso-8859-1"/CharSet="utf-8"/g' "${systemdir}/UWeb.int" -sleep 1 +sleep 0.5 echo "applying server name fix." -sleep 1 +sleep 0.5 echo "forcing server restart." -sleep 1 +sleep 0.5 exitbypass=1 command_start.sh sleep 5 diff --git a/lgsm/functions/fix_ut3.sh b/lgsm/functions/fix_ut3.sh new file mode 100644 index 000000000..217140432 --- /dev/null +++ b/lgsm/functions/fix_ut3.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# LinuxGSM fix_ut2.sh function +# Author: Daniel Gibbs +# Website: https://linuxgsm.com +# Description: Resolves various issues with configs in Unreal Tournament 3. + +local commandname="FIX" +local commandaction="Fix" +local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" + +fn_parms(){ +parms="server VCTF-Suspense?Game=UTGameContent.UTVehicleCTFGame_Content?bIsDedicated=true?bIsLanMatch=false?bUsesStats=false?bShouldAdvertise=false?PureServer=1?bAllowJoinInProgress=true?ConfigSubDir=${servicename} -port=${port} -queryport=${queryport} -multihome=${ip} -nohomedir -unattended -log=${gamelog}" +} + +fn_print_information "starting ${gamename} server to generate configs." +sleep 1 +exitbypass=1 +command_start.sh +sleep 10 +command_stop.sh \ No newline at end of file diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh index 5dd54a586..68592afe2 100644 --- a/lgsm/functions/info_config.sh +++ b/lgsm/functions/info_config.sh @@ -20,13 +20,14 @@ fn_info_config_justcause2(){ serverpassword="${unavailable}" maxplayers="${zero}" port="${zero}" + queryport="${zero}" else servername=$(grep "Name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/Name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') serverdescription=$(grep "Description" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/Description//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') serverpassword=$(grep "Password" "${servercfgfullpath}" | sed -e 's/^ *//g' -e '/^--/d' -e 's/Password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') maxplayers=$(grep "MaxPlayers" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]') port=$(grep "BindPort" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]') - + queryport="${port}" ip=$(grep "BindIP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/BindIP//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') ipsetinconfig=1 ipinconfigvar="BindIP" @@ -36,6 +37,7 @@ fn_info_config_justcause2(){ serverpassword=${serverpassword:-"NOT SET"} maxplayers=${maxplayers:-"0"} port=${port:-"0"} + queryport=${queryport:-"0"} fi } @@ -364,7 +366,7 @@ fn_info_config_quakeworld(){ rconpassword=$(grep "rcon_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set rcon_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') servername=$(grep "hostname" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set hostname//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') maxplayers=$(grep "maxclients" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]') - port= + # Not Set rconpassword=${rconpassword:-"NOT SET"} servername=${servername:-"NOT SET"} @@ -417,6 +419,7 @@ fn_info_config_quakelive(){ serverpassword="${unavailable}" maxplayers="${zero}" port="${zero}" + queryport="${zero}" rconport="${zero}" statsport="${zero}" else @@ -425,6 +428,7 @@ fn_info_config_quakelive(){ 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:]') port=$(grep "net_port" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]') + queryport="${port}" rconport=$(grep "zmq_rcon_port" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]') statsport=$(grep "zmq_stats_port" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]') @@ -438,6 +442,7 @@ fn_info_config_quakelive(){ serverpassword=${serverpassword:-"NOT SET"} maxplayers=${maxplayers:-"0"} port=${port:-"0"} + queryport=${queryport:-"0"} rconport=${rconport:-"0"} statsport=${statsport:-"0"} fi @@ -463,6 +468,40 @@ fn_info_config_realvirtuality(){ fi } +fn_info_config_risingworld(){ + if [ ! -f "${servercfgfullpath}" ]; then + servername="${unavailable}" + rconpassword="${unavailable}" + rconport="${zero}" + maxplayers="${zero}" + port="${zero}" + gamemode="${unavailable}" + gameworld="${unavailable}" + else + servername=$(grep "server_name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/server_name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + serverpassword=$(grep "server_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/server_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + rconpassword=$(grep "rcon_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/rcon_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + rconport=$(grep "rcon_port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]') + maxplayers=$(grep "settings_max_players" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]') + port=$(grep "server_port" "${servercfgfullpath}" | grep -v "database_mysql_server_port" | grep -v "#" | tr -cd '[:digit:]') + gamemode=$(grep "gamemode" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]') + gameworld=$(grep "server_world_name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/server_world_name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + javaram=$(grep "server_memory" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/server_memory//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + ip=$(grep "server_ip" "${servercfgfullpath}" | grep -v "database_mysql_server_ip" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/server_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + ipsetinconfig=1 + ipinconfigvar="server-ip" + + # Not Set + servername=${servername:-"NOT SET"} + rconpassword=${rconpassword:-"NOT SET"} + rconport=${rconport:-"NOT SET"} + maxplayers=${maxplayers:-"NOT SET"} + port=${port:-"NOT SET"} + gamemode=${gamemode:-"NOT SET"} + gameworld=${gameworld:-"NOT SET"} + fi +} + fn_info_config_seriousengine35(){ if [ ! -f "${servercfgfullpath}" ]; then servername="${unavailable}" @@ -704,7 +743,6 @@ fn_info_config_unreal3(){ servername="${unavailable}" serverpassword="${unavailable}" adminpassword="${unavailable}" - port="${unavailable}" webadminenabled="${unavailable}" webadminport="${zero}" webadminuser="${unavailable}" @@ -712,7 +750,6 @@ fn_info_config_unreal3(){ else servername=$(grep "ServerName" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/ServerName//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') adminpassword=$(grep "AdminPassword" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/AdminPassword//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') - port=$(grep "Port" "${servercfgdir}/UTEngine.ini" | sed -e 's/^[ \t]*//g' | grep "^Port" | grep -v "#" | tr -cd '[:digit:]') webadminenabled=$(grep "bEnabled" "${servercfgdir}/UTWeb.ini" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/bEnabled//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') webadminport=$(grep "ListenPort" "${servercfgdir}/UTWeb.ini" | grep -v "#" | tr -cd '[:digit:]') webadminuser="Admin" @@ -736,13 +773,13 @@ fn_info_config_kf2(){ serverpassword="${unavailable}" adminpassword="${unavailable}" port="${unavailable}" + queryport="${unavailable}" webadminenabled="${unavailable}" webadminport="${zero}" webadminuser="${unavailable}" webadminpass="${unavailable}" else servername=$(grep "ServerName" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/ServerName//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') - # Not in UT3 serverpassword=$(grep "GamePassword" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/GamePassword//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') adminpassword=$(grep "AdminPassword" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/AdminPassword//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') port=$(grep "Port" "${servercfgdir}/LinuxServer-KFEngine.ini" | sed -e 's/^[ \t]*//g' | grep "^Port" | grep -v "#" | tr -cd '[:digit:]') @@ -858,8 +895,10 @@ fn_info_config_wolfensteinenemyterritory(){ serverpassword="${unavailable}" maxplayers="${zero}" port="${zero}" + queryport="${zero}" else port=$(grep "set net_port" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]') + queryport="${port}" rconpassword=$(grep "set zmq_rcon_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set zmq_rcon_password //g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//g' -e '/^\//d' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') servername=$(grep "set 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 "set 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]*$//') @@ -875,24 +914,56 @@ fn_info_config_wolfensteinenemyterritory(){ serverpassword=${serverpassword:-"NOT SET"} maxplayers=${maxplayers:-"0"} port=${port:-"27960"} + queryport=${queryport:-"27960"} fi } +fn_info_config_etlegacy(){ + if [ ! -f "${servercfgfullpath}" ]; then + rconpassword="${unavailable}" + servername="${unavailable}" + serverpassword="${unavailable}" + maxplayers="${zero}" + port="${zero}" + queryport="${zero}" + else + port=$(grep "set net_port" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]') + queryport="${port}" + rconpassword=$(grep "set rconpassword" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set rconpassword //g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//g' -e '/^\//d' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + servername=$(grep "set 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 "set 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 "set sv_maxclients" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]') + + ip=$(grep "set net_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set net_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + ipsetinconfig=1 + ipinconfigvar="set net_ip" + + # Not Set + rconpassword=${rconpassword:-"NOT SET"} + servername=${servername:-"NOT SET"} + serverpassword=${serverpassword:-"NOT SET"} + maxplayers=${maxplayers:-"0"} + port=${port:-"27960"} + queryport=${queryport:-"27960"} + fi +} + + fn_info_config_squad(){ if [ ! -f "${servercfgfullpath}" ]; then servername="${unavailable}" maxplayers="${unavailable}" else - servername="$(cat ${servercfgfullpath} | grep "ServerName=" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/ServerName//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')" - maxplayers="$(cat ${servercfgfullpath} | grep "MaxPlayers=" | tr -cd '[:digit:]')" + servername="$(grep "ServerName=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/ServerName//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')" + maxplayers="$(grep "MaxPlayers=" "${servercfgfullpath}" | tr -cd '[:digit:]')" fi if [ ! -f "${servercfgdir}/Rcon.cfg" ]; then rconport=${unavailable} rconpassword=${unavailable} else - rconport=$(cat ${servercfgdir}/Rcon.cfg | grep "Port=" | tr -cd '[:digit:]') - rconpassword=$(cat ${servercfgdir}/Rcon.cfg | grep "Password=" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/Password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') + rconport=$(grep "Port=" "${servercfgdir}/Rcon.cfg" | tr -cd '[:digit:]') + rconpassword=$(grep "Password=" "${servercfgdir}/Rcon.cfg" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/Password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//') fi rconport=${rconport:-"0"} @@ -987,6 +1058,9 @@ elif [ "${engine}" == "projectzomboid" ]; then # ARMA 3 elif [ "${engine}" == "realvirtuality" ]; then fn_info_config_realvirtuality +# Rising World +elif [ "${shortname}" == "rw" ]; then + fn_info_config_risingworld # Serious Sam elif [ "${engine}" == "seriousengine35" ]; then fn_info_config_seriousengine35 @@ -1025,6 +1099,8 @@ elif [ "${gamename}" == "7 Days To Die" ]; then fn_info_config_sdtd elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then fn_info_config_wolfensteinenemyterritory +elif [ "${gamename}" == "ET: Legacy" ]; then + fn_info_config_etlegacy elif [ "${gamename}" == "Multi Theft Auto" ]; then fn_info_config_mta elif [ "${gamename}" == "Squad" ]; then diff --git a/lgsm/functions/info_distro.sh b/lgsm/functions/info_distro.sh index 5a4907e08..1b04f50c8 100644 --- a/lgsm/functions/info_distro.sh +++ b/lgsm/functions/info_distro.sh @@ -135,6 +135,13 @@ if [ -d "${backupdir}" ]; then fi # External IP address -if [ -z "${extip}" ];then - extip=$(${curlpath} -m 3 ifconfig.co 2>/dev/null) +if [ -z "${extip}" ]; then + extip=$(${curlpath} -m 3 ifconfig.co > "${tmpdir}/extip.txt" 2>/dev/null) + if [ $? -ne 0 ]; then + if [ -f "${tmpdir}/extip.txt" ]; then + echo "${tmpdir}/extip.txt" + else + echo "x.x.x.x" + fi + fi fi \ No newline at end of file diff --git a/lgsm/functions/info_glibc.sh b/lgsm/functions/info_glibc.sh index 49d537b60..308138a25 100644 --- a/lgsm/functions/info_glibc.sh +++ b/lgsm/functions/info_glibc.sh @@ -26,6 +26,7 @@ elif [ "${gamename}" == "Blade Symphony" ]; then glibcfix="yes" elif [ "${gamename}" == "BrainBread 2" ]; then glibcrequired="2.17" + glibcfix="no" elif [ "${gamename}" == "Call of Duty" ]; then glibcrequired="2.1" glibcfix="no" @@ -57,7 +58,7 @@ elif [ "${gamename}" == "Empires Mod" ]; then glibcrequired="2.15" glibcfix="yes" elif [ "${gamename}" == "Factorio" ]; then - glibcrequired="2.15" + glibcrequired="2.18" glibcfix="yes" elif [ "${gamename}" == "Fistful of Frags" ]; then glibcrequired="2.15" @@ -95,6 +96,9 @@ elif [ "${gamename}" == "Quake 3: Arena" ]; then elif [ "${gamename}" == "Quake Live" ]; then glibcrequired="2.15" glibcfix="no" +elif [ "${shortname}" == "rw" ]; then + glibcrequired="2.14" + glibcfix="no" elif [ "${gamename}" == "San Andreas Multiplayer" ]; then glibcrequired="2.3" glibcfix="no" @@ -182,6 +186,9 @@ elif [ "${engine}" == "refractor" ]; then elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then glibcrequired="2.2.4" glibcfix="no" +elif [ "${gamename}" == "ET: Legacy" ]; then + glibcrequired="2.7" + glibcfix="no" elif [ "${gamename}" == "Multi Theft Auto" ]; then glibcrequired="2.7" glibcfix="no" diff --git a/lgsm/functions/info_messages.sh b/lgsm/functions/info_messages.sh index 50bd810aa..0151ad00c 100644 --- a/lgsm/functions/info_messages.sh +++ b/lgsm/functions/info_messages.sh @@ -2,7 +2,7 @@ # LinuxGSM info_messages.sh function # Author: Daniel Gibbs # Website: https://linuxgsm.com -# Description: Defines server info messages for details, alerts. +# Description: Defines server info messages for details and alerts. # Standard Details # This applies to all engines @@ -122,7 +122,9 @@ fn_info_message_gameserver(){ fn_messages_separator { # Server name - if [ -n "${servername}" ]; then + if [ -n "${gdname}" ]; then + echo -e "${blue}Server name:\t${default}${gdname}" + elif [ -n "${servername}" ]; then echo -e "${blue}Server name:\t${default}${servername}" fi @@ -181,9 +183,43 @@ fn_info_message_gameserver(){ echo -e "${blue}Stats password:\t${default}${statspassword}" fi - # Maxplayers - if [ -n "${maxplayers}" ]; then - echo -e "${blue}Maxplayers:\t${default}${maxplayers}" + # Players + + if [ "${querystatus}" != "0" ]; then + if [ -n "${maxplayers}" ]; then + echo -e "${blue}Maxplayers:\t${default}${maxplayers}" + fi + else + if [ -n "${gdplayers}" ]&&[ -n "${gdmaxplayers}" ]; then + echo -e "${blue}Players:\t${default}${gdplayers}/${gdmaxplayers}" + + elif [ -n "${gdplayers}" ]&&[ -n "${maxplayers}" ]; then + echo -e "${blue}Players:\t${default}${gdplayers}/${maxplayers}" + + elif [ -z "${gdplayers}" ]&&[ -n "${gdmaxplayers}" ]; then + echo -e "${blue}Players:\t${default}0/${gdmaxplayers}" + + elif [ -n "${gdplayers}" ]&&[ -z "${gdmaxplayers}" ]; then + echo -e "${blue}Players:\t${default}${gdplayers}|∞" + + elif [ -z "${gdplayers}" ]&&[ -z "${gdmaxplayers}" ]&&[ -n "${maxplayers}" ]; then + echo -e "${blue}Maxplayers:\t${default}${maxplayers}" + fi + fi + + # Bots + if [ -n "${gdbots}" ]; then + echo -e "${blue}Bots:\t${default}${gdbots}" + fi + + # Current Map + if [ -n "${gdmap}" ]; then + echo -e "${blue}Current Map:\t${default}${gdmap}" + fi + + # Default Map + if [ -n "${defaultmap}" ]; then + echo -e "${blue}Default Map:\t${default}${defaultmap}" fi # Game mode @@ -406,19 +442,19 @@ fn_info_message_ports(){ for port_edit in "${ports_edit_array[@]}" do if [ "${shortname}" == "ut3" ]; then - parmslocation="${servercfgdir}/UTEngine.ini\n${servercfgdir}/UTWeb.ini" + parmslocation="${servercfgdir}/UTWeb.ini" elif [ "${shortname}" == "kf2" ]; then parmslocation="${servercfgdir}/LinuxServer-KFEngine.ini\n${servercfgdir}/KFWeb.ini" elif [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]; then parmslocation="${servercfgfullpath}" fi done - # engines/games that require editing in the script file + # engines/games that require editing the parms local ports_edit_array=( "goldsource" "Factorio" "Hurtworld" "iw3.0" "Rust" "spark" "source" "starbound" "unreal4" "realvirtuality") for port_edit in "${ports_edit_array[@]}" do if [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]; then - parmslocation="${selfname}" + parmslocation="${configdirserver}" fi done echo -e "${parmslocation}" @@ -443,7 +479,7 @@ fn_info_logs(){ if [ -n "${lgsmlog}" ]; then echo -e "\nScript log\n===================" - if [ ! "$(ls -A ${lgsmlogdir})" ]; then + if [ ! "$(ls -A "${lgsmlogdir}")" ]; then echo "${lgsmlogdir} (NO LOG FILES)" elif [ ! -s "${lgsmlog}" ]; then echo "${lgsmlog} (LOG FILE IS EMPTY)" @@ -456,7 +492,7 @@ fn_info_logs(){ if [ -n "${consolelog}" ]; then echo -e "\nConsole log\n====================" - if [ ! "$(ls -A ${consolelogdir})" ]; then + if [ ! "$(ls -A "${consolelogdir}")" ]; then echo "${consolelogdir} (NO LOG FILES)" elif [ ! -s "${consolelog}" ]; then echo "${consolelog} (LOG FILE IS EMPTY)" @@ -469,12 +505,12 @@ fn_info_logs(){ if [ -n "${gamelogdir}" ]; then echo -e "\nServer log\n===================" - if [ ! "$(ls -A ${gamelogdir})" ]; then + if [ ! "$(ls -A "${gamelogdir}")" ]; then echo "${gamelogdir} (NO LOG FILES)" else echo "${gamelogdir}" # dos2unix sed 's/\r//' - tail "${gamelogdir}"/* 2>/dev/null | grep -v "==>" | sed '/^$/d' | sed 's/\r//'| tail -25 + tail "${gamelogdir}"/* 2>/dev/null | grep -v "==>" | sed '/^$/d' | sed 's/\r//' | tail -25 fi echo "" fi @@ -739,6 +775,17 @@ fn_info_message_refractor(){ } | column -s $'\t' -t } +fn_info_message_risingworld(){ + echo -e "netstat -atunp | grep java" + echo -e "" + { + echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL" + echo -e "> Game/Query\tINBOUND\t${port}\ttcp/udp" + echo -e "> http query\tINBOUND\t${httpqueryport}\ttcp" + echo -e "> RCON\tINBOUND\t${rconport}\ttcp" + } | column -s $'\t' -t +} + fn_info_message_rust(){ echo -e "netstat -atunp | grep Rust" echo -e "" @@ -948,7 +995,8 @@ fn_info_message_unreal3(){ echo -e "" { echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL" - echo -e "> Game/Query\tINBOUND\t${port}\ttcp/udp" + echo -e "> Game\tINBOUND\t${port}\tudp" + echo -e "> Query\tINBOUND\t${queryport}\tudp" echo -e "> WebAdmin\tINBOUND\t${webadminport}\ttcp\tListenPort=${webadminport}" } | column -s $'\t' -t echo -e "" @@ -967,8 +1015,8 @@ fn_info_message_kf2(){ echo -e "" { echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL" - echo -e "> Game\tINBOUND\t${port}\ttcp" - echo -e "> Query\tINBOUND\t${queryport}\ttcp/udp" + echo -e "> Game\tINBOUND\t${port}\ttcp\tPort=${port}" + echo -e "> Query\tINBOUND\t${queryport}\tudp" echo -e "> Steam\tINBOUND\t20560\tudp" echo -e "> WebAdmin\tINBOUND\t${webadminport}\ttcp\tListenPort=${webadminport}" } | column -s $'\t' -t @@ -992,6 +1040,15 @@ fn_info_message_wolfensteinenemyterritory(){ } | column -s $'\t' -t } +fn_info_message_etlegacy(){ + echo -e "netstat -atunp | grep etlded" + echo -e "" + { + echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL" + echo -e "> Game/Query\tINBOUND\t${port}\tudp" + } | column -s $'\t' -t +} + fn_info_message_mta(){ echo -e "netstat -atunp | grep mta-server64" echo -e "" @@ -1025,6 +1082,8 @@ fn_info_message_select_engine(){ fn_info_message_cod4 elif [ "${gamename}" == "Call of Duty: World at War" ]; then fn_info_message_codwaw + elif [ "${gamename}" == "ET: Legacy" ]; then + fn_info_message_etlegacy elif [ "${gamename}" == "Factorio" ]; then fn_info_message_factorio elif [ "${gamename}" == "Hurtworld" ]; then @@ -1061,6 +1120,8 @@ fn_info_message_select_engine(){ fn_info_message_mumble elif [ "${gamename}" == "Rust" ]; then fn_info_message_rust + elif [ "${shortname}" == "rw" ]; then + fn_info_message_risingworld elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then fn_info_message_wolfensteinenemyterritory elif [ "${engine}" == "refractor" ]; then diff --git a/lgsm/functions/info_parms.sh b/lgsm/functions/info_parms.sh index 9fc856a80..f1c5d81fc 100644 --- a/lgsm/functions/info_parms.sh +++ b/lgsm/functions/info_parms.sh @@ -24,6 +24,7 @@ fn_info_parms_ark(){ fn_info_parms_realvirtuality(){ port=${port:-"0"} + queryport=$((port + 1)) } fn_info_parms_cod(){ @@ -68,9 +69,18 @@ fn_info_parms_quake2(){ defaultmap=${defaultmap:-"NOT SET"} } +fn_info_parms_risingworld(){ + servername=${servername:-"NOT SET"} + port=${port:-"0"} + queryport=${port} + httpqueryport=$((port - 1)) + +} + fn_info_parms_rust(){ servername=${servername:-"NOT SET"} port=${port:-"0"} + queryport=${port} rconport=${rconport:-"0"} rconpassword=${rconpassword:-"NOT SET"} rconweb=${rconweb:-"NOT SET"} @@ -83,6 +93,7 @@ fn_info_parms_source(){ defaultmap=${defaultmap:-"NOT SET"} maxplayers=${maxplayers:-"0"} port=${port:-"0"} + queryport=${port} clientport=${clientport:-"0"} } @@ -106,6 +117,12 @@ fn_info_config_towerunite(){ fn_info_parms_unreal(){ defaultmap=${defaultmap:-"NOT SET"} + queryport=$((port + 1)) +} + +fn_info_parms_unreal2(){ + defaultmap=${defaultmap:-"NOT SET"} + queryport=$((port + 1)) } fn_info_parms_unreal3(){ @@ -145,6 +162,9 @@ elif [ "${gamename}" == "Quake 2" ]||[ "${gamename}" == "Quake 3: Arena" ]; then # Rust elif [ "${gamename}" == "Rust" ]; then fn_info_parms_rust +# Rising World +elif [ "${shortname}" == "rw" ]; then + fn_info_parms_risingworld # Serious Sam elif [ "${engine}" == "seriousengine35" ]; then fn_info_config_seriousengine35 @@ -158,7 +178,7 @@ elif [ "${gamename}" == "Tower Unite" ]; then # Unreal/Unreal 2 engine elif [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then fn_info_parms_unreal -# Unreal/Unreal 2 engine +# Unreal 3 engine elif [ "${engine}" == "unreal3" ]; then fn_info_parms_unreal3 fi diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh index afa08c66f..53df4a316 100644 --- a/lgsm/functions/install_config.sh +++ b/lgsm/functions/install_config.sh @@ -23,7 +23,7 @@ fn_fetch_default_config(){ echo "Downloading ${gamename} Configs" echo "=================================" echo "default configs from https://github.com/GameServerManagers/Game-Server-Configs" - sleep 1 + sleep 0.5 mkdir -p "${lgsmdir}/config-default/config-game" githuburl="https://raw.githubusercontent.com/GameServerManagers/Game-Server-Configs/master" for config in "${array_configs[@]}"; do @@ -38,16 +38,19 @@ fn_default_config_remote(){ echo "copying ${config} config file." fn_script_log_info "copying ${servercfg} config file." if [ "${config}" == "${servercfgdefault}" ]; then + mkdir -p "${servercfgdir}" cp -nv "${lgsmdir}/config-default/config-game/${config}" "${servercfgfullpath}" elif [ "${gamename}" == "ARMA 3" ]&&[ "${config}" == "${networkcfgdefault}" ]; then + mkdir -p "${servercfgdir}" cp -nv "${lgsmdir}/config-default/config-game/${config}" "${networkcfgfullpath}" elif [ "${gamename}" == "Don't Starve Together" ]&&[ "${config}" == "${clustercfgdefault}" ]; then cp -nv "${lgsmdir}/config-default/config-game/${clustercfgdefault}" "${clustercfgfullpath}" else + mkdir -p "${servercfgdir}" cp -nv "${lgsmdir}/config-default/config-game/${config}" "${servercfgdir}/${config}" fi done - sleep 1 + sleep 0.5 } # Changes some variables within the default configs @@ -60,7 +63,7 @@ fn_set_config_vars(){ rconpass="admin$random" echo "changing hostname." fn_script_log_info "changing hostname." - sleep 1 + sleep 0.5 if grep -q "SERVERNAME=SERVERNAME" "${lgsmdir}/config-default/config-game/${config}" 2>/dev/null; then sed -i "s/SERVERNAME=SERVERNAME/SERVERNAME=${servername}/g" "${servercfgfullpath}" else @@ -69,11 +72,11 @@ fn_set_config_vars(){ echo "changing rcon/admin password." fn_script_log_info "changing rcon/admin password." sed -i "s/ADMINPASSWORD/${rconpass}/g" "${servercfgfullpath}" - sleep 1 + sleep 0.5 else fn_script_log_warn "Config file not found, cannot alter it." echo "Config file not found, cannot alter it." - sleep 1 + sleep 0.5 fi } @@ -84,16 +87,16 @@ fn_set_dst_config_vars(){ echo "changing server name." fn_script_log_info "changing server name." sed -i "s/SERVERNAME/LinuxGSM/g" "${clustercfgfullpath}" - sleep 1 + sleep 0.5 echo "changing shard mode." fn_script_log_info "changing shard mode." sed -i "s/USESHARDING/${sharding}/g" "${clustercfgfullpath}" - sleep 1 + sleep 0.5 echo "randomizing cluster key." fn_script_log_info "randomizing cluster key." randomkey=$(tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 | xargs) sed -i "s/CLUSTERKEY/${randomkey}/g" "${clustercfgfullpath}" - sleep 1 + sleep 0.5 else echo "${clustercfg} is already configured." fn_script_log_info "${clustercfg} is already configured." @@ -111,11 +114,11 @@ fn_set_dst_config_vars(){ echo "changing shard name." fn_script_log_info "changing shard name." sed -i "s/SHARDNAME/${shard}/g" "${servercfgfullpath}" - sleep 1 + sleep 0.5 echo "changing master setting." fn_script_log_info "changing master setting." sed -i "s/ISMASTER/${master}/g" "${servercfgfullpath}" - sleep 1 + sleep 0.5 ## worldgenoverride.lua if [ "${cave}" == "true" ]; then @@ -123,7 +126,7 @@ fn_set_dst_config_vars(){ fn_script_log_info "defining ${shard} as cave in ${servercfgdir}/worldgenoverride.lua." echo 'return { override_enabled = true, preset = "DST_CAVE", }' > "${servercfgdir}/worldgenoverride.lua" fi - sleep 1 + sleep 0.5 echo "" } @@ -293,6 +296,12 @@ elif [ "${gamename}" == "Double Action: Boogaloo" ]; then fn_fetch_default_config fn_default_config_remote fn_set_config_vars +elif [ "${gamename}" == "ET: Legacy" ]; then + gamedirname="ETLegacy" + array_configs+=( server.cfg ) + fn_fetch_default_config + fn_default_config_remote + fn_set_config_vars elif [ "${gamename}" == "Factorio" ]; then gamedirname="Factorio" array_configs+=( server-settings.json ) diff --git a/lgsm/functions/install_dst_token.sh b/lgsm/functions/install_dst_token.sh index c319088d1..11a4c3679 100644 --- a/lgsm/functions/install_dst_token.sh +++ b/lgsm/functions/install_dst_token.sh @@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" echo "" echo "Enter ${gamename} Cluster Token" echo "=================================" -sleep 1 +sleep 0.5 echo "A cluster token is required to run this server!" echo "Follow the instructions in this link to obtain this key:" echo "https://linuxgsm.com/dst-auth-token" diff --git a/lgsm/functions/install_factorio_save.sh b/lgsm/functions/install_factorio_save.sh index b63004e6d..3b243c9d4 100644 --- a/lgsm/functions/install_factorio_save.sh +++ b/lgsm/functions/install_factorio_save.sh @@ -10,6 +10,6 @@ local commandaction="Install" echo "" echo "Creating initial Factorio savefile" echo "=================================" -sleep 1 +sleep 0.5 check_glibc.sh -"${executabledir}"/factorio --create ${serverfiles}/save1 +"${executabledir}"/factorio --create "${serverfiles}/save1" diff --git a/lgsm/functions/install_gslt.sh b/lgsm/functions/install_gslt.sh index 9ff176521..ab1ea7dca 100644 --- a/lgsm/functions/install_gslt.sh +++ b/lgsm/functions/install_gslt.sh @@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" echo "" echo "Game Server Login Token" echo "=================================" -sleep 1 +sleep 0.5 if [ "${gamename}" == "Counter-Strike: Global Offensive" ]||[ "${gamename}" == "Counter-Strike: Source" ]||[ "${gamename}" == "No More Room in Hell" ]; then echo "GSLT is required to run a public ${gamename} server" fn_script_log_info "GSLT is required to run a public ${gamename} server" @@ -37,7 +37,7 @@ if [ -z "${autoinstall}" ]; then fi fi fi -sleep 1 +sleep 0.5 if [ "${gamename}" == "Tower Unite" ]; then echo "The GSLT can be changed by editing ${servercfgdir}/${servercfg}." fn_script_log_info "The GSLT can be changed by editing ${servercfgdir}/${servercfg}." diff --git a/lgsm/functions/install_logs.sh b/lgsm/functions/install_logs.sh index b951436e7..acd6a6917 100644 --- a/lgsm/functions/install_logs.sh +++ b/lgsm/functions/install_logs.sh @@ -13,7 +13,7 @@ if [ "${checklogs}" != "1" ]; then echo "Creating log directories" echo "=================================" fi -sleep 1 +sleep 0.5 # Create LinuxGSM logs echo -ne "installing log dir: ${logdir}..." mkdir -p "${logdir}" @@ -77,7 +77,7 @@ fi # e.g serverfiles/log is not within log/: symlink created # log/server is in log/: symlink not created if [ -n "${gamelogdir}" ]; then - if [ "${gamelogdir:0:${#logdir}}" != "${logdir}" ];then + if [ "${gamelogdir:0:${#logdir}}" != "${logdir}" ]; then echo -ne "creating symlink to game log dir: ${logdir}/server -> ${gamelogdir}..." ln -nfs "${gamelogdir}" "${logdir}/server" if [ $? -ne 0 ]; then @@ -102,5 +102,5 @@ if [ -d "${rootdir}/Steam/logs" ]; then fi fi fi -sleep 1 +sleep 0.5 fn_script_log_info "Logs installed" diff --git a/lgsm/functions/install_minecraft_eula.sh b/lgsm/functions/install_minecraft_eula.sh index 2bf6e1c92..01999967f 100644 --- a/lgsm/functions/install_minecraft_eula.sh +++ b/lgsm/functions/install_minecraft_eula.sh @@ -7,7 +7,7 @@ echo "" echo "Accept ${gamename} EULA" echo "=================================" -sleep 1 +sleep 0.5 echo "You are required to accept the EULA:" echo "https://account.mojang.com/documents/minecraft_eula" diff --git a/lgsm/functions/install_server_dir.sh b/lgsm/functions/install_server_dir.sh index 579f10497..abb8f6fb0 100644 --- a/lgsm/functions/install_server_dir.sh +++ b/lgsm/functions/install_server_dir.sh @@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" echo "" echo "Server Directory" echo "=================================" -sleep 1 +sleep 0.5 if [ -d "${serverfiles}" ]; then fn_print_warning_nl "A server is already installed here." fi @@ -24,5 +24,4 @@ if [ -z "${autoinstall}" ]; then fi if [ ! -d "${serverfiles}" ]; then mkdir -v "${serverfiles}" -fi -sleep 1 +fi \ No newline at end of file diff --git a/lgsm/functions/install_server_files.sh b/lgsm/functions/install_server_files.sh index bec59e31b..63e2f48d1 100644 --- a/lgsm/functions/install_server_files.sh +++ b/lgsm/functions/install_server_files.sh @@ -21,6 +21,8 @@ fn_install_server_files(){ 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}" == "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}" == "Quake 2" ]; then @@ -65,7 +67,7 @@ fn_install_server_files_steamcmd(){ if [ "${counter}" -ge "7" ]; then echo "Removing $(find ${serverfiles} -type d -print0 | grep -Ez '[^/]{30}$')" - find ${serverfiles} -type d -print0 | grep -Ez '[^/]{30}$' | xargs -0 rm -rf + find "${serverfiles}" -type d -print0 | grep -Ez '[^/]{30}$' | xargs -0 rm -rf fi if [ "${counter}" -ge "9" ]; then rm -rf "${steamcmddir}" @@ -74,7 +76,7 @@ fn_install_server_files_steamcmd(){ # Detects if unbuffer command is available for 32 bit distributions only. info_distro.sh - if [ $(command -v stdbuf 2>/dev/null) ]&&[ "${arch}" != "x86_64" ]; then + if [ "$(command -v stdbuf 2>/dev/null)" ]&&[ "${arch}" != "x86_64" ]; then unbuffer="stdbuf -i0 -o0 -e0" fi @@ -85,11 +87,6 @@ fn_install_server_files_steamcmd(){ else ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} +quit local exitcode=$? - - if [ "${gamename}" == "Classic Offensive" ]; then - ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid_co}" ${branch} +quit - local exitcode=$? - fi fi elif [ "${counter}" -ge "5" ]; then if [ "${engine}" == "goldsource" ]; then @@ -98,11 +95,6 @@ fn_install_server_files_steamcmd(){ else ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} validate +quit local exitcode=$? - - if [ "${gamename}" == "Classic Offensive" ]; then - ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid_co}" ${branch} -validate +quit - local exitcode=$? - fi fi fi elif [ "${counter}" -ge "11" ]; then @@ -128,7 +120,7 @@ fn_install_server_files_steamcmd(){ echo "" echo "Installing ${gamename} Server" echo "=================================" -sleep 1 +sleep 0.5 if [ -n "${appid}" ]; then fn_install_server_files_steamcmd diff --git a/lgsm/functions/install_squad_license.sh b/lgsm/functions/install_squad_license.sh index a5ca6345a..3b0711309 100644 --- a/lgsm/functions/install_squad_license.sh +++ b/lgsm/functions/install_squad_license.sh @@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" echo "" echo "Squad Server License" echo "=================================" -sleep 1 +sleep 0.5 echo "Server license is an optional feature for ${gamename} server" fn_script_log_info "Server license is an optional feature for ${gamename} server" @@ -20,7 +20,7 @@ echo "http://forums.joinsquad.com/topic/16519-server-licensing-general-info/" fn_script_log_info "Get more info and a server license here:" fn_script_log_info "http://forums.joinsquad.com/topic/16519-server-licensing-general-info/" echo "" -sleep 1 +sleep 0.5 echo "The Squad server license can be changed by editing ${servercfgdir}/License.cfg." fn_script_log_info "The Squad server license can be changed by editing ${selfname}." echo "" \ No newline at end of file diff --git a/lgsm/functions/install_steamcmd.sh b/lgsm/functions/install_steamcmd.sh index 7d3374ebd..10d095423 100644 --- a/lgsm/functions/install_steamcmd.sh +++ b/lgsm/functions/install_steamcmd.sh @@ -10,5 +10,5 @@ local commandaction="Install" echo "" echo "Installing SteamCMD" echo "=================================" -sleep 1 +sleep 0.5 check_steamcmd.sh diff --git a/lgsm/functions/install_ts3db.sh b/lgsm/functions/install_ts3db.sh index 7cfc3205f..701b8c5ad 100644 --- a/lgsm/functions/install_ts3db.sh +++ b/lgsm/functions/install_ts3db.sh @@ -13,7 +13,7 @@ fn_install_ts3db_mariadb(){ echo "" echo "checking if libmariadb2 is installed" echo "=================================" - sleep 1 + sleep 0.5 ldd "${serverfiles}/libts3db_mariadb.so" | grep "libmariadb.so.2 => not found" if [ $? -eq 0 ]; then echo "libmariadb2 not installed. Please install it first." @@ -25,7 +25,7 @@ fn_install_ts3db_mariadb(){ echo "" echo "Configuring ${gamename} Server for MariaDB/MySQL" echo "=================================" - sleep 1 + sleep 0.5 read -rp "Enter MariaDB hostname: " mariahostname read -rp "Enter MariaDB port: " mariaport read -rp "Enter MariaDB username: " mariausername @@ -45,7 +45,7 @@ fn_install_ts3db_mariadb(){ sed -i "s/dbpluginparameter=/dbpluginparameter=ts3db_mariadb.ini/g" "${servercfgfullpath}" sed -i "s/dbsqlcreatepath=create_sqlite\//dbsqlcreatepath=create_mariadb\//g" "${servercfgfullpath}" echo "=================================" - sleep 1 + sleep 0.5 } if [ -z "${autoinstall}" ]; then @@ -61,16 +61,16 @@ fi fn_script_log "Accepting ts3server license: ${executabledir}/LICENSE" fn_print_information_nl "Accepting TeamSpeak license:" echo " * ${executabledir}/LICENSE" -sleep 1 +sleep 0.5 touch "${executabledir}/.ts3server_license_accepted" ## Get privilege key echo "" echo "Getting privilege key" echo "=================================" -sleep 1 +sleep 0.5 echo "IMPORANT! Save these details for later." -sleep 1 +sleep 0.5 cd "${executabledir}" || exit ./ts3server_startscript.sh start inifile=ts3-server.ini sleep 5 diff --git a/lgsm/functions/install_unreal_tournament_eula.sh b/lgsm/functions/install_unreal_tournament_eula.sh index 8df4ad1e7..56fb8fbe4 100644 --- a/lgsm/functions/install_unreal_tournament_eula.sh +++ b/lgsm/functions/install_unreal_tournament_eula.sh @@ -7,7 +7,7 @@ echo "" echo "Accept ${gamename} EULA" echo "=================================" -sleep 1 +sleep 0.5 echo "You are required to accept the EULA:" echo "https://www.epicgames.com/unrealtournament/unreal-tournament-pre-alpha-test-development-build-eula/" diff --git a/lgsm/functions/install_ut2k4_key.sh b/lgsm/functions/install_ut2k4_key.sh index b9bdf1306..f1e840462 100644 --- a/lgsm/functions/install_ut2k4_key.sh +++ b/lgsm/functions/install_ut2k4_key.sh @@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" echo "" echo "Enter ${gamename} CD Key" echo "=================================" -sleep 1 +sleep 0.5 echo "To get your server listed on the Master Server list" echo "you must get a free CD key. Get a key here:" echo "https://forums.unrealtournament.com/utserver/cdkey.php?2004" @@ -19,7 +19,7 @@ echo "" if [ -z "${autoinstall}" ]; then echo "Once you have the key enter it below" echo -n "KEY: " - read CODE + read -r CODE echo ""\""CDKey"\""="\""${CODE}"\""" > "${systemdir}/cdkey" if [ -f "${systemdir}/cdkey" ]; then fn_script_log_info "UT2K4 Server CD Key created" diff --git a/lgsm/functions/logs.sh b/lgsm/functions/logs.sh index 7abe2ea2b..4f8aaf015 100644 --- a/lgsm/functions/logs.sh +++ b/lgsm/functions/logs.sh @@ -22,13 +22,13 @@ if [ "${status}" != "0" ] && [ "${function_selfname}" == "command_start.sh" ] && fn_print_info "Moving game logs to ${gamelogdir}" fn_script_log_info "Moving game logs to ${gamelogdir}" echo -en "\n" - sleep 1 + sleep 0.5 mv "${systemdir}"/gamelog*.log "${gamelogdir}" fi fi # Log manager will start the cleanup if it finds logs older than "${logdays}" -if [ $(find "${lgsmlogdir}"/ -type f -mtime +"${logdays}"|wc -l) -ne "0" ]; then +if [ $(find "${lgsmlogdir}"/ -type f -mtime +"${logdays}" | wc -l) -ne "0" ]; then fn_print_dots "Starting" # Set common logs directories commonlogs="${systemdir}/logs" @@ -40,58 +40,58 @@ if [ $(find "${lgsmlogdir}"/ -type f -mtime +"${logdays}"|wc -l) -ne "0" ]; then legacyserverlogdir="${logdir}/server" # Setting up counting variables scriptcount="0" ; consolecount="0" ; gamecount="0" ; srcdscount="0" ; smcount="0" ; ulxcount="0" ; darkrpcount="0" ; legacycount="0" - sleep 1 + sleep 0.5 fn_print_ok_nl "Starting" fn_print_info_nl "Removing logs older than ${logdays} days" fn_script_log_info "Removing logs older than ${logdays} days" # Logging logfiles to be removed according to "${logdays}", counting and removing them # Script logfiles - find "${lgsmlogdir}"/ -type f -mtime +"${logdays}"| tee >> "${lgsmlog}" - scriptcount=$(find "${lgsmlogdir}"/ -type f -mtime +"${logdays}"|wc -l) + find "${lgsmlogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}" + scriptcount=$(find "${lgsmlogdir}"/ -type f -mtime +"${logdays}" | wc -l) find "${lgsmlogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \; # SRCDS and unreal logfiles if [ "${engine}" == "unreal2" ]||[ "${engine}" == "source" ]; then - find "${gamelogdir}"/ -type f -mtime +"${logdays}"| tee >> "${lgsmlog}" - gamecount=$(find "${gamelogdir}"/ -type f -mtime +"${logdays}"|wc -l) + find "${gamelogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}" + gamecount=$(find "${gamelogdir}"/ -type f -mtime +"${logdays}" | wc -l) find "${gamelogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \; fi # Console logfiles if [ -n "${consolelog}" ]; then - find "${consolelogdir}"/ -type f -mtime +"${logdays}"| tee >> "${lgsmlog}" - consolecount=$(find "${consolelogdir}"/ -type f -mtime +"${logdays}"|wc -l) + find "${consolelogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}" + consolecount=$(find "${consolelogdir}"/ -type f -mtime +"${logdays}" | wc -l) find "${consolelogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \; fi # Common logfiles if [ -d "${commonlogs}" ]; then - find "${commonlogs}"/ -type f -mtime +"${logdays}"| tee >> "${lgsmlog}" - smcount=$(find "${commonlogs}"/ -type f -mtime +"${logdays}"|wc -l) + find "${commonlogs}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}" + smcount=$(find "${commonlogs}"/ -type f -mtime +"${logdays}" | wc -l) find "${commonlogs}"/ -mtime +"${logdays}" -type f -exec rm -f {} \; fi if [ -d "${commonsourcelogs}" ]; then - find "${commonsourcelogs}"/* -type f -mtime +"${logdays}"| tee >> "${lgsmlog}" - smcount=$(find "${commonsourcelogs}"/* -type f -mtime +"${logdays}"|wc -l) + find "${commonsourcelogs}"/* -type f -mtime +"${logdays}" | tee >> "${lgsmlog}" + smcount=$(find "${commonsourcelogs}"/* -type f -mtime +"${logdays}" | wc -l) find "${commonsourcelogs}"/* -mtime +"${logdays}" -type f -exec rm -f {} \; fi # Source addons logfiles if [ "${engine}" == "source" ]; then # SourceMod logfiles if [ -d "${sourcemodlogdir}" ]; then - find "${sourcemodlogdir}"/ -type f -mtime +"${logdays}"| tee >> "${lgsmlog}" - smcount=$(find "${sourcemodlogdir}"/ -type f -mtime +"${logdays}"|wc -l) + find "${sourcemodlogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}" + smcount=$(find "${sourcemodlogdir}"/ -type f -mtime +"${logdays}" | wc -l) find "${sourcemodlogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \; fi # Garry's Mod logfiles if [ "${gamename}" == "Garry's Mod" ]; then # ULX logfiles if [ -d "${ulxlogdir}" ]; then - find "${ulxlogdir}"/ -type f -mtime +"${logdays}"| tee >> "${lgsmlog}" - ulxcount=$(find "${ulxlogdir}"/ -type f -mtime +"${logdays}"|wc -l) + find "${ulxlogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}" + ulxcount=$(find "${ulxlogdir}"/ -type f -mtime +"${logdays}" | wc -l) find "${ulxlogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \; fi # DarkRP logfiles if [ -d "${darkrplogdir}" ]; then - find "${darkrplogdir}"/ -type f -mtime +"${logdays}"| tee >> "${lgsmlog}" - darkrpcount=$(find "${darkrplogdir}"/ -type f -mtime +"${logdays}"|wc -l) + find "${darkrplogdir}"/ -type f -mtime +"${logdays}" | tee >> "${lgsmlog}" + darkrpcount=$(find "${darkrplogdir}"/ -type f -mtime +"${logdays}" | wc -l) find "${darkrplogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \; fi fi diff --git a/lgsm/functions/monitor_gsquery.sh b/lgsm/functions/monitor_gsquery.sh deleted file mode 100644 index 7ffca8c7c..000000000 --- a/lgsm/functions/monitor_gsquery.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash -# LinuxGSM monitor_gsquery.sh function -# Author: Daniel Gibbs -# Website: https://linuxgsm.com -# Description: Uses gsquery.py to query the server port. -# Detects if the server has frozen with the process still running. - -local commandname="MONITOR" -local commandaction="Monitor" -local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" - -# Downloads gsquery.py if missing -if [ ! -f "${functionsdir}/gsquery.py" ]; then - fn_fetch_file_github "lgsm/functions" "gsquery.py" "${functionsdir}" "chmodx" "norun" "noforce" "nomd5" -fi - -info_config.sh - -if [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then - port=$((port + 1)) -elif [ "${engine}" == "realvirtuality" ]; then - port=$((port + 1)) -elif [ "${engine}" == "spark" ]; then - port=$((port + 1)) -elif [ "${engine}" == "idtech3_ql" ]; then - engine="quakelive" -fi - -if [ -n "${queryport}" ]; then - port="${queryport}" -fi - -fn_print_info "Querying port: gsquery.py enabled" -fn_script_log_info "Querying port: gsquery.py enabled" -sleep 1 - -# Will query up to 4 times every 15 seconds. -# Servers changing map can return a failure. -# Will Wait up to 60 seconds to confirm server is down giving server time to change map. -totalseconds=0 -for queryattempt in {1..5}; do - fn_print_dots "Querying port: ${ip}:${port} : ${totalseconds}/${queryattempt} : " - fn_print_querying_eol - fn_script_log_info "Querying port: ${ip}:${port} : ${queryattempt} : QUERYING" - - gsquerycmd=$("${functionsdir}"/gsquery.py -a "${ip}" -p "${port}" -e "${engine}" 2>&1) - exitcode=$? - - sleep 1 - if [ "${exitcode}" == "0" ]; then - # Server OK - fn_print_ok "Querying port: ${ip}:${port} : ${queryattempt} : " - fn_print_ok_eol_nl - fn_script_log_pass "Querying port: ${ip}:${port} : ${queryattempt} : OK" - exitcode=0 - break - else - # Server failed query - fn_script_log_info "Querying port: ${ip}:${port} : ${queryattempt} : ${gsquerycmd}" - - if [ "${queryattempt}" == "5" ]; then - # Server failed query 4 times confirmed failure - fn_print_fail "Querying port: ${ip}:${port} : ${totalseconds}/${queryattempt} : " - fn_print_fail_eol_nl - fn_script_log_error "Querying port: ${ip}:${port} : ${queryattempt} : FAIL" - sleep 1 - - # Send alert if enabled - alert="restartquery" - alert.sh - command_restart.sh - break - fi - - # Seconds counter - for seconds in {1..15}; do - fn_print_fail "Querying port: ${ip}:${port} : ${totalseconds}/${queryattempt} : ${red}${gsquerycmd}${default}" - totalseconds=$((totalseconds + 1)) - sleep 1 - if [ "${seconds}" == "15" ]; then - break - fi - done - fi -done -core_exit.sh \ No newline at end of file diff --git a/lgsm/functions/query_gamedig.sh b/lgsm/functions/query_gamedig.sh new file mode 100644 index 000000000..4249f8a76 --- /dev/null +++ b/lgsm/functions/query_gamedig.sh @@ -0,0 +1,96 @@ +#!/bin/bash +# query_gamedig.sh function +# Author: Daniel Gibbs +# Website: https://gameservermanagers.com +# Description: Querys a gameserver using node-gamedig. +# https://github.com/sonicsnes/node-gamedig + +#Check if gamedig and jq are installed +if [ "$(command -v gamedig 2>/dev/null)" ]&&[ "$(command -v jq 2>/dev/null)" ]; then + + if [ "${engine}" == "idtech3_ql" ]; then + local engine="quakelive" + elif [ "${gamename}" == "Killing Floor 2" ]; then + local engine="unreal4" + fi + + local engine_query_array=( avalanche3.0 madness quakelive realvirtuality refractor source goldsource spark starbound unity3d unreal4 ) + for engine_query in "${engine_query_array[@]}" + do + if [ "${engine_query}" == "${engine}" ]; then + gamedigengine="protocol-valve" + fi + done + + local engine_query_array=( avalanche2.0 ) + for engine_query in "${engine_query_array[@]}" + do + if [ "${engine_query}" == "${engine}" ]; then + gamedigengine="jc2mp" + fi + done + + local engine_query_array=( idtech2 iw2.0 ) + for engine_query in "${engine_query_array[@]}" + do + if [ "${engine_query}" == "${engine}" ]; then + gamedigengine="protocol-quake2" + fi + done + + local engine_query_array=( idtech3 quake iw3.0 ) + for engine_query in "${engine_query_array[@]}" + do + if [ "${engine_query}" == "${engine}" ]; then + gamedigengine="protocol-quake3" + fi + done + + local shortname_query_array=( ts3 ) + for shortname_query in "${shortname_query_array[@]}" + do + if [ "${shortname_query}" == "${shortname}" ]; then + gamedigengine="teamspeak3" + fi + done + + + # will bypass query if server offline + check_status.sh + if [ "${status}" != "0" ]; then + # checks if query is working 0 = pass + querystatus=$(gamedig --type "${gamedigengine}" --host "${ip}" --port "${queryport}" | jq '.error|length') + # raw output + gamedigraw=$(gamedig --type "${gamedigengine}" --host "${ip}" --port "${queryport}") + + # server name + gdname=$(echo "${gamedigraw}" | jq -re '.name') + if [ "${gdname}" == "null" ]; then + gdname= + fi + + # numplayers + gdplayers=$(echo "${gamedigraw}" | jq -re '.players|length') + if [ "${gdplayers}" == "null" ]; then + gdplayers= + fi + + # maxplayers + gdmaxplayers=$(echo "${gamedigraw}" | jq -re '.maxplayers|length') + if [ "${gdmaxplayers}" == "null" ]; then + maxplayers= + fi + + # current map + gdmap=$(echo "${gamedigraw}" | jq -re '.map') + if [ "${gdmap}" == "null" ]; then + gdmap= + fi + + # numbots + gdbots=$(echo "${gamedigraw}" | jq -re '.raw.numbots') + if [ "${gdbots}" == "null" ]; then + gdbots= + fi + fi +fi \ No newline at end of file diff --git a/lgsm/functions/gsquery.py b/lgsm/functions/query_gsquery.py similarity index 98% rename from lgsm/functions/gsquery.py rename to lgsm/functions/query_gsquery.py index 18123bfe8..d672870b9 100644 --- a/lgsm/functions/gsquery.py +++ b/lgsm/functions/query_gsquery.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# PythonGSQ +# query_gsquery.py # Author: Anonymous & Daniel Gibbs # Website: https://linuxgsm.com # Description: Allows querying of various game servers. @@ -9,7 +9,7 @@ import optparse import socket import sys -class PythonGSQ: +class gsquery: def __init__(self, options, arguments): self.option = options self.argument = arguments @@ -118,5 +118,5 @@ if __name__ == '__main__': ) options, arguments = parser.parse_args() # - server = PythonGSQ(options, arguments) + server = gsquery(options, arguments) server.responding() diff --git a/lgsm/functions/update_factorio.sh b/lgsm/functions/update_factorio.sh index a22bbfdb1..ca70396e8 100644 --- a/lgsm/functions/update_factorio.sh +++ b/lgsm/functions/update_factorio.sh @@ -26,22 +26,22 @@ fn_update_factorio_dl(){ fn_update_factorio_currentbuild(){ # Gets current build info # Checks if current build info is available. If it fails, then a server restart will be forced to generate logs. - if [ ! -f "${logdir}/server/factorio-current.log" ]; then + if [ ! -f "${serverfiles}/factorio-current.log" ]; then fn_print_error "Checking for update: factorio.com" - sleep 1 + sleep 0.5 fn_print_error_nl "Checking for update: factorio.com: No logs with server version found" fn_script_log_error "Checking for update: factorio.com: No logs with server version found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: factorio.com: Forcing server restart" fn_script_log_info "Checking for update: factorio.com: Forcing server restart" - sleep 1 + sleep 0.5 exitbypass=1 command_stop.sh exitbypass=1 command_start.sh - sleep 1 + sleep 0.5 # Check again and exit on failure. - if [ ! -f "${logdir}/server/factorio-current.log" ]; then + if [ ! -f "${serverfiles}/factorio-current.log" ]; then fn_print_fail_nl "Checking for update: factorio.com: Still No logs with server version found" fn_script_log_fatal "Checking for update: factorio.com: Still No logs with server version found" core_exit.sh @@ -49,18 +49,18 @@ fn_update_factorio_currentbuild(){ fi # Get current build from logs - currentbuild=$(grep "Loading mod base" "${logdir}/server/factorio-current.log" 2> /dev/null|awk '{print $5}'|tail -1) + currentbuild=$(grep "Loading mod base" "${serverfiles}/factorio-current.log" 2> /dev/null | awk '{print $5}' | tail -1) if [ -z "${currentbuild}" ]; then fn_print_error_nl "Checking for update: factorio.com: Current build version not found" fn_script_log_error "Checking for update: factorio.com: Current build version not found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: factorio.com: Forcing server restart" fn_script_log_info "Checking for update: factorio.com: Forcing server restart" exitbypass=1 command_stop.sh exitbypass=1 command_start.sh - currentbuild=$(grep "Loading mod base" "${logdir}/server/factorio-current.log" 2> /dev/null|awk '{print $5}'|tail -1) + currentbuild=$(grep "Loading mod base" "${serverfiles}/factorio-current.log" 2> /dev/null | awk '{print $5}' | tail -1) if [ -z "${currentbuild}" ]; then fn_print_fail_nl "Checking for update: factorio.com: Current build version still not found" fn_script_log_fatal "Checking for update: factorio.com: Current build version still not found" @@ -77,16 +77,16 @@ fn_update_factorio_arch(){ fn_update_factorio_availablebuild(){ # Gets latest build info. if [ "${branch}" != "stable" ]; then - availablebuild=$(${curlpath} -s https://www.factorio.com/download-headless/"${branch}" | grep 'headless/linux64' | head -n 1 | grep -oP '(?<=get-download/).*?(?=/)') + availablebuild=$(${curlpath} -s https://www.factorio.com/download-headless/"${branch}" | grep 'headless/linux64' | head -n 2 | tail -n 1 | grep -oP '(?<=get-download/).*?(?=/)') else - availablebuild=$(${curlpath} -s https://www.factorio.com/download-headless | grep 'headless/linux64' | head -n 1 | grep -oP '(?<=get-download/).*?(?=/)') + availablebuild=$(${curlpath} -s https://www.factorio.com/download-headless | grep 'headless/linux64' | head -n 2 | tail -n 1 | grep -oP '(?<=get-download/).*?(?=/)') fi - sleep 1 + sleep 0.5 # Checks if availablebuild variable has been set if [ -z "${availablebuild}" ]; then fn_print_fail "Checking for update: factorio.com" - sleep 1 + sleep 0.5 fn_print_fail "Checking for update: factorio.com: Not returning version info" fn_script_log_fatal "Failure! Checking for update: factorio.com: Not returning version info" core_exit.sh @@ -95,23 +95,23 @@ fn_update_factorio_availablebuild(){ else fn_print_ok "Checking for update: factorio.com" fn_script_log_pass "Checking for update: factorio.com" - sleep 1 + sleep 0.5 fi } fn_update_factorio_compare(){ # Removes dots so if can compare version numbers - currentbuilddigit=$(echo "${currentbuild}"|tr -cd '[:digit:]') - availablebuilddigit=$(echo "${availablebuild}"|tr -cd '[:digit:]') + currentbuilddigit=$(echo "${currentbuild}" | tr -cd '[:digit:]') + availablebuilddigit=$(echo "${availablebuild}" | tr -cd '[:digit:]') if [ "${currentbuilddigit}" -ne "${availablebuilddigit}" ]; then echo -e "\n" echo -e "Update available:" - sleep 1 + sleep 0.5 echo -e " Current build: ${red}${currentbuild} ${factorioarch} ${branch} ${default}" echo -e " Available build: ${green}${availablebuild} ${factorioarch} ${branch}${default}" echo -e "" - sleep 1 + sleep 0.5 echo "" echo -en "Applying update.\r" sleep 1 @@ -163,7 +163,7 @@ else # Checks for server update from factorio.com fn_print_dots "Checking for update: factorio.com" fn_script_log_info "Checking for update: factorio.com" - sleep 1 + sleep 0.5 fn_update_factorio_currentbuild fn_update_factorio_availablebuild fn_update_factorio_compare diff --git a/lgsm/functions/update_minecraft.sh b/lgsm/functions/update_minecraft.sh index bbb5163e8..88ee6cebc 100644 --- a/lgsm/functions/update_minecraft.sh +++ b/lgsm/functions/update_minecraft.sh @@ -26,18 +26,18 @@ fn_update_currentbuild(){ # Checks if current build info is available. If it fails, then a server restart will be forced to generate logs. if [ ! -f "${consolelogdir}/${servicename}-console.log" ]; then fn_print_error "Checking for update: mojang.com" - sleep 1 + sleep 0.5 fn_print_error_nl "Checking for update: mojang.com: No logs with server version found" fn_script_log_error "Checking for update: mojang.com: No logs with server version found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: mojang.com: Forcing server restart" fn_script_log_info "Checking for update: mojang.com: Forcing server restart" - sleep 1 + sleep 0.5 exitbypass=1 command_stop.sh exitbypass=1 command_start.sh - sleep 1 + sleep 0.5 # Check again and exit on failure. if [ ! -f "${consolelogdir}/${servicename}-console.log" ]; then fn_print_fail_nl "Checking for update: mojang.com: Still No logs with server version found" @@ -51,7 +51,7 @@ fn_update_currentbuild(){ if [ -z "${currentbuild}" ]; then fn_print_error_nl "Checking for update: mojang.com: Current build version not found" fn_script_log_error "Checking for update: mojang.com: Current build version not found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: mojang.com: Forcing server restart" fn_script_log_info "Checking for update: mojang.com: Forcing server restart" exitbypass=1 @@ -88,17 +88,17 @@ fn_update_availablebuild(){ fn_update_compare(){ # Removes dots so if can compare version numbers - currentbuilddigit=$(echo "${currentbuild}"|tr -cd '[:digit:]') - availablebuilddigit=$(echo "${availablebuild}"|tr -cd '[:digit:]') + currentbuilddigit=$(echo "${currentbuild}" | tr -cd '[:digit:]') + availablebuilddigit=$(echo "${availablebuild}" | tr -cd '[:digit:]') if [ "${currentbuilddigit}" -ne "${availablebuilddigit}" ]; then echo -e "\n" echo -e "Update available:" - sleep 1 + sleep 0.5 echo -e " Current build: ${red}${currentbuild}${default}" echo -e " Available build: ${green}${availablebuild}${default}" echo -e "" - sleep 1 + sleep 0.5 echo "" echo -en "Applying update.\r" sleep 1 @@ -149,7 +149,7 @@ else # Checks for server update from mojang.com fn_print_dots "Checking for update: mojang.com" fn_script_log_info "Checking for update: mojang.com" - sleep 1 + sleep 0.5 fn_update_currentbuild fn_update_availablebuild fn_update_compare diff --git a/lgsm/functions/update_mta.sh b/lgsm/functions/update_mta.sh index 8ae9f8b53..1a4bb4419 100644 --- a/lgsm/functions/update_mta.sh +++ b/lgsm/functions/update_mta.sh @@ -28,18 +28,18 @@ fn_update_mta_currentbuild(){ # Checks if current build info is available. If it fails, then a server restart will be forced to generate logs. if [ ! -f "${gamelogdir}"/server.log ]; then fn_print_error "Checking for update: linux.mtasa.com" - sleep 1 + sleep 0.5 fn_print_error_nl "Checking for update: linux.mtasa.com: No logs with server version found" fn_script_log_error "Checking for update: linux.mtasa.com: No logs with server version found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: linux.mtasa.com: Forcing server restart" fn_script_log_info "Checking for update: linux.mtasa.com: Forcing server restart" - sleep 1 + sleep 0.5 exitbypass=1 command_stop.sh exitbypass=1 command_start.sh - sleep 1 + sleep 0.5 # Check again and exit on failure. if [ ! -f "${gamelogdir}"/server.log ]; then fn_print_fail_nl "Checking for update: linux.mtasa.com: Still No logs with server version found" @@ -49,18 +49,18 @@ fn_update_mta_currentbuild(){ fi # Get current build from logs - currentbuild=$(cat "${gamelogdir}"/server.log | grep "= Multi Theft Auto: San Andreas v" | awk '{ print $7 }'| sed -r 's/^.{1}//' | tail -1) + currentbuild=$(grep "= Multi Theft Auto: San Andreas v" "${gamelogdir}/server.log" | awk '{ print $7 }' | sed -r 's/^.{1}//' | tail -1) if [ -z "${currentbuild}" ]; then fn_print_error_nl "Checking for update: linux.mtasa.com: Current build version not found" fn_script_log_error "Checking for update: linux.mtasa.com: Current build version not found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: linux.mtasa.com: Forcing server restart" fn_script_log_info "Checking for update: linux.mtasa.com: Forcing server restart" exitbypass=1 command_stop.sh exitbypass=1 command_start.sh - currentbuild=$(cat "${gamelogdir}"/server.log | grep "= Multi Theft Auto: San Andreas v" | awk '{ print $7 }'| sed -r 's/^.{1}//' | tail -1) + currentbuild=$(grep "= Multi Theft Auto: San Andreas v" "${gamelogdir}/server.log" | awk '{ print $7 }' | sed -r 's/^.{1}//' | tail -1) if [ -z "${currentbuild}" ]; then fn_print_fail_nl "Checking for update: linux.mtasa.com: Current build version still not found" fn_script_log_fatal "Checking for update: linux.mtasa.com: Current build version still not found" @@ -71,9 +71,9 @@ fn_update_mta_currentbuild(){ fn_mta_get_availablebuild(){ fn_fetch_file "https://raw.githubusercontent.com/multitheftauto/mtasa-blue/master/Server/version.h" "${tmpdir}" "version.h" # we need to find latest stable version here - local majorversion="$(cat ${tmpdir}/version.h | grep "#define MTASA_VERSION_MAJOR" | awk '{ print $3 }' | sed 's/\r//g')" - local minorversion="$(cat ${tmpdir}/version.h | grep "#define MTASA_VERSION_MINOR" | awk '{ print $3 }' | sed 's/\r//g')" - local maintenanceversion="$(cat ${tmpdir}/version.h | grep "#define MTASA_VERSION_MAINTENANCE" | awk '{ print $3 }' | sed 's/\r//g')" + local majorversion="$(grep "#define MTASA_VERSION_MAJOR" "${tmpdir}/version.h" | awk '{ print $3 }' | sed 's/\r//g')" + local minorversion="$(grep "#define MTASA_VERSION_MINOR" "${tmpdir}/version.h" | awk '{ print $3 }' | sed 's/\r//g')" + local maintenanceversion="$(grep "#define MTASA_VERSION_MAINTENANCE" "${tmpdir}/version.h" | awk '{ print $3 }' | sed 's/\r//g')" numversion="${majorversion}${minorversion}${maintenanceversion}" fullversion="${majorversion}.${minorversion}.${maintenanceversion}" rm -f "${tmpdir}/version.h" @@ -81,7 +81,7 @@ fn_mta_get_availablebuild(){ fn_update_mta_compare(){ # Removes dots so if can compare version numbers - currentbuilddigit=$(echo "${currentbuild}"|tr -cd '[:digit:]') + currentbuilddigit=$(echo "${currentbuild}" | tr -cd '[:digit:]') if [ "${currentbuilddigit}" -ne "${numversion}" ]||[ "${forceupdate}" == "1" ]; then if [ "${forceupdate}" == "1" ]; then # forceupdate bypasses checks, useful for small build changes @@ -91,11 +91,11 @@ fn_update_mta_compare(){ fi echo -e "\n" echo -e "Update ${mta_update_string}:" - sleep 1 + sleep 0.5 echo -e " Current build: ${red}${currentbuild} ${default}" echo -e " Available build: ${green}${fullversion} ${default}" echo -e "" - sleep 1 + sleep 0.5 echo "" echo -en "Applying update.\r" sleep 1 @@ -147,7 +147,7 @@ else # Checks for server update from linux.mtasa.com using the github repo. fn_print_dots "Checking for update: linux.mtasa.com" fn_script_log_info "Checking for update: linux.mtasa.com" - sleep 1 + sleep 0.5 fn_update_mta_currentbuild fn_mta_get_availablebuild fn_update_mta_compare diff --git a/lgsm/functions/update_mumble.sh b/lgsm/functions/update_mumble.sh index f104451b3..3ad1c1a47 100644 --- a/lgsm/functions/update_mumble.sh +++ b/lgsm/functions/update_mumble.sh @@ -28,18 +28,18 @@ fn_update_mumble_currentbuild(){ # Checks if current build info is available. If it fails, then a server restart will be forced to generate logs. if [ ! -f "${consolelogdir}/${servicename}-console.log" ]; then fn_print_error "Checking for update: GitHub" - sleep 1 + sleep 0.5 fn_print_error_nl "Checking for update: GitHub: No logs with server version found" fn_script_log_error "Checking for update: GitHub: No logs with server version found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: GitHub: Forcing server restart" fn_script_log_info "Checking for update: GitHub: Forcing server restart" - sleep 1 + sleep 0.5 exitbypass=1 command_stop.sh exitbypass=1 command_start.sh - sleep 1 + sleep 0.5 # Check again and exit on failure. if [ ! -f "${consolelogdir}/${servicename}-console.log" ]; then fn_print_fail_nl "Checking for update: GitHub: Still No logs with server version found" @@ -53,7 +53,7 @@ fn_update_mumble_currentbuild(){ if [ -z "${currentbuild}" ]; then fn_print_error_nl "Checking for update: GitHub: Current build version not found" fn_script_log_error "Checking for update: GitHub: Current build version not found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: GitHub: Forcing server restart" fn_script_log_info "Checking for update: GitHub: Forcing server restart" exitbypass=1 @@ -77,12 +77,12 @@ fn_update_mumble_arch(){ fn_update_mumble_availablebuild(){ # Gets latest build info. availablebuild=$(${curlpath} -s https://api.github.com/repos/mumble-voip/mumble/releases/latest | grep 'murmur-static_x86.*\.bz2"' | tail -1 | awk -F"/" '{ print $8 }') - sleep 1 + sleep 0.5 # Checks if availablebuild variable has been set if [ -z "${availablebuild}" ]; then fn_print_fail "Checking for update: GitHub" - sleep 1 + sleep 0.5 fn_print_fail "Checking for update: GitHub: Not returning version info" fn_script_log_fatal "Failure! Checking for update: GitHub: Not returning version info" core_exit.sh @@ -91,23 +91,23 @@ fn_update_mumble_availablebuild(){ else fn_print_ok "Checking for update: GitHub" fn_script_log_pass "Checking for update: GitHub" - sleep 1 + sleep 0.5 fi } fn_update_mumble_compare(){ # Removes dots so if can compare version numbers - currentbuilddigit=$(echo "${currentbuild}"|tr -cd '[:digit:]') - availablebuilddigit=$(echo "${availablebuild}"|tr -cd '[:digit:]') + currentbuilddigit=$(echo "${currentbuild}" | tr -cd '[:digit:]') + availablebuilddigit=$(echo "${availablebuild}" | tr -cd '[:digit:]') if [ "${currentbuilddigit}" -ne "${availablebuilddigit}" ]; then echo -e "\n" echo -e "Update available:" - sleep 1 + sleep 0.5 echo -e " Current build: ${red}${currentbuild} ${mumblearch}${default}" echo -e " Available build: ${green}${availablebuild} ${mumblearch}${default}" echo -e "" - sleep 1 + sleep 0.5 echo "" echo -en "Applying update.\r" sleep 1 @@ -159,7 +159,7 @@ else # Checks for server update from github.com fn_print_dots "Checking for update: github.com" fn_script_log_info "Checking for update: github.com" - sleep 1 + sleep 0.5 fn_update_mumble_currentbuild fn_update_mumble_availablebuild fn_update_mumble_compare diff --git a/lgsm/functions/update_steamcmd.sh b/lgsm/functions/update_steamcmd.sh index 1b0663df0..3a068be18 100644 --- a/lgsm/functions/update_steamcmd.sh +++ b/lgsm/functions/update_steamcmd.sh @@ -13,7 +13,7 @@ check.sh fn_update_steamcmd_dl(){ info_config.sh fn_print_dots "SteamCMD" - sleep 1 + sleep 0.5 fn_print_ok_nl "SteamCMD" fn_script_log_info "Starting SteamCMD" @@ -21,13 +21,13 @@ fn_update_steamcmd_dl(){ # Detects if unbuffer command is available for 32 bit distributions only. info_distro.sh - if [ $(command -v stdbuf) ]&&[ "${arch}" != "x86_64" ]; then + if [ "$(command -v stdbuf)" ]&&[ "${arch}" != "x86_64" ]; then unbuffer="stdbuf -i0 -o0 -e0" fi - cd "${steamcmddir}" + cd "${steamcmddir}" || exit if [ "${engine}" == "goldsource" ]; then - ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod ${appidmod} +app_update "${appid}" ${branch} +quit | tee -a "${lgsmlog}" + ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" ${branch} +quit | tee -a "${lgsmlog}" else ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} +quit | tee -a "${lgsmlog}" if [ "${gamename}" == "Classic Offensive" ]; then @@ -40,7 +40,7 @@ fn_update_steamcmd_dl(){ fn_appmanifest_info(){ appmanifestfile=$(find "${serverfiles}" -type f -name "appmanifest_${appid}.acf") - appmanifestfilewc=$(find "${serverfiles}" -type f -name "appmanifest_${appid}.acf"|wc -l) + appmanifestfilewc=$(find "${serverfiles}" -type f -name "appmanifest_${appid}.acf" | wc -l) } fn_appmanifest_check(){ @@ -48,22 +48,22 @@ fn_appmanifest_check(){ # Multiple or no matching appmanifest files may sometimes be present. # This error is corrected if required. if [ "${appmanifestfilewc}" -ge "2" ]; then - sleep 1 + sleep 0.5 fn_print_error "Multiple appmanifest_${appid}.acf files found" fn_script_log_error "Multiple appmanifest_${appid}.acf files found" sleep 2 fn_print_dots "Removing x${appmanifestfilewc} appmanifest_${appid}.acf files" - sleep 1 + sleep 0.5 for appfile in ${appmanifestfile}; do rm "${appfile}" done - sleep 1 + sleep 0.5 appmanifestfilewc1="${appmanifestfilewc}" fn_appmanifest_info if [ "${appmanifestfilewc}" -ge "2" ]; then fn_print_fail "Unable to remove x${appmanifestfilewc} appmanifest_${appid}.acf files" fn_script_log_fatal "Unable to remove x${appmanifestfilewc} appmanifest_${appid}.acf files" - sleep 1 + sleep 0.5 echo " * Check user permissions" for appfile in ${appmanifestfile}; do echo " ${appfile}" @@ -72,25 +72,25 @@ fn_appmanifest_check(){ else fn_print_ok "Removed x${appmanifestfilewc1} appmanifest_${appid}.acf files" fn_script_log_pass "Removed x${appmanifestfilewc1} appmanifest_${appid}.acf files" - sleep 1 + sleep 0.5 fn_print_info_nl "Forcing update to correct issue" fn_script_log_info "Forcing update to correct issue" - sleep 1 + sleep 0.5 fn_update_steamcmd_dl fn_update_request_log fi elif [ "${appmanifestfilewc}" -eq "0" ]; then - fn_print_error "No appmanifest_${appid}.acf found" + fn_print_error_nl "No appmanifest_${appid}.acf found" fn_script_log_error "No appmanifest_${appid}.acf found" - sleep 1 + sleep 0.5 fn_print_info_nl "Forcing update to correct issue" fn_script_log_info "Forcing update to correct issue" - sleep 1 + sleep 0.5 fn_update_steamcmd_dl fn_update_request_log fn_appmanifest_info if [ "${appmanifestfilewc}" -eq "0" ]; then - fn_print_fatal "Still no appmanifest_${appid}.acf found" + fn_print_fail_nl "Still no appmanifest_${appid}.acf found" fn_script_log_fatal "Still no appmanifest_${appid}.acf found" core_exit.sh fi @@ -101,7 +101,7 @@ fn_update_request_log(){ # Checks for server update requests from server logs. fn_print_dots "Checking for update: Server logs" fn_script_log_info "Checking for update: Server logs" - sleep 1 + sleep 0.5 if [ -f "${consolelog}" ]; then requestrestart=$(grep -Ec "MasterRequestRestart" "${consolelog}") else @@ -110,7 +110,7 @@ fn_update_request_log(){ if [ "${requestrestart}" -ge "1" ]; then fn_print_ok_nl "Checking for update: Server logs: Update requested" fn_script_log_pass "Checking for update: Server logs: Update requested" - sleep 1 + sleep 0.5 echo "" echo -en "Applying update.\r" sleep 1 @@ -135,7 +135,7 @@ fn_update_request_log(){ alert.sh else fn_print_ok "Checking for update: Server logs: No update requested" - sleep 1 + sleep 0.5 fi } @@ -145,7 +145,7 @@ fn_update_steamcmd_check(){ # Checks for server update from SteamCMD fn_print_dots "Checking for update: SteamCMD" fn_script_log_info "Checking for update: SteamCMD" - sleep 1 + sleep 0.5 # Gets currentbuild currentbuild=$(grep buildid "${appmanifestfile}" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\ -f3) @@ -157,7 +157,7 @@ fn_update_steamcmd_check(){ fi # Set branch for updateinfo - IFS=' ' read -ra branchsplits <<< "${branch}" + IFS=' ' read -ra branchsplits <<< ${branch} if [ "${#branchsplits[@]}" -gt 1 ]; then branchname="${branchsplits[1]}" else @@ -169,14 +169,14 @@ fn_update_steamcmd_check(){ availablebuild=$(./steamcmd.sh +login "${steamuser}" "${steampass}" +app_info_update 1 +app_info_print "${appid}" +app_info_print "${appid}" +quit | sed -n '/branch/,$p' | grep -m 1 buildid | tr -cd '[:digit:]') if [ -z "${availablebuild}" ]; then fn_print_fail "Checking for update: SteamCMD" - sleep 1 + sleep 0.5 fn_print_fail_nl "Checking for update: SteamCMD: Not returning version info" fn_script_log_fatal "Checking for update: SteamCMD: Not returning version info" core_exit.sh else fn_print_ok "Checking for update: SteamCMD" fn_script_log_pass "Checking for update: SteamCMD" - sleep 1 + sleep 0.5 fi if [ "${currentbuild}" != "${availablebuild}" ]; then @@ -184,11 +184,11 @@ fn_update_steamcmd_check(){ fn_script_log_pass "Checking for update: SteamCMD: Update available" echo -e "\n" echo -e "Update available:" - sleep 1 + sleep 0.5 echo -e " Current build: ${red}${currentbuild}${default}" echo -e " Available build: ${green}${availablebuild}${default}" echo -e " https://steamdb.info/app/${appid}/" - sleep 1 + sleep 0.5 echo "" echo -en "Applying update.\r" sleep 1 diff --git a/lgsm/functions/update_ts3.sh b/lgsm/functions/update_ts3.sh index c30b15bd1..596979348 100644 --- a/lgsm/functions/update_ts3.sh +++ b/lgsm/functions/update_ts3.sh @@ -27,18 +27,18 @@ fn_update_ts3_currentbuild(){ # Checks if current build info is available. If it fails, then a server restart will be forced to generate logs. if [ -z "$(find ./* -name 'ts3server*_0.log')" ]; then fn_print_error "Checking for update: teamspeak.com" - sleep 1 + sleep 0.5 fn_print_error_nl "Checking for update: teamspeak.com: No logs with server version found" fn_script_log_error "Checking for update: teamspeak.com: No logs with server version found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: teamspeak.com: Forcing server restart" fn_script_log_info "Checking for update: teamspeak.com: Forcing server restart" - sleep 1 + sleep 0.5 exitbypass=1 command_stop.sh exitbypass=1 command_start.sh - sleep 1 + sleep 0.5 # Check again and exit on failure. if [ -z "$(find ./* -name 'ts3server*_0.log')" ]; then fn_print_fail_nl "Checking for update: teamspeak.com: Still No logs with server version found" @@ -52,7 +52,7 @@ fn_update_ts3_currentbuild(){ if [ -z "${currentbuild}" ]; then fn_print_error_nl "Checking for update: teamspeak.com: Current build version not found" fn_script_log_error "Checking for update: teamspeak.com: Current build version not found" - sleep 1 + sleep 0.5 fn_print_info_nl "Checking for update: teamspeak.com: Forcing server restart" fn_script_log_info "Checking for update: teamspeak.com: Forcing server restart" exitbypass=1 @@ -112,7 +112,7 @@ fn_update_ts3_availablebuild_legacy(){ # Gets latest build info. # Grabs all version numbers but not in correct order. - wget "http://dl.4players.de/ts/releases/?C=M;O=D" -q -O -| grep -i dir | grep -Eo '.*\/<\/a>' | grep -Eo '[0-9\.?]+'|uniq > "${tmpdir}/.ts3_version_numbers_unsorted.tmp" + wget "http://dl.4players.de/ts/releases/?C=M;O=D" -q -O - | grep -i dir | grep -Eo '.*\/<\/a>' | grep -Eo '[0-9\.?]+' | uniq > "${tmpdir}/.ts3_version_numbers_unsorted.tmp" # Sort version numbers cat "${tmpdir}/.ts3_version_numbers_unsorted.tmp" | sort -r --version-sort -o "${tmpdir}/.ts3_version_numbers_sorted.tmp" @@ -134,7 +134,7 @@ fn_update_ts3_availablebuild_legacy(){ # Checks availablebuild info is available if [ -z "${availablebuild}" ]; then fn_print_fail "Checking for update: teamspeak.com" - sleep 1 + sleep 0.5 fn_print_fail "Checking for update: teamspeak.com: Not returning version info" fn_script_log_fatal "Failure! Checking for update: teamspeak.com: Not returning version info" core_exit.sh @@ -143,23 +143,23 @@ fn_update_ts3_availablebuild_legacy(){ else fn_print_ok "Checking for update: teamspeak.com" fn_script_log_pass "Checking for update: teamspeak.com" - sleep 1 + sleep 0.5 fi } fn_update_ts3_compare(){ # Removes dots so if can compare version numbers - currentbuilddigit=$(echo "${currentbuild}"|tr -cd '[:digit:]') - availablebuilddigit=$(echo "${availablebuild}"|tr -cd '[:digit:]') + currentbuilddigit=$(echo "${currentbuild}" | tr -cd '[:digit:]') + availablebuilddigit=$(echo "${availablebuild}" | tr -cd '[:digit:]') if [ "${currentbuilddigit}" -ne "${availablebuilddigit}" ]; then echo -e "\n" echo -e "Update available:" - sleep 1 + sleep 0.5 echo -e " Current build: ${red}${currentbuild} ${ts3arch}${default}" echo -e " Available build: ${green}${availablebuild} ${ts3arch}${default}" echo -e "" - sleep 1 + sleep 0.5 echo "" echo -en "Applying update.\r" sleep 1 @@ -216,7 +216,7 @@ else # Checks for server update from teamspeak.com using a mirror dl.4players.de. fn_print_dots "Checking for update: teamspeak.com" fn_script_log_info "Checking for update: teamspeak.com" - sleep 1 + sleep 0.5 fn_update_ts3_currentbuild if [ "$(command -v jq >/dev/null 2>&1)" ]; then fn_update_ts3_availablebuild diff --git a/linuxgsm.sh b/linuxgsm.sh index 39329e911..9e59cfd9a 100755 --- a/linuxgsm.sh +++ b/linuxgsm.sh @@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then set -x fi -version="180318" +version="180409" shortname="core" gameservername="core" rootdir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" @@ -73,7 +73,7 @@ fn_bootstrap_fetch_file(){ curlpath=$(command -v curl 2>/dev/null) # If curl exists download file - if [ "$(basename ${curlpath})" == "curl" ]; then + if [ "$(basename "${curlpath}")" == "curl" ]; then # trap to remove part downloaded files echo -ne " fetching ${local_filename}...\c" curlcmd=$(${curlpath} -s --fail -L -o "${local_filedir}/${local_filename}" "${remote_fileurl}" 2>&1) @@ -142,14 +142,14 @@ fn_install_menu_bash() { caption=$3 options=$4 fn_print_horizontal - fn_print_center $title - fn_print_center $caption + fn_print_center "${title}" + fn_print_center "${caption}" fn_print_horizontal menu_options=() while read -r line || [[ -n "${line}" ]]; do var=$(echo "${line}" | awk -F "," '{print $2 " - " $3}') menu_options+=( "${var}" ) - done < $options + done < ${options} menu_options+=( "Cancel" ) select option in "${menu_options[@]}"; do if [ -n "${option}" ] && [ "${option}" != "Cancel" ]; then @@ -175,8 +175,8 @@ fn_install_menu_whiptail() { key=$(echo "${line}" | awk -F "," '{print $3}') val=$(echo "${line}" | awk -F "," '{print $2}') menu_options+=( ${val//\"} "${key//\"}" ) - done < $options - OPTION=$(${menucmd} --title "${title}" --menu "${caption}" ${height} ${width} ${menuheight} "${menu_options[@]}" 3>&1 1>&2 2>&3) + done < "${options}" + OPTION=$(${menucmd} --title "${title}" --menu "${caption}" "${height}" "${width}" "${menuheight}" "${menu_options[@]}" 3>&1 1>&2 2>&3) if [ $? == 0 ]; then eval "$resultvar=\"${OPTION}\"" else @@ -193,12 +193,12 @@ fn_install_menu() { options=$4 # Get menu command for menucmd in whiptail dialog bash; do - if [ -x $(command -v ${menucmd}) ]; then - menucmd=$(command -v ${menucmd}) + if [ -x "$(command -v "${menucmd}")" ]; then + menucmd=$(command -v "${menucmd}") break fi done - case "$(basename ${menucmd})" in + case "$(basename "${menucmd}")" in whiptail|dialog) fn_install_menu_whiptail "${menucmd}" selection "${title}" "${caption}" "${options}" 40 80 30;; *) diff --git a/tests/tests_fctrserver.sh b/tests/tests_fctrserver.sh new file mode 100644 index 000000000..31d9205d0 --- /dev/null +++ b/tests/tests_fctrserver.sh @@ -0,0 +1,910 @@ +#!/bin/bash +# Project: Game Server Managers - LinuxGSM +# Author: Daniel Gibbs +# License: MIT License, Copyright (c) 2017 Daniel Gibbs +# Purpose: Travis CI Tests: Factorio | Linux Game Server Management Script +# Contributors: https://github.com/GameServerManagers/LinuxGSM/graphs/contributors +# Documentation: https://github.com/GameServerManagers/LinuxGSM/wiki +# Website: https://linuxgsm.com + +travistest="1" +version="180409" +shortname="fctr" +gameservername="fctrserver" +rootdir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" +selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" +servicename="${selfname}" +lockselfname=".${servicename}.lock" +lgsmdir="${rootdir}/lgsm" +logdir="${rootdir}/log" +lgsmlogdir="${logdir}/lgsm" +steamcmddir="${rootdir}/steamcmd" +serverfiles="${rootdir}/serverfiles" +functionsdir="${lgsmdir}/functions" +libdir="${lgsmdir}/lib" +tmpdir="${lgsmdir}/tmp" +configdir="${lgsmdir}/config-lgsm" +configdirserver="${configdir}/${gameservername}" +configdirdefault="${lgsmdir}/config-default" + +# Allows for testing not on Travis CI +if [ ! -v TRAVIS ]; then + TRAVIS_BRANCH="develop" + TRAVIS_BUILD_DIR="${rootdir}" +fi + +## GitHub Branch Select +# Allows for the use of different function files +# from a different repo and/or branch. +githubuser="GameServerManagers" +githubrepo="LinuxGSM" +githubbranch="${TRAVIS_BRANCH}" + +# Core Function that is required first +core_functions.sh(){ + functionfile="${FUNCNAME}" + fn_bootstrap_fetch_file_github "lgsm/functions" "core_functions.sh" "${functionsdir}" "chmodx" "run" "noforcedl" "nomd5" +} + +# Bootstrap +# Fetches the core functions required before passed off to core_dl.sh + +# Fetches core functions +fn_bootstrap_fetch_file(){ + remote_fileurl="${1}" + local_filedir="${2}" + local_filename="${3}" + chmodx="${4:-0}" + run="${5:-0}" + forcedl="${6:-0}" + md5="${7:-0}" + # download file if missing or download forced + if [ ! -f "${local_filedir}/${local_filename}" ]||[ "${forcedl}" == "forcedl" ]; then + if [ ! -d "${local_filedir}" ]; then + mkdir -p "${local_filedir}" + fi + # Defines curl path + curlpath=$(command -v curl 2>/dev/null) + + # If curl exists download file + if [ "$(basename "${curlpath}")" == "curl" ]; then + # trap to remove part downloaded files + echo -ne " fetching ${local_filename}...\c" + curlcmd=$(${curlpath} -s --fail -L -o "${local_filedir}/${local_filename}" "${remote_fileurl}" 2>&1) + local exitcode=$? + if [ ${exitcode} -ne 0 ]; then + echo -e "\e[0;31mFAIL\e[0m\n" + if [ -f "${lgsmlog}" ]; then + echo -e "${remote_fileurl}" | tee -a "${lgsmlog}" + echo "${curlcmd}" | tee -a "${lgsmlog}" + fi + exit 1 + else + echo -e "\e[0;32mOK\e[0m" + fi + else + echo "[ FAIL ] Curl is not installed" + exit 1 + fi + # make file chmodx if chmodx is set + if [ "${chmodx}" == "chmodx" ]; then + chmod +x "${local_filedir}/${local_filename}" + fi + fi + + if [ -f "${local_filedir}/${local_filename}" ]; then + # run file if run is set + if [ "${run}" == "run" ]; then + source "${local_filedir}/${local_filename}" + fi + fi +} + +fn_bootstrap_fetch_file_github(){ + github_file_url_dir="${1}" + github_file_url_name="${2}" + githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" + + remote_fileurl="${githuburl}" + local_filedir="${3}" + local_filename="${github_file_url_name}" + chmodx="${4:-0}" + run="${5:-0}" + forcedl="${6:-0}" + md5="${7:-0}" + # Passes vars to the file download function + fn_bootstrap_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}" +} + +# Installer menu + +fn_print_center() { + columns="$(tput cols)" + line="$@" + printf "%*s\n" $(( (${#line} + columns) / 2)) "${line}" +} + +fn_print_horizontal(){ + char="${1:-=}" + printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' "${char}" +} + +# Bash Menu +fn_install_menu_bash() { + local resultvar=$1 + title=$2 + caption=$3 + options=$4 + fn_print_horizontal + fn_print_center "${title}" + fn_print_center "${caption}" + fn_print_horizontal + menu_options=() + while read -r line || [[ -n "${line}" ]]; do + var=$(echo "${line}" | awk -F "," '{print $2 " - " $3}') + menu_options+=( "${var}" ) + done < ${options} + menu_options+=( "Cancel" ) + select option in "${menu_options[@]}"; do + if [ -n "${option}" ] && [ "${option}" != "Cancel" ]; then + eval "$resultvar=\"${option/%\ */}\"" + fi + break + done +} + +# Whiptail/Dialog Menu +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 + key=$(echo "${line}" | awk -F "," '{print $3}') + val=$(echo "${line}" | awk -F "," '{print $2}') + menu_options+=( ${val//\"} "${key//\"}" ) + done < "${options}" + OPTION=$(${menucmd} --title "${title}" --menu "${caption}" "${height}" "${width}" "${menuheight}" "${menu_options[@]}" 3>&1 1>&2 2>&3) + if [ $? == 0 ]; then + eval "$resultvar=\"${OPTION}\"" + else + eval "$resultvar=" + fi +} + +# Menu selector +fn_install_menu() { + local resultvar=$1 + local selection="" + title=$2 + caption=$3 + options=$4 + # Get menu command + for menucmd in whiptail dialog bash; do + if [ -x "$(command -v "${menucmd}")" ]; then + menucmd=$(command -v "${menucmd}") + break + fi + done + case "$(basename "${menucmd}")" in + 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}\"" +} + +# Gets server info from serverlist.csv and puts in to array +fn_server_info(){ + IFS="," + server_info_array=($(grep -aw "${userinput}" "${serverlist}")) + shortname="${server_info_array[0]}" # csgo + gameservername="${server_info_array[1]}" # csgoserver + gamename="${server_info_array[2]}" # Counter Strike: Global Offensive +} + +fn_install_getopt(){ + userinput="empty" + echo "Usage: $0 [option]" + echo -e "" + echo "Installer - Linux Game Server Managers - Version ${version}" + echo "https://linuxgsm.com" + echo -e "" + echo -e "Commands" + echo -e "install\t\t| Select server to install." + echo -e "servername\t| e.g $0 csgoserver. Enter name of server/game to install." + echo -e "list\t\t| List all servers available for install." + exit +} + +fn_install_file(){ + local_filename="${gameservername}" + if [ -e "${local_filename}" ]; then + i=2 + while [ -e "${local_filename}-${i}" ] ; do + let i++ + done + local_filename="${local_filename}-${i}" + fi + cp -R "${selfname}" "${local_filename}" + sed -i -e "s/shortname=\"core\"/shortname=\"${shortname}\"/g" "${local_filename}" + sed -i -e "s/gameservername=\"core\"/gameservername=\"${gameservername}\"/g" "${local_filename}" + echo "Installed ${gamename} server as ${local_filename}" + echo "" + if [ ! -d "${serverfiles}" ]; then + echo "./${local_filename} install" + else + echo "Remember to check server ports" + echo "./${local_filename} details" + fi + echo "" + exit +} + +# Prevent from running this script as root. +if [ "$(whoami)" == "root" ]; then + if [ ! -f "${functionsdir}/core_functions.sh" ]||[ ! -f "${functionsdir}/check_root.sh" ]||[ ! -f "${functionsdir}/core_messages.sh" ]; then + echo "[ FAIL ] Do NOT run this script as root!" + exit 1 + else + core_functions.sh + check_root.sh + fi +fi + +# LinuxGSM installer mode +if [ "${shortname}" == "core" ]; then + userinput=$1 + datadir="${tmpdir}/data" + serverlist="${datadir}/serverlist.csv" + + # Download the latest serverlist. This is the complete list of all supported servers. + fn_bootstrap_fetch_file_github "lgsm/data" "serverlist.csv" "${datadir}" "nochmodx" "norun" "forcedl" "nomd5" + if [ ! -f "${serverlist}" ]; then + echo "[ FAIL ] serverlist.csv could not be loaded." + exit 1 + fi + + if [ "${userinput}" == "list" ]; then + { + awk -F "," '{print $2 "\t" $3}' "${serverlist}" + } | column -s $'\t' -t | more + exit + elif [ "${userinput}" == "install" ]||[ "${userinput}" == "i" ]; then + fn_install_menu result "LinuxGSM" "Select game to install" "${serverlist}" + userinput="${result}" + fn_server_info + if [ "${result}" == "${gameservername}" ]; then + fn_install_file + elif [ "${result}" == "" ]; then + echo "Install canceled" + else + echo "[ FAIL ] menu result does not match gameservername" + echo "result: ${result}" + echo "gameservername: ${gameservername}" + fi + elif [ -n "${userinput}" ]; then + fn_server_info + if [ "${userinput}" == "${gameservername}" ]||[ "${userinput}" == "${gamename}" ]||[ "${userinput}" == "${shortname}" ]; then + fn_install_file + else + echo "[ FAIL ] unknown game server" + fi + else + fn_install_getopt + fi + +# LinuxGSM Server Mode +else + core_functions.sh + + # Load LinuxGSM configs + # 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}" + fn_fetch_config "lgsm/config-default/config-lgsm/${gameservername}" "_default.cfg" "${configdirdefault}/config-lgsm/${gameservername}" "_default.cfg" "nochmodx" "norun" "noforcedl" "nomd5" + fi + if [ ! -f "${configdirserver}/_default.cfg" ]; then + mkdir -p "${configdirserver}" + echo -ne " copying _default.cfg...\c" + cp -R "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" "${configdirserver}/_default.cfg" + exitcode=$? + if [ ${exitcode} -ne 0 ]; then + echo -e "\e[0;31mFAIL\e[0m\n" + exit 1 + else + echo -e "\e[0;32mOK\e[0m" + fi + else + function_file_diff=$(diff -q "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" "${configdirserver}/_default.cfg") + if [ "${function_file_diff}" != "" ]; then + fn_print_warn_nl "_default.cfg has been altered. reloading config." + echo -ne " copying _default.cfg...\c" + cp -R "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" "${configdirserver}/_default.cfg" + exitcode=$? + if [ ${exitcode} -ne 0 ]; then + echo -e "\e[0;31mFAIL\e[0m\n" + exit 1 + else + echo -e "\e[0;32mOK\e[0m" + fi + fi + fi + source "${configdirserver}/_default.cfg" + # Load the common.cfg config. If missing download it + if [ ! -f "${configdirserver}/common.cfg" ]; then + fn_fetch_config "lgsm/config-default/config-lgsm" "common-template.cfg" "${configdirserver}" "common.cfg" "${chmodx}" "nochmodx" "norun" "noforcedl" "nomd5" + source "${configdirserver}/common.cfg" + else + source "${configdirserver}/common.cfg" + fi + # Load the instance.cfg config. If missing download it + if [ ! -f "${configdirserver}/${servicename}.cfg" ]; then + fn_fetch_config "lgsm/config-default/config-lgsm" "instance-template.cfg" "${configdirserver}" "${servicename}.cfg" "nochmodx" "norun" "noforcedl" "nomd5" + source "${configdirserver}/${servicename}.cfg" + else + source "${configdirserver}/${servicename}.cfg" + fi + # Load the linuxgsm.sh in to tmpdir. If missing download it + if [ ! -f "${tmpdir}/linuxgsm.sh" ]; then + fn_fetch_file_github "" "linuxgsm.sh" "${tmpdir}" "chmodx" "norun" "noforcedl" "nomd5" + fi + + # Prevents running of core_exit.sh for Travis. + if [ -z "${travistest}" ]; then + getopt=$1 + core_getopt.sh + fi +fi + +fn_currentstatus_tmux(){ + check_status.sh + if [ "${status}" != "0" ]; then + currentstatus="ONLINE" + else + currentstatus="OFFLINE" + fi +} + +fn_currentstatus_ts3(){ + check_status.sh + if [ "${status}" != "0" ]; then + currentstatus="ONLINE" + else + currentstatus="OFFLINE" + fi +} + +fn_setstatus(){ + fn_currentstatus_tmux + echo"" + echo "Required status: ${requiredstatus}" + counter=0 + echo "Current status: ${currentstatus}" + while [ "${requiredstatus}" != "${currentstatus}" ]; do + counter=$((counter+1)) + fn_currentstatus_tmux + echo -ne "New status: ${currentstatus}\\r" + + if [ "${requiredstatus}" == "ONLINE" ]; then + (command_start.sh > /dev/null 2>&1) + else + (command_stop.sh > /dev/null 2>&1) + fi + if [ "${counter}" -gt "5" ]; then + currentstatus="FAIL" + echo "Current status: ${currentstatus}" + echo "" + echo "Unable to start or stop server." + exit 1 + fi + done + echo -ne "New status: ${currentstatus}\\r" + echo -e "\n" + echo "Test starting:" + echo "" + sleep 0.5 +} + +# End of every test will expect the result to either pass or fail +# If the script does not do as intended the whole test will fail +# if expecting a pass +fn_test_result_pass(){ + if [ $? != 0 ]; then + echo "=================================" + echo "Expected result: PASS" + echo "Actual result: FAIL" + fn_print_fail_nl "TEST FAILED" + exitcode=1 + core_exit.sh + else + echo "=================================" + echo "Expected result: PASS" + echo "Actual result: PASS" + fn_print_ok_nl "TEST PASSED" + echo "" + fi +} + +# if expecting a fail +fn_test_result_fail(){ + if [ $? == 0 ]; then + echo "=================================" + echo "Expected result: FAIL" + echo "Actual result: PASS" + fn_print_fail_nl "TEST FAILED" + exitcode=1 + core_exit.sh + else + echo "=================================" + echo "Expected result: FAIL" + echo "Actual result: FAIL" + fn_print_ok_nl "TEST PASSED" + echo "" + fi +} + +echo "=================================" +echo "Travis CI Tests" +echo "Linux Game Server Manager" +echo "by Daniel Gibbs" +echo "Contributors: http://goo.gl/qLmitD" +echo "https://linuxgsm.com" +echo "=================================" +echo "" +echo "=================================" +echo "Server Tests" +echo "Using: ${gamename}" +echo "Testing Branch: $TRAVIS_BRANCH" +echo "=================================" + +echo "" +echo "0.1 - Create log dir's" +echo "=================================" +echo "Description:" +echo "Create log dir's" +echo "" +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + install_logs.sh +) +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "0.2 - Enable dev-debug" +echo "=================================" +echo "Description:" +echo "Enable dev-debug" +echo "" +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_dev_debug.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "1.0 - start - no files" +echo "=================================" +echo "Description:" +echo "test script reaction to missing server files." +echo "Command: ./fctrserver start" +echo "" +# Allows for testing not on Travis CI +if [ ! -v TRAVIS ]; then +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_start.sh +) +fn_test_result_fail +else + echo "Test bypassed" +fi + +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "1.1 - getopt" +echo "=================================" +echo "Description:" +echo "displaying options messages." +echo "Command: ./fctrserver" +echo "" +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + core_getopt.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "1.2 - getopt with incorrect args" +echo "=================================" +echo "Description:" +echo "displaying options messages." +echo "Command: ./fctrserver abc123" +echo "" +getopt="abc123" +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + core_getopt.sh +) +fn_test_result_fail +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "2.0 - install" +echo "=================================" +echo "Description:" +echo "install ${gamename} server." +echo "Command: ./fctrserver auto-install" +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + fn_autoinstall +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "3.1 - start" +echo "=================================" +echo "Description:" +echo "start ${gamename} server." +echo "Command: ./fctrserver start" +requiredstatus="OFFLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_start.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "3.2 - start - online" +echo "=================================" +echo "Description:" +echo "start ${gamename} server while already running." +echo "Command: ./fctrserver start" +requiredstatus="ONLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_start.sh +) +fn_test_result_fail +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "3.3 - start - updateonstart" +echo "=================================" +echo "Description:" +echo "will update server on start." +echo "Command: ./fctrserver start" +requiredstatus="OFFLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + updateonstart="on";command_start.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "3.4 - stop" +echo "=================================" +echo "Description:" +echo "stop ${gamename} server." +echo "Command: ./fctrserver stop" +requiredstatus="ONLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_stop.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "3.5 - stop - offline" +echo "=================================" +echo "Description:" +echo "stop ${gamename} server while already stopped." +echo "Command: ./fctrserver stop" +requiredstatus="OFFLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_stop.sh +) +fn_test_result_fail +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "3.6 - restart" +echo "=================================" +echo "Description:" +echo "restart ${gamename}." +echo "Command: ./fctrserver restart" +requiredstatus="ONLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_restart.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "3.7 - restart - offline" +echo "=================================" +echo "Description:" +echo "restart ${gamename} while already stopped." +echo "Command: ./fctrserver restart" +requiredstatus="OFFLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_restart.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "4.1 - update" +echo "=================================" +echo "Description:" +echo "check for updates." +echo "Command: ./fctrserver update" +requiredstatus="OFFLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_update.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "5.1 - monitor - online" +echo "=================================" +echo "Description:" +echo "run monitor server while already running." +echo "Command: ./fctrserver monitor" +requiredstatus="ONLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_monitor.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "5.2 - monitor - offline - with lockfile" +echo "=================================" +echo "Description:" +echo "run monitor while server is offline with lockfile." +echo "Command: ./fctrserver monitor" +requiredstatus="OFFLINE" +fn_setstatus +fn_print_info_nl "creating lockfile." +date > "${rootdir}/${lockselfname}" +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_monitor.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "5.3 - monitor - offline - no lockfile" +echo "=================================" +echo "Description:" +echo "run monitor while server is offline with no lockfile." +echo "Command: ./fctrserver monitor" +requiredstatus="OFFLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_monitor.sh +) +fn_test_result_fail +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "6.0 - details" +echo "=================================" +echo "Description:" +echo "display details." +echo "Command: ./fctrserver details" +requiredstatus="ONLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_details.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "6.1 - post details" +echo "=================================" +echo "Description:" +echo "post details." +echo "Command: ./fctrserver postdetails" +requiredstatus="ONLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_postdetails.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "7.0 - backup" +echo "=================================" +echo "Description:" +echo "run a backup." +echo "Command: ./fctrserver backup" +requiredstatus="ONLINE" +fn_setstatus +echo "test de-activated until issue #1839 fixed" +#(command_backup.sh) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "8.0 - dev - detect glibc" +echo "=================================" +echo "Description:" +echo "detect glibc." +echo "Command: ./fctrserver detect-glibc" +requiredstatus="ONLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_dev_detect_glibc.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "8.1 - dev - detect ldd" +echo "=================================" +echo "Description:" +echo "detect ldd." +echo "Command: ./fctrserver detect-ldd" +requiredstatus="ONLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_dev_detect_ldd.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "8.2 - dev - detect deps" +echo "=================================" +echo "Description:" +echo "detect dependencies." +echo "Command: ./fctrserver detect-deps" +requiredstatus="ONLINE" +fn_setstatus +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_dev_detect_deps.sh +) +fn_test_result_pass +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' + +echo "" +echo "=================================" +echo "Server Tests - Complete!" +echo "Using: ${gamename}" +echo "=================================" +requiredstatus="OFFLINE" +fn_setstatus +fn_print_info "Tidying up directories." +rm -rfv "${serverfiles}" +core_exit.sh \ No newline at end of file diff --git a/tests/tests_jc2server.sh b/tests/tests_jc2server.sh index 738da502c..ead84d404 100644 --- a/tests/tests_jc2server.sh +++ b/tests/tests_jc2server.sh @@ -8,16 +8,16 @@ # Website: https://linuxgsm.com travistest="1" - -version="171014" +version="180409" shortname="jc2" gameservername="jc2server" rootdir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" -selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))" +selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" servicename="${selfname}" lockselfname=".${servicename}.lock" lgsmdir="${rootdir}/lgsm" logdir="${rootdir}/log" +lgsmlogdir="${logdir}/lgsm" steamcmddir="${rootdir}/steamcmd" serverfiles="${rootdir}/serverfiles" functionsdir="${lgsmdir}/functions" @@ -27,12 +27,18 @@ configdir="${lgsmdir}/config-lgsm" configdirserver="${configdir}/${gameservername}" configdirdefault="${lgsmdir}/config-default" +# Allows for testing not on Travis CI +if [ ! -v TRAVIS ]; then + TRAVIS_BRANCH="develop" + TRAVIS_BUILD_DIR="${rootdir}" +fi + ## GitHub Branch Select # Allows for the use of different function files # from a different repo and/or branch. githubuser="GameServerManagers" githubrepo="LinuxGSM" -githubbranch="$TRAVIS_BRANCH" +githubbranch="${TRAVIS_BRANCH}" # Core Function that is required first core_functions.sh(){ @@ -52,8 +58,8 @@ fn_bootstrap_fetch_file(){ run="${5:-0}" forcedl="${6:-0}" md5="${7:-0}" - # If the file is missing, then download - if [ ! -f "${local_filedir}/${local_filename}" ]; then + # download file if missing or download forced + if [ ! -f "${local_filedir}/${local_filename}" ]||[ "${forcedl}" == "forcedl" ]; then if [ ! -d "${local_filedir}" ]; then mkdir -p "${local_filedir}" fi @@ -61,7 +67,7 @@ fn_bootstrap_fetch_file(){ curlpath=$(command -v curl 2>/dev/null) # If curl exists download file - if [ "$(basename ${curlpath})" == "curl" ]; then + if [ "$(basename "${curlpath}")" == "curl" ]; then # trap to remove part downloaded files echo -ne " fetching ${local_filename}...\c" curlcmd=$(${curlpath} -s --fail -L -o "${local_filedir}/${local_filename}" "${remote_fileurl}" 2>&1) @@ -99,15 +105,15 @@ fn_bootstrap_fetch_file_github(){ github_file_url_name="${2}" githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" - remote_remote_fileurl="${githuburl}" - local_local_filedir="${3}" - local_local_filename="${github_file_url_name}" + remote_fileurl="${githuburl}" + local_filedir="${3}" + local_filename="${github_file_url_name}" chmodx="${4:-0}" run="${5:-0}" - forcedldl="${6:-0}" + forcedl="${6:-0}" md5="${7:-0}" # Passes vars to the file download function - fn_bootstrap_fetch_file "${remote_remote_fileurl}" "${local_local_filedir}" "${local_local_filename}" "${chmodx}" "${run}" "${forcedldl}" "${md5}" + fn_bootstrap_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}" } # Installer menu @@ -130,14 +136,14 @@ fn_install_menu_bash() { caption=$3 options=$4 fn_print_horizontal - fn_print_center $title - fn_print_center $caption + fn_print_center "${title}" + fn_print_center "${caption}" fn_print_horizontal menu_options=() while read -r line || [[ -n "${line}" ]]; do var=$(echo "${line}" | awk -F "," '{print $2 " - " $3}') menu_options+=( "${var}" ) - done < $options + done < ${options} menu_options+=( "Cancel" ) select option in "${menu_options[@]}"; do if [ -n "${option}" ] && [ "${option}" != "Cancel" ]; then @@ -163,8 +169,8 @@ fn_install_menu_whiptail() { key=$(echo "${line}" | awk -F "," '{print $3}') val=$(echo "${line}" | awk -F "," '{print $2}') menu_options+=( ${val//\"} "${key//\"}" ) - done < $options - OPTION=$(${menucmd} --title "${title}" --menu "${caption}" ${height} ${width} ${menuheight} "${menu_options[@]}" 3>&1 1>&2 2>&3) + done < "${options}" + OPTION=$(${menucmd} --title "${title}" --menu "${caption}" "${height}" "${width}" "${menuheight}" "${menu_options[@]}" 3>&1 1>&2 2>&3) if [ $? == 0 ]; then eval "$resultvar=\"${OPTION}\"" else @@ -181,12 +187,12 @@ fn_install_menu() { options=$4 # Get menu command for menucmd in whiptail dialog bash; do - if [ -x $(command -v ${menucmd}) ]; then - menucmd=$(command -v ${menucmd}) + if [ -x "$(command -v "${menucmd}")" ]; then + menucmd=$(command -v "${menucmd}") break fi done - case "$(basename ${menucmd})" in + case "$(basename "${menucmd}")" in whiptail|dialog) fn_install_menu_whiptail "${menucmd}" selection "${title}" "${caption}" "${options}" 40 80 30;; *) @@ -212,9 +218,9 @@ fn_install_getopt(){ echo "https://linuxgsm.com" echo -e "" echo -e "Commands" - echo -e "install |Select server to install." - echo -e "servername |e.g $0 csgoserver. Enter the required servername will install it." - echo -e "list |List all servers available for install." + echo -e "install\t\t| Select server to install." + echo -e "servername\t| e.g $0 csgoserver. Enter name of server/game to install." + echo -e "list\t\t| List all servers available for install." exit } @@ -259,12 +265,8 @@ if [ "${shortname}" == "core" ]; then datadir="${tmpdir}/data" serverlist="${datadir}/serverlist.csv" - # Download the serverlist. This is the complete list of all supported servers. - - if [ -f "${serverlist}" ]; then - rm "${serverlist}" - fi - fn_bootstrap_fetch_file_github "lgsm/data" "serverlist.csv" "${datadir}" "serverlist.csv" "nochmodx" "norun" "noforcedl" "nomd5" + # Download the latest serverlist. This is the complete list of all supported servers. + fn_bootstrap_fetch_file_github "lgsm/data" "serverlist.csv" "${datadir}" "nochmodx" "norun" "forcedl" "nomd5" if [ ! -f "${serverlist}" ]; then echo "[ FAIL ] serverlist.csv could not be loaded." exit 1 @@ -290,8 +292,10 @@ if [ "${shortname}" == "core" ]; then fi elif [ -n "${userinput}" ]; then fn_server_info - if [ "${userinput}" == "${gameservername}" ]; then + if [ "${userinput}" == "${gameservername}" ]||[ "${userinput}" == "${gamename}" ]||[ "${userinput}" == "${shortname}" ]; then fn_install_file + else + echo "[ FAIL ] unknown game server" fi else fn_install_getopt @@ -320,7 +324,7 @@ else echo -e "\e[0;32mOK\e[0m" fi else - function_file_diff=$(diff -q ${configdirdefault}/config-lgsm/${gameservername}/_default.cfg ${configdirserver}/_default.cfg) + function_file_diff=$(diff -q "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" "${configdirserver}/_default.cfg") if [ "${function_file_diff}" != "" ]; then fn_print_warn_nl "_default.cfg has been altered. reloading config." echo -ne " copying _default.cfg...\c" @@ -353,6 +357,7 @@ else if [ ! -f "${tmpdir}/linuxgsm.sh" ]; then fn_fetch_file_github "" "linuxgsm.sh" "${tmpdir}" "chmodx" "norun" "noforcedl" "nomd5" fi + # Prevents running of core_exit.sh for Travis. if [ "${travistest}" != "1" ]; then getopt=$1 @@ -460,8 +465,8 @@ echo "Server Tests" echo "Using: ${gamename}" echo "Testing Branch: $TRAVIS_BRANCH" echo "=================================" -echo "" +echo "" echo "0.1 - Create log dir's" echo "=================================" echo "Description:" @@ -475,8 +480,9 @@ echo "" ) echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' +echo "" echo "0.2 - Enable dev-debug" echo "=================================" echo "Description:" @@ -491,7 +497,7 @@ echo "" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "1.0 - start - no files" @@ -500,6 +506,8 @@ echo "Description:" echo "test script reaction to missing server files." echo "Command: ./jc2server start" echo "" +# Allows for testing not on Travis CI +if [ ! -v TRAVIS ]; then ( exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" BASH_XTRACEFD="5" @@ -507,9 +515,13 @@ echo "" command_start.sh ) fn_test_result_fail +else + echo "Test bypassed" +fi + echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "1.1 - getopt" @@ -527,7 +539,7 @@ echo "" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "1.2 - getopt with incorrect args" @@ -546,7 +558,7 @@ getopt="abc123" fn_test_result_fail echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "2.0 - install" @@ -563,7 +575,7 @@ echo "Command: ./jc2server auto-install" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.1 - start" @@ -582,7 +594,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.2 - start - online" @@ -601,7 +613,7 @@ fn_setstatus fn_test_result_fail echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.3 - start - updateonstart" @@ -620,7 +632,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.4 - stop" @@ -639,7 +651,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.5 - stop - offline" @@ -658,7 +670,7 @@ fn_setstatus fn_test_result_fail echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.6 - restart" @@ -677,7 +689,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.7 - restart - offline" @@ -696,8 +708,9 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' +echo "" echo "4.1 - update" echo "=================================" echo "Description:" @@ -714,7 +727,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "4.2 - update - change buildid" @@ -735,7 +748,7 @@ sed -i 's/[0-9]\+/0/' "${serverfiles}/steamapps/appmanifest_${appid}.acf" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "4.3 - update - change buildid - online" @@ -756,7 +769,7 @@ sed -i 's/[0-9]\+/0/' "${serverfiles}/steamapps/appmanifest_${appid}.acf" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "4.4 - update - remove appmanifest file" @@ -777,7 +790,7 @@ rm --verbose "${serverfiles}/steamapps/appmanifest_${appid}.acf" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "4.5 - force-update" @@ -796,7 +809,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "4.6 - force-update - online" @@ -815,7 +828,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "4.7 - validate" @@ -834,7 +847,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "4.8 - validate - online" @@ -854,7 +867,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "Inserting IP address" @@ -883,7 +896,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "5.2 - monitor - offline - with lockfile" @@ -904,7 +917,7 @@ date > "${rootdir}/${lockselfname}" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "5.3 - monitor - offline - no lockfile" @@ -923,13 +936,13 @@ fn_setstatus fn_test_result_fail echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" -echo "5.4 - monitor - gsquery.py failure" +echo "5.4 - monitor - query_gsquery.py failure" echo "=================================" echo "Description:" -echo "gsquery.py will fail to query port." +echo "query_gsquery.py will fail to query port." echo "Command: ./jc2server monitor" requiredstatus="ONLINE" fn_setstatus @@ -944,7 +957,7 @@ sed -i 's/[0-9]\+/0/' "${servercfgfullpath}" fn_test_result_fail echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" fn_print_info_nl "Re-generating ${servercfg}." @@ -968,7 +981,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "6.1 - post details" @@ -987,7 +1000,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "7.0 - backup" @@ -1002,7 +1015,7 @@ echo "test de-activated until issue #1839 fixed" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "8.0 - dev - detect glibc" @@ -1021,7 +1034,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "8.1 - dev - detect ldd" @@ -1040,7 +1053,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "8.2 - dev - detect deps" @@ -1059,7 +1072,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "=================================" diff --git a/tests/tests_shellcheck.sh b/tests/tests_shellcheck.sh index 0a9230226..d3d26c0c4 100644 --- a/tests/tests_shellcheck.sh +++ b/tests/tests_shellcheck.sh @@ -21,8 +21,10 @@ echo "Using: Shellcheck" echo "Testing Branch: $TRAVIS_BRANCH" echo "=================================" echo "" -find . -type f -name "*.sh" -not -path "./shunit2-2.1.6/*" -exec shellcheck --shell=bash --exclude=SC2154,SC2034 {} \; -find . -type f -name "*.cfg" -not -path "./shunit2-2.1.6/*" -exec shellcheck --shell=bash --exclude=SC2154,SC2034 {} \; +scissues=$(find . -type f \( -name "*.sh" -o -name "*.cfg" \) -not -path "./shunit2-2.1.6/*" -exec shellcheck --shell=bash --exclude=SC2154,SC2034 {} \; | grep -F "^--" | wc -l) +echo "Found issues: ${scissues}" +echo "=================================" +find . -type f \( -name "*.sh" -o -name "*.cfg" \) -not -path "./shunit2-2.1.6/*" -exec shellcheck --shell=bash --exclude=SC2154,SC2034 {} \; echo "" echo "=================================" echo "Bash Analysis Tests - Complete!" diff --git a/tests/tests_ts3server.sh b/tests/tests_ts3server.sh index b6ee25f95..f8594c134 100644 --- a/tests/tests_ts3server.sh +++ b/tests/tests_ts3server.sh @@ -8,16 +8,16 @@ # Website: https://linuxgsm.com travistest="1" - -version="171014" +version="180409" shortname="ts3" gameservername="ts3server" rootdir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" -selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))" +selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" servicename="${selfname}" lockselfname=".${servicename}.lock" lgsmdir="${rootdir}/lgsm" logdir="${rootdir}/log" +lgsmlogdir="${logdir}/lgsm" steamcmddir="${rootdir}/steamcmd" serverfiles="${rootdir}/serverfiles" functionsdir="${lgsmdir}/functions" @@ -27,12 +27,18 @@ configdir="${lgsmdir}/config-lgsm" configdirserver="${configdir}/${gameservername}" configdirdefault="${lgsmdir}/config-default" +# Allows for testing not on Travis CI +if [ ! -v TRAVIS ]; then + TRAVIS_BRANCH="develop" + TRAVIS_BUILD_DIR="${rootdir}" +fi + ## GitHub Branch Select # Allows for the use of different function files # from a different repo and/or branch. githubuser="GameServerManagers" githubrepo="LinuxGSM" -githubbranch="$TRAVIS_BRANCH" +githubbranch="${TRAVIS_BRANCH}" # Core Function that is required first core_functions.sh(){ @@ -52,8 +58,8 @@ fn_bootstrap_fetch_file(){ run="${5:-0}" forcedl="${6:-0}" md5="${7:-0}" - # If the file is missing, then download - if [ ! -f "${local_filedir}/${local_filename}" ]; then + # download file if missing or download forced + if [ ! -f "${local_filedir}/${local_filename}" ]||[ "${forcedl}" == "forcedl" ]; then if [ ! -d "${local_filedir}" ]; then mkdir -p "${local_filedir}" fi @@ -61,7 +67,7 @@ fn_bootstrap_fetch_file(){ curlpath=$(command -v curl 2>/dev/null) # If curl exists download file - if [ "$(basename ${curlpath})" == "curl" ]; then + if [ "$(basename "${curlpath}")" == "curl" ]; then # trap to remove part downloaded files echo -ne " fetching ${local_filename}...\c" curlcmd=$(${curlpath} -s --fail -L -o "${local_filedir}/${local_filename}" "${remote_fileurl}" 2>&1) @@ -99,15 +105,15 @@ fn_bootstrap_fetch_file_github(){ github_file_url_name="${2}" githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}" - remote_remote_fileurl="${githuburl}" - local_local_filedir="${3}" - local_local_filename="${github_file_url_name}" + remote_fileurl="${githuburl}" + local_filedir="${3}" + local_filename="${github_file_url_name}" chmodx="${4:-0}" run="${5:-0}" - forcedldl="${6:-0}" + forcedl="${6:-0}" md5="${7:-0}" # Passes vars to the file download function - fn_bootstrap_fetch_file "${remote_remote_fileurl}" "${local_local_filedir}" "${local_local_filename}" "${chmodx}" "${run}" "${forcedldl}" "${md5}" + fn_bootstrap_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}" } # Installer menu @@ -130,14 +136,14 @@ fn_install_menu_bash() { caption=$3 options=$4 fn_print_horizontal - fn_print_center $title - fn_print_center $caption + fn_print_center "${title}" + fn_print_center "${caption}" fn_print_horizontal menu_options=() while read -r line || [[ -n "${line}" ]]; do var=$(echo "${line}" | awk -F "," '{print $2 " - " $3}') menu_options+=( "${var}" ) - done < $options + done < ${options} menu_options+=( "Cancel" ) select option in "${menu_options[@]}"; do if [ -n "${option}" ] && [ "${option}" != "Cancel" ]; then @@ -163,8 +169,8 @@ fn_install_menu_whiptail() { key=$(echo "${line}" | awk -F "," '{print $3}') val=$(echo "${line}" | awk -F "," '{print $2}') menu_options+=( ${val//\"} "${key//\"}" ) - done < $options - OPTION=$(${menucmd} --title "${title}" --menu "${caption}" ${height} ${width} ${menuheight} "${menu_options[@]}" 3>&1 1>&2 2>&3) + done < "${options}" + OPTION=$(${menucmd} --title "${title}" --menu "${caption}" "${height}" "${width}" "${menuheight}" "${menu_options[@]}" 3>&1 1>&2 2>&3) if [ $? == 0 ]; then eval "$resultvar=\"${OPTION}\"" else @@ -181,12 +187,12 @@ fn_install_menu() { options=$4 # Get menu command for menucmd in whiptail dialog bash; do - if [ -x $(command -v ${menucmd}) ]; then - menucmd=$(command -v ${menucmd}) + if [ -x "$(command -v "${menucmd}")" ]; then + menucmd=$(command -v "${menucmd}") break fi done - case "$(basename ${menucmd})" in + case "$(basename "${menucmd}")" in whiptail|dialog) fn_install_menu_whiptail "${menucmd}" selection "${title}" "${caption}" "${options}" 40 80 30;; *) @@ -212,9 +218,9 @@ fn_install_getopt(){ echo "https://linuxgsm.com" echo -e "" echo -e "Commands" - echo -e "install |Select server to install." - echo -e "servername |e.g $0 csgoserver. Enter the required servername will install it." - echo -e "list |List all servers available for install." + echo -e "install\t\t| Select server to install." + echo -e "servername\t| e.g $0 csgoserver. Enter name of server/game to install." + echo -e "list\t\t| List all servers available for install." exit } @@ -259,12 +265,8 @@ if [ "${shortname}" == "core" ]; then datadir="${tmpdir}/data" serverlist="${datadir}/serverlist.csv" - # Download the serverlist. This is the complete list of all supported servers. - - if [ -f "${serverlist}" ]; then - rm "${serverlist}" - fi - fn_bootstrap_fetch_file_github "lgsm/data" "serverlist.csv" "${datadir}" "serverlist.csv" "nochmodx" "norun" "noforcedl" "nomd5" + # Download the latest serverlist. This is the complete list of all supported servers. + fn_bootstrap_fetch_file_github "lgsm/data" "serverlist.csv" "${datadir}" "nochmodx" "norun" "forcedl" "nomd5" if [ ! -f "${serverlist}" ]; then echo "[ FAIL ] serverlist.csv could not be loaded." exit 1 @@ -290,8 +292,10 @@ if [ "${shortname}" == "core" ]; then fi elif [ -n "${userinput}" ]; then fn_server_info - if [ "${userinput}" == "${gameservername}" ]; then + if [ "${userinput}" == "${gameservername}" ]||[ "${userinput}" == "${gamename}" ]||[ "${userinput}" == "${shortname}" ]; then fn_install_file + else + echo "[ FAIL ] unknown game server" fi else fn_install_getopt @@ -320,7 +324,7 @@ else echo -e "\e[0;32mOK\e[0m" fi else - function_file_diff=$(diff -q ${configdirdefault}/config-lgsm/${gameservername}/_default.cfg ${configdirserver}/_default.cfg) + function_file_diff=$(diff -q "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" "${configdirserver}/_default.cfg") if [ "${function_file_diff}" != "" ]; then fn_print_warn_nl "_default.cfg has been altered. reloading config." echo -ne " copying _default.cfg...\c" @@ -353,6 +357,7 @@ else if [ ! -f "${tmpdir}/linuxgsm.sh" ]; then fn_fetch_file_github "" "linuxgsm.sh" "${tmpdir}" "chmodx" "norun" "noforcedl" "nomd5" fi + # Prevents running of core_exit.sh for Travis. if [ "${travistest}" != "1" ]; then getopt=$1 @@ -475,27 +480,34 @@ echo "" ) echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' -echo"" +echo "" echo "0.2 - Enable dev-debug" echo "=================================" echo "Description:" echo "Enable dev-debug" echo "" -(command_dev_debug.sh) +( + exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" + BASH_XTRACEFD="5" + set -x + command_dev_debug.sh +) fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' -echo"" +echo "" echo "1.0 - start - no files" echo "=================================" echo "Description:" echo "test script reaction to missing server files." echo "Command: ./ts3server start" echo "" +# Allows for testing not on Travis CI +if [ ! -v TRAVIS ]; then ( exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log" BASH_XTRACEFD="5" @@ -503,9 +515,13 @@ echo "" command_start.sh ) fn_test_result_fail +else + echo "Test bypassed" +fi + echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "1.1 - getopt" @@ -523,7 +539,7 @@ echo "" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "1.2 - getopt with incorrect args" @@ -542,7 +558,7 @@ getopt="abc123" fn_test_result_fail echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "2.0 - install" @@ -559,7 +575,7 @@ echo "Command: ./ts3server auto-install" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.1 - start" @@ -578,7 +594,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.2 - start - online" @@ -595,6 +611,9 @@ fn_setstatus command_start.sh ) fn_test_result_fail +echo "run order" +echo "=================" +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.3 - start - updateonstart" @@ -613,7 +632,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.4 - stop" @@ -632,7 +651,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.5 - stop - offline" @@ -651,7 +670,7 @@ fn_setstatus fn_test_result_fail echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.6 - restart" @@ -670,7 +689,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "3.7 - restart - offline" @@ -689,8 +708,9 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' +echo "" echo "4.1 - update" echo "=================================" echo "Description:" @@ -707,7 +727,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "5.1 - monitor - online" @@ -726,7 +746,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "5.2 - monitor - offline - with lockfile" @@ -747,7 +767,7 @@ date > "${rootdir}/${lockselfname}" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "5.3 - monitor - offline - no lockfile" @@ -766,7 +786,7 @@ fn_setstatus fn_test_result_fail echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "6.0 - details" @@ -785,14 +805,14 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "6.1 - post details" echo "=================================" echo "Description:" echo "post details." -echo "Command: ./jc2server postdetails" +echo "Command: ./ts3server postdetails" requiredstatus="ONLINE" fn_setstatus ( @@ -804,7 +824,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "7.0 - backup" @@ -819,7 +839,7 @@ echo "test de-activated until issue #1839 fixed" fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "8.0 - dev - detect glibc" @@ -838,7 +858,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "8.1 - dev - detect ldd" @@ -857,7 +877,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "8.2 - dev - detect deps" @@ -876,7 +896,7 @@ fn_setstatus fn_test_result_pass echo "run order" echo "=================" -grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log"| sed 's/functionfile=//g' +grep functionfile= "${TRAVIS_BUILD_DIR}/dev-debug.log" | sed 's/functionfile=//g' echo "" echo "================================="