Browse Source

Merge branch 'feature/ecoserver' into feature/ecoserver

pull/1863/head
Daniel Gibbs 7 years ago
committed by GitHub
parent
commit
bd66f2f07d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      .github/request-info.yml
  2. 15
      .github/support.yml
  3. 21
      .github/welcome.yml
  4. 2
      .travis.yml
  5. 17
      ISSUE_TEMPLATE.md
  6. 2
      README.md
  7. BIN
      images/icons/centos-icon-32.png
  8. BIN
      images/icons/debian-icon-32.png
  9. BIN
      images/icons/ubuntu-icon-32.png
  10. 3
      images/logo/README.md
  11. BIN
      images/logo/apple-touch-icon-precomposed.png
  12. BIN
      images/logo/assets/lgsm-font-pt_sans.zip
  13. BIN
      images/logo/assets/lgsm-font-source_code_pro.zip
  14. 238
      images/logo/assets/svg/linuxgsm_black_gradiant_vector.svg
  15. 304
      images/logo/assets/svg/linuxgsm_black_gradiant_vector_full.svg
  16. 286
      images/logo/assets/svg/linuxgsm_black_vector.svg
  17. 248
      images/logo/assets/svg/linuxgsm_white_vector.svg
  18. 324
      images/logo/assets/svg/linuxgsm_white_vector_full.svg
  19. BIN
      images/logo/facebook.png
  20. BIN
      images/logo/lgsm-dark-full.png
  21. BIN
      images/logo/lgsm-dark-square-114.png
  22. BIN
      images/logo/lgsm-dark-square-16.png
  23. BIN
      images/logo/lgsm-dark-square-184.png
  24. BIN
      images/logo/lgsm-dark-square-24.png
  25. BIN
      images/logo/lgsm-dark-square-512.png
  26. BIN
      images/logo/lgsm-dark-square-64.png
  27. BIN
      images/logo/lgsm-light-full.png
  28. BIN
      images/logo/lgsm_full.png
  29. BIN
      images/logo/lgsmbutton.png
  30. BIN
      images/wallpaper/LinuxGSM_wallpaper.png
  31. BIN
      images/wallpaper/LinuxGSM_wallpaper_2.png
  32. 104
      lgsm/config-default/config-lgsm/etlserver/_default.cfg
  33. 118
      lgsm/config-default/config-lgsm/rwserver/_default.cfg
  34. 2
      lgsm/config-default/config-lgsm/ut3server/_default.cfg
  35. 2
      lgsm/data/serverlist.csv
  36. 4
      lgsm/functions/alert.sh
  37. 4
      lgsm/functions/alert_discord.sh
  38. 2
      lgsm/functions/alert_ifttt.sh
  39. 2
      lgsm/functions/alert_mailgun.sh
  40. 6
      lgsm/functions/alert_pushover.sh
  41. 2
      lgsm/functions/check.sh
  42. 24
      lgsm/functions/check_deps.sh
  43. 13
      lgsm/functions/check_ip.sh
  44. 34
      lgsm/functions/check_permissions.sh
  45. 6
      lgsm/functions/check_status.sh
  46. 3
      lgsm/functions/check_steamcmd.sh
  47. 4
      lgsm/functions/check_system_requirements.sh
  48. 28
      lgsm/functions/command_backup.sh
  49. 8
      lgsm/functions/command_console.sh
  50. 9
      lgsm/functions/command_debug.sh
  51. 3
      lgsm/functions/command_details.sh
  52. 14
      lgsm/functions/command_dev_clear_functions.sh
  53. 10
      lgsm/functions/command_dev_detect_deps.sh
  54. 10
      lgsm/functions/command_dev_detect_glibc.sh
  55. 16
      lgsm/functions/command_dev_detect_ldd.sh
  56. 44
      lgsm/functions/command_dev_query_raw.sh
  57. 6
      lgsm/functions/command_fastdl.sh
  58. 4
      lgsm/functions/command_mods_install.sh
  59. 2
      lgsm/functions/command_mods_remove.sh
  60. 2
      lgsm/functions/command_mods_update.sh
  61. 202
      lgsm/functions/command_monitor.sh
  62. 4
      lgsm/functions/command_postdetails.sh
  63. 74
      lgsm/functions/command_start.sh
  64. 68
      lgsm/functions/command_stop.sh
  65. 2
      lgsm/functions/command_test_alert.sh
  66. 4
      lgsm/functions/command_ts3_server_pass.sh
  67. 8
      lgsm/functions/command_update_linuxgsm.sh
  68. 10
      lgsm/functions/command_validate.sh
  69. 20
      lgsm/functions/command_wipe.sh
  70. 2
      lgsm/functions/compress_ut99_maps.sh
  71. 4
      lgsm/functions/core_dl.sh
  72. 3
      lgsm/functions/core_exit.sh
  73. 49
      lgsm/functions/core_functions.sh
  74. 16
      lgsm/functions/core_getopt.sh
  75. 14
      lgsm/functions/fix.sh
  76. 8
      lgsm/functions/fix_kf.sh
  77. 2
      lgsm/functions/fix_kf2.sh
  78. 2
      lgsm/functions/fix_mta.sh
  79. 10
      lgsm/functions/fix_ro.sh
  80. 10
      lgsm/functions/fix_rw.sh
  81. 2
      lgsm/functions/fix_ut.sh
  82. 8
      lgsm/functions/fix_ut2k4.sh
  83. 20
      lgsm/functions/fix_ut3.sh
  84. 94
      lgsm/functions/info_config.sh
  85. 11
      lgsm/functions/info_distro.sh
  86. 9
      lgsm/functions/info_glibc.sh
  87. 91
      lgsm/functions/info_messages.sh
  88. 22
      lgsm/functions/info_parms.sh
  89. 31
      lgsm/functions/install_config.sh
  90. 2
      lgsm/functions/install_dst_token.sh
  91. 4
      lgsm/functions/install_factorio_save.sh
  92. 4
      lgsm/functions/install_gslt.sh
  93. 6
      lgsm/functions/install_logs.sh
  94. 2
      lgsm/functions/install_minecraft_eula.sh
  95. 5
      lgsm/functions/install_server_dir.sh
  96. 18
      lgsm/functions/install_server_files.sh
  97. 4
      lgsm/functions/install_squad_license.sh
  98. 2
      lgsm/functions/install_steamcmd.sh
  99. 12
      lgsm/functions/install_ts3db.sh
  100. 2
      lgsm/functions/install_unreal_tournament_eula.sh

15
.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

15
.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

21
.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

2
.travis.yml

@ -36,6 +36,8 @@ jobs:
include: include:
- stage: jobs - stage: jobs
script: bash tests/tests_jc2server.sh script: bash tests/tests_jc2server.sh
- # stage name not required
script: bash tests/tests_fctrserver.sh
- # stage name not required - # stage name not required
script: bash tests/tests_ts3server.sh script: bash tests/tests_ts3server.sh
- # stage name not required - # stage name not required

17
ISSUE_TEMPLATE.md

@ -1,8 +1,17 @@
Please select the "Preview" tab above to view this message correctly. 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 GitHub is **NOT** for:
and do not forget to remove this text before opening the issue. * 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.**

2
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) [![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) [![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) [![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) [![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/) [![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/)

BIN
images/icons/centos-icon-32.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

BIN
images/icons/debian-icon-32.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

BIN
images/icons/ubuntu-icon-32.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

3
images/logo/README.md

@ -1,3 +0,0 @@
# LinuxGSM - Official Logos
For Reference the original design can be found here.
http://twolofbees.com/artwork.php?iid=870

BIN
images/logo/apple-touch-icon-precomposed.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

BIN
images/logo/assets/lgsm-font-pt_sans.zip

Binary file not shown.

BIN
images/logo/assets/lgsm-font-source_code_pro.zip

Binary file not shown.

238
images/logo/assets/svg/linuxgsm_black_gradiant_vector.svg

@ -1,238 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="550.72363"
height="829.10431"
id="svg4312"
version="1.1"
inkscape:version="0.92.1 r15371"
sodipodi:docname="lgsm_vecto_s.svg">
<title
id="title5291">Stycil Tux</title>
<defs
id="defs4314">
<linearGradient
id="linearGradient3910-6-0-8-7-7-8">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-7-4" />
<stop
style="stop-color:#4c4c4c;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-6-9" />
</linearGradient>
<linearGradient
y2="497.71365"
x2="140.00095"
y1="230.00362"
x1="140.00095"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
gradientUnits="userSpaceOnUse"
id="linearGradient4970"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
inkscape:collect="always" />
<linearGradient
id="linearGradient3910-6-0-8-7-81">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-5" />
<stop
style="stop-color:#a6a6a6;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-64" />
</linearGradient>
<linearGradient
id="linearGradient4565-3">
<stop
style="stop-color:#939393;stop-opacity:1;"
offset="0"
id="stop4567-1" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop4569-9" />
</linearGradient>
<linearGradient
id="linearGradient4617-7">
<stop
id="stop4619-9"
offset="0"
style="stop-color:#ffffff;stop-opacity:0;" />
<stop
id="stop4621-5"
offset="1"
style="stop-color:#a6a6a6;stop-opacity:0.5" />
</linearGradient>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4719-2">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15;marker:none;enable-background:accumulate"
id="rect4721-4"
width="1352.3417"
height="1135.7903"
x="-490.55533"
y="-358.505" />
</clipPath>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
id="linearGradient5197"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
x1="140.00095"
y1="230.00362"
x2="140.00095"
y2="497.71365" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
id="linearGradient5427"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
x1="140.00095"
y1="230.00362"
x2="140.00095"
y2="497.71365" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.25"
inkscape:cx="89.228893"
inkscape:cy="462.02473"
inkscape:document-units="px"
inkscape:current-layer="g6064"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata4317">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Stycil Tux</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Cheeseness (Josh Bush)</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>tux linux icon</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:description>A stylised stencil (a &quot;stycil&quot; - 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.
[email protected]</dc:description>
<dc:date>2012-01-02</dc:date>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:source>http://twolofbees.com/uploads/2012/stycil_tux.svg</dc:source>
<dc:relation>http://twolofbees.com/artwork.php?iid=870</dc:relation>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="g6064"
transform="translate(56.568542)"
style="display:inline">
<g
transform="translate(-756.17483,-402.59665)"
id="g5961-3"
style="display:inline">
<g
transform="translate(-452.34937,725.009)"
id="g5391-8-7">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-1-3-9"
d="m 1295.2947,213.49225 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-9-5-2"
d="m 1295.2947,277.56671 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-8-9-8"
d="m 1295.2947,341.64115 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
style="fill:#000000"
transform="translate(-0.90575)"
id="g5258-9-9">
<path
inkscape:connector-curvature="0"
d="m 1424.625,162.97931 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m 18.375,-0.25 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m -146.7996,-13.31157 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.37795275;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5239-0-4-2" />
</g>
</g>
<path
style="fill:#000000;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 912.26148,854.87423 v 7.27539 c 0,2.79634 4.1201,7.15235 7.0974,7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,-4.35601 7.0974,-7.15235 v -7.27539 h -64.19362 z"
id="path5429-1-9"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="fill:#000000;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 969.04908,749.4172 c -1.2404,0 -6.5507,5.41807 -6.5507,6.21875 v 4.91993 h 0.9531 c 0,43.5553 3.7609,25.12079 3.3398,62.125 0,0.82719 4.4526,3.88671 5.4356,3.88671 v 8.39649 h -1.125 v 1.0625 h -3.2266 v 0.5957 h -48.9883 c -2.8742,0 -6.9863,4.8837 -6.9863,7.15234 v 7.2754 h 128.75002 v -7.2754 c 0,-2.79633 -4.1361,-7.15234 -7.125,-7.15234 h -8.3535 v -0.79492 h -2.166 v -3.18164 h -1.1485 v -1.28125 h -8.9726 -8.9707 v 1.28125 h -1.1485 v 3.18164 h -2.166 v 0.79492 h -16.46682 v -0.5957 h -3.2246 v -1.0625 h -1.1269 v -8.39649 c 0.983,0 5.4355,-3.05952 5.4355,-3.88671 -0.4211,-37.00421 3.3399,-18.5697 3.3398,-62.125 h 0.9532 v -4.91993 c 0,-0.80068 -5.3104,-6.21875 -6.5508,-6.21875 h -6.9551 z"
id="path5429-3-7-4" />
<path
style="fill:none;stroke:#ff00ff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 912.26148,851.05049 v -7.27539 c 0,-2.79634 4.1201,-7.15235 7.0974,-7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,4.35601 7.0974,7.15235 v 7.27539 h -64.19362 z"
id="path5429-7-77-6"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-55.729306)"
id="g5425"
style="display:inline">
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f6bd0e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="m 116.05923,577.93526 c -3.48,0.20109 -7.3256,1.1375 -11.63,2.90735 -27.54822,11.32986 -15.44643,35.19849 -27.48069,50.27156 -12.03367,15.07396 -36.19673,7.81324 -43.79988,38.64156 -7.60286,30.82892 109.26727,182.19131 172.10487,156.34843 62.838,-25.84288 39.4726,-215.66466 12.3803,-232.22455 -27.0917,-16.55961 -39.0863,5.6223 -58.2436,3.37644 -16.1637,-1.89502 -24.5385,-20.40725 -43.331,-19.32079 z m 316.5418,0 c -17.3826,0.30013 -25.7964,17.496 -41.3614,19.32079 -19.1572,2.24586 -31.1518,-19.93605 -58.2435,-3.37644 -27.0923,16.55989 -50.4576,206.38137 12.3803,232.22455 62.8376,25.84288 179.7077,-125.51951 172.1049,-156.34843 -7.6032,-30.82832 -31.6726,-23.5676 -43.7063,-38.64156 -12.0342,-15.07307 0.069,-38.9417 -27.4803,-50.27156 -5.1656,-2.12371 -9.6822,-2.97637 -13.6937,-2.90735 z"
id="path4372-7-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccsssccssscccc"
inkscape:label="path4372-7-9" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient5427);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="M 275.31501,-1.7916665e-6 C 194.26645,-1.7916665e-6 146.68586,49.443198 137.72462,116.11228 128.76368,182.78135 143.19147,194.9981 120.74874,263.26927 98.30602,331.53923 -2.31211,448.5711 0.04059,556.5511 c 0.73262,33.61801 4.60398,62.7266 11.34877,88.1628 8.26915,-13.70117 20.521,-23.35722 29.45012,-27.48068 6.9708,-3.21799 10.34005,-4.76544 11.91151,-5.34589 0.2281,-1.72724 1.11168,-5.65953 2.71977,-13.41216 2.20895,-10.64736 10.67498,-27.3186 25.13578,-38.2664 -0.14707,-3.31673 -0.30674,-6.59923 -0.37516,-10.0354 -1.67022,-83.75241 84.89138,-174.48761 100.82462,-227.44141 15.93263,-52.952 9.00175,-58.40504 11.62998,-71.56178 2.62793,-13.15674 12.77468,-28.48221 27.38675,-40.70495 1.39198,-1.1651 2.74677,-1.67532 4.12676,-1.68823 13.32151,-0.12605 26.65263,48.37144 52.42857,48.39576 25.77596,0.03 39.1848,-59.11995 54.02317,-46.70753 14.61207,12.22304 24.75882,27.54821 27.38674,40.70495 2.62823,13.15674 -4.30325,18.60978 11.62999,71.56178 15.93322,52.9532 102.40085,143.6887 100.73065,227.44141 -0.069,3.40406 -0.2311,6.65445 -0.3751,9.94176 14.525,10.94599 23.0156,27.68686 25.2294,38.36004 1.6081,7.75263 2.492,11.68492 2.7201,13.41216 1.5666,0.57954 4.95,2.21674 11.9112,5.43983 8.9321,4.13577 21.1104,13.7738 29.3564,27.48068 6.7629,-25.46262 10.7089,-54.59011 11.4425,-88.25674 2.3527,-107.98 -98.3591,-225.01217 -120.80184,-293.28183 C 407.43855,194.9981 421.95998,182.78135 412.99903,116.11228 404.03809,49.443198 356.36355,-1.7916666e-6 275.31501,-1.7916665e-6 Z M 271.93856,763.54594 c -1.37309,8.8712 -3.21648,17.57674 -5.62741,25.98004 -3.92959,13.69607 -9.66505,27.42155 -18.19531,39.11067 8.8406,0.54803 17.90178,0.62006 27.19917,0.18608 9.29738,0.43308 18.35556,0.36075 27.19916,-0.18608 -8.53027,-11.68912 -14.26572,-25.4146 -18.1953,-39.11067 -2.41093,-8.4033 -4.25433,-17.10884 -5.62741,-25.98004 -1.12519,0.03 -2.24077,0.093 -3.37645,0.093 -1.13569,0 -2.25127,-0.072 -3.37645,-0.093 z"
id="path4372-7-91"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssccccccsccccscsccccccsssscscccscsc" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

304
images/logo/assets/svg/linuxgsm_black_gradiant_vector_full.svg

@ -1,304 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1710.7236"
height="830.10431"
id="svg4312"
version="1.1"
inkscape:version="0.92.1 r15371"
sodipodi:docname="linuxgsm_black_gradiant_vector_full.svg"
inkscape:export-filename="C:\Users\me\Google Drive\Projects\Linux Game Server Manager\media\logos\master rasta\linuxgsm_black_gradiant_vector_full.png"
inkscape:export-xdpi="84.68"
inkscape:export-ydpi="84.68">
<title
id="title5291">Stycil Tux</title>
<defs
id="defs4314">
<linearGradient
id="linearGradient3910-6-0-8-7-7-8">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-7-4" />
<stop
style="stop-color:#4c4c4c;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-6-9" />
</linearGradient>
<linearGradient
y2="497.71365"
x2="140.00095"
y1="230.00362"
x1="140.00095"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
gradientUnits="userSpaceOnUse"
id="linearGradient4970"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
inkscape:collect="always" />
<linearGradient
id="linearGradient3910-6-0-8-7-81">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-5" />
<stop
style="stop-color:#a6a6a6;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-64" />
</linearGradient>
<linearGradient
id="linearGradient4565-3">
<stop
style="stop-color:#939393;stop-opacity:1;"
offset="0"
id="stop4567-1" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop4569-9" />
</linearGradient>
<linearGradient
id="linearGradient4617-7">
<stop
id="stop4619-9"
offset="0"
style="stop-color:#ffffff;stop-opacity:0;" />
<stop
id="stop4621-5"
offset="1"
style="stop-color:#a6a6a6;stop-opacity:0.5" />
</linearGradient>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4719-2">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15;marker:none;enable-background:accumulate"
id="rect4721-4"
width="1352.3417"
height="1135.7903"
x="-490.55533"
y="-358.505" />
</clipPath>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
id="linearGradient5197"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
x1="140.00095"
y1="230.00362"
x2="140.00095"
y2="497.71365" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
id="linearGradient5427"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
x1="140.00095"
y1="230.00362"
x2="140.00095"
y2="497.71365" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="1228.4325"
inkscape:cy="395.54805"
inkscape:document-units="px"
inkscape:current-layer="svg4312"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="false" />
<metadata
id="metadata4317">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Stycil Tux</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Cheeseness (Josh Bush)</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>tux linux icon</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:description>A stylised stencil (a &quot;stycil&quot; - 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.
[email protected]</dc:description>
<dc:date>2012-01-02</dc:date>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:source>http://twolofbees.com/uploads/2012/stycil_tux.svg</dc:source>
<dc:relation>http://twolofbees.com/artwork.php?iid=870</dc:relation>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Layer 1" />
<g
id="g6064"
transform="translate(56.568542,1.0001456)"
style="display:inline">
<g
transform="translate(-756.17483,-402.59665)"
id="g5961-3"
style="display:inline">
<g
transform="translate(-452.34937,725.009)"
id="g5391-8-7">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-1-3-9"
d="m 1295.2947,213.49225 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-9-5-2"
d="m 1295.2947,277.56671 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-8-9-8"
d="m 1295.2947,341.64115 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
style="fill:#000000"
transform="translate(-0.90575)"
id="g5258-9-9">
<path
inkscape:connector-curvature="0"
d="m 1424.625,162.97931 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m 18.375,-0.25 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m -146.7996,-13.31157 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.37795275;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5239-0-4-2" />
</g>
</g>
<path
style="fill:#000000;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 912.26148,854.87423 v 7.27539 c 0,2.79634 4.1201,7.15235 7.0974,7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,-4.35601 7.0974,-7.15235 v -7.27539 h -64.19362 z"
id="path5429-1-9"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="fill:#000000;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 969.04908,749.4172 c -1.2404,0 -6.5507,5.41807 -6.5507,6.21875 v 4.91993 h 0.9531 c 0,43.5553 3.7609,25.12079 3.3398,62.125 0,0.82719 4.4526,3.88671 5.4356,3.88671 v 8.39649 h -1.125 v 1.0625 h -3.2266 v 0.5957 h -48.9883 c -2.8742,0 -6.9863,4.8837 -6.9863,7.15234 v 7.2754 h 128.75002 v -7.2754 c 0,-2.79633 -4.1361,-7.15234 -7.125,-7.15234 h -8.3535 v -0.79492 h -2.166 v -3.18164 h -1.1485 v -1.28125 h -8.9726 -8.9707 v 1.28125 h -1.1485 v 3.18164 h -2.166 v 0.79492 h -16.46682 v -0.5957 h -3.2246 v -1.0625 h -1.1269 v -8.39649 c 0.983,0 5.4355,-3.05952 5.4355,-3.88671 -0.4211,-37.00421 3.3399,-18.5697 3.3398,-62.125 h 0.9532 v -4.91993 c 0,-0.80068 -5.3104,-6.21875 -6.5508,-6.21875 h -6.9551 z"
id="path5429-3-7-4" />
<path
style="fill:none;stroke:#ff00ff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 912.26148,851.05049 v -7.27539 c 0,-2.79634 4.1201,-7.15235 7.0974,-7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,4.35601 7.0974,7.15235 v 7.27539 h -64.19362 z"
id="path5429-7-77-6"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-55.729306)"
id="g5425"
style="display:inline">
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f6bd0e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="m 116.05923,577.93526 c -3.48,0.20109 -7.3256,1.1375 -11.63,2.90735 -27.54822,11.32986 -15.44643,35.19849 -27.48069,50.27156 -12.03367,15.07396 -36.19673,7.81324 -43.79988,38.64156 -7.60286,30.82892 109.26727,182.19131 172.10487,156.34843 62.838,-25.84288 39.4726,-215.66466 12.3803,-232.22455 -27.0917,-16.55961 -39.0863,5.6223 -58.2436,3.37644 -16.1637,-1.89502 -24.5385,-20.40725 -43.331,-19.32079 z m 316.5418,0 c -17.3826,0.30013 -25.7964,17.496 -41.3614,19.32079 -19.1572,2.24586 -31.1518,-19.93605 -58.2435,-3.37644 -27.0923,16.55989 -50.4576,206.38137 12.3803,232.22455 62.8376,25.84288 179.7077,-125.51951 172.1049,-156.34843 -7.6032,-30.82832 -31.6726,-23.5676 -43.7063,-38.64156 -12.0342,-15.07307 0.069,-38.9417 -27.4803,-50.27156 -5.1656,-2.12371 -9.6822,-2.97637 -13.6937,-2.90735 z"
id="path4372-7-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccsssccssscccc"
inkscape:label="path4372-7-9" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient5427);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="M 275.31501,-1.7916665e-6 C 194.26645,-1.7916665e-6 146.68586,49.443198 137.72462,116.11228 128.76368,182.78135 143.19147,194.9981 120.74874,263.26927 98.30602,331.53923 -2.31211,448.5711 0.04059,556.5511 c 0.73262,33.61801 4.60398,62.7266 11.34877,88.1628 8.26915,-13.70117 20.521,-23.35722 29.45012,-27.48068 6.9708,-3.21799 10.34005,-4.76544 11.91151,-5.34589 0.2281,-1.72724 1.11168,-5.65953 2.71977,-13.41216 2.20895,-10.64736 10.67498,-27.3186 25.13578,-38.2664 -0.14707,-3.31673 -0.30674,-6.59923 -0.37516,-10.0354 -1.67022,-83.75241 84.89138,-174.48761 100.82462,-227.44141 15.93263,-52.952 9.00175,-58.40504 11.62998,-71.56178 2.62793,-13.15674 12.77468,-28.48221 27.38675,-40.70495 1.39198,-1.1651 2.74677,-1.67532 4.12676,-1.68823 13.32151,-0.12605 26.65263,48.37144 52.42857,48.39576 25.77596,0.03 39.1848,-59.11995 54.02317,-46.70753 14.61207,12.22304 24.75882,27.54821 27.38674,40.70495 2.62823,13.15674 -4.30325,18.60978 11.62999,71.56178 15.93322,52.9532 102.40085,143.6887 100.73065,227.44141 -0.069,3.40406 -0.2311,6.65445 -0.3751,9.94176 14.525,10.94599 23.0156,27.68686 25.2294,38.36004 1.6081,7.75263 2.492,11.68492 2.7201,13.41216 1.5666,0.57954 4.95,2.21674 11.9112,5.43983 8.9321,4.13577 21.1104,13.7738 29.3564,27.48068 6.7629,-25.46262 10.7089,-54.59011 11.4425,-88.25674 2.3527,-107.98 -98.3591,-225.01217 -120.80184,-293.28183 C 407.43855,194.9981 421.95998,182.78135 412.99903,116.11228 404.03809,49.443198 356.36355,-1.7916666e-6 275.31501,-1.7916665e-6 Z M 271.93856,763.54594 c -1.37309,8.8712 -3.21648,17.57674 -5.62741,25.98004 -3.92959,13.69607 -9.66505,27.42155 -18.19531,39.11067 8.8406,0.54803 17.90178,0.62006 27.19917,0.18608 9.29738,0.43308 18.35556,0.36075 27.19916,-0.18608 -8.53027,-11.68912 -14.26572,-25.4146 -18.1953,-39.11067 -2.41093,-8.4033 -4.25433,-17.10884 -5.62741,-25.98004 -1.12519,0.03 -2.24077,0.093 -3.37645,0.093 -1.13569,0 -2.25127,-0.072 -3.37645,-0.093 z"
id="path4372-7-91"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssccccccsccccscsccccccsssscscccscsc" />
</g>
<flowRoot
xml:space="preserve"
id="flowRoot4513"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="translate(-56.568542,-1.8359376e-6)"><flowRegion
id="flowRegion4515"><rect
id="rect4517"
width="584"
height="560"
x="532"
y="65.104309" /></flowRegion><flowPara
id="flowPara4519" /></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot4521"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="translate(-56.568542,-1.8359376e-6)"><flowRegion
id="flowRegion4523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'PT Sans';-inkscape-font-specification:'PT Sans'"><rect
id="rect4525"
width="476"
height="536"
x="548"
y="81.104309"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'PT Sans';-inkscape-font-specification:'PT Sans'" /></flowRegion><flowPara
id="flowPara4527" /></flowRoot> <text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:169.59358215px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.23983955"
x="429.06406"
y="220.41109"
id="text4531"
transform="scale(1.0093264,0.99075977)"
inkscape:export-filename="C:\Users\me\Google Drive\Projects\Linux Game Server Manager\media\logos\master rasta\text4531.png"
inkscape:export-xdpi="118.84"
inkscape:export-ydpi="118.84"><tspan
sodipodi:role="line"
id="tspan4529"
x="429.06406"
y="220.41109"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:213.33334351px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#f6bd0e;fill-opacity:1;stroke-width:4.23983955">Linux</tspan><tspan
sodipodi:role="line"
x="429.06406"
y="487.07776"
id="tspan4535"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:213.33334351px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';stroke-width:4.23983955"> Game Server</tspan><tspan
sodipodi:role="line"
x="429.06406"
y="753.74445"
id="tspan4537"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:213.33334351px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';stroke-width:4.23983955"> Managers_</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

286
images/logo/assets/svg/linuxgsm_black_vector.svg

@ -1,286 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="550.72363"
height="829.10431"
id="svg4312"
version="1.1"
inkscape:version="0.92.1 r15371"
sodipodi:docname="linuxgsm_black_vector.svg">
<title
id="title5291">Stycil Tux</title>
<defs
id="defs4314">
<linearGradient
id="linearGradient3910-6-0-8-7-7-8">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-7-4" />
<stop
style="stop-color:#4c4c4c;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-6-9" />
</linearGradient>
<linearGradient
y2="497.71365"
x2="140.00095"
y1="230.00362"
x1="140.00095"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
gradientUnits="userSpaceOnUse"
id="linearGradient4970"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
inkscape:collect="always" />
<linearGradient
id="linearGradient3910-6-0-8-7-81">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-5" />
<stop
style="stop-color:#a6a6a6;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-64" />
</linearGradient>
<linearGradient
id="linearGradient4565-3">
<stop
style="stop-color:#939393;stop-opacity:1;"
offset="0"
id="stop4567-1" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop4569-9" />
</linearGradient>
<linearGradient
id="linearGradient4617-7">
<stop
id="stop4619-9"
offset="0"
style="stop-color:#ffffff;stop-opacity:0;" />
<stop
id="stop4621-5"
offset="1"
style="stop-color:#a6a6a6;stop-opacity:0.5" />
</linearGradient>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4719-2">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15;marker:none;enable-background:accumulate"
id="rect4721-4"
width="1352.3417"
height="1135.7903"
x="-490.55533"
y="-358.505" />
</clipPath>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
id="linearGradient5197"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
x1="140.00095"
y1="230.00362"
x2="140.00095"
y2="497.71365" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
id="linearGradient5427"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
x1="140.00095"
y1="230.00362"
x2="140.00095"
y2="497.71365" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="397.59441"
inkscape:cy="382.02473"
inkscape:document-units="px"
inkscape:current-layer="g6064"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata4317">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Stycil Tux</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Cheeseness (Josh Bush)</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>tux linux icon</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:description>A stylised stencil (a &quot;stycil&quot; - 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.
[email protected]</dc:description>
<dc:date>2012-01-02</dc:date>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:source>http://twolofbees.com/uploads/2012/stycil_tux.svg</dc:source>
<dc:relation>http://twolofbees.com/artwork.php?iid=870</dc:relation>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="g6064"
transform="translate(56.568542)"
style="display:inline">
<g
transform="translate(-756.17483,-402.59665)"
id="g5961-3"
style="display:inline">
<g
transform="translate(-452.34937,725.009)"
id="g5391-8-7">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-1-3-9"
d="m 1295.2947,213.49225 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-9-5-2"
d="m 1295.2947,277.56671 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-8-9-8"
d="m 1295.2947,341.64115 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
style="fill:#000000"
transform="translate(-0.90575)"
id="g5258-9-9">
<path
inkscape:connector-curvature="0"
d="m 1424.625,162.97931 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m 18.375,-0.25 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m -146.7996,-13.31157 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.37795275;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5239-0-4-2" />
</g>
</g>
<path
style="fill:#000000;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 912.26148,854.87423 v 7.27539 c 0,2.79634 4.1201,7.15235 7.0974,7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,-4.35601 7.0974,-7.15235 v -7.27539 h -64.19362 z"
id="path5429-1-9"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="fill:#000000;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 969.04908,749.4172 c -1.2404,0 -6.5507,5.41807 -6.5507,6.21875 v 4.91993 h 0.9531 c 0,43.5553 3.7609,25.12079 3.3398,62.125 0,0.82719 4.4526,3.88671 5.4356,3.88671 v 8.39649 h -1.125 v 1.0625 h -3.2266 v 0.5957 h -48.9883 c -2.8742,0 -6.9863,4.8837 -6.9863,7.15234 v 7.2754 h 128.75002 v -7.2754 c 0,-2.79633 -4.1361,-7.15234 -7.125,-7.15234 h -8.3535 v -0.79492 h -2.166 v -3.18164 h -1.1485 v -1.28125 h -8.9726 -8.9707 v 1.28125 h -1.1485 v 3.18164 h -2.166 v 0.79492 h -16.46682 v -0.5957 h -3.2246 v -1.0625 h -1.1269 v -8.39649 c 0.983,0 5.4355,-3.05952 5.4355,-3.88671 -0.4211,-37.00421 3.3399,-18.5697 3.3398,-62.125 h 0.9532 v -4.91993 c 0,-0.80068 -5.3104,-6.21875 -6.5508,-6.21875 h -6.9551 z"
id="path5429-3-7-4" />
<path
style="fill:none;stroke:#ff00ff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 912.26148,851.05049 v -7.27539 c 0,-2.79634 4.1201,-7.15235 7.0974,-7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,4.35601 7.0974,7.15235 v 7.27539 h -64.19362 z"
id="path5429-7-77-6"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-55.729306)"
id="g5425"
style="display:inline">
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f6bd0e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="m 116.05923,577.93526 c -3.48,0.20109 -7.3256,1.1375 -11.63,2.90735 -27.54822,11.32986 -15.44643,35.19849 -27.48069,50.27156 -12.03367,15.07396 -36.19673,7.81324 -43.79988,38.64156 -7.60286,30.82892 109.26727,182.19131 172.10487,156.34843 62.838,-25.84288 39.4726,-215.66466 12.3803,-232.22455 -27.0917,-16.55961 -39.0863,5.6223 -58.2436,3.37644 -16.1637,-1.89502 -24.5385,-20.40725 -43.331,-19.32079 z m 316.5418,0 c -17.3826,0.30013 -25.7964,17.496 -41.3614,19.32079 -19.1572,2.24586 -31.1518,-19.93605 -58.2435,-3.37644 -27.0923,16.55989 -50.4576,206.38137 12.3803,232.22455 62.8376,25.84288 179.7077,-125.51951 172.1049,-156.34843 -7.6032,-30.82832 -31.6726,-23.5676 -43.7063,-38.64156 -12.0342,-15.07307 0.069,-38.9417 -27.4803,-50.27156 -5.1656,-2.12371 -9.6822,-2.97637 -13.6937,-2.90735 z"
id="path4372-7-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccsssccssscccc"
inkscape:label="path4372-7-9" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient5427);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="M 275.31501,-1.7916665e-6 C 194.26645,-1.7916665e-6 146.68586,49.443198 137.72462,116.11228 128.76368,182.78135 143.19147,194.9981 120.74874,263.26927 98.30602,331.53923 -2.31211,448.5711 0.04059,556.5511 c 0.73262,33.61801 4.60398,62.7266 11.34877,88.1628 8.26915,-13.70117 20.521,-23.35722 29.45012,-27.48068 6.9708,-3.21799 10.34005,-4.76544 11.91151,-5.34589 0.2281,-1.72724 1.11168,-5.65953 2.71977,-13.41216 2.20895,-10.64736 10.67498,-27.3186 25.13578,-38.2664 -0.14707,-3.31673 -0.30674,-6.59923 -0.37516,-10.0354 -1.67022,-83.75241 84.89138,-174.48761 100.82462,-227.44141 15.93263,-52.952 9.00175,-58.40504 11.62998,-71.56178 2.62793,-13.15674 12.77468,-28.48221 27.38675,-40.70495 1.39198,-1.1651 2.74677,-1.67532 4.12676,-1.68823 13.32151,-0.12605 26.65263,48.37144 52.42857,48.39576 25.77596,0.03 39.1848,-59.11995 54.02317,-46.70753 14.61207,12.22304 24.75882,27.54821 27.38674,40.70495 2.62823,13.15674 -4.30325,18.60978 11.62999,71.56178 15.93322,52.9532 102.40085,143.6887 100.73065,227.44141 -0.069,3.40406 -0.2311,6.65445 -0.3751,9.94176 14.525,10.94599 23.0156,27.68686 25.2294,38.36004 1.6081,7.75263 2.492,11.68492 2.7201,13.41216 1.5666,0.57954 4.95,2.21674 11.9112,5.43983 8.9321,4.13577 21.1104,13.7738 29.3564,27.48068 6.7629,-25.46262 10.7089,-54.59011 11.4425,-88.25674 2.3527,-107.98 -98.3591,-225.01217 -120.80184,-293.28183 C 407.43855,194.9981 421.95998,182.78135 412.99903,116.11228 404.03809,49.443198 356.36355,-1.7916666e-6 275.31501,-1.7916665e-6 Z M 271.93856,763.54594 c -1.37309,8.8712 -3.21648,17.57674 -5.62741,25.98004 -3.92959,13.69607 -9.66505,27.42155 -18.19531,39.11067 8.8406,0.54803 17.90178,0.62006 27.19917,0.18608 9.29738,0.43308 18.35556,0.36075 27.19916,-0.18608 -8.53027,-11.68912 -14.26572,-25.4146 -18.1953,-39.11067 -2.41093,-8.4033 -4.25433,-17.10884 -5.62741,-25.98004 -1.12519,0.03 -2.24077,0.093 -3.37645,0.093 -1.13569,0 -2.25127,-0.072 -3.37645,-0.093 z"
id="path4372-7-91"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssccccccsccccscsccccccsssscscccscsc" />
</g>
<path
style="fill:#000000;fill-opacity:1"
d="m 114.59441,283.23565 c 0,-0.24417 1.59959,-4.40667 3.55464,-9.25 3.63491,-9.00495 9.23801,-27.28845 11.96125,-39.03081 3.90844,-16.85289 4.64856,-25.10578 5.49513,-61.27526 0.50046,-21.38213 1.516,-42.09154 2.45188,-50 1.57119,-13.27699 5.4476,-31.36537 8.08998,-37.750001 l 1.34507,-3.25 h 128.8934 128.8934 l 2.63985,8.75 c 6.08103,20.156101 7.61955,34.406361 8.6641,80.250001 0.89562,39.30731 1.86887,48.82949 7.0831,69.30099 2.80302,11.00486 8.63504,28.95882 11.55539,35.57344 1.30505,2.95594 2.37281,5.76844 2.37281,6.25 0,0.48538 -16.91415,0.87557 -37.95469,0.87557 h -37.95468 l -0.56349,-3.25 c -0.30992,-1.7875 -0.93391,-10.02932 -1.38663,-18.31515 -0.79328,-14.51864 -0.95643,-15.34226 -4.4972,-22.70384 -6.90636,-14.35891 -21.97739,-30.71166 -28.31639,-30.72455 -4.37845,-0.009 -7.44212,3.3144 -19.37708,21.01926 -14.2565,21.14873 -22.42203,27.97905 -31.92472,26.70447 -9.8998,-1.32784 -18.30259,-8.82427 -31.07877,-27.72648 -14.74352,-21.81289 -17.97303,-23.64117 -27.45345,-15.5418 -7.14,6.0999 -15.61506,17.44854 -20.1057,26.92283 -3.66096,7.72383 -3.75314,8.20992 -4.51711,23.82022 -0.42894,8.76451 -1.05551,16.80388 -1.39238,17.86526 -0.59088,1.86169 -1.95084,1.92978 -38.5451,1.92978 -20.86294,0 -37.93261,-0.19977 -37.93261,-0.44393 z"
id="path4513"
inkscape:connector-curvature="0"
transform="translate(-56.568542)" />
<path
style="fill:#000000;fill-opacity:1"
d="m 39.594409,421.1642 c 0,-2.46749 18.185161,-36.06364 43.051057,-79.5346 8.950557,-15.64751 19.753034,-35.20002 24.005494,-43.45002 l 7.73176,-15 h 38.10604 38.10604 l -2e-4,2.23249 c -1e-4,1.22787 -1.99431,10.07578 -4.43156,19.66203 -7.78392,30.6158 -10.11179,35.29497 -49.17014,98.83517 l -10.89849,17.72969 -43.250001,0.0203 c -23.7875,0.0112 -43.25,-0.21161 -43.25,-0.49507 z"
id="path4515"
inkscape:connector-curvature="0"
transform="translate(-56.568542)" />
<path
style="fill:#000000;fill-opacity:1"
d="M 1.6139312,543.92958 C 1.641425,537.2401 4.063405,519.97082 6.6187735,508.24388 11.235559,487.05683 20.217862,461.53331 32.507714,434.67958 l 6.178397,-13.5 43.454149,0.27069 c 23.89978,0.14889 43.45415,0.51009 43.45415,0.80269 0,0.29259 -2.7456,5.28856 -6.10133,11.10216 -23.740815,41.12952 -36.428347,75.98168 -38.526541,105.83092 l -0.66733,9.49354 H 40.946809 1.5944086 Z"
id="path4517"
inkscape:connector-curvature="0"
transform="translate(-56.568542)" />
<path
style="fill:#000000;fill-opacity:1"
d="M 12.11918,641.52282 C 7.434105,628.52087 1.5944086,582.80229 1.5944086,559.12511 v -10.44553 h 39.5000004 39.5 v 5.52174 c 0,5.37128 -0.152511,5.67425 -5.596954,11.11869 -10.385281,10.38528 -16.990895,22.73555 -20.01306,37.41768 l -1.754338,8.52283 -9.567824,4.6363 c -11.35871,5.50411 -20.095112,12.38399 -26.434177,20.81682 -2.839037,3.77675 -4.811755,5.63374 -5.108876,4.80918 z"
id="path4519"
inkscape:connector-curvature="0"
transform="translate(-56.568542)" />
<path
style="fill:#000000;fill-opacity:1"
d="m 254.16359,821.45812 c 7.52064,-12.19811 14.23801,-31.7349 18.14694,-52.77854 0.74974,-4.0362 1.14242,-4.53002 3.80989,-4.79125 l 2.97399,-0.29125 1.85186,9.79125 c 3.45673,18.27665 11.55543,39.66605 19.70443,52.04125 l 2.14011,3.25 h -26.53977 -26.53978 z"
id="path4521"
inkscape:connector-curvature="0"
transform="translate(-56.568542)" />
<path
style="fill:#000000;fill-opacity:1"
d="m 535.09441,636.96904 c -5.54021,-7.77645 -15.28282,-15.56204 -26.40806,-21.1034 l -9.40806,-4.68606 -2.11797,-9.5 c -3.40509,-15.27326 -11.54346,-29.68916 -21.63936,-38.33087 l -3.92655,-3.36099 v -10.77573 c 0,-13.74446 -2.22522,-28.68219 -6.46689,-43.4117 -3.47339,-12.06159 -9.76927,-28.70642 -14.06363,-37.18093 l -2.48152,-4.89705 41.9254,-0.27137 41.92541,-0.27136 5.08406,15.5 c 9.90205,30.18876 13.08225,48.71682 13.06685,76.12834 -0.0115,20.54191 -1.15712,36.33581 -3.98003,54.87166 -2.29557,15.07316 -6.0516,33.01825 -6.8971,32.95201 -0.3369,-0.0264 -2.41255,-2.57454 -4.61255,-5.66255 z"
id="path4523"
inkscape:connector-curvature="0"
transform="translate(-56.568542)" />
<path
style="fill:#000000;fill-opacity:1"
d="m 443.09441,452.10697 c -5.67275,-11.13765 -16.52406,-29.55199 -45.92151,-77.92739 -17.75407,-29.21548 -23.39832,-41.31692 -29.96695,-64.25 l -1.50374,-5.25 41.6961,0.007 41.6961,0.007 3.91592,7.24331 c 2.15375,3.98382 11.87827,21.19331 21.61004,38.24331 20.98319,36.76244 28.29962,50.14554 37.85218,69.23861 8.14156,16.27284 19.45527,42.26131 18.71857,42.99801 -0.27223,0.27223 -18.85536,0.71456 -41.29584,0.98295 l -40.80087,0.48797 z"
id="path4525"
inkscape:connector-curvature="0"
transform="translate(-56.568542)" />
<path
style="fill:#000000;fill-opacity:1"
d="m 364.20108,297.42958 c -0.87675,-3.9875 -1.87817,-8.7125 -2.22538,-10.5 l -0.63129,-3.25 h 37.04321 c 20.37377,0 37.64252,-0.21632 38.375,-0.48072 0.88636,-0.31994 2.98736,2.94106 6.28175,9.75 2.72247,5.6269 5.12247,10.56822 5.33333,10.98072 0.21086,0.4125 -18.28395,0.75 -41.09958,0.75 h -41.48295 z"
id="path4527"
inkscape:connector-curvature="0"
transform="translate(-56.568542)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 18 KiB

248
images/logo/assets/svg/linuxgsm_white_vector.svg

@ -1,248 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="550.72363"
height="829.10431"
id="svg4312"
version="1.1"
inkscape:version="0.92.1 r15371"
sodipodi:docname="linuxgsm_logo_white.svg"
inkscape:export-filename="C:\Users\me\Desktop\lgsm media\linuxgsm_logo_white.png"
inkscape:export-xdpi="61.009998"
inkscape:export-ydpi="61.009998">
<title
id="title5291">Stycil Tux</title>
<defs
id="defs4314">
<linearGradient
id="linearGradient3910-6-0-8-7-7-8">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-7-4" />
<stop
style="stop-color:#4c4c4c;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-6-9" />
</linearGradient>
<linearGradient
y2="497.71365"
x2="140.00095"
y1="230.00362"
x1="140.00095"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
gradientUnits="userSpaceOnUse"
id="linearGradient4970"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
inkscape:collect="always" />
<linearGradient
id="linearGradient3910-6-0-8-7-81">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-5" />
<stop
style="stop-color:#a6a6a6;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-64" />
</linearGradient>
<linearGradient
id="linearGradient4565-3">
<stop
style="stop-color:#939393;stop-opacity:1;"
offset="0"
id="stop4567-1" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop4569-9" />
</linearGradient>
<linearGradient
id="linearGradient4617-7">
<stop
id="stop4619-9"
offset="0"
style="stop-color:#ffffff;stop-opacity:0;" />
<stop
id="stop4621-5"
offset="1"
style="stop-color:#a6a6a6;stop-opacity:0.5" />
</linearGradient>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4719-2">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15;marker:none;enable-background:accumulate"
id="rect4721-4"
width="1352.3417"
height="1135.7903"
x="-490.55533"
y="-358.505" />
</clipPath>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
id="linearGradient5197"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
x1="140.00095"
y1="230.00362"
x2="140.00095"
y2="497.71365" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="258.13863"
inkscape:cy="366.87337"
inkscape:document-units="px"
inkscape:current-layer="g6064"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata4317">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Stycil Tux</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Cheeseness (Josh Bush)</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>tux linux icon</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:description>A stylised stencil (a &quot;stycil&quot; - 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.
[email protected]</dc:description>
<dc:date>2012-01-02</dc:date>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:source>http://twolofbees.com/uploads/2012/stycil_tux.svg</dc:source>
<dc:relation>http://twolofbees.com/artwork.php?iid=870</dc:relation>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="g6064"
transform="translate(56.568542)"
style="display:inline">
<g
transform="translate(-756.17483,-402.59665)"
id="g5961-3"
style="display:inline;fill:#ababb2;fill-opacity:1">
<g
transform="translate(-452.34937,725.009)"
id="g5391-8-7"
style="fill:#ababb2;fill-opacity:1">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-1-3-9"
d="m 1295.2947,213.49225 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#ababb2;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-9-5-2"
d="m 1295.2947,277.56671 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#ababb2;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-8-9-8"
d="m 1295.2947,341.64115 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#ababb2;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
<g
style="fill:#ababb2;fill-opacity:1"
transform="translate(-0.90575)"
id="g5258-9-9">
<path
inkscape:connector-curvature="0"
d="m 1424.625,162.97931 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m 18.375,-0.25 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m -146.7996,-13.31157 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#ababb2;fill-opacity:1;stroke:none;stroke-width:0.37795275;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5239-0-4-2" />
</g>
</g>
<path
style="fill:#ababb2;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
d="m 912.26148,854.87423 v 7.27539 c 0,2.79634 4.1201,7.15235 7.0974,7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,-4.35601 7.0974,-7.15235 v -7.27539 h -64.19362 z"
id="path5429-1-9"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="fill:#ababb2;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
d="m 969.04908,749.4172 c -1.2404,0 -6.5507,5.41807 -6.5507,6.21875 v 4.91993 h 0.9531 c 0,43.5553 3.7609,25.12079 3.3398,62.125 0,0.82719 4.4526,3.88671 5.4356,3.88671 v 8.39649 h -1.125 v 1.0625 h -3.2266 v 0.5957 h -48.9883 c -2.8742,0 -6.9863,4.8837 -6.9863,7.15234 v 7.2754 h 128.75002 v -7.2754 c 0,-2.79633 -4.1361,-7.15234 -7.125,-7.15234 h -8.3535 v -0.79492 h -2.166 v -3.18164 h -1.1485 v -1.28125 h -8.9726 -8.9707 v 1.28125 h -1.1485 v 3.18164 h -2.166 v 0.79492 h -16.46682 v -0.5957 h -3.2246 v -1.0625 h -1.1269 v -8.39649 c 0.983,0 5.4355,-3.05952 5.4355,-3.88671 -0.4211,-37.00421 3.3399,-18.5697 3.3398,-62.125 h 0.9532 v -4.91993 c 0,-0.80068 -5.3104,-6.21875 -6.5508,-6.21875 h -6.9551 z"
id="path5429-3-7-4" />
<path
style="fill:#ababb2;stroke:#ff00ff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
d="m 912.26148,851.05049 v -7.27539 c 0,-2.79634 4.1201,-7.15235 7.0974,-7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,4.35601 7.0974,7.15235 v 7.27539 h -64.19362 z"
id="path5429-7-77-6"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-55.729306)"
id="g5425"
style="display:inline">
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f6bd0e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="m 116.05923,577.93526 c -3.48,0.20109 -7.3256,1.1375 -11.63,2.90735 -27.54822,11.32986 -15.44643,35.19849 -27.48069,50.27156 -12.03367,15.07396 -36.19673,7.81324 -43.79988,38.64156 -7.60286,30.82892 109.26727,182.19131 172.10487,156.34843 62.838,-25.84288 39.4726,-215.66466 12.3803,-232.22455 -27.0917,-16.55961 -39.0863,5.6223 -58.2436,3.37644 -16.1637,-1.89502 -24.5385,-20.40725 -43.331,-19.32079 z m 316.5418,0 c -17.3826,0.30013 -25.7964,17.496 -41.3614,19.32079 -19.1572,2.24586 -31.1518,-19.93605 -58.2435,-3.37644 -27.0923,16.55989 -50.4576,206.38137 12.3803,232.22455 62.8376,25.84288 179.7077,-125.51951 172.1049,-156.34843 -7.6032,-30.82832 -31.6726,-23.5676 -43.7063,-38.64156 -12.0342,-15.07307 0.069,-38.9417 -27.4803,-50.27156 -5.1656,-2.12371 -9.6822,-2.97637 -13.6937,-2.90735 z"
id="path4372-7-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccsssccssscccc"
inkscape:label="path4372-7-9" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="M 275.31501,-1.7916665e-6 C 194.26645,-1.7916665e-6 146.68586,49.443198 137.72462,116.11228 128.76368,182.78135 143.19147,194.9981 120.74874,263.26927 98.30602,331.53923 -2.31211,448.5711 0.04059,556.5511 c 0.73262,33.61801 4.60398,62.7266 11.34877,88.1628 8.26915,-13.70117 20.521,-23.35722 29.45012,-27.48068 6.9708,-3.21799 10.34005,-4.76544 11.91151,-5.34589 0.2281,-1.72724 1.11168,-5.65953 2.71977,-13.41216 2.20895,-10.64736 10.67498,-27.3186 25.13578,-38.2664 -0.14707,-3.31673 -0.30674,-6.59923 -0.37516,-10.0354 -1.67022,-83.75241 84.89138,-174.48761 100.82462,-227.44141 15.93263,-52.952 9.00175,-58.40504 11.62998,-71.56178 2.62793,-13.15674 12.77468,-28.48221 27.38675,-40.70495 1.39198,-1.1651 2.74677,-1.67532 4.12676,-1.68823 13.32151,-0.12605 26.65263,48.37144 52.42857,48.39576 25.77596,0.03 39.1848,-59.11995 54.02317,-46.70753 14.61207,12.22304 24.75882,27.54821 27.38674,40.70495 2.62823,13.15674 -4.30325,18.60978 11.62999,71.56178 15.93322,52.9532 102.40085,143.6887 100.73065,227.44141 -0.069,3.40406 -0.2311,6.65445 -0.3751,9.94176 14.525,10.94599 23.0156,27.68686 25.2294,38.36004 1.6081,7.75263 2.492,11.68492 2.7201,13.41216 1.5666,0.57954 4.95,2.21674 11.9112,5.43983 8.9321,4.13577 21.1104,13.7738 29.3564,27.48068 6.7629,-25.46262 10.7089,-54.59011 11.4425,-88.25674 2.3527,-107.98 -98.3591,-225.01217 -120.80184,-293.28183 C 407.43855,194.9981 421.95998,182.78135 412.99903,116.11228 404.03809,49.443198 356.36355,-1.7916666e-6 275.31501,-1.7916665e-6 Z M 271.93856,763.54594 c -1.37309,8.8712 -3.21648,17.57674 -5.62741,25.98004 -3.92959,13.69607 -9.66505,27.42155 -18.19531,39.11067 8.8406,0.54803 17.90178,0.62006 27.19917,0.18608 9.29738,0.43308 18.35556,0.36075 27.19916,-0.18608 -8.53027,-11.68912 -14.26572,-25.4146 -18.1953,-39.11067 -2.41093,-8.4033 -4.25433,-17.10884 -5.62741,-25.98004 -1.12519,0.03 -2.24077,0.093 -3.37645,0.093 -1.13569,0 -2.25127,-0.072 -3.37645,-0.093 z"
id="path4372-7-91"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssccccccsccccscsccccccsssscscccscsc" />
</g>
<path
style="fill:#ababb2;fill-opacity:0"
d="m 143.73409,497.33094 v -25.5 h 132.5 132.5 v 25.5 25.5 h -132.5 -132.5 z m 126.95432,-8.94496 c 3.54491,-4.27135 -2.78295,-9.83008 -6.92404,-6.08245 -2.43802,2.20639 -2.56466,3.85017 -0.45885,5.95598 1.96721,1.96722 5.80071,2.03289 7.38289,0.12647 z m 18.06193,-0.36711 c 4.2279,-3.42355 -1.243,-9.41376 -5.92103,-6.48306 -2.33049,1.46002 -2.61483,5.44202 -0.49906,6.9891 2.39868,1.75396 3.76179,1.64651 6.42009,-0.50604 z"
id="path3731"
inkscape:connector-curvature="0"
transform="translate(-56.568542)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

324
images/logo/assets/svg/linuxgsm_white_vector_full.svg

@ -1,324 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1710.7236"
height="830.10431"
id="svg4312"
version="1.1"
inkscape:version="0.92.1 r15371"
sodipodi:docname="linuxgsm_white_vector_full.svg"
inkscape:export-filename="C:\Users\me\Google Drive\Projects\Linux Game Server Manager\media\graphics\logos\dark\lgsm-dark-full.png"
inkscape:export-xdpi="84.68"
inkscape:export-ydpi="84.68">
<title
id="title5291">Stycil Tux</title>
<defs
id="defs4314">
<linearGradient
id="linearGradient3910-6-0-8-7-7-8">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-7-4" />
<stop
style="stop-color:#4c4c4c;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-6-9" />
</linearGradient>
<linearGradient
y2="497.71365"
x2="140.00095"
y1="230.00362"
x1="140.00095"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
gradientUnits="userSpaceOnUse"
id="linearGradient4970"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
inkscape:collect="always" />
<linearGradient
id="linearGradient3910-6-0-8-7-81">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3912-5-9-3-8-5" />
<stop
style="stop-color:#a6a6a6;stop-opacity:1;"
offset="1"
id="stop3914-0-1-3-0-64" />
</linearGradient>
<linearGradient
id="linearGradient4565-3">
<stop
style="stop-color:#939393;stop-opacity:1;"
offset="0"
id="stop4567-1" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop4569-9" />
</linearGradient>
<linearGradient
id="linearGradient4617-7">
<stop
id="stop4619-9"
offset="0"
style="stop-color:#ffffff;stop-opacity:0;" />
<stop
id="stop4621-5"
offset="1"
style="stop-color:#a6a6a6;stop-opacity:0.5" />
</linearGradient>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4719-2">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15;marker:none;enable-background:accumulate"
id="rect4721-4"
width="1352.3417"
height="1135.7903"
x="-490.55533"
y="-358.505" />
</clipPath>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3910-6-0-8-7-7-8"
id="linearGradient5197"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.0012867,0,0,3.0012867,-152.31552,-675.94661)"
x1="140.00095"
y1="230.00362"
x2="140.00095"
y2="497.71365" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="1126.276"
inkscape:cy="424.55397"
inkscape:document-units="px"
inkscape:current-layer="g6064"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata4317">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Stycil Tux</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Cheeseness (Josh Bush)</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>tux linux icon</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:description>A stylised stencil (a &quot;stycil&quot; - 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.
[email protected]</dc:description>
<dc:date>2012-01-02</dc:date>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:source>http://twolofbees.com/uploads/2012/stycil_tux.svg</dc:source>
<dc:relation>http://twolofbees.com/artwork.php?iid=870</dc:relation>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Layer 1" />
<g
id="g6064"
transform="translate(56.568542,1.0001456)"
style="display:inline">
<g
transform="translate(-756.17483,-402.59665)"
id="g5961-3"
style="display:inline;fill:#ababb2;fill-opacity:1">
<g
transform="translate(-452.34937,725.009)"
id="g5391-8-7"
style="fill:#ababb2;fill-opacity:1">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-1-3-9"
d="m 1295.2947,213.49225 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#ababb2;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-9-5-2"
d="m 1295.2947,277.56671 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#ababb2;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5199-8-9-8"
d="m 1295.2947,341.64115 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#ababb2;stroke:none;stroke-width:0.37795275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" />
<g
style="fill:#ababb2;fill-opacity:1"
transform="translate(-0.90575)"
id="g5258-9-9">
<path
inkscape:connector-curvature="0"
d="m 1424.625,162.97931 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m 18.375,-0.25 a 4.75,4 0 0 1 -4.75,4 4.75,4 0 0 1 -4.75,-4 4.75,4 0 0 1 4.75,-4 4.75,4 0 0 1 4.75,4 z m -146.7996,-13.31157 v 51.44487 h 265.7241 v -51.44487 z"
style="fill:#ababb2;fill-opacity:1;stroke:none;stroke-width:0.37795275;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5239-0-4-2" />
</g>
</g>
<path
style="fill:#ababb2;stroke:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
d="m 912.26148,854.87423 v 7.27539 c 0,2.79634 4.1201,7.15235 7.0974,7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,-4.35601 7.0974,-7.15235 v -7.27539 h -64.19362 z"
id="path5429-1-9"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="fill:#ababb2;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
d="m 969.04908,749.4172 c -1.2404,0 -6.5507,5.41807 -6.5507,6.21875 v 4.91993 h 0.9531 c 0,43.5553 3.7609,25.12079 3.3398,62.125 0,0.82719 4.4526,3.88671 5.4356,3.88671 v 8.39649 h -1.125 v 1.0625 h -3.2266 v 0.5957 h -48.9883 c -2.8742,0 -6.9863,4.8837 -6.9863,7.15234 v 7.2754 h 128.75002 v -7.2754 c 0,-2.79633 -4.1361,-7.15234 -7.125,-7.15234 h -8.3535 v -0.79492 h -2.166 v -3.18164 h -1.1485 v -1.28125 h -8.9726 -8.9707 v 1.28125 h -1.1485 v 3.18164 h -2.166 v 0.79492 h -16.46682 v -0.5957 h -3.2246 v -1.0625 h -1.1269 v -8.39649 c 0.983,0 5.4355,-3.05952 5.4355,-3.88671 -0.4211,-37.00421 3.3399,-18.5697 3.3398,-62.125 h 0.9532 v -4.91993 c 0,-0.80068 -5.3104,-6.21875 -6.5508,-6.21875 h -6.9551 z"
id="path5429-3-7-4" />
<path
style="fill:#ababb2;stroke:#ff00ff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
d="m 912.26148,851.05049 v -7.27539 c 0,-2.79634 4.1201,-7.15235 7.0974,-7.15235 h 57.0982 57.09622 c 2.9773,0 7.0974,4.35601 7.0974,7.15235 v 7.27539 h -64.19362 z"
id="path5429-7-77-6"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-55.729306)"
id="g5425"
style="display:inline">
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f6bd0e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="m 116.05923,577.93526 c -3.48,0.20109 -7.3256,1.1375 -11.63,2.90735 -27.54822,11.32986 -15.44643,35.19849 -27.48069,50.27156 -12.03367,15.07396 -36.19673,7.81324 -43.79988,38.64156 -7.60286,30.82892 109.26727,182.19131 172.10487,156.34843 62.838,-25.84288 39.4726,-215.66466 12.3803,-232.22455 -27.0917,-16.55961 -39.0863,5.6223 -58.2436,3.37644 -16.1637,-1.89502 -24.5385,-20.40725 -43.331,-19.32079 z m 316.5418,0 c -17.3826,0.30013 -25.7964,17.496 -41.3614,19.32079 -19.1572,2.24586 -31.1518,-19.93605 -58.2435,-3.37644 -27.0923,16.55989 -50.4576,206.38137 12.3803,232.22455 62.8376,25.84288 179.7077,-125.51951 172.1049,-156.34843 -7.6032,-30.82832 -31.6726,-23.5676 -43.7063,-38.64156 -12.0342,-15.07307 0.069,-38.9417 -27.4803,-50.27156 -5.1656,-2.12371 -9.6822,-2.97637 -13.6937,-2.90735 z"
id="path4372-7-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccsssccssscccc"
inkscape:label="path4372-7-9" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16;marker:none;enable-background:accumulate"
d="M 275.31501,-1.7916665e-6 C 194.26645,-1.7916665e-6 146.68586,49.443198 137.72462,116.11228 128.76368,182.78135 143.19147,194.9981 120.74874,263.26927 98.30602,331.53923 -2.31211,448.5711 0.04059,556.5511 c 0.73262,33.61801 4.60398,62.7266 11.34877,88.1628 8.26915,-13.70117 20.521,-23.35722 29.45012,-27.48068 6.9708,-3.21799 10.34005,-4.76544 11.91151,-5.34589 0.2281,-1.72724 1.11168,-5.65953 2.71977,-13.41216 2.20895,-10.64736 10.67498,-27.3186 25.13578,-38.2664 -0.14707,-3.31673 -0.30674,-6.59923 -0.37516,-10.0354 -1.67022,-83.75241 84.89138,-174.48761 100.82462,-227.44141 15.93263,-52.952 9.00175,-58.40504 11.62998,-71.56178 2.62793,-13.15674 12.77468,-28.48221 27.38675,-40.70495 1.39198,-1.1651 2.74677,-1.67532 4.12676,-1.68823 13.32151,-0.12605 26.65263,48.37144 52.42857,48.39576 25.77596,0.03 39.1848,-59.11995 54.02317,-46.70753 14.61207,12.22304 24.75882,27.54821 27.38674,40.70495 2.62823,13.15674 -4.30325,18.60978 11.62999,71.56178 15.93322,52.9532 102.40085,143.6887 100.73065,227.44141 -0.069,3.40406 -0.2311,6.65445 -0.3751,9.94176 14.525,10.94599 23.0156,27.68686 25.2294,38.36004 1.6081,7.75263 2.492,11.68492 2.7201,13.41216 1.5666,0.57954 4.95,2.21674 11.9112,5.43983 8.9321,4.13577 21.1104,13.7738 29.3564,27.48068 6.7629,-25.46262 10.7089,-54.59011 11.4425,-88.25674 2.3527,-107.98 -98.3591,-225.01217 -120.80184,-293.28183 C 407.43855,194.9981 421.95998,182.78135 412.99903,116.11228 404.03809,49.443198 356.36355,-1.7916666e-6 275.31501,-1.7916665e-6 Z M 271.93856,763.54594 c -1.37309,8.8712 -3.21648,17.57674 -5.62741,25.98004 -3.92959,13.69607 -9.66505,27.42155 -18.19531,39.11067 8.8406,0.54803 17.90178,0.62006 27.19917,0.18608 9.29738,0.43308 18.35556,0.36075 27.19916,-0.18608 -8.53027,-11.68912 -14.26572,-25.4146 -18.1953,-39.11067 -2.41093,-8.4033 -4.25433,-17.10884 -5.62741,-25.98004 -1.12519,0.03 -2.24077,0.093 -3.37645,0.093 -1.13569,0 -2.25127,-0.072 -3.37645,-0.093 z"
id="path4372-7-91"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssccccccsccccscsccccccsssscscccscsc" />
</g>
<flowRoot
xml:space="preserve"
id="flowRoot4513"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="translate(-56.568542,-1.8359376e-6)"><flowRegion
id="flowRegion4515"><rect
id="rect4517"
width="584"
height="560"
x="532"
y="65.104309" /></flowRegion><flowPara
id="flowPara4519" /></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot4521"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
transform="translate(-56.568542,-1.8359376e-6)"><flowRegion
id="flowRegion4523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'PT Sans';-inkscape-font-specification:'PT Sans'"><rect
id="rect4525"
width="476"
height="536"
x="548"
y="81.104309"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'PT Sans';-inkscape-font-specification:'PT Sans'" /></flowRegion><flowPara
id="flowPara4527" /></flowRoot> <text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:169.59358215px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.23983955"
x="429.06406"
y="220.41109"
id="text4531"
transform="scale(1.0093264,0.99075977)"
inkscape:export-filename="C:\Users\me\Google Drive\Projects\Linux Game Server Manager\media\logos\master rasta\text4531.png"
inkscape:export-xdpi="118.84"
inkscape:export-ydpi="118.84"><tspan
sodipodi:role="line"
id="tspan4529"
x="429.06406"
y="220.41109"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:213.33334351px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#ababb2;fill-opacity:1;stroke-width:4.23983955">Linux</tspan><tspan
sodipodi:role="line"
x="429.06406"
y="487.07776"
id="tspan4535"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:213.33334351px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#7dffff;fill-opacity:0.77900552;stroke-width:4.23983955"> <tspan
style="fill:#ffffff;fill-opacity:1;opacity:1"
id="tspan942">Game Server</tspan></tspan><tspan
sodipodi:role="line"
x="429.06406"
y="753.74445"
id="tspan4537"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:213.33334351px;font-family:'PT Sans';-inkscape-font-specification:'PT Sans';fill:#f9f9f9;fill-opacity:0;stroke-width:4.23983955"><tspan
style="fill:#ffffff;fill-opacity:1;opacity:1"
id="tspan876"> Managers_</tspan>_</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot2606"
style="fill:black;fill-opacity:1;stroke:none;font-family:sans-serif;font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;letter-spacing:0px;word-spacing:0px"><flowRegion
id="flowRegion2608"><rect
id="rect2610"
width="596"
height="244"
x="551"
y="408.10431" /></flowRegion><flowPara
id="flowPara2612"></flowPara></flowRoot> </g>
<path
style="fill:#ffffff;fill-opacity:0"
d="m 103.95897,305.64737 c 0,-0.29209 1.98741,-4.48823 4.41646,-9.32476 10.29339,-20.49537 17.26545,-40.28401 22.07901,-62.66635 3.9742,-18.47945 4.59123,-25.6379 5.51655,-64 0.79547,-32.97852 2.08256,-50.45634 4.54764,-61.75359 l 0.60083,-2.75359 135.12878,0.25359 135.12878,0.25359 0.7479,3.5 c 2.31683,10.84216 4.06464,35.3419 4.85112,68 0.91823,38.12897 1.41461,42.93974 6.60364,64 4.40569,17.881 10.0926,33.73138 17.82493,49.68112 l 7.42651,15.31888 H 407.51376 366.1964 l -1.20552,-4.75 c -2.93,-11.54485 -4.20984,-20.83185 -4.95211,-35.9344 -0.77423,-15.75263 -0.89123,-16.38609 -4.38555,-23.74414 -4.52737,-9.53335 -8.2765,-14.98271 -15.95627,-23.1924 -5.98826,-6.40148 -10.16413,-9.37906 -13.15352,-9.37906 -3.01465,0 -9.01166,6.69118 -17.89249,19.96358 -14.5779,21.78668 -21.89779,28.26554 -31.84767,28.18846 -10.48815,-0.0812 -17.90838,-6.63067 -34.16101,-30.15204 -9.08036,-13.14143 -13.92437,-18 -17.94601,-18 -2.78994,0 -17.0247,14.17371 -22.5033,22.40678 -7.65084,11.49747 -9.29829,17.42848 -10.30335,37.09322 -0.57802,11.30946 -1.63236,20.34738 -3.14974,27 l -2.28089,10 -41.25,0.26109 c -22.6875,0.1436 -41.25,0.0221 -41.25,-0.26998 z"
id="path858"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffff;fill-opacity:0"
d="m 517.45897,621.51377 c -1.1,-0.86839 -5.55983,-3.235 -9.91074,-5.25913 l -7.91074,-3.68024 -2.77827,-11.29969 c -3.50583,-14.25876 -8.76676,-23.87229 -18.53319,-33.86648 l -7.13295,-7.2993 0.50085,-6.23958 c 0.56479,-7.03604 -0.9597,-22.97762 -3.30005,-34.50852 -4.32021,-21.28575 -18.56308,-55.37094 -35.39473,-84.70457 -3.47149,-6.05 -6.50225,-11.3375 -6.73501,-11.75 -0.23276,-0.4125 19.33809,-0.75 43.49078,-0.75 h 43.91398 l 4.19984,9.0393 c 18.10421,38.96563 27.55172,68.78316 31.67198,99.9607 2.56585,19.41552 1.31093,51.25328 -3.20255,81.25 l -1.61751,10.75 -12.63084,-0.0318 c -9.96138,-0.0251 -13.05354,-0.3655 -14.63085,-1.61069 z"
id="path860"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffff;fill-opacity:0"
d="m 131.38196,230.39891 c 2.26043,-7.12198 3.80851,-27.49521 4.57759,-60.24265 0.8735,-37.19355 2.20679,-52.48825 5.97138,-68.5 5.698,-24.235019 17.42655,-45.8345 34.04809,-62.703515 l 7.68211,-7.796486 h 92.50635 92.50635 l 8.46293,8.778947 c 10.02293,10.397199 17.50821,21.162474 23.38694,33.634919 11.75298,24.935379 15.0362,45.563325 16.48717,103.586135 0.83379,33.34278 1.27259,39.85533 3.45308,51.25 l 0.7176,3.75 h -35.05284 -35.05285 l -4.47347,-5.81362 c -6.22632,-8.09156 -16.26919,-17.18638 -18.97791,-17.18638 -4.40434,0 -9.15051,4.57291 -16.34675,15.75 l -4.66783,7.25 h -30.18389 -30.18388 l -3.77528,-5.75 c -8.62521,-13.13676 -14.1939,-18.04759 -19.07583,-16.8223 -2.85946,0.71768 -15.11364,12.62294 -18.93212,18.39304 l -2.7657,4.17926 h -35.4345 c -33.3485,0 -35.40167,-0.10345 -34.87674,-1.75735 z"
id="path862"
inkscape:connector-curvature="0" />
</svg>

Before

Width:  |  Height:  |  Size: 20 KiB

BIN
images/logo/facebook.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

BIN
images/logo/lgsm-dark-full.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

BIN
images/logo/lgsm-dark-square-114.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

BIN
images/logo/lgsm-dark-square-16.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 653 B

BIN
images/logo/lgsm-dark-square-184.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

BIN
images/logo/lgsm-dark-square-24.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1008 B

BIN
images/logo/lgsm-dark-square-512.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

BIN
images/logo/lgsm-dark-square-64.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

BIN
images/logo/lgsm-light-full.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

BIN
images/logo/lgsm_full.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

BIN
images/logo/lgsmbutton.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

BIN
images/wallpaper/LinuxGSM_wallpaper.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 KiB

BIN
images/wallpaper/LinuxGSM_wallpaper_2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

104
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 protected]"
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="[email protected]"
mailgunemail="[email protected]"
# 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"

118
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 protected]"
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="[email protected]"
mailgunemail="[email protected]"
# 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"

2
lgsm/config-default/config-lgsm/ut3server/_default.cfg

@ -11,7 +11,7 @@
## Server Start Settings | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters ## Server Start Settings | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters
ip="0.0.0.0" ip="0.0.0.0"
port="7777" port="7777"
queryport="25300" queryport="6500"
defaultmap="VCTF-Suspense" defaultmap="VCTF-Suspense"
game="UTGameContent.UTVehicleCTFGame_Content" game="UTGameContent.UTVehicleCTFGame_Content"
mutators="" #"UTGame.UTMutator_Instagib,UTGame.UTMutator_LowGrav" mutators="" #"UTGame.UTMutator_Instagib,UTGame.UTMutator_LowGrav"

2
lgsm/data/serverlist.csv

@ -58,6 +58,7 @@ qw,qwserver,Quake World
ro,roserver,Red Orchestra: Ostfront 41-45 ro,roserver,Red Orchestra: Ostfront 41-45
ricochet,ricochetserver,Ricochet ricochet,ricochetserver,Ricochet
rust,rustserver,Rust rust,rustserver,Rust
rw,rwserver, Rising World
samp,sampserver,San Andreas Multiplayer samp,sampserver,San Andreas Multiplayer
ss3,ss3server,Serious Sam 3: BFE ss3,ss3server,Serious Sam 3: BFE
sb,sbserver,Starbound sb,sbserver,Starbound
@ -74,4 +75,5 @@ ut2k4,ut2k4server,Unreal Tournament 2004
ut3,ut3server,Unreal Tournament 3 ut3,ut3server,Unreal Tournament 3
ut99,ut99server,Unreal Tournament 99 ut99,ut99server,Unreal Tournament 99
wet,wetserver,Wolfenstein: Enemy Territory wet,wetserver,Wolfenstein: Enemy Territory
etl,etlserver,ET: Legacy
zps,zpsserver,Zombie Panic! Source zps,zpsserver,Zombie Panic! Source

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

4
lgsm/functions/alert.sh

@ -45,12 +45,12 @@ fn_alert_restart(){
} }
fn_alert_restart_query(){ fn_alert_restart_query(){
fn_script_log_info "Sending alert: Restarted: ${gsquerycmd}" fn_script_log_info "Sending alert: Restarted: ${servicename}"
alertsubject="Alert - ${servicename} - Restarted" alertsubject="Alert - ${servicename} - Restarted"
alertemoji="🚨" alertemoji="🚨"
alertsound="2" alertsound="2"
alerturl="not enabled" alerturl="not enabled"
alertbody="gsquery.py failed to query: ${gsquerycmd}" alertbody="Unable to query: ${servicename}"
} }
fn_alert_update(){ fn_alert_update(){

4
lgsm/functions/alert_discord.sh

@ -39,7 +39,7 @@ json=$(cat <<EOF
}, },
{ {
"name": "Server IP", "name": "Server IP",
"value": "[${ip}:${port}](https://www.gametracker.com/server_info/${ip}:${port})" "value": "[${extip:-$ip}:${port}](https://www.gametracker.com/server_info/${extip:-$ip}:${port})"
}, },
{ {
"name": "More info", "name": "More info",
@ -53,7 +53,7 @@ EOF
fn_print_dots "Sending Discord alert" fn_print_dots "Sending Discord alert"
sleep 0.5 sleep 0.5
discordsend=$(${curlpath} -sSL -H "Content-Type: application/json" -X POST -d """${json}""" ${discordwebhook}) discordsend=$(${curlpath} -sSL -H "Content-Type: application/json" -X POST -d """${json}""" "${discordwebhook}")
if [ -n "${discordsend}" ]; then if [ -n "${discordsend}" ]; then
fn_print_fail_nl "Sending Discord alert: ${discordsend}" fn_print_fail_nl "Sending Discord alert: ${discordsend}"

2
lgsm/functions/alert_ifttt.sh

@ -19,7 +19,7 @@ EOF
fn_print_dots "Sending IFTTT alert" fn_print_dots "Sending IFTTT alert"
sleep 0.5 sleep 0.5
iftttsend=$(${curlpath} -sSL -H "Content-Type: application/json" -X POST -d """${json}""" "https://maker.ifttt.com/trigger/${iftttevent}/with/key/${ifttttoken}"|grep "Bad Request") iftttsend=$(${curlpath} -sSL -H "Content-Type: application/json" -X POST -d """${json}""" "https://maker.ifttt.com/trigger/${iftttevent}/with/key/${ifttttoken}" | grep "Bad Request")
if [ -n "${iftttsend}" ]; then if [ -n "${iftttsend}" ]; then
fn_print_fail_nl "Sending IFTTT alert: ${pushbulletsend}" fn_print_fail_nl "Sending IFTTT alert: ${pushbulletsend}"

2
lgsm/functions/alert_mailgun.sh

@ -17,7 +17,7 @@ mailgunsend=$(${curlpath} -s --user "api:${mailguntoken}" \
-F subject="${alertemoji} ${alertsubject} ${alertemoji}" \ -F subject="${alertemoji} ${alertsubject} ${alertemoji}" \
-F o:tag='alert' \ -F o:tag='alert' \
-F o:tag='LinuxGSM' \ -F o:tag='LinuxGSM' \
-F text="$(cat ${alertlog})" https://api.mailgun.net/v3/${mailgundomain}/messages) -F text="$(cat "${alertlog}")" https://api.mailgun.net/v3/${mailgundomain}/messages)
if [ -z "${mailgunsend}" ]; then if [ -z "${mailgunsend}" ]; then
fn_print_fail_nl "Sending Email alert: Mailgun: ${email}" fn_print_fail_nl "Sending Email alert: Mailgun: ${email}"

6
lgsm/functions/alert_pushover.sh

@ -12,10 +12,10 @@ fn_print_dots "Sending Pushover alert"
sleep 0.5 sleep 0.5
# Different alerts are given different priorities and notification sounds # Different alerts are given different priorities and notification sounds
if [ "${alertsound}" == "1" ];then if [ "${alertsound}" == "1" ]; then
alertsound="" alertsound=""
alertpriority="0" alertpriority="0"
elif [ "${alertsound}" == "2" ];then elif [ "${alertsound}" == "2" ]; then
# restarted # restarted
alertsound="siren" alertsound="siren"
alertpriority="1" alertpriority="1"
@ -24,7 +24,7 @@ else
alertpriority="0" alertpriority="0"
fi fi
pushoversend=$(${curlpath} -sS -F token="${pushovertoken}" -F user="${pushoveruserkey}" -F html="1" -F sound="${alertsound}" -F priority="${alertpriority}" -F title="${alertemoji} ${alertsubject} ${alertemoji}" -F message=" <b>Message</b><br>${alertbody}<br><br><b>Game</b><br>${gamename}<br><br><b>Server name</b><br>${servername}<br><br><b>Hostname</b><br>${HOSTNAME}<br><br><b>Server IP</b><br><a href='https://www.gametracker.com/server_info/${ip}:${port}'>${ip}:${port}</a><br><br><b>More info</b><br><a href='${alerturl}'>${alerturl}</a>" "https://api.pushover.net/1/messages.json"|grep errors) pushoversend=$(${curlpath} -sS -F token="${pushovertoken}" -F user="${pushoveruserkey}" -F html="1" -F sound="${alertsound}" -F priority="${alertpriority}" -F title="${alertemoji} ${alertsubject} ${alertemoji}" -F message=" <b>Message</b><br>${alertbody}<br><br><b>Game</b><br>${gamename}<br><br><b>Server name</b><br>${servername}<br><br><b>Hostname</b><br>${HOSTNAME}<br><br><b>Server IP</b><br><a href='https://www.gametracker.com/server_info/${ip}:${port}'>${ip}:${port}</a><br><br><b>More info</b><br><a href='${alerturl}'>${alerturl}</a>" "https://api.pushover.net/1/messages.json" | grep errors)
if [ -n "${pushoversend}" ]; then if [ -n "${pushoversend}" ]; then
fn_print_fail_nl "Sending Pushover alert: ${pushoversend}" fn_print_fail_nl "Sending Pushover alert: ${pushoversend}"

2
lgsm/functions/check.sh

@ -61,7 +61,7 @@ do
fi fi
done done
local allowed_commands_array=( command_debug.sh command_details.sh command_monitor.sh command_start.sh command_stop.sh ) local allowed_commands_array=( command_debug.sh command_details.sh command_monitor.sh command_start.sh command_stop.sh command_dev_query_raw.sh )
for allowed_command in "${allowed_commands_array[@]}" for allowed_command in "${allowed_commands_array[@]}"
do do
if [ "${allowed_command}" == "${function_selfname}" ]; then if [ "${allowed_command}" == "${function_selfname}" ]; then

24
lgsm/functions/check_deps.sh

@ -73,11 +73,11 @@ fn_deps_detector(){
depstatus=1 depstatus=1
monocheck=1 monocheck=1
fi fi
elif [ -n "$(command -v apt-get 2>/dev/null)" ]; then elif [ -n "$(command -v apt 2>/dev/null)" ]; then
dpkg-query -W -f='${Status}' ${deptocheck} 2>/dev/null | grep -q -P '^install ok installed' dpkg-query -W -f='${Status}' "${deptocheck}" 2>/dev/null | grep -q -P '^install ok installed'
depstatus=$? depstatus=$?
elif [ -n "$(command -v yum 2>/dev/null)" ]; then 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=$? depstatus=$?
fi fi
@ -132,11 +132,11 @@ fn_found_missing_deps(){
sleep 0.5 sleep 0.5
fn_print_error_nl "Checking dependencies: missing: ${red}${array_deps_missing[@]}${default}" fn_print_error_nl "Checking dependencies: missing: ${red}${array_deps_missing[@]}${default}"
fn_script_log_error "Checking dependencies: missing: ${array_deps_missing[@]}" fn_script_log_error "Checking dependencies: missing: ${array_deps_missing[@]}"
sleep 1 sleep 0.5
if [ -n monocheck ]; then if [ -n monocheck ]; then
fn_add_mono_repo fn_add_mono_repo
fi fi
sleep 1 sleep 0.5
sudo -v > /dev/null 2>&1 sudo -v > /dev/null 2>&1
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
fn_print_information_nl "Automatically installing missing dependencies." fn_print_information_nl "Automatically installing missing dependencies."
@ -149,11 +149,11 @@ fn_found_missing_deps(){
sleep 1 sleep 1
echo -en " \r" echo -en " \r"
if [ -n "$(command -v dpkg-query 2>/dev/null)" ]; then 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[@]}" cmd="sudo dpkg --add-architecture i386; sudo apt update; sudo apt -y install ${array_deps_missing[@]}"
eval ${cmd} eval "${cmd}"
elif [ -n "$(command -v yum 2>/dev/null)" ]; then elif [ -n "$(command -v yum 2>/dev/null)" ]; then
cmd="sudo yum -y install ${array_deps_missing[@]}" cmd="sudo yum -y install ${array_deps_missing[@]}"
eval ${cmd} eval "${cmd}"
fi fi
if [ $? != 0 ]; then if [ $? != 0 ]; then
fn_print_failure_nl "Unable to install dependencies" 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_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." fn_script_log_warn "$(whoami) does not have sudo access. Manually install dependencies."
if [ -n "$(command -v dpkg-query 2>/dev/null)" ]; then 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 elif [ -n "$(command -v yum 2>/dev/null)" ]; then
echo " sudo yum install ${array_deps_missing[@]}" echo " sudo yum install ${array_deps_missing[@]}"
fi fi
@ -198,7 +198,7 @@ if [ "${function_selfname}" == "command_install.sh" ]; then
echo "=================================" echo "================================="
fi 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 if [ -n "$(command -v dpkg-query 2>/dev/null)" ]; then
# Generate array of missing deps # Generate array of missing deps
array_deps_missing=() array_deps_missing=()
@ -252,7 +252,7 @@ if [ -n "$(command -v dpkg-query 2>/dev/null)" ]; then
elif [ "${gamename}" == "Battlefield: 1942" ]; then elif [ "${gamename}" == "Battlefield: 1942" ]; then
array_deps_required+=( libncurses5:i386 ) array_deps_required+=( libncurses5:i386 )
# Call of Duty # 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 ) array_deps_required+=( libstdc++5:i386 )
# Factorio # Factorio
elif [ "${gamename}" == "Factorio" ]; then elif [ "${gamename}" == "Factorio" ]; then
@ -348,7 +348,7 @@ elif [ -n "$(command -v yum 2>/dev/null)" ]; then
elif [ "${gamename}" == "Battlefield: 1942" ]; then elif [ "${gamename}" == "Battlefield: 1942" ]; then
array_deps_required+=( ncurses-libs.i686 ) array_deps_required+=( ncurses-libs.i686 )
# Call of Duty # 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 ) array_deps_required+=( compat-libstdc++-33.i686 )
# Factorio # Factorio
elif [ "${gamename}" == "Factorio" ]; then elif [ "${gamename}" == "Factorio" ]; then

13
lgsm/functions/check_ip.sh

@ -14,18 +14,19 @@ if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${gamename}" != "Mumble" ]&&[ "${travi
else else
ipcommand="ip" ipcommand="ip"
fi fi
getip=$(${ipcommand} -o -4 addr|awk '{print $4}'|grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}'|grep -v 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) getipwc=$(${ipcommand} -o -4 addr| awk '{print $4}' | grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}' | grep -vc 127.0.0)
info_config.sh info_config.sh
info_parms.sh
# IP is not set to specific IP # IP is not set to specific IP
if [ "${ip}" == "0.0.0.0" ]||[ "${ip}" == "" ]; then if [ "${ip}" == "0.0.0.0" ]||[ "${ip}" == "" ]; then
fn_print_dots "Check IP" fn_print_dots "Check IP"
sleep 1 sleep 0.5
# Multiple interfaces # Multiple interfaces
if [ "${getipwc}" -ge "2" ]; then if [ "${getipwc}" -ge "2" ]; then
fn_print_fail "Check IP: Multiple IP addresses found." fn_print_fail "Check IP: Multiple IP addresses found."
sleep 1 sleep 0.5
echo -en "\n" echo -en "\n"
# IP is set within game config # IP is set within game config
if [ "${ipsetinconfig}" == "1" ]; then if [ "${ipsetinconfig}" == "1" ]; then
@ -57,7 +58,7 @@ if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${gamename}" != "Mumble" ]&&[ "${travi
# Single interface # Single interface
elif [ "${ipsetinconfig}" == "1" ]; then elif [ "${ipsetinconfig}" == "1" ]; then
fn_print_fail "Check IP: IP address not set in game config." fn_print_fail "Check IP: IP address not set in game config."
sleep 1 sleep 0.5
echo -en "\n" echo -en "\n"
fn_print_information "Specify the IP you want to bind within ${servercfg}.\n" fn_print_information "Specify the IP you want to bind within ${servercfg}.\n"
echo -en " * location: ${servercfgfullpath}\n" echo -en " * location: ${servercfgfullpath}\n"
@ -74,7 +75,7 @@ if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${gamename}" != "Mumble" ]&&[ "${travi
else else
fn_print_info_nl "Check IP: ${getip}" fn_print_info_nl "Check IP: ${getip}"
fn_script_log_info "IP automatically set as: ${getip}" fn_script_log_info "IP automatically set as: ${getip}"
sleep 1 sleep 0.5
ip="${getip}" ip="${getip}"
fi fi
fi fi

34
lgsm/functions/check_permissions.sh

@ -9,17 +9,17 @@ local commandname="CHECK"
fn_check_ownership(){ fn_check_ownership(){
if [ -f "${rootdir}/${selfname}" ]; then 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 selfownissue=1
fi fi
fi fi
if [ -d "${functionsdir}" ]; then 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 funcownissue=1
fi fi
fi fi
if [ -d "${serverfiles}" ]; then 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 filesownissue=1
fi fi
fi fi
@ -31,13 +31,13 @@ fn_check_ownership(){
{ {
echo -e "User\tGroup\tFile\n" echo -e "User\tGroup\tFile\n"
if [ "${selfownissue}" == "1" ]; then 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 fi
if [ "${funcownissue}" == "1" ]; then 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 fi
if [ "${filesownissue}" == "1" ]; then 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 fi
} | column -s $'\t' -t | tee -a "${lgsmlog}" } | column -s $'\t' -t | tee -a "${lgsmlog}"
@ -54,7 +54,7 @@ fn_check_ownership(){
fn_check_permissions(){ fn_check_permissions(){
if [ -d "${functionsdir}" ]; then 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_print_fail_nl "Permissions issues found"
fn_script_log_fatal "Permissions issues found" fn_script_log_fatal "Permissions issues found"
fn_print_information_nl "The following files are not executable:" fn_print_information_nl "The following files are not executable:"
@ -102,9 +102,9 @@ fn_check_permissions(){
userexecperm="${execperm:0:1}" userexecperm="${execperm:0:1}"
groupexecperm="${execperm:1:1}" groupexecperm="${execperm:1:1}"
# Check for invalid user permission # 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 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 # If permission issues are found
fn_print_warn_nl "Permissions issue found" fn_print_warn_nl "Permissions issue found"
fn_script_log_warn "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 # Grab the first and second digit for user and group permission
userexecperm="${execperm:0:1}" userexecperm="${execperm:0:1}"
groupexecperm="${execperm:1:1}" groupexecperm="${execperm:1:1}"
if [ "${userexecperm}" == "0" ] || [ "${userexecperm}" == "2" ] || [ "${userexecperm}" == "4" ] || [ "${userexecperm}" == "6" ]; then if [ "${userexecperm}" == "0" ]||[ "${userexecperm}" == "2" ]||[ "${userexecperm}" == "4" ]||[ "${userexecperm}" == "6" ]; then
if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ] || [ "${groupexecperm}" == "6" ]; then if [ "${groupexecperm}" == "0" ]||[ "${groupexecperm}" == "2" ]||[ "${groupexecperm}" == "4" ]||[ "${groupexecperm}" == "6" ]; then
# If errors are still found # If errors are still found
fn_print_fail_nl "The following file could not be set executable:" fn_print_fail_nl "The following file could not be set executable:"
ls -l "${executabledir}/${execname}" ls -l "${executabledir}/${execname}"
fn_script_log_warn "The following file could not be set executable:" fn_script_log_warn "The following file could not be set executable:"
fn_script_log_info "${executabledir}/${execname}" fn_script_log_info "${executabledir}/${execname}"
if [ "${monitorflag}" == 1 ]; then if [ "${monitorflag}" == "1" ]; then
alert="permissions" alert="permissions"
alert.sh alert.sh
fi 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:" fn_script_log_info "To fix this issue, run the following command as root:"
echo " chmod a+rx /sys /sys/class /sys/class/net" echo " chmod a+rx /sys /sys/class /sys/class/net"
fn_script_log "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 if [ "${monitorflag}" == 1 ]; then
alert="permissions" alert="permissions"
alert.sh alert.sh
@ -184,7 +184,7 @@ fn_sys_perm_errors_fix(){
sudo -v > /dev/null 2>&1 sudo -v > /dev/null 2>&1
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
fn_print_dots "Automatically fixing /sys permissions" fn_print_dots "Automatically fixing /sys permissions"
sleep 2 sleep 0.5
fn_script_log_info "Automatically fixing /sys permissions." fn_script_log_info "Automatically fixing /sys permissions."
if [ "${sysdirpermerror}" == "1" ]; then if [ "${sysdirpermerror}" == "1" ]; then
sudo chmod a+rx "/sys" sudo chmod a+rx "/sys"
@ -200,13 +200,13 @@ fn_sys_perm_errors_fix(){
if [ "${sysdirpermerror}" == "1" ]||[ "${classdirpermerror}" == "1" ]||[ "${netdirpermerror}" == "1" ]; then if [ "${sysdirpermerror}" == "1" ]||[ "${classdirpermerror}" == "1" ]||[ "${netdirpermerror}" == "1" ]; then
fn_print_error "Could not fix /sys permissions" fn_print_error "Could not fix /sys permissions"
fn_script_log_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 # Show the user how to fix
fn_sys_perm_fix_manually_msg fn_sys_perm_fix_manually_msg
else else
fn_print_ok_nl "Automatically fixing /sys permissions" fn_print_ok_nl "Automatically fixing /sys permissions"
fn_script_log_pass "Permissions in /sys fixed" fn_script_log_pass "Permissions in /sys fixed"
sleep 1 sleep 0.5
fi fi
else else
# Show the user how to fix # Show the user how to fix
@ -221,7 +221,7 @@ fn_sys_perm_error_process(){
if [ "${sysdirpermerror}" == "1" ]||[ "${classdirpermerror}" == "1" ]||[ "${netdirpermerror}" == "1" ]; then if [ "${sysdirpermerror}" == "1" ]||[ "${classdirpermerror}" == "1" ]||[ "${netdirpermerror}" == "1" ]; then
fn_print_error_nl "Permission error(s) found in /sys" fn_print_error_nl "Permission error(s) found in /sys"
fn_script_log_error "Permission error(s) found in /sys" fn_script_log_error "Permission error(s) found in /sys"
sleep 1 sleep 0.5
# Run the fix # Run the fix
fn_sys_perm_errors_fix fn_sys_perm_errors_fix
fi fi

6
lgsm/functions/check_status.sh

@ -12,7 +12,7 @@ if [ "${gamename}" == "TeamSpeak 3" ]; then
# 1: Server is running # 1: Server is running
# 0: Server seems to have died # 0: Server seems to have died
# 0: No server running (ts3server.pid is missing) # 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 if [ "${status}" == "Server is running" ]; then
status=1 status=1
else else
@ -25,12 +25,12 @@ elif [ "${gamename}" == "Mumble" ]; then
info_config.sh info_config.sh
# 1: Server is listening # 1: Server is listening
# 0: Server is not listening, considered closed # 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 if [ -z "${mumblepid}" ]; then
status=0 status=0
else else
status=1 status=1
fi fi
else 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 fi

3
lgsm/functions/check_steamcmd.sh

@ -40,7 +40,6 @@ fn_check_steamcmd_user(){
fi fi
steamuser="anonymous" steamuser="anonymous"
steampass='' steampass=''
sleep 1
fi fi
} }
@ -53,7 +52,7 @@ fn_check_steamcmd_sh(){
else else
fn_print_error_nl "SteamCMD is missing" fn_print_error_nl "SteamCMD is missing"
fn_script_log_error "SteamCMD is missing" fn_script_log_error "SteamCMD is missing"
sleep 1 sleep 0.5
fn_install_steamcmd fn_install_steamcmd
fi fi
elif [ "${function_selfname}" == "command_install.sh" ]; then elif [ "${function_selfname}" == "command_install.sh" ]; then

4
lgsm/functions/check_system_requirements.sh

@ -39,8 +39,8 @@ if [ -n "${ramrequirementmb}" ]; then
sleep 0.5 sleep 0.5
# Warn the user # Warn the user
fn_print_warn_nl "Check RAM: ${ramrequirementgb}G required, ${physmemtotal} available" 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." echo " * ${gamename} server may fail to run or experience poor performance."
sleep 1 sleep 0.5
fi fi
fi fi

28
lgsm/functions/command_backup.sh

@ -17,7 +17,7 @@ fn_backup_trap(){
echo -ne "backup ${backupname}.tar.gz..." echo -ne "backup ${backupname}.tar.gz..."
fn_print_canceled_eol_nl fn_print_canceled_eol_nl
fn_script_log_info "Backup ${backupname}.tar.gz: CANCELED" fn_script_log_info "Backup ${backupname}.tar.gz: CANCELED"
sleep 1 sleep 0.5
rm -f "${backupdir}/${backupname}.tar.gz" | tee -a "${lgsmlog}" rm -f "${backupdir}/${backupname}.tar.gz" | tee -a "${lgsmlog}"
echo -ne "backup ${backupname}.tar.gz..." echo -ne "backup ${backupname}.tar.gz..."
fn_print_removed_eol_nl fn_print_removed_eol_nl
@ -44,9 +44,9 @@ fn_backup_init(){
info_distro.sh info_distro.sh
fn_print_dots "Backup starting" fn_print_dots "Backup starting"
fn_script_log_info "Backup starting" fn_script_log_info "Backup starting"
sleep 1 sleep 0.5
fn_print_ok "Backup starting" fn_print_ok "Backup starting"
sleep 1 sleep 0.5
echo -ne "\n" echo -ne "\n"
if [ ! -d "${backupdir}" ]||[ "${backupcount}" == "0" ]; then if [ ! -d "${backupdir}" ]||[ "${backupcount}" == "0" ]; then
fn_print_info_nl "There are no previous backups" fn_print_info_nl "There are no previous backups"
@ -59,11 +59,11 @@ fn_backup_init(){
daysago="${lastbackupdaysago} days ago" daysago="${lastbackupdaysago} days ago"
fi fi
echo " * Previous backup was created ${daysago}, total size ${lastbackupsize}" echo " * Previous backup was created ${daysago}, total size ${lastbackupsize}"
sleep 1 sleep 0.5
fi 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(){ fn_backup_stop_server(){
check_status.sh check_status.sh
# Server is stopped # Server is stopped
@ -80,7 +80,7 @@ fn_backup_stop_server(){
else else
fn_print_warn_nl "${servicename} will be stopped during the backup" fn_print_warn_nl "${servicename} will be stopped during the backup"
fn_script_log_warn "${servicename} will be stopped during the backup" fn_script_log_warn "${servicename} will be stopped during the backup"
sleep 4 sleep 5
serverstopped="yes" serverstopped="yes"
exitbypass=1 exitbypass=1
command_stop.sh command_stop.sh
@ -131,7 +131,7 @@ fn_backup_compression(){
fn_script_log_fatal "Starting backup" fn_script_log_fatal "Starting backup"
else else
fn_print_ok_eol 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_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}')" fn_script_log_pass "Backup created: ${backupname}.tar.gz, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')"
fi fi
@ -153,18 +153,18 @@ fn_backup_prune(){
if [ "${backupquotadiff}" -gt "0" ]||[ "${backupsoudatedcount}" -gt "0" ]; then if [ "${backupquotadiff}" -gt "0" ]||[ "${backupsoudatedcount}" -gt "0" ]; then
fn_print_dots "Pruning" fn_print_dots "Pruning"
fn_script_log_info "Backup pruning activated" fn_script_log_info "Backup pruning activated"
sleep 1 sleep 0.5
fn_print_ok_nl "Pruning" fn_print_ok_nl "Pruning"
sleep 1 sleep 0.5
# If maxbackups greater or equal to backupsoutdatedcount, then it is over maxbackupdays # If maxbackups greater or equal to backupsoutdatedcount, then it is over maxbackupdays
if [ "${backupquotadiff}" -ge "${backupsoudatedcount}" ]; then if [ "${backupquotadiff}" -ge "${backupsoudatedcount}" ]; then
# Display how many backups will be cleared # Display how many backups will be cleared
echo " * Pruning: ${backupquotadiff} backup(s) has exceeded the ${maxbackups} backups limit" 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" 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_print_dots "Pruning: Clearing ${backupquotadiff} backup(s)"
fn_script_log_info "Pruning: Clearing ${backupquotadiff} backup(s)" fn_script_log_info "Pruning: Clearing ${backupquotadiff} backup(s)"
sleep 1 sleep 0.5
# Clear backups over quota # Clear backups over quota
find "${backupdir}"/ -type f -name "*.tar.gz" -printf '%T@ %p\n' | sort -rn | tail -${backupquotadiff} | cut -f2- -d" " | xargs rm 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)" fn_print_ok_nl "Pruning: Clearing ${backupquotadiff} backup(s)"
@ -174,16 +174,16 @@ fn_backup_prune(){
# Display how many backups will be cleared # Display how many backups will be cleared
echo " * Pruning: ${backupsoudatedcount} backup(s) are older than ${maxbackupdays} days." echo " * Pruning: ${backupsoudatedcount} backup(s) are older than ${maxbackupdays} days."
fn_script_log_info "Pruning: ${backupsoudatedcount} backup(s) 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_print_dots "Pruning: Clearing ${backupquotadiff} backup(s)."
fn_script_log_info "Pruning: Clearing ${backupquotadiff} backup(s)" fn_script_log_info "Pruning: Clearing ${backupquotadiff} backup(s)"
sleep 1 sleep 0.5
# Clear backups over quota # Clear backups over quota
find "${backupdir}"/ -type f -mtime +"${maxbackupdays}" -exec rm -f {} \; find "${backupdir}"/ -type f -mtime +"${maxbackupdays}" -exec rm -f {} \;
fn_print_ok_nl "Pruning: Clearing ${backupquotadiff} backup(s)" fn_print_ok_nl "Pruning: Clearing ${backupquotadiff} backup(s)"
fn_script_log_pass "Pruning: Cleared ${backupquotadiff} backup(s)" fn_script_log_pass "Pruning: Cleared ${backupquotadiff} backup(s)"
fi fi
sleep 1 sleep 0.5
fi fi
fi fi
} }

8
lgsm/functions/command_console.sh

@ -24,19 +24,19 @@ if ! fn_prompt_yn "Continue?" Y; then
echo Exiting; return echo Exiting; return
fi fi
fn_print_dots "Accessing console" fn_print_dots "Accessing console"
sleep 1 sleep 0.5
check_status.sh check_status.sh
if [ "${status}" != "0" ]; then if [ "${status}" != "0" ]; then
fn_print_ok_nl "Accessing console" fn_print_ok_nl "Accessing console"
fn_script_log_pass "Console accessed" fn_script_log_pass "Console accessed"
sleep 1 sleep 0.5
tmux attach-session -t ${servicename} tmux attach-session -t "${servicename}"
fn_print_ok_nl "Closing console" fn_print_ok_nl "Closing console"
fn_script_log_pass "Console closed" fn_script_log_pass "Console closed"
else else
fn_print_error_nl "Server not running" fn_print_error_nl "Server not running"
fn_script_log_error "Failed to access: 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 if fn_prompt_yn "Do you want to start the server?" Y; then
exitbypass=1 exitbypass=1
command_start.sh command_start.sh

9
lgsm/functions/command_debug.sh

@ -40,7 +40,7 @@ if [ -n "${glibcrequired}" ]; then
: :
elif [ "${glibcrequired}" == "UNKNOWN" ]; then elif [ "${glibcrequired}" == "UNKNOWN" ]; then
echo -e "${blue}GLIBC required:\t${red}${glibcrequired}" 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 if [ "${glibcfix}" == "yes" ]; then
echo -e "${blue}GLIBC required:\t${red}${glibcrequired} ${default}(${green}Using GLIBC fix${default})" echo -e "${blue}GLIBC required:\t${red}${glibcrequired} ${default}(${green}Using GLIBC fix${default})"
else else
@ -80,12 +80,12 @@ fi
fn_print_info_nl "Stopping any running servers" fn_print_info_nl "Stopping any running servers"
fn_script_log_info "Stopping any running servers" fn_script_log_info "Stopping any running servers"
sleep 1 sleep 0.5
exitbypass=1 exitbypass=1
command_stop.sh command_stop.sh
fn_print_dots "Starting debug" fn_print_dots "Starting debug"
fn_script_log_info "Starting debug" fn_script_log_info "Starting debug"
sleep 1 sleep 0.5
fn_print_ok_nl "Starting debug" fn_print_ok_nl "Starting debug"
# Create lockfile # Create lockfile
@ -95,7 +95,8 @@ fn_script_log_info "${rootdir}/${lockselfname}"
# trap to remove lockfile on quit. # trap to remove lockfile on quit.
trap fn_lockfile_trap INT 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 if [ "${engine}" == "source" ]||[ "${engine}" == "goldsource" ]; then
${executable} ${parms} -debug ${executable} ${parms} -debug
elif [ "${engine}" == "realvirtuality" ]; then elif [ "${engine}" == "realvirtuality" ]; then

3
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. # Run checks and gathers details to display.
check.sh check.sh
info_config.sh info_config.sh
info_parms.sh
info_distro.sh info_distro.sh
info_glibc.sh info_glibc.sh
info_parms.sh
info_messages.sh info_messages.sh
query_gamedig.sh
fn_info_message_distro fn_info_message_distro
fn_info_message_performance fn_info_message_performance
fn_info_message_disk fn_info_message_disk

14
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

10
lgsm/functions/command_dev_detect_deps.sh

@ -4,8 +4,8 @@
# Website: https://linuxgsm.com # Website: https://linuxgsm.com
# Description: Detects dependencies the server binary requires. # Description: Detects dependencies the server binary requires.
local commandname="DEPS-DETECT" local commandname="DETECT-DEPS"
local commandaction="Deps-Detect" local commandaction="Detect-Deps"
local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
echo "=================================" echo "================================="
@ -24,9 +24,9 @@ files=$(find "${serverfiles}" | wc -l)
find "${serverfiles}" -type f -print0 | find "${serverfiles}" -type f -print0 |
while IFS= read -r -d $'\0' line; do while IFS= read -r -d $'\0' line; do
if [ "${readelf}" == "eu-readelf" ]; then 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 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 fi
echo -n "${i} / ${files}" $'\r' echo -n "${i} / ${files}" $'\r'
((i++)) ((i++))
@ -114,7 +114,7 @@ fi
echo "" echo ""
echo "Required Librarys" echo "Required Librarys"
echo "=================================" echo "================================="
sort "${tmpdir}/.depdetect_readelf" |uniq sort "${tmpdir}/.depdetect_readelf" | uniq
echo -en "\n" echo -en "\n"
rm -f "${tmpdir}/.depdetect_centos_line" rm -f "${tmpdir}/.depdetect_centos_line"
rm -f "${tmpdir}/.depdetect_centos_list" rm -f "${tmpdir}/.depdetect_centos_list"

10
lgsm/functions/command_dev_detect_glibc.sh

@ -5,6 +5,10 @@
# Description: Automatically detects the version of GLIBC that is required. # Description: Automatically detects the version of GLIBC that is required.
# Can check a file or directory recursively. # 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 "================================="
echo "GLIBC Requirements Checker" echo "GLIBC Requirements Checker"
echo "=================================" echo "================================="
@ -31,18 +35,18 @@ echo ""
files=$(find "${serverfiles}" | wc -l) files=$(find "${serverfiles}" | wc -l)
find "${serverfiles}" -type f -print0 | find "${serverfiles}" -type f -print0 |
while IFS= read -r -d $'\0' line; do 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 if [ "${glibcversion}" ]; then
echo "${glibcversion}: ${line}" >>"${tmpdir}/detect_glibc_files.tmp" echo "${glibcversion}: ${line}" >>"${tmpdir}/detect_glibc_files.tmp"
fi 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' echo -n "${i} / ${files}" $'\r'
((i++)) ((i++))
done done
echo "" echo ""
cat "${tmpdir}/detect_glibc_files.tmp" cat "${tmpdir}/detect_glibc_files.tmp"
echo "" 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.tmp"
rm "${tmpdir}/detect_glibc_files.tmp" rm "${tmpdir}/detect_glibc_files.tmp"

16
lgsm/functions/command_dev_detect_ldd.sh

@ -5,6 +5,10 @@
# Description: Automatically detects required deps using ldd. # Description: Automatically detects required deps using ldd.
# Can check a file or directory recursively. # 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 "================================="
echo "Shared Object dependencies Checker" echo "Shared Object dependencies Checker"
echo "=================================" echo "================================="
@ -25,14 +29,14 @@ echo ""
files=$(find "${serverfiles}" | wc -l) files=$(find "${serverfiles}" | wc -l)
find "${serverfiles}" -type f -print0 | find "${serverfiles}" -type f -print0 |
while IFS= read -r -d $'\0' line; do while IFS= read -r -d $'\0' line; do
#ldd -v $line 2>/dev/null|grep "=>" >>"${tmpdir}/detect_ldd.tmp" if ldd "${line}" 2>/dev/null | grep -v "not a dynamic executable"
if [ -n "$(ldd "${line}" 2>/dev/null |grep -v "not a dynamic executable")" ]; then then
echo "${line}" >> "${tmpdir}/detect_ldd.tmp" echo "${line}" >> "${tmpdir}/detect_ldd.tmp"
ldd "${line}" 2>/dev/null |grep -v "not a dynamic executable" >> "${tmpdir}/detect_ldd.tmp" 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"
if [ -n "$(ldd "${line}" 2>/dev/null |grep -v "not a dynamic executable"|grep "not found")" ]; then then
echo "${line}" >> "${tmpdir}/detect_ldd_not_found.tmp" 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
fi fi
echo -n "$i / $files" $'\r' echo -n "$i / $files" $'\r'

44
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}"

6
lgsm/functions/command_fastdl.sh

@ -271,7 +271,7 @@ fn_fastdl_gmod(){
fi fi
# Clear addons directory in fastdl # Clear addons directory in fastdl
echo -en "clearing addons dir from fastdl dir..." echo -en "clearing addons dir from fastdl dir..."
sleep 1 sleep 0.5
rm -R "${fastdldir:?}/addons" rm -R "${fastdldir:?}/addons"
exitcode=$? exitcode=$?
if [ ${exitcode} -ne 0 ]; then 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 # Correct content that may be into a lua directory by mistake like some darkrpmodification addons
if [ -d "${fastdldir}/lua" ]; then if [ -d "${fastdldir}/lua" ]; then
echo -en "correcting DarkRP files..." echo -en "correcting DarkRP files..."
sleep 2 sleep 1
cp -Rf "${fastdldir}/lua/"* "${fastdldir}" cp -Rf "${fastdldir}/lua/"* "${fastdldir}"
exitcode=$? exitcode=$?
if [ ${exitcode} -ne 0 ]; then if [ ${exitcode} -ne 0 ]; then
@ -302,7 +302,7 @@ fn_fastdl_gmod(){
totalfiles=$(wc -l < "${tmpdir}/fastdl_files_to_compress.txt") totalfiles=$(wc -l < "${tmpdir}/fastdl_files_to_compress.txt")
# Calculates total file size # Calculates total file size
while read dufile; do while read dufile; do
filesize=$(du -b "${dufile}"| awk '{ print $1 }') filesize=$(du -b "${dufile}" | awk '{ print $1 }')
filesizetotal=$(( ${filesizetotal} + ${filesize} )) filesizetotal=$(( ${filesizetotal} + ${filesize} ))
done <"${tmpdir}/fastdl_files_to_compress.txt" done <"${tmpdir}/fastdl_files_to_compress.txt"
fi fi

4
lgsm/functions/command_mods_install.sh

@ -16,7 +16,7 @@ fn_print_header
# Displays a list of installed mods # Displays a list of installed mods
fn_mods_installed_list fn_mods_installed_list
if [ ${installedmodscount} -gt 0 ]; then if [ "${installedmodscount}" -gt "0" ]; then
echo "Installed addons/mods" echo "Installed addons/mods"
echo "=================================" echo "================================="
# Go through all available commands, get details and display them to the user # 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 if [ -n "$(sed -n "/^${modcommand}$/p" "${modsinstalledlistfullpath}")" ]; then
fn_print_warning_nl "${modprettyname} is already installed" fn_print_warning_nl "${modprettyname} is already installed"
fn_script_log_warn "${modprettyname} is already installed" fn_script_log_warn "${modprettyname} is already installed"
sleep 1 sleep 0.5
echo " * Any configs may be overwritten." echo " * Any configs may be overwritten."
if ! fn_prompt_yn "Continue?" Y; then if ! fn_prompt_yn "Continue?" Y; then
echo Exiting; core_exit.sh echo Exiting; core_exit.sh

2
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 "removing ${modprettyname}"
echo -e "* ${modsfilelistsize} files to be removed" echo -e "* ${modsfilelistsize} files to be removed"
echo -e "* location: ${modinstalldir}" echo -e "* location: ${modinstalldir}"
sleep 1 sleep 0.5
# Go through every file and remove it # Go through every file and remove it
modfileline="1" modfileline="1"
tput sc tput sc

2
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)" echo -e " * ${yellow}${modprettyname}${default} (retain common custom files)"
fi fi
done done
sleep 1 sleep 0.5
## Update ## Update
# List all installed mods and apply update # List all installed mods and apply update

202
lgsm/functions/command_monitor.sh

@ -4,12 +4,82 @@
# Contributor: UltimateByte # Contributor: UltimateByte
# Website: https://linuxgsm.com # Website: https://linuxgsm.com
# Description: Monitors server by checking for running processes. # Description: Monitors server by checking for running processes.
# then passes to monitor_gsquery.sh. # then passes to gamedig and gsquery.
local commandname="MONITOR" local commandname="MONITOR"
local commandaction="Monitor" local commandaction="Monitor"
local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" 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(){ fn_monitor_check_lockfile(){
# Monitor does not run it lockfile is not found # Monitor does not run it lockfile is not found
if [ ! -f "${rootdir}/${lockselfname}" ]; then if [ ! -f "${rootdir}/${lockselfname}" ]; then
@ -22,102 +92,104 @@ fn_monitor_check_lockfile(){
fn_monitor_check_update(){ fn_monitor_check_update(){
# Monitor will not check if update is running. # 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_print_error_nl "SteamCMD is currently checking for updates"
fn_script_log_error "SteamCMD is currently checking for updates" fn_script_log_error "SteamCMD is currently checking for updates"
sleep 1 sleep 0.5
core_exit.sh core_exit.sh
fi fi
} }
fn_monitor_msg_checking(){ fn_monitor_check_session(){
fn_print_dots "Checking session: " fn_print_dots "Checking session: "
fn_print_checking_eol fn_print_checking_eol
fn_script_log_info "Checking session: CHECKING" fn_script_log_info "Checking session: CHECKING"
sleep 1 sleep 0.5
}
fn_monitor_teamspeak3(){
if [ "${status}" != "0" ]; then if [ "${status}" != "0" ]; then
fn_print_ok "Checking session: " fn_print_ok "Checking session: "
fn_print_ok_eol_nl fn_print_ok_eol_nl
fn_script_log_pass "Checking session: OK" fn_script_log_pass "Checking session: OK"
else 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_print_fail_eol_nl
fn_script_log_error "Checking session: ${ts3error}: FAIL" fn_script_log_error "Checking session: FAIL"
failurereason="${ts3error}"
alert="restart" alert="restart"
alert.sh alert.sh
fn_script_log_info "Monitor is starting ${servername}" fn_script_log_info "Monitor is starting ${servername}"
sleep 1 sleep 0.5
command_restart.sh command_restart.sh
fi fi
sleep 0.5
} }
fn_monitor_mumble(){ fn_monitor_query(){
if [ "${status}" != "0" ]; then fn_script_log_info "Querying port: query enabled"
fn_print_ok "Checking session: " # engines that work with query
fn_print_ok_eol_nl 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 )
fn_script_log_pass "Checking session: OK" for allowed_engine in "${allowed_engines_array[@]}"
else do
fn_print_error "Checking session: Not listening to port ${port}" if [ "${allowed_engine}" == "${engine}" ]; then
fn_print_fail_eol_nl if [ "${engine}" == "idtech3_ql" ]; then
fn_script_log_error "Checking session: Not listening to port ${port}" local engine="quakelive"
failurereason="Checking session: Not listening to port ${port}" elif [ "${gamename}" == "Killing Floor 2" ]; then
alert="restart" local engine="unreal4"
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
fi fi
done
else # will first attempt to use gamedig then gsquery
fn_print_error "Checking session: " totalseconds=0
fn_print_fail_eol_nl local query_methods_array=( gamedig gsquery )
fn_script_log_error "Checking session: FAIL" for query_method in "${query_methods_array[@]}"
alert="restart" do
alert.sh if [ "${query_method}" == "gamedig" ]; then
fn_script_log_info "Monitor is starting ${servername}" # will bypass gamedig if not installed
sleep 1 if [ "$(command -v gamedig 2>/dev/null)" ]&&[ "$(command -v jq 2>/dev/null)" ]; then
command_restart.sh if [ -z "${monitorpass}" ]; then
fi 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 monitorflag=1
fn_print_dots "${servername}" fn_print_dots "${servername}"
sleep 1 sleep 0.5
check.sh check.sh
logs.sh logs.sh
info_config.sh info_config.sh
info_parms.sh
fn_monitor_check_lockfile fn_monitor_check_lockfile
fn_monitor_check_update fn_monitor_check_update
fn_monitor_msg_checking fn_monitor_check_session
if [ "${gamename}" == "TeamSpeak 3" ]; then # Query has to be enabled in Starbound config
fn_monitor_teamspeak3 if [ "${gamename}" == "Starbound" ]; then
elif [ "${gamename}" == "Mumble" ]; then if [ "${queryenabled}" == "true" ]; then
fn_monitor_mumble fn_monitor_query
fi
elif [ "${gamename}" == "TeamSpeak 3" ]; then
fn_monitor_query_telnet
else else
fn_monitor_tmux fn_monitor_query
fi fi
core_exit.sh
core_exit.sh

4
lgsm/functions/command_postdetails.sh

@ -74,7 +74,7 @@ fi
if [ "${posttarget}" == "http://pastebin.com" ] ; then if [ "${posttarget}" == "http://pastebin.com" ] ; then
fn_print_dots "Posting details to pastbin.com for ${postexpire}" 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. # grab the return from 'value' from an initial visit to pastebin.
csrftoken=$(${curlpath} -s "${posttarget}" | csrftoken=$(${curlpath} -s "${posttarget}" |
sed -n 's/^.*input type="hidden" name="csrf_token_post" value="\(.*\)".*$/\1/p') 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}" echo " Please share the following url for support: ${pdurl}"
elif [ "${posttarget}" == "https://hastebin.com" ] ; then elif [ "${posttarget}" == "https://hastebin.com" ] ; then
fn_print_dots "Posting details to hastebin.com" fn_print_dots "Posting details to hastebin.com"
sleep 1 sleep 0.5
# hastebin is a bit simpler. If successful, the returned result # hastebin is a bit simpler. If successful, the returned result
# should look like: {"something":"key"}, putting the reference that # should look like: {"something":"key"}, putting the reference that
# we need in "key". TODO - error handling. -CedarLUG # we need in "key". TODO - error handling. -CedarLUG

74
lgsm/functions/command_start.sh

@ -15,24 +15,16 @@ fn_start_teamspeak3(){
fn_script_log_warn "${servercfgfullpath} is missing" fn_script_log_warn "${servercfgfullpath} is missing"
echo " * Creating blank ${servercfg}" echo " * Creating blank ${servercfg}"
fn_script_log_info "Creating blank ${servercfg}" fn_script_log_info "Creating blank ${servercfg}"
sleep 2 sleep 1
echo " * ${servercfg} can remain blank by default." echo " * ${servercfg} can remain blank by default."
fn_script_log_info "${servercfgfullpath} 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}." echo " * ${servercfg} is located in ${servercfgfullpath}."
fn_script_log_info "${servercfg} is located in ${servercfgfullpath}." fn_script_log_info "${servercfg} is located in ${servercfgfullpath}."
sleep 5 sleep 5
touch "${servercfgfullpath}" touch "${servercfgfullpath}"
fi fi
sleep 1 sleep 0.5
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
if [ -f "${lgsmlog}" ]; then if [ -f "${lgsmlog}" ]; then
mv "${lgsmlog}" "${lgsmlogdate}" mv "${lgsmlog}" "${lgsmlogdate}"
fi fi
@ -52,7 +44,7 @@ fn_start_teamspeak3(){
else else
./ts3server_startscript.sh start inifile="${servercfgfullpath}" > /dev/null 2>&1 ./ts3server_startscript.sh start inifile="${servercfgfullpath}" > /dev/null 2>&1
fi fi
sleep 1 sleep 0.5
check_status.sh check_status.sh
if [ "${status}" == "0" ]; then if [ "${status}" == "0" ]; then
fn_print_fail_nl "Unable to start ${servername}" fn_print_fail_nl "Unable to start ${servername}"
@ -81,26 +73,15 @@ fn_start_tmux(){
fi fi
# Log rotation # Log rotation
check_status.sh fn_script_log_info "Rotating log files"
if [ "${status}" == "0" ]; then if [ "${engine}" == "unreal2" ]&&[ -f "${gamelog}" ]; then
fn_script_log_info "Rotating log files" mv "${gamelog}" "${gamelogdate}"
if [ "${engine}" == "unreal2" ]; then fi
if [ -f "${gamelog}" ]; then if [ -f "${lgsmlog}" ]; then
mv "${gamelog}" "${gamelogdate}"
fi
fi
mv "${lgsmlog}" "${lgsmlogdate}" mv "${lgsmlog}" "${lgsmlogdate}"
mv "${consolelog}" "${consolelogdate}"
fi fi
if [ -f "${consolelog}" ]; then
# If server is already running exit mv "${consolelog}" "${consolelogdate}"
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 fi
# Create lockfile # Create lockfile
@ -112,9 +93,9 @@ fn_start_tmux(){
touch "${consolelog}" touch "${consolelog}"
# Get tmux version # 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 # 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)" fn_script_log "Tmux version: master (user compiled)"
echo "Tmux version: master (user compiled)" >> "${consolelog}" echo "Tmux version: master (user compiled)" >> "${consolelog}"
if [ "${consolelogging}" == "on" ]||[ -z "${consolelogging}" ]; then if [ "${consolelogging}" == "on" ]||[ -z "${consolelogging}" ]; then
@ -122,7 +103,7 @@ fn_start_tmux(){
fi fi
elif [ -n "${tmuxversion}" ]; then elif [ -n "${tmuxversion}" ]; then
# Get the digit version of tmux # 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 # tmux pipe-pane not supported in tmux versions < 1.6
if [ "${tmuxversion}" -lt "16" ]; then if [ "${tmuxversion}" -lt "16" ]; then
echo "Console logging disabled: Tmux => 1.6 required echo "Console logging disabled: Tmux => 1.6 required
@ -148,14 +129,14 @@ if [ "${consolelogging}" == "off" ]; then
echo "Console logging disabled by user" >> "${consolelog}" echo "Console logging disabled by user" >> "${consolelog}"
fn_script_log_info "Console logging disabled by user" fn_script_log_info "Console logging disabled by user"
fi fi
sleep 1 sleep 0.5
# If the server fails to start # If the server fails to start
check_status.sh check_status.sh
if [ "${status}" == "0" ]; then if [ "${status}" == "0" ]; then
fn_print_fail_nl "Unable to start ${servername}" fn_print_fail_nl "Unable to start ${servername}"
fn_script_log_fatal "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 if [ -s "${lgsmlogdir}/.${servicename}-tmux-error.tmp" ]; then
fn_print_fail_nl "Unable to start ${servername}: Tmux error:" fn_print_fail_nl "Unable to start ${servername}: Tmux error:"
fn_script_log_fatal "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}" cat "${lgsmlogdir}/.${servicename}-tmux-error.tmp" | tee -a "${lgsmlog}"
# Detected error https://linuxgsm.com/support # 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 ""
echo "Fix" echo "Fix"
echo "=================================" echo "================================="
@ -206,19 +188,25 @@ sleep 1
} }
fn_print_dots "${servername}" fn_print_dots "${servername}"
sleep 1 sleep 0.5
check.sh 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 fix.sh
info_config.sh info_config.sh
logs.sh logs.sh
# Will check for updates is updateonstart is yes # Will check for updates is updateonstart is yes
if [ "${status}" == "0" ]; then if [ "${updateonstart}" == "yes" ]||[ "${updateonstart}" == "1" ]||[ "${updateonstart}" == "on" ]; then
if [ "${updateonstart}" == "yes" ]||[ "${updateonstart}" == "1" ]||[ "${updateonstart}" == "on" ]; then exitbypass=1
exitbypass=1 unset updateonstart
unset updateonstart command_update.sh
command_update.sh
fi
fi fi
if [ "${gamename}" == "TeamSpeak 3" ]; then if [ "${gamename}" == "TeamSpeak 3" ]; then

68
lgsm/functions/command_stop.sh

@ -33,8 +33,7 @@ fn_stop_graceful_ctrlc(){
fn_print_fail_eol_nl fn_print_fail_eol_nl
fn_script_log_error "Graceful: CTRL+c: FAIL" fn_script_log_error "Graceful: CTRL+c: FAIL"
fi fi
sleep 1 sleep 0.5
fn_stop_tmux
} }
# Attempts graceful shutdown by sending a specified command. # Attempts graceful shutdown by sending a specified command.
@ -44,7 +43,7 @@ fn_stop_graceful_cmd(){
fn_print_dots "Graceful: sending \"${1}\"" fn_print_dots "Graceful: sending \"${1}\""
fn_script_log_info "Graceful: sending \"${1}\"" fn_script_log_info "Graceful: sending \"${1}\""
# sends specific stop command # 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 # waits up to given seconds giving the server time to shutdown gracefully
for ((seconds=1; seconds<=${2}; seconds++)); do for ((seconds=1; seconds<=${2}; seconds++)); do
check_status.sh check_status.sh
@ -63,8 +62,7 @@ fn_stop_graceful_cmd(){
fn_print_fail_eol_nl fn_print_fail_eol_nl
fn_script_log_error "Graceful: sending \"${1}\": FAIL" fn_script_log_error "Graceful: sending \"${1}\": FAIL"
fi fi
sleep 1 sleep 0.5
fn_stop_tmux
} }
# Attempts graceful of goldsource using rcon 'quit' command. # 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 "Graceful: sending \"quit\": ${seconds}: "
fn_print_ok_eol_nl fn_print_ok_eol_nl
fn_script_log_pass "Graceful: sending \"quit\": OK: ${seconds} seconds" fn_script_log_pass "Graceful: sending \"quit\": OK: ${seconds} seconds"
sleep 1 sleep 0.5
fn_stop_tmux
} }
# Attempts graceful of 7 Days To Die using telnet. # Attempts graceful of 7 Days To Die using telnet.
@ -115,7 +112,7 @@ fn_stop_telnet_sdtd(){
fn_stop_graceful_sdtd(){ fn_stop_graceful_sdtd(){
fn_print_dots "Graceful: telnet" fn_print_dots "Graceful: telnet"
fn_script_log_info "Graceful: telnet" fn_script_log_info "Graceful: telnet"
sleep 1 sleep 0.5
if [ "${telnetenabled}" == "false" ]; then if [ "${telnetenabled}" == "false" ]; then
fn_print_info_nl "Graceful: telnet: DISABLED: Enable in ${servercfg}" fn_print_info_nl "Graceful: telnet: DISABLED: Enable in ${servercfg}"
elif [ "$(command -v expect 2>/dev/null)" ]; then 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 for telnetip in 127.0.0.1 ${ip}; do
fn_print_dots "Graceful: telnet: ${telnetip}" fn_print_dots "Graceful: telnet: ${telnetip}"
fn_script_log_info "Graceful: telnet: ${telnetip}" fn_script_log_info "Graceful: telnet: ${telnetip}"
sleep 1 sleep 0.5
fn_stop_telnet_sdtd fn_stop_telnet_sdtd
completed=$(echo -en "\n ${sdtd_telnet_shutdown}"|grep "Completed.") completed=$(echo -en "\n ${sdtd_telnet_shutdown}" | grep "Completed.")
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 if [ -n "${refused}" ]; then
fn_print_error "Graceful: telnet: ${telnetip}: " fn_print_error "Graceful: telnet: ${telnetip}: "
fn_print_fail_eol_nl fn_print_fail_eol_nl
@ -142,7 +139,7 @@ fn_stop_graceful_sdtd(){
if [ -n "${completed}" ]; then if [ -n "${completed}" ]; then
for seconds in {1..30}; do for seconds in {1..30}; do
fn_stop_telnet_sdtd 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 if [ -n "${refused}" ]; then
fn_print_ok "Graceful: telnet: ${telnetip}: " fn_print_ok "Graceful: telnet: ${telnetip}: "
fn_print_ok_eol_nl fn_print_ok_eol_nl
@ -173,8 +170,7 @@ fn_stop_graceful_sdtd(){
fn_print_fail_eol_nl fn_print_fail_eol_nl
fn_script_log_warn "Graceful: telnet: expect not installed: FAIL" fn_script_log_warn "Graceful: telnet: expect not installed: FAIL"
fi fi
sleep 1 sleep 0.5
fn_stop_tmux
} }
fn_stop_graceful_select(){ fn_stop_graceful_select(){
@ -193,10 +189,8 @@ fn_stop_graceful_select(){
fn_stop_graceful_goldsource 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 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 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 fn_stop_graceful_cmd "quit" 30
else
fn_stop_tmux
fi fi
} }
@ -218,7 +212,7 @@ fn_stop_ark(){
if [ "${#queryport}" -gt 0 ] ; then if [ "${#queryport}" -gt 0 ] ; then
for (( pidcheck=0 ; pidcheck < ${maxpiditer} ; pidcheck++ )) ; do 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}' |\ grep ":${queryport}[[:space:]]" | rev | awk '{print $1}' |\
rev | cut -d\/ -f1) rev | cut -d\/ -f1)
# #
@ -228,7 +222,7 @@ fn_stop_ark(){
# and a valid numeric pid remains unchanged. # and a valid numeric pid remains unchanged.
if [ "${pid}" -gt 1 ]&&[ "${pid}" -le "$(cat "/proc/sys/kernel/pid_max")" ]; then if [ "${pid}" -gt 1 ]&&[ "${pid}" -le "$(cat "/proc/sys/kernel/pid_max")" ]; then
fn_print_dots "Process still bound. Awaiting graceful exit: ${pidcheck}" fn_print_dots "Process still bound. Awaiting graceful exit: ${pidcheck}"
sleep 1 sleep 0.5
else else
break # Our job is done here break # Our job is done here
fi # end if for pid range check fi # end if for pid range check
@ -267,8 +261,6 @@ fn_stop_tmux(){
sleep 0.5 sleep 0.5
check_status.sh check_status.sh
if [ "${status}" == "0" ]; then if [ "${status}" == "0" ]; then
# Remove lockfile
rm -f "${rootdir}/${lockselfname}"
# ARK doesn't clean up immediately after tmux is killed. # ARK doesn't clean up immediately after tmux is killed.
# Make certain the ports are cleared before continuing. # Make certain the ports are cleared before continuing.
if [ "${gamename}" == "ARK: Survival Evolved" ]; then if [ "${gamename}" == "ARK: Survival Evolved" ]; then
@ -277,28 +269,26 @@ fn_stop_tmux(){
fn_print_ok_nl "${servername}" fn_print_ok_nl "${servername}"
fn_script_log_pass "Stopped ${servername}" fn_script_log_pass "Stopped ${servername}"
else else
fn_print_fail_nl "Unable to stop${servername}" fn_print_fail_nl "Unable to stop ${servername}"
fn_script_log_fatal "Unable to stop${servername}" fn_script_log_fatal "Unable to stop ${servername}"
fi fi
} }
# checks if the server is already stopped before trying to stop. # checks if the server is already stopped before trying to stop.
fn_stop_pre_check(){ fn_stop_pre_check(){
if [ "${gamename}" == "TeamSpeak 3" ]; then # Is the server already stopped
check_status.sh if [ "${status}" == "0" ]; then # $status comes from check_status.sh, which is run by check.sh for this command
if [ "${status}" == "0" ]; then fn_print_info_nl "${servername} is already stopped"
fn_print_info_nl "${servername} is already stopped" fn_script_log_error "${servername} is already stopped"
fn_script_log_error "${servername} is already stopped" elif [ "${gamename}" == "TeamSpeak 3" ]; then
else fn_stop_teamspeak3
fn_stop_teamspeak3
fi
else else
if [ "${status}" == "0" ]; then fn_stop_graceful_select
fn_print_info_nl "${servername} is already stopped" fi
fn_script_log_error "${servername} is already stopped" # Check status again, a stop tmux session if needed
else check_status.sh
fn_stop_graceful_select if [ "${status}" != "0" ]; then
fi fn_stop_tmux
fi fi
} }
@ -307,4 +297,8 @@ sleep 0.5
check.sh check.sh
info_config.sh info_config.sh
fn_stop_pre_check fn_stop_pre_check
# Remove lockfile
if [ -f "${rootdir}/${lockselfname}" ]; then
rm -f "${rootdir}/${lockselfname}"
fi
core_exit.sh core_exit.sh

2
lgsm/functions/command_test_alert.sh

@ -9,7 +9,7 @@ local commandaction="Alert"
local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_print_dots "${servername}" fn_print_dots "${servername}"
sleep 1 sleep 0.5
check.sh check.sh
info_config.sh info_config.sh
alert="test" alert="test"

4
lgsm/functions/command_ts3_server_pass.sh

@ -25,14 +25,14 @@ fn_serveradmin_password_prompt(){
fn_serveradmin_password_set(){ fn_serveradmin_password_set(){
fn_print_info_nl "Starting server with new password..." fn_print_info_nl "Starting server with new password..."
fn_script_log_info "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" # Start server in "new password mode"
ts3serverpass="1" ts3serverpass="1"
exitbypass="1" exitbypass="1"
command_start.sh command_start.sh
fn_print_ok_nl "Password applied" fn_print_ok_nl "Password applied"
fn_script_log_pass "New ServerAdmin password applied" fn_script_log_pass "New ServerAdmin password applied"
sleep 1 sleep 0.5
} }
# Running functions # Running functions

8
lgsm/functions/command_update_linuxgsm.sh

@ -9,12 +9,12 @@ local commandaction="Update LinuxGSM"
local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_print_dots "Updating LinuxGSM" fn_print_dots "Updating LinuxGSM"
sleep 1 sleep 0.5
check.sh check.sh
fn_script_log_info "Updating LinuxGSM" fn_script_log_info "Updating LinuxGSM"
echo -ne "\n" echo -ne "\n"
if [ -z "${legacymode}" ];then if [ -z "${legacymode}" ]; then
# Check and update _default.cfg # Check and update _default.cfg
echo -ne " checking config _default.cfg...\c" 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")) 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 # Check and update functions
if [ -n "${functionsdir}" ]; then if [ -n "${functionsdir}" ]; then
if [ -d "${functionsdir}" ]; then if [ -d "${functionsdir}" ]; then
cd "${functionsdir}" cd "${functionsdir}" || exit
for functionfile in * for functionfile in *
do do
echo -ne " checking function ${functionfile}...\c" echo -ne " checking function ${functionfile}...\c"
@ -97,7 +97,7 @@ if [ -n "${functionsdir}" ]; then
elif [ "${function_file_diff}" != "" ]; then elif [ "${function_file_diff}" != "" ]; then
fn_print_update_eol_nl fn_print_update_eol_nl
fn_script_log_info "checking function ${functionfile}: UPDATE" fn_script_log_info "checking function ${functionfile}: UPDATE"
rm -rf "${functionsdir}/${functionfile}" rm -rf "${functionsdir:?}/${functionfile}"
fn_update_function fn_update_function
else else
fn_print_ok_eol_nl fn_print_ok_eol_nl

10
lgsm/functions/command_validate.sh

@ -17,9 +17,9 @@ fn_validation(){
echo -en "\n" echo -en "\n"
fn_script_log_info "Validating files: SteamCMD" 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. # Detects if unbuffer command is available for 32 bit distributions only.
info_distro.sh info_distro.sh
if [ "$(command -v stdbuf)" ]&&[ "${arch}" != "x86_64" ]; then if [ "$(command -v stdbuf)" ]&&[ "${arch}" != "x86_64" ]; then
@ -27,9 +27,9 @@ fn_validation(){
fi fi
if [ "${engine}" == "goldsource" ]; then 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 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 fi
if [ $? != 0 ]; then if [ $? != 0 ]; then
fn_print_fail_nl "Validating files: SteamCMD" fn_print_fail_nl "Validating files: SteamCMD"
@ -45,7 +45,7 @@ fn_validation(){
fn_print_dots "Validating files:" fn_print_dots "Validating files:"
sleep 0.5 sleep 0.5
fn_print_dots "Validating files: SteamCMD" fn_print_dots "Validating files: SteamCMD"
sleep 1 sleep 0.5
check.sh check.sh
check_status.sh check_status.sh
if [ "${status}" != "0" ]; then if [ "${status}" != "0" ]; then

20
lgsm/functions/command_wipe.sh

@ -48,7 +48,7 @@ fn_wipe_server_remove_files(){
if [ -n "$(find "${serveridentitydir}" -type f -name "proceduralmap.*.sav")" ]; then if [ -n "$(find "${serveridentitydir}" -type f -name "proceduralmap.*.sav")" ]; then
currentaction="Removing procedural map save(s): ${serveridentitydir}/proceduralmap.*.sav" currentaction="Removing procedural map save(s): ${serveridentitydir}/proceduralmap.*.sav"
echo -en "Removing map saves proceduralmap.*.sav file(s)..." echo -en "Removing map saves proceduralmap.*.sav file(s)..."
sleep 1 sleep 0.5
fn_script_log "${currentaction}" fn_script_log "${currentaction}"
find "${serveridentitydir:?}" -type f -name "proceduralmap.*.sav" -delete find "${serveridentitydir:?}" -type f -name "proceduralmap.*.sav" -delete
fn_wipe_exit_code fn_wipe_exit_code
@ -62,7 +62,7 @@ fn_wipe_server_remove_files(){
if [ -n "$(find "${serveridentitydir}" -type f -name "barren*.sav")" ]; then if [ -n "$(find "${serveridentitydir}" -type f -name "barren*.sav")" ]; then
currentaction="Removing barren map save(s): ${serveridentitydir}/barren*.sav" currentaction="Removing barren map save(s): ${serveridentitydir}/barren*.sav"
echo -en "Removing barren map saves barren*.sav file(s)..." echo -en "Removing barren map saves barren*.sav file(s)..."
sleep 1 sleep 0.5
fn_script_log "${currentaction}" fn_script_log "${currentaction}"
find "${serveridentitydir:?}" -type f -name "barren*.sav" -delete find "${serveridentitydir:?}" -type f -name "barren*.sav" -delete
fn_wipe_exit_code fn_wipe_exit_code
@ -76,7 +76,7 @@ fn_wipe_server_remove_files(){
if [ -n "$(find "${serveridentitydir}" -type f -name "proceduralmap.*.map")" ]; then if [ -n "$(find "${serveridentitydir}" -type f -name "proceduralmap.*.map")" ]; then
currentaction="Removing map file(s): ${serveridentitydir}/proceduralmap.*.map" currentaction="Removing map file(s): ${serveridentitydir}/proceduralmap.*.map"
echo -en "Removing procedural map proceduralmap.*.map file(s)..." echo -en "Removing procedural map proceduralmap.*.map file(s)..."
sleep 1 sleep 0.5
fn_script_log "${currentaction}" fn_script_log "${currentaction}"
find "${serveridentitydir:?}" -type f -name "proceduralmap.*.map" -delete find "${serveridentitydir:?}" -type f -name "proceduralmap.*.map" -delete
fn_wipe_exit_code fn_wipe_exit_code
@ -90,7 +90,7 @@ fn_wipe_server_remove_files(){
if [ -n "$(find "${serveridentitydir}" -type f -name "barren*.map")" ]; then if [ -n "$(find "${serveridentitydir}" -type f -name "barren*.map")" ]; then
currentaction="Removing map file(s): ${serveridentitydir}/barren*.map" currentaction="Removing map file(s): ${serveridentitydir}/barren*.map"
echo -en "Removing barren map barren*.map file(s)..." echo -en "Removing barren map barren*.map file(s)..."
sleep 1 sleep 0.5
fn_script_log "${currentaction}" fn_script_log "${currentaction}"
find "${serveridentitydir:?}" -type f -name "barren*.map" -delete find "${serveridentitydir:?}" -type f -name "barren*.map" -delete
fn_wipe_exit_code fn_wipe_exit_code
@ -103,7 +103,7 @@ fn_wipe_server_remove_files(){
if [ -d "${serveridentitydir}/user" ]; then if [ -d "${serveridentitydir}/user" ]; then
currentaction="Removing user directory: ${serveridentitydir}/user" currentaction="Removing user directory: ${serveridentitydir}/user"
echo -en "Removing user directory..." echo -en "Removing user directory..."
sleep 1 sleep 0.5
fn_script_log "${currentaction}" fn_script_log "${currentaction}"
rm -rf "${serveridentitydir:?}/user" rm -rf "${serveridentitydir:?}/user"
fn_wipe_exit_code fn_wipe_exit_code
@ -116,7 +116,7 @@ fn_wipe_server_remove_files(){
if [ -d "${serveridentitydir}/storage" ]; then if [ -d "${serveridentitydir}/storage" ]; then
currentaction="Removing storage directory: ${serveridentitydir}/storage" currentaction="Removing storage directory: ${serveridentitydir}/storage"
echo -en "Removing storage directory..." echo -en "Removing storage directory..."
sleep 1 sleep 0.5
fn_script_log "${currentaction}" fn_script_log "${currentaction}"
rm -rf "${serveridentitydir:?}/storage" rm -rf "${serveridentitydir:?}/storage"
fn_wipe_exit_code fn_wipe_exit_code
@ -129,7 +129,7 @@ fn_wipe_server_remove_files(){
if [ -n "$(find "${serveridentitydir}" -type f -name "Log.*.txt")" ]; then if [ -n "$(find "${serveridentitydir}" -type f -name "Log.*.txt")" ]; then
currentaction="Removing log files: ${serveridentitydir}/Log.*.txt" currentaction="Removing log files: ${serveridentitydir}/Log.*.txt"
echo -en "Removing Log files..." echo -en "Removing Log files..."
sleep 1 sleep 0.5
fn_script_log "${currentaction}" fn_script_log "${currentaction}"
find "${serveridentitydir:?}" -type f -name "Log.*.txt" -delete find "${serveridentitydir:?}" -type f -name "Log.*.txt" -delete
fn_wipe_exit_code fn_wipe_exit_code
@ -152,12 +152,12 @@ if [ "${gamename}" == "Rust" ]; then
echo Exiting; core_exit.sh echo Exiting; core_exit.sh
fi fi
fn_script_log_info "User selects to erase any user, storage, log and map data from ${serveridentitydir}" 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 fn_wipe_server_process
else else
fn_print_information_nl "No data to wipe was found" fn_print_information_nl "No data to wipe was found"
fn_script_log_info "No data to wipe was found." fn_script_log_info "No data to wipe was found."
sleep 1 sleep 0.5
core_exit.sh core_exit.sh
fi fi
# You can add an "elif" here to add another game or engine # You can add an "elif" here to add another game or engine
@ -165,7 +165,7 @@ else
# Game not listed # Game not listed
fn_print_information_nl "Wipe is not available for this game" fn_print_information_nl "Wipe is not available for this game"
fn_script_log_info "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 core_exit.sh
fi fi

2
lgsm/functions/compress_ut99_maps.sh

@ -22,7 +22,7 @@ if ! fn_prompt_yn "Start compression?" Y; then
fi fi
mkdir -pv "${compressedmapsdir}" > /dev/null 2>&1 mkdir -pv "${compressedmapsdir}" > /dev/null 2>&1
rm -rfv "${serverfiles}/Maps/"*.unr.uz rm -rfv "${serverfiles}/Maps/"*.unr.uz
cd "${systemdir}" cd "${systemdir}" || exit
for map in "${serverfiles}/Maps/"*; do for map in "${serverfiles}/Maps/"*; do
./ucc-bin compress "${map}" --nohomedir ./ucc-bin compress "${map}" --nohomedir
done done

4
lgsm/functions/core_dl.sh

@ -25,7 +25,7 @@ fn_dl_md5(){
# Runs MD5 Check if available # Runs MD5 Check if available
if [ "${md5}" != "0" ]&&[ "${md5}" != "nomd5" ]; then if [ "${md5}" != "0" ]&&[ "${md5}" != "nomd5" ]; then
echo -ne "verifying ${local_filename} with MD5..." echo -ne "verifying ${local_filename} with MD5..."
sleep 1 sleep 0.5
local md5sumcmd=$(md5sum "${local_filedir}/${local_filename}"|awk '{print $1;}') local md5sumcmd=$(md5sum "${local_filedir}/${local_filename}"|awk '{print $1;}')
if [ "${md5sumcmd}" != "${md5}" ]; then if [ "${md5sumcmd}" != "${md5}" ]; then
fn_print_fail_eol_nl fn_print_fail_eol_nl
@ -88,7 +88,7 @@ fn_fetch_trap(){
echo -ne "downloading ${local_filename}..." echo -ne "downloading ${local_filename}..."
fn_print_canceled_eol_nl fn_print_canceled_eol_nl
fn_script_log_info "Downloading ${local_filename}...CANCELED" fn_script_log_info "Downloading ${local_filename}...CANCELED"
sleep 1 sleep 0.5
rm -f "${local_filedir}/${local_filename}" rm -f "${local_filedir}/${local_filename}"
echo -ne "downloading ${local_filename}..." echo -ne "downloading ${local_filename}..."
fn_print_removed_eol_nl fn_print_removed_eol_nl

3
lgsm/functions/core_exit.sh

@ -8,6 +8,9 @@ fn_exit_dev_debug(){
if [ -f "${rootdir}/.dev-debug" ]; then if [ -f "${rootdir}/.dev-debug" ]; then
echo "" echo ""
echo "${function_selfname} exiting with code: ${exitcode}" 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 fi
} }

49
lgsm/functions/core_functions.sh

@ -249,6 +249,11 @@ fn_fetch_function
# Dev # Dev
command_dev_clear_functions.sh(){
functionfile="${FUNCNAME}"
fn_fetch_function
}
command_dev_debug.sh(){ command_dev_debug.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
@ -269,6 +274,11 @@ functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
command_dev_query_raw.sh(){
functionfile="${FUNCNAME}"
fn_fetch_function
}
# Fix # Fix
fix.sh(){ fix.sh(){
@ -306,12 +316,23 @@ functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
fix_steamcmd.sh(){ fix_glibc.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function 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}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
@ -321,22 +342,22 @@ functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
fix_kf.sh(){ fix_rust.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
fix_kf2.sh(){ fix_rw.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
fix_ut2k4.sh(){ fix_steamcmd.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
fix_ut.sh(){ fix_ut3.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
@ -346,7 +367,12 @@ functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
fix_mta.sh(){ fix_ut2k4.sh(){
functionfile="${FUNCNAME}"
fn_fetch_function
}
fix_ut.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
@ -363,6 +389,11 @@ functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
info_gamedig.sh(){
functionfile="${FUNCNAME}"
fn_fetch_function
}
info_glibc.sh(){ info_glibc.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
@ -426,9 +457,9 @@ functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
# Monitor # Query
monitor_gsquery.sh(){ query_gamedig.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }

16
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_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_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_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 ### ### 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 if [ "${gamename}" != "Battlefield: 1942" ]&&[ "${engine}" != "quake" ]&&[ "${engine}" != "idtech2" ]&&[ "${engine}" != "idtech3" ]&&[ "${engine}" != "iw2.0" ]&&[ "${engine}" != "iw3.0" ]&&[ "${gamename}" != "San Andreas Multiplayer" ]; then
currentopt+=( "${cmd_update[@]}" ) currentopt+=( "${cmd_update[@]}" )
# force update for SteamCMD only or MTA # 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[@]}" ) currentopt+=( "${cmd_force_update[@]}" )
fi fi
fi fi
@ -130,16 +132,16 @@ currentopt+=( "${cmd_install[@]}" "${cmd_auto_install[@]}" )
## Developer commands ## Developer commands
currentopt+=( "${cmd_dev_debug[@]}" ) currentopt+=( "${cmd_dev_debug[@]}" )
if [ -f ".dev-debug" ]; then 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 fi
### Build list of available commands ### Build list of available commands
optcommands=() optcommands=()
index="0" index="0"
for ((index="0"; index < ${#currentopt[@]}; index+=3)); do 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 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
done done
@ -174,11 +176,11 @@ for i in "${optcommands[@]}"; do
# Seek and run command # Seek and run command
index="0" index="0"
for ((index="0"; index < ${#currentopt[@]}; index+=3)); do 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 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 # Run command
eval ${currentopt[index+1]} eval "${currentopt[index+1]}"
core_exit.sh core_exit.sh
break break
fi fi

14
lgsm/functions/fix.sh

@ -11,18 +11,18 @@ local commandaction="Fix"
# Messages that are displayed for some fixes # Messages that are displayed for some fixes
fn_fix_msg_start(){ fn_fix_msg_start(){
fn_print_dots "Applying ${fixname} fix: ${gamename}" fn_print_dots "Applying ${fixname} fix: ${gamename}"
sleep 1 sleep 0.5
fn_print_info "Applying ${fixname} fix: ${gamename}" fn_print_info "Applying ${fixname} fix: ${gamename}"
fn_script_log_info "Applying ${fixname} fix: ${gamename}" fn_script_log_info "Applying ${fixname} fix: ${gamename}"
sleep 1 sleep 0.5
} }
fn_fix_msg_start_nl(){ fn_fix_msg_start_nl(){
fn_print_dots "Applying ${fixname} fix: ${gamename}" fn_print_dots "Applying ${fixname} fix: ${gamename}"
sleep 1 sleep 0.5
fn_print_info "Applying ${fixname} fix: ${gamename}" fn_print_info "Applying ${fixname} fix: ${gamename}"
fn_script_log_info "Applying ${fixname} fix: ${gamename}" fn_script_log_info "Applying ${fixname} fix: ${gamename}"
sleep 1 sleep 0.5
} }
fn_fix_msg_end(){ fn_fix_msg_end(){
@ -56,6 +56,8 @@ if [ "${function_selfname}" != "command_install.sh" ]; then
fix_ins.sh fix_ins.sh
elif [ "${gamename}" == "Rust" ]; then elif [ "${gamename}" == "Rust" ]; then
fix_rust.sh fix_rust.sh
elif [ "${shortname}" == "rw" ]; then
fix_rw.sh
elif [ "${gamename}" == "Multi Theft Auto" ]; then elif [ "${gamename}" == "Multi Theft Auto" ]; then
fix_mta.sh fix_mta.sh
fi fi
@ -66,7 +68,7 @@ if [ "${function_selfname}" == "command_install.sh" ]; then
echo "" echo ""
echo "Applying ${gamename} Server Fixes" echo "Applying ${gamename} Server Fixes"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
if [ "${gamename}" == "Killing Floor" ]; then if [ "${gamename}" == "Killing Floor" ]; then
fix_kf.sh fix_kf.sh
elif [ "${gamename}" == "Killing Floor 2" ]; then elif [ "${gamename}" == "Killing Floor 2" ]; then
@ -77,5 +79,7 @@ if [ "${function_selfname}" == "command_install.sh" ]; then
fix_ut2k4.sh fix_ut2k4.sh
elif [ "${gamename}" == "Unreal Tournament" ]; then elif [ "${gamename}" == "Unreal Tournament" ]; then
fix_ut.sh fix_ut.sh
elif [ "${gamename}" == "Unreal Tournament 3" ]; then
fix_ut3.sh
fi fi
fi fi

8
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" 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/none}/none;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css"
sed -i 's/underline}/underline;/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 "Applying WebAdmin CharSet fix."
echo "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1" 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" sed -i 's/CharSet="iso-8859-1"/CharSet="utf-8"/g' "${systemdir}/UWeb.int"
sleep 1 sleep 0.5
echo "applying server name fix." echo "applying server name fix."
sleep 1 sleep 0.5
echo "forcing server restart..." echo "forcing server restart..."
sleep 1 sleep 0.5
command_start.sh command_start.sh
sleep 5 sleep 5
command_stop.sh command_stop.sh

2
lgsm/functions/fix_kf2.sh

@ -12,7 +12,7 @@ fn_parms(){
parms="\"${defaultmap}?Game=KFGameContent.KFGameInfo_VersusSurvival\"" 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 sleep 1
exitbypass=1 exitbypass=1
command_start.sh command_start.sh

2
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 if [ ! -f "${lgsmdir}/lib/libmysqlclient.so.16" ]; then
fixname="libmysqlclient16" fixname="libmysqlclient16"
fn_fix_msg_start_nl 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_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 fn_fix_msg_end
fi fi

10
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" 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/none}/none;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css"
sed -i 's/underline}/underline;/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 "Applying WebAdmin CharSet fix."
echo "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1" 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" sed -i 's/CharSet="iso-8859-1"/CharSet="utf-8"/g' "${systemdir}/uweb.int"
sleep 1 sleep 0.5
echo "Applying Steam AppID fix." echo "Applying Steam AppID fix."
sed -i 's/1210/1200/g' "${systemdir}/steam_appid.txt" sed -i 's/1210/1200/g' "${systemdir}/steam_appid.txt"
sleep 1 sleep 0.5
echo "applying server name fix." echo "applying server name fix."
sleep 1 sleep 0.5
echo "forcing server restart..." echo "forcing server restart..."
sleep 1 sleep 0.5
command_start.sh command_start.sh
sleep 5 sleep 5
command_stop.sh command_stop.sh

10
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"

2
lgsm/functions/fix_ut.sh

@ -11,4 +11,4 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
#Set Binary Executable #Set Binary Executable
echo "chmod +x ${executabledir}/${executable}" echo "chmod +x ${executabledir}/${executable}"
chmod +x "${executabledir}/${executable}" chmod +x "${executabledir}/${executable}"
sleep 1 sleep 0.5

8
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" 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/none}/none;/g' "${serverfiles}/Web/ServerAdmin/ut2003.css"
sed -i 's/underline}/underline;/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 "applying WebAdmin CharSet fix."
echo "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1" 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" sed -i 's/CharSet="iso-8859-1"/CharSet="utf-8"/g' "${systemdir}/UWeb.int"
sleep 1 sleep 0.5
echo "applying server name fix." echo "applying server name fix."
sleep 1 sleep 0.5
echo "forcing server restart." echo "forcing server restart."
sleep 1 sleep 0.5
exitbypass=1 exitbypass=1
command_start.sh command_start.sh
sleep 5 sleep 5

20
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

94
lgsm/functions/info_config.sh

@ -20,13 +20,14 @@ fn_info_config_justcause2(){
serverpassword="${unavailable}" serverpassword="${unavailable}"
maxplayers="${zero}" maxplayers="${zero}"
port="${zero}" port="${zero}"
queryport="${zero}"
else 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]*$//') 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]*$//') 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]*$//') 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:]') maxplayers=$(grep "MaxPlayers" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
port=$(grep "BindPort" "${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]*$//') 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 ipsetinconfig=1
ipinconfigvar="BindIP" ipinconfigvar="BindIP"
@ -36,6 +37,7 @@ fn_info_config_justcause2(){
serverpassword=${serverpassword:-"NOT SET"} serverpassword=${serverpassword:-"NOT SET"}
maxplayers=${maxplayers:-"0"} maxplayers=${maxplayers:-"0"}
port=${port:-"0"} port=${port:-"0"}
queryport=${queryport:-"0"}
fi 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]*$//') 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]*$//') 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:]') maxplayers=$(grep "maxclients" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
port=
# Not Set # Not Set
rconpassword=${rconpassword:-"NOT SET"} rconpassword=${rconpassword:-"NOT SET"}
servername=${servername:-"NOT SET"} servername=${servername:-"NOT SET"}
@ -417,6 +419,7 @@ fn_info_config_quakelive(){
serverpassword="${unavailable}" serverpassword="${unavailable}"
maxplayers="${zero}" maxplayers="${zero}"
port="${zero}" port="${zero}"
queryport="${zero}"
rconport="${zero}" rconport="${zero}"
statsport="${zero}" statsport="${zero}"
else 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]*$//') 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:]') maxplayers=$(grep "sv_maxClients" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]')
port=$(grep "net_port" "${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:]') rconport=$(grep "zmq_rcon_port" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]')
statsport=$(grep "zmq_stats_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"} serverpassword=${serverpassword:-"NOT SET"}
maxplayers=${maxplayers:-"0"} maxplayers=${maxplayers:-"0"}
port=${port:-"0"} port=${port:-"0"}
queryport=${queryport:-"0"}
rconport=${rconport:-"0"} rconport=${rconport:-"0"}
statsport=${statsport:-"0"} statsport=${statsport:-"0"}
fi fi
@ -463,6 +468,40 @@ fn_info_config_realvirtuality(){
fi 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(){ fn_info_config_seriousengine35(){
if [ ! -f "${servercfgfullpath}" ]; then if [ ! -f "${servercfgfullpath}" ]; then
servername="${unavailable}" servername="${unavailable}"
@ -704,7 +743,6 @@ fn_info_config_unreal3(){
servername="${unavailable}" servername="${unavailable}"
serverpassword="${unavailable}" serverpassword="${unavailable}"
adminpassword="${unavailable}" adminpassword="${unavailable}"
port="${unavailable}"
webadminenabled="${unavailable}" webadminenabled="${unavailable}"
webadminport="${zero}" webadminport="${zero}"
webadminuser="${unavailable}" webadminuser="${unavailable}"
@ -712,7 +750,6 @@ fn_info_config_unreal3(){
else 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]*$//') 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]*$//') 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]*$//') 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:]') webadminport=$(grep "ListenPort" "${servercfgdir}/UTWeb.ini" | grep -v "#" | tr -cd '[:digit:]')
webadminuser="Admin" webadminuser="Admin"
@ -736,13 +773,13 @@ fn_info_config_kf2(){
serverpassword="${unavailable}" serverpassword="${unavailable}"
adminpassword="${unavailable}" adminpassword="${unavailable}"
port="${unavailable}" port="${unavailable}"
queryport="${unavailable}"
webadminenabled="${unavailable}" webadminenabled="${unavailable}"
webadminport="${zero}" webadminport="${zero}"
webadminuser="${unavailable}" webadminuser="${unavailable}"
webadminpass="${unavailable}" webadminpass="${unavailable}"
else 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]*$//') 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]*$//') 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]*$//') 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:]') 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}" serverpassword="${unavailable}"
maxplayers="${zero}" maxplayers="${zero}"
port="${zero}" port="${zero}"
queryport="${zero}"
else else
port=$(grep "set net_port" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]') 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]*$//') 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]*$//') 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]*$//') 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"} serverpassword=${serverpassword:-"NOT SET"}
maxplayers=${maxplayers:-"0"} maxplayers=${maxplayers:-"0"}
port=${port:-"27960"} port=${port:-"27960"}
queryport=${queryport:-"27960"}
fi 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(){ fn_info_config_squad(){
if [ ! -f "${servercfgfullpath}" ]; then if [ ! -f "${servercfgfullpath}" ]; then
servername="${unavailable}" servername="${unavailable}"
maxplayers="${unavailable}" maxplayers="${unavailable}"
else 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]*$//')" 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="$(cat ${servercfgfullpath} | grep "MaxPlayers=" | tr -cd '[:digit:]')" maxplayers="$(grep "MaxPlayers=" "${servercfgfullpath}" | tr -cd '[:digit:]')"
fi fi
if [ ! -f "${servercfgdir}/Rcon.cfg" ]; then if [ ! -f "${servercfgdir}/Rcon.cfg" ]; then
rconport=${unavailable} rconport=${unavailable}
rconpassword=${unavailable} rconpassword=${unavailable}
else else
rconport=$(cat ${servercfgdir}/Rcon.cfg | grep "Port=" | tr -cd '[:digit:]') rconport=$(grep "Port=" "${servercfgdir}/Rcon.cfg" | 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]*$//') 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 fi
rconport=${rconport:-"0"} rconport=${rconport:-"0"}
@ -987,6 +1058,9 @@ elif [ "${engine}" == "projectzomboid" ]; then
# ARMA 3 # ARMA 3
elif [ "${engine}" == "realvirtuality" ]; then elif [ "${engine}" == "realvirtuality" ]; then
fn_info_config_realvirtuality fn_info_config_realvirtuality
# Rising World
elif [ "${shortname}" == "rw" ]; then
fn_info_config_risingworld
# Serious Sam # Serious Sam
elif [ "${engine}" == "seriousengine35" ]; then elif [ "${engine}" == "seriousengine35" ]; then
fn_info_config_seriousengine35 fn_info_config_seriousengine35
@ -1025,6 +1099,8 @@ elif [ "${gamename}" == "7 Days To Die" ]; then
fn_info_config_sdtd fn_info_config_sdtd
elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
fn_info_config_wolfensteinenemyterritory fn_info_config_wolfensteinenemyterritory
elif [ "${gamename}" == "ET: Legacy" ]; then
fn_info_config_etlegacy
elif [ "${gamename}" == "Multi Theft Auto" ]; then elif [ "${gamename}" == "Multi Theft Auto" ]; then
fn_info_config_mta fn_info_config_mta
elif [ "${gamename}" == "Squad" ]; then elif [ "${gamename}" == "Squad" ]; then

11
lgsm/functions/info_distro.sh

@ -135,6 +135,13 @@ if [ -d "${backupdir}" ]; then
fi fi
# External IP address # External IP address
if [ -z "${extip}" ];then if [ -z "${extip}" ]; then
extip=$(${curlpath} -m 3 ifconfig.co 2>/dev/null) 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 fi

9
lgsm/functions/info_glibc.sh

@ -26,6 +26,7 @@ elif [ "${gamename}" == "Blade Symphony" ]; then
glibcfix="yes" glibcfix="yes"
elif [ "${gamename}" == "BrainBread 2" ]; then elif [ "${gamename}" == "BrainBread 2" ]; then
glibcrequired="2.17" glibcrequired="2.17"
glibcfix="no"
elif [ "${gamename}" == "Call of Duty" ]; then elif [ "${gamename}" == "Call of Duty" ]; then
glibcrequired="2.1" glibcrequired="2.1"
glibcfix="no" glibcfix="no"
@ -57,7 +58,7 @@ elif [ "${gamename}" == "Empires Mod" ]; then
glibcrequired="2.15" glibcrequired="2.15"
glibcfix="yes" glibcfix="yes"
elif [ "${gamename}" == "Factorio" ]; then elif [ "${gamename}" == "Factorio" ]; then
glibcrequired="2.15" glibcrequired="2.18"
glibcfix="yes" glibcfix="yes"
elif [ "${gamename}" == "Fistful of Frags" ]; then elif [ "${gamename}" == "Fistful of Frags" ]; then
glibcrequired="2.15" glibcrequired="2.15"
@ -95,6 +96,9 @@ elif [ "${gamename}" == "Quake 3: Arena" ]; then
elif [ "${gamename}" == "Quake Live" ]; then elif [ "${gamename}" == "Quake Live" ]; then
glibcrequired="2.15" glibcrequired="2.15"
glibcfix="no" glibcfix="no"
elif [ "${shortname}" == "rw" ]; then
glibcrequired="2.14"
glibcfix="no"
elif [ "${gamename}" == "San Andreas Multiplayer" ]; then elif [ "${gamename}" == "San Andreas Multiplayer" ]; then
glibcrequired="2.3" glibcrequired="2.3"
glibcfix="no" glibcfix="no"
@ -182,6 +186,9 @@ elif [ "${engine}" == "refractor" ]; then
elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
glibcrequired="2.2.4" glibcrequired="2.2.4"
glibcfix="no" glibcfix="no"
elif [ "${gamename}" == "ET: Legacy" ]; then
glibcrequired="2.7"
glibcfix="no"
elif [ "${gamename}" == "Multi Theft Auto" ]; then elif [ "${gamename}" == "Multi Theft Auto" ]; then
glibcrequired="2.7" glibcrequired="2.7"
glibcfix="no" glibcfix="no"

91
lgsm/functions/info_messages.sh

@ -2,7 +2,7 @@
# LinuxGSM info_messages.sh function # LinuxGSM info_messages.sh function
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: https://linuxgsm.com # Website: https://linuxgsm.com
# Description: Defines server info messages for details, alerts. # Description: Defines server info messages for details and alerts.
# Standard Details # Standard Details
# This applies to all engines # This applies to all engines
@ -122,7 +122,9 @@ fn_info_message_gameserver(){
fn_messages_separator fn_messages_separator
{ {
# Server name # 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}" echo -e "${blue}Server name:\t${default}${servername}"
fi fi
@ -181,9 +183,43 @@ fn_info_message_gameserver(){
echo -e "${blue}Stats password:\t${default}${statspassword}" echo -e "${blue}Stats password:\t${default}${statspassword}"
fi fi
# Maxplayers # Players
if [ -n "${maxplayers}" ]; then
echo -e "${blue}Maxplayers:\t${default}${maxplayers}" 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 fi
# Game mode # Game mode
@ -406,19 +442,19 @@ fn_info_message_ports(){
for port_edit in "${ports_edit_array[@]}" for port_edit in "${ports_edit_array[@]}"
do do
if [ "${shortname}" == "ut3" ]; then if [ "${shortname}" == "ut3" ]; then
parmslocation="${servercfgdir}/UTEngine.ini\n${servercfgdir}/UTWeb.ini" parmslocation="${servercfgdir}/UTWeb.ini"
elif [ "${shortname}" == "kf2" ]; then elif [ "${shortname}" == "kf2" ]; then
parmslocation="${servercfgdir}/LinuxServer-KFEngine.ini\n${servercfgdir}/KFWeb.ini" parmslocation="${servercfgdir}/LinuxServer-KFEngine.ini\n${servercfgdir}/KFWeb.ini"
elif [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]; then elif [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]; then
parmslocation="${servercfgfullpath}" parmslocation="${servercfgfullpath}"
fi fi
done 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") local ports_edit_array=( "goldsource" "Factorio" "Hurtworld" "iw3.0" "Rust" "spark" "source" "starbound" "unreal4" "realvirtuality")
for port_edit in "${ports_edit_array[@]}" for port_edit in "${ports_edit_array[@]}"
do do
if [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]; then if [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]; then
parmslocation="${selfname}" parmslocation="${configdirserver}"
fi fi
done done
echo -e "${parmslocation}" echo -e "${parmslocation}"
@ -443,7 +479,7 @@ fn_info_logs(){
if [ -n "${lgsmlog}" ]; then if [ -n "${lgsmlog}" ]; then
echo -e "\nScript log\n===================" echo -e "\nScript log\n==================="
if [ ! "$(ls -A ${lgsmlogdir})" ]; then if [ ! "$(ls -A "${lgsmlogdir}")" ]; then
echo "${lgsmlogdir} (NO LOG FILES)" echo "${lgsmlogdir} (NO LOG FILES)"
elif [ ! -s "${lgsmlog}" ]; then elif [ ! -s "${lgsmlog}" ]; then
echo "${lgsmlog} (LOG FILE IS EMPTY)" echo "${lgsmlog} (LOG FILE IS EMPTY)"
@ -456,7 +492,7 @@ fn_info_logs(){
if [ -n "${consolelog}" ]; then if [ -n "${consolelog}" ]; then
echo -e "\nConsole log\n====================" echo -e "\nConsole log\n===================="
if [ ! "$(ls -A ${consolelogdir})" ]; then if [ ! "$(ls -A "${consolelogdir}")" ]; then
echo "${consolelogdir} (NO LOG FILES)" echo "${consolelogdir} (NO LOG FILES)"
elif [ ! -s "${consolelog}" ]; then elif [ ! -s "${consolelog}" ]; then
echo "${consolelog} (LOG FILE IS EMPTY)" echo "${consolelog} (LOG FILE IS EMPTY)"
@ -469,12 +505,12 @@ fn_info_logs(){
if [ -n "${gamelogdir}" ]; then if [ -n "${gamelogdir}" ]; then
echo -e "\nServer log\n===================" echo -e "\nServer log\n==================="
if [ ! "$(ls -A ${gamelogdir})" ]; then if [ ! "$(ls -A "${gamelogdir}")" ]; then
echo "${gamelogdir} (NO LOG FILES)" echo "${gamelogdir} (NO LOG FILES)"
else else
echo "${gamelogdir}" echo "${gamelogdir}"
# dos2unix sed 's/\r//' # 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 fi
echo "" echo ""
fi fi
@ -739,6 +775,17 @@ fn_info_message_refractor(){
} | column -s $'\t' -t } | 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(){ fn_info_message_rust(){
echo -e "netstat -atunp | grep Rust" echo -e "netstat -atunp | grep Rust"
echo -e "" echo -e ""
@ -948,7 +995,8 @@ fn_info_message_unreal3(){
echo -e "" echo -e ""
{ {
echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL" 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}" echo -e "> WebAdmin\tINBOUND\t${webadminport}\ttcp\tListenPort=${webadminport}"
} | column -s $'\t' -t } | column -s $'\t' -t
echo -e "" echo -e ""
@ -967,8 +1015,8 @@ fn_info_message_kf2(){
echo -e "" echo -e ""
{ {
echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL" echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
echo -e "> Game\tINBOUND\t${port}\ttcp" echo -e "> Game\tINBOUND\t${port}\ttcp\tPort=${port}"
echo -e "> Query\tINBOUND\t${queryport}\ttcp/udp" echo -e "> Query\tINBOUND\t${queryport}\tudp"
echo -e "> Steam\tINBOUND\t20560\tudp" echo -e "> Steam\tINBOUND\t20560\tudp"
echo -e "> WebAdmin\tINBOUND\t${webadminport}\ttcp\tListenPort=${webadminport}" echo -e "> WebAdmin\tINBOUND\t${webadminport}\ttcp\tListenPort=${webadminport}"
} | column -s $'\t' -t } | column -s $'\t' -t
@ -992,6 +1040,15 @@ fn_info_message_wolfensteinenemyterritory(){
} | column -s $'\t' -t } | 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(){ fn_info_message_mta(){
echo -e "netstat -atunp | grep mta-server64" echo -e "netstat -atunp | grep mta-server64"
echo -e "" echo -e ""
@ -1025,6 +1082,8 @@ fn_info_message_select_engine(){
fn_info_message_cod4 fn_info_message_cod4
elif [ "${gamename}" == "Call of Duty: World at War" ]; then elif [ "${gamename}" == "Call of Duty: World at War" ]; then
fn_info_message_codwaw fn_info_message_codwaw
elif [ "${gamename}" == "ET: Legacy" ]; then
fn_info_message_etlegacy
elif [ "${gamename}" == "Factorio" ]; then elif [ "${gamename}" == "Factorio" ]; then
fn_info_message_factorio fn_info_message_factorio
elif [ "${gamename}" == "Hurtworld" ]; then elif [ "${gamename}" == "Hurtworld" ]; then
@ -1061,6 +1120,8 @@ fn_info_message_select_engine(){
fn_info_message_mumble fn_info_message_mumble
elif [ "${gamename}" == "Rust" ]; then elif [ "${gamename}" == "Rust" ]; then
fn_info_message_rust fn_info_message_rust
elif [ "${shortname}" == "rw" ]; then
fn_info_message_risingworld
elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
fn_info_message_wolfensteinenemyterritory fn_info_message_wolfensteinenemyterritory
elif [ "${engine}" == "refractor" ]; then elif [ "${engine}" == "refractor" ]; then

22
lgsm/functions/info_parms.sh

@ -24,6 +24,7 @@ fn_info_parms_ark(){
fn_info_parms_realvirtuality(){ fn_info_parms_realvirtuality(){
port=${port:-"0"} port=${port:-"0"}
queryport=$((port + 1))
} }
fn_info_parms_cod(){ fn_info_parms_cod(){
@ -68,9 +69,18 @@ fn_info_parms_quake2(){
defaultmap=${defaultmap:-"NOT SET"} defaultmap=${defaultmap:-"NOT SET"}
} }
fn_info_parms_risingworld(){
servername=${servername:-"NOT SET"}
port=${port:-"0"}
queryport=${port}
httpqueryport=$((port - 1))
}
fn_info_parms_rust(){ fn_info_parms_rust(){
servername=${servername:-"NOT SET"} servername=${servername:-"NOT SET"}
port=${port:-"0"} port=${port:-"0"}
queryport=${port}
rconport=${rconport:-"0"} rconport=${rconport:-"0"}
rconpassword=${rconpassword:-"NOT SET"} rconpassword=${rconpassword:-"NOT SET"}
rconweb=${rconweb:-"NOT SET"} rconweb=${rconweb:-"NOT SET"}
@ -83,6 +93,7 @@ fn_info_parms_source(){
defaultmap=${defaultmap:-"NOT SET"} defaultmap=${defaultmap:-"NOT SET"}
maxplayers=${maxplayers:-"0"} maxplayers=${maxplayers:-"0"}
port=${port:-"0"} port=${port:-"0"}
queryport=${port}
clientport=${clientport:-"0"} clientport=${clientport:-"0"}
} }
@ -106,6 +117,12 @@ fn_info_config_towerunite(){
fn_info_parms_unreal(){ fn_info_parms_unreal(){
defaultmap=${defaultmap:-"NOT SET"} defaultmap=${defaultmap:-"NOT SET"}
queryport=$((port + 1))
}
fn_info_parms_unreal2(){
defaultmap=${defaultmap:-"NOT SET"}
queryport=$((port + 1))
} }
fn_info_parms_unreal3(){ fn_info_parms_unreal3(){
@ -145,6 +162,9 @@ elif [ "${gamename}" == "Quake 2" ]||[ "${gamename}" == "Quake 3: Arena" ]; then
# Rust # Rust
elif [ "${gamename}" == "Rust" ]; then elif [ "${gamename}" == "Rust" ]; then
fn_info_parms_rust fn_info_parms_rust
# Rising World
elif [ "${shortname}" == "rw" ]; then
fn_info_parms_risingworld
# Serious Sam # Serious Sam
elif [ "${engine}" == "seriousengine35" ]; then elif [ "${engine}" == "seriousengine35" ]; then
fn_info_config_seriousengine35 fn_info_config_seriousengine35
@ -158,7 +178,7 @@ elif [ "${gamename}" == "Tower Unite" ]; then
# Unreal/Unreal 2 engine # Unreal/Unreal 2 engine
elif [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then elif [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then
fn_info_parms_unreal fn_info_parms_unreal
# Unreal/Unreal 2 engine # Unreal 3 engine
elif [ "${engine}" == "unreal3" ]; then elif [ "${engine}" == "unreal3" ]; then
fn_info_parms_unreal3 fn_info_parms_unreal3
fi fi

31
lgsm/functions/install_config.sh

@ -23,7 +23,7 @@ fn_fetch_default_config(){
echo "Downloading ${gamename} Configs" echo "Downloading ${gamename} Configs"
echo "=================================" echo "================================="
echo "default configs from https://github.com/GameServerManagers/Game-Server-Configs" echo "default configs from https://github.com/GameServerManagers/Game-Server-Configs"
sleep 1 sleep 0.5
mkdir -p "${lgsmdir}/config-default/config-game" mkdir -p "${lgsmdir}/config-default/config-game"
githuburl="https://raw.githubusercontent.com/GameServerManagers/Game-Server-Configs/master" githuburl="https://raw.githubusercontent.com/GameServerManagers/Game-Server-Configs/master"
for config in "${array_configs[@]}"; do for config in "${array_configs[@]}"; do
@ -38,16 +38,19 @@ fn_default_config_remote(){
echo "copying ${config} config file." echo "copying ${config} config file."
fn_script_log_info "copying ${servercfg} config file." fn_script_log_info "copying ${servercfg} config file."
if [ "${config}" == "${servercfgdefault}" ]; then if [ "${config}" == "${servercfgdefault}" ]; then
mkdir -p "${servercfgdir}"
cp -nv "${lgsmdir}/config-default/config-game/${config}" "${servercfgfullpath}" cp -nv "${lgsmdir}/config-default/config-game/${config}" "${servercfgfullpath}"
elif [ "${gamename}" == "ARMA 3" ]&&[ "${config}" == "${networkcfgdefault}" ]; then elif [ "${gamename}" == "ARMA 3" ]&&[ "${config}" == "${networkcfgdefault}" ]; then
mkdir -p "${servercfgdir}"
cp -nv "${lgsmdir}/config-default/config-game/${config}" "${networkcfgfullpath}" cp -nv "${lgsmdir}/config-default/config-game/${config}" "${networkcfgfullpath}"
elif [ "${gamename}" == "Don't Starve Together" ]&&[ "${config}" == "${clustercfgdefault}" ]; then elif [ "${gamename}" == "Don't Starve Together" ]&&[ "${config}" == "${clustercfgdefault}" ]; then
cp -nv "${lgsmdir}/config-default/config-game/${clustercfgdefault}" "${clustercfgfullpath}" cp -nv "${lgsmdir}/config-default/config-game/${clustercfgdefault}" "${clustercfgfullpath}"
else else
mkdir -p "${servercfgdir}"
cp -nv "${lgsmdir}/config-default/config-game/${config}" "${servercfgdir}/${config}" cp -nv "${lgsmdir}/config-default/config-game/${config}" "${servercfgdir}/${config}"
fi fi
done done
sleep 1 sleep 0.5
} }
# Changes some variables within the default configs # Changes some variables within the default configs
@ -60,7 +63,7 @@ fn_set_config_vars(){
rconpass="admin$random" rconpass="admin$random"
echo "changing hostname." echo "changing hostname."
fn_script_log_info "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 if grep -q "SERVERNAME=SERVERNAME" "${lgsmdir}/config-default/config-game/${config}" 2>/dev/null; then
sed -i "s/SERVERNAME=SERVERNAME/SERVERNAME=${servername}/g" "${servercfgfullpath}" sed -i "s/SERVERNAME=SERVERNAME/SERVERNAME=${servername}/g" "${servercfgfullpath}"
else else
@ -69,11 +72,11 @@ fn_set_config_vars(){
echo "changing rcon/admin password." echo "changing rcon/admin password."
fn_script_log_info "changing rcon/admin password." fn_script_log_info "changing rcon/admin password."
sed -i "s/ADMINPASSWORD/${rconpass}/g" "${servercfgfullpath}" sed -i "s/ADMINPASSWORD/${rconpass}/g" "${servercfgfullpath}"
sleep 1 sleep 0.5
else else
fn_script_log_warn "Config file not found, cannot alter it." fn_script_log_warn "Config file not found, cannot alter it."
echo "Config file not found, cannot alter it." echo "Config file not found, cannot alter it."
sleep 1 sleep 0.5
fi fi
} }
@ -84,16 +87,16 @@ fn_set_dst_config_vars(){
echo "changing server name." echo "changing server name."
fn_script_log_info "changing server name." fn_script_log_info "changing server name."
sed -i "s/SERVERNAME/LinuxGSM/g" "${clustercfgfullpath}" sed -i "s/SERVERNAME/LinuxGSM/g" "${clustercfgfullpath}"
sleep 1 sleep 0.5
echo "changing shard mode." echo "changing shard mode."
fn_script_log_info "changing shard mode." fn_script_log_info "changing shard mode."
sed -i "s/USESHARDING/${sharding}/g" "${clustercfgfullpath}" sed -i "s/USESHARDING/${sharding}/g" "${clustercfgfullpath}"
sleep 1 sleep 0.5
echo "randomizing cluster key." echo "randomizing cluster key."
fn_script_log_info "randomizing cluster key." fn_script_log_info "randomizing cluster key."
randomkey=$(tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 | xargs) randomkey=$(tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 | xargs)
sed -i "s/CLUSTERKEY/${randomkey}/g" "${clustercfgfullpath}" sed -i "s/CLUSTERKEY/${randomkey}/g" "${clustercfgfullpath}"
sleep 1 sleep 0.5
else else
echo "${clustercfg} is already configured." echo "${clustercfg} is already configured."
fn_script_log_info "${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." echo "changing shard name."
fn_script_log_info "changing shard name." fn_script_log_info "changing shard name."
sed -i "s/SHARDNAME/${shard}/g" "${servercfgfullpath}" sed -i "s/SHARDNAME/${shard}/g" "${servercfgfullpath}"
sleep 1 sleep 0.5
echo "changing master setting." echo "changing master setting."
fn_script_log_info "changing master setting." fn_script_log_info "changing master setting."
sed -i "s/ISMASTER/${master}/g" "${servercfgfullpath}" sed -i "s/ISMASTER/${master}/g" "${servercfgfullpath}"
sleep 1 sleep 0.5
## worldgenoverride.lua ## worldgenoverride.lua
if [ "${cave}" == "true" ]; then 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." fn_script_log_info "defining ${shard} as cave in ${servercfgdir}/worldgenoverride.lua."
echo 'return { override_enabled = true, preset = "DST_CAVE", }' > "${servercfgdir}/worldgenoverride.lua" echo 'return { override_enabled = true, preset = "DST_CAVE", }' > "${servercfgdir}/worldgenoverride.lua"
fi fi
sleep 1 sleep 0.5
echo "" echo ""
} }
@ -293,6 +296,12 @@ elif [ "${gamename}" == "Double Action: Boogaloo" ]; then
fn_fetch_default_config fn_fetch_default_config
fn_default_config_remote fn_default_config_remote
fn_set_config_vars 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 elif [ "${gamename}" == "Factorio" ]; then
gamedirname="Factorio" gamedirname="Factorio"
array_configs+=( server-settings.json ) array_configs+=( server-settings.json )

2
lgsm/functions/install_dst_token.sh

@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
echo "" echo ""
echo "Enter ${gamename} Cluster Token" echo "Enter ${gamename} Cluster Token"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
echo "A cluster token is required to run this server!" echo "A cluster token is required to run this server!"
echo "Follow the instructions in this link to obtain this key:" echo "Follow the instructions in this link to obtain this key:"
echo "https://linuxgsm.com/dst-auth-token" echo "https://linuxgsm.com/dst-auth-token"

4
lgsm/functions/install_factorio_save.sh

@ -10,6 +10,6 @@ local commandaction="Install"
echo "" echo ""
echo "Creating initial Factorio savefile" echo "Creating initial Factorio savefile"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
check_glibc.sh check_glibc.sh
"${executabledir}"/factorio --create ${serverfiles}/save1 "${executabledir}"/factorio --create "${serverfiles}/save1"

4
lgsm/functions/install_gslt.sh

@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
echo "" echo ""
echo "Game Server Login Token" echo "Game Server Login Token"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
if [ "${gamename}" == "Counter-Strike: Global Offensive" ]||[ "${gamename}" == "Counter-Strike: Source" ]||[ "${gamename}" == "No More Room in Hell" ]; then 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" echo "GSLT is required to run a public ${gamename} server"
fn_script_log_info "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 fi
fi fi
sleep 1 sleep 0.5
if [ "${gamename}" == "Tower Unite" ]; then if [ "${gamename}" == "Tower Unite" ]; then
echo "The GSLT can be changed by editing ${servercfgdir}/${servercfg}." echo "The GSLT can be changed by editing ${servercfgdir}/${servercfg}."
fn_script_log_info "The GSLT can be changed by editing ${servercfgdir}/${servercfg}." fn_script_log_info "The GSLT can be changed by editing ${servercfgdir}/${servercfg}."

6
lgsm/functions/install_logs.sh

@ -13,7 +13,7 @@ if [ "${checklogs}" != "1" ]; then
echo "Creating log directories" echo "Creating log directories"
echo "=================================" echo "================================="
fi fi
sleep 1 sleep 0.5
# Create LinuxGSM logs # Create LinuxGSM logs
echo -ne "installing log dir: ${logdir}..." echo -ne "installing log dir: ${logdir}..."
mkdir -p "${logdir}" mkdir -p "${logdir}"
@ -77,7 +77,7 @@ fi
# e.g serverfiles/log is not within log/: symlink created # e.g serverfiles/log is not within log/: symlink created
# log/server is in log/: symlink not created # log/server is in log/: symlink not created
if [ -n "${gamelogdir}" ]; then 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}..." echo -ne "creating symlink to game log dir: ${logdir}/server -> ${gamelogdir}..."
ln -nfs "${gamelogdir}" "${logdir}/server" ln -nfs "${gamelogdir}" "${logdir}/server"
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
@ -102,5 +102,5 @@ if [ -d "${rootdir}/Steam/logs" ]; then
fi fi
fi fi
fi fi
sleep 1 sleep 0.5
fn_script_log_info "Logs installed" fn_script_log_info "Logs installed"

2
lgsm/functions/install_minecraft_eula.sh

@ -7,7 +7,7 @@
echo "" echo ""
echo "Accept ${gamename} EULA" echo "Accept ${gamename} EULA"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
echo "You are required to accept the EULA:" echo "You are required to accept the EULA:"
echo "https://account.mojang.com/documents/minecraft_eula" echo "https://account.mojang.com/documents/minecraft_eula"

5
lgsm/functions/install_server_dir.sh

@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
echo "" echo ""
echo "Server Directory" echo "Server Directory"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
if [ -d "${serverfiles}" ]; then if [ -d "${serverfiles}" ]; then
fn_print_warning_nl "A server is already installed here." fn_print_warning_nl "A server is already installed here."
fi fi
@ -24,5 +24,4 @@ if [ -z "${autoinstall}" ]; then
fi fi
if [ ! -d "${serverfiles}" ]; then if [ ! -d "${serverfiles}" ]; then
mkdir -v "${serverfiles}" mkdir -v "${serverfiles}"
fi fi
sleep 1

18
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" 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 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" 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 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" 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 elif [ "${gamename}" == "Quake 2" ]; then
@ -65,7 +67,7 @@ fn_install_server_files_steamcmd(){
if [ "${counter}" -ge "7" ]; then if [ "${counter}" -ge "7" ]; then
echo "Removing $(find ${serverfiles} -type d -print0 | grep -Ez '[^/]{30}$')" 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 fi
if [ "${counter}" -ge "9" ]; then if [ "${counter}" -ge "9" ]; then
rm -rf "${steamcmddir}" rm -rf "${steamcmddir}"
@ -74,7 +76,7 @@ fn_install_server_files_steamcmd(){
# Detects if unbuffer command is available for 32 bit distributions only. # Detects if unbuffer command is available for 32 bit distributions only.
info_distro.sh 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" unbuffer="stdbuf -i0 -o0 -e0"
fi fi
@ -85,11 +87,6 @@ fn_install_server_files_steamcmd(){
else else
${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} +quit ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} +quit
local exitcode=$? 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 fi
elif [ "${counter}" -ge "5" ]; then elif [ "${counter}" -ge "5" ]; then
if [ "${engine}" == "goldsource" ]; then if [ "${engine}" == "goldsource" ]; then
@ -98,11 +95,6 @@ fn_install_server_files_steamcmd(){
else else
${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} validate +quit ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} validate +quit
local exitcode=$? 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
fi fi
elif [ "${counter}" -ge "11" ]; then elif [ "${counter}" -ge "11" ]; then
@ -128,7 +120,7 @@ fn_install_server_files_steamcmd(){
echo "" echo ""
echo "Installing ${gamename} Server" echo "Installing ${gamename} Server"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
if [ -n "${appid}" ]; then if [ -n "${appid}" ]; then
fn_install_server_files_steamcmd fn_install_server_files_steamcmd

4
lgsm/functions/install_squad_license.sh

@ -11,7 +11,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
echo "" echo ""
echo "Squad Server License" echo "Squad Server License"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
echo "Server license is an optional feature for ${gamename} server" echo "Server license is an optional feature for ${gamename} server"
fn_script_log_info "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 "Get more info and a server license here:"
fn_script_log_info "http://forums.joinsquad.com/topic/16519-server-licensing-general-info/" fn_script_log_info "http://forums.joinsquad.com/topic/16519-server-licensing-general-info/"
echo "" echo ""
sleep 1 sleep 0.5
echo "The Squad server license can be changed by editing ${servercfgdir}/License.cfg." 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}." fn_script_log_info "The Squad server license can be changed by editing ${selfname}."
echo "" echo ""

2
lgsm/functions/install_steamcmd.sh

@ -10,5 +10,5 @@ local commandaction="Install"
echo "" echo ""
echo "Installing SteamCMD" echo "Installing SteamCMD"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
check_steamcmd.sh check_steamcmd.sh

12
lgsm/functions/install_ts3db.sh

@ -13,7 +13,7 @@ fn_install_ts3db_mariadb(){
echo "" echo ""
echo "checking if libmariadb2 is installed" echo "checking if libmariadb2 is installed"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
ldd "${serverfiles}/libts3db_mariadb.so" | grep "libmariadb.so.2 => not found" ldd "${serverfiles}/libts3db_mariadb.so" | grep "libmariadb.so.2 => not found"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "libmariadb2 not installed. Please install it first." echo "libmariadb2 not installed. Please install it first."
@ -25,7 +25,7 @@ fn_install_ts3db_mariadb(){
echo "" echo ""
echo "Configuring ${gamename} Server for MariaDB/MySQL" echo "Configuring ${gamename} Server for MariaDB/MySQL"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
read -rp "Enter MariaDB hostname: " mariahostname read -rp "Enter MariaDB hostname: " mariahostname
read -rp "Enter MariaDB port: " mariaport read -rp "Enter MariaDB port: " mariaport
read -rp "Enter MariaDB username: " mariausername 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/dbpluginparameter=/dbpluginparameter=ts3db_mariadb.ini/g" "${servercfgfullpath}"
sed -i "s/dbsqlcreatepath=create_sqlite\//dbsqlcreatepath=create_mariadb\//g" "${servercfgfullpath}" sed -i "s/dbsqlcreatepath=create_sqlite\//dbsqlcreatepath=create_mariadb\//g" "${servercfgfullpath}"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
} }
if [ -z "${autoinstall}" ]; then if [ -z "${autoinstall}" ]; then
@ -61,16 +61,16 @@ fi
fn_script_log "Accepting ts3server license: ${executabledir}/LICENSE" fn_script_log "Accepting ts3server license: ${executabledir}/LICENSE"
fn_print_information_nl "Accepting TeamSpeak license:" fn_print_information_nl "Accepting TeamSpeak license:"
echo " * ${executabledir}/LICENSE" echo " * ${executabledir}/LICENSE"
sleep 1 sleep 0.5
touch "${executabledir}/.ts3server_license_accepted" touch "${executabledir}/.ts3server_license_accepted"
## Get privilege key ## Get privilege key
echo "" echo ""
echo "Getting privilege key" echo "Getting privilege key"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
echo "IMPORANT! Save these details for later." echo "IMPORANT! Save these details for later."
sleep 1 sleep 0.5
cd "${executabledir}" || exit cd "${executabledir}" || exit
./ts3server_startscript.sh start inifile=ts3-server.ini ./ts3server_startscript.sh start inifile=ts3-server.ini
sleep 5 sleep 5

2
lgsm/functions/install_unreal_tournament_eula.sh

@ -7,7 +7,7 @@
echo "" echo ""
echo "Accept ${gamename} EULA" echo "Accept ${gamename} EULA"
echo "=================================" echo "================================="
sleep 1 sleep 0.5
echo "You are required to accept the EULA:" echo "You are required to accept the EULA:"
echo "https://www.epicgames.com/unrealtournament/unreal-tournament-pre-alpha-test-development-build-eula/" echo "https://www.epicgames.com/unrealtournament/unreal-tournament-pre-alpha-test-development-build-eula/"

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save