install_server_files.sh 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #!/bin/bash
  2. # LinuxGSM install_server_files.sh function
  3. # Author: Daniel Gibbs
  4. # Website: https://linuxgsm.com
  5. # Description: Installs server files.
  6. local commandname="INSTALL"
  7. local commandaction="Install"
  8. local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
  9. fn_install_server_files(){
  10. if [ "${gamename}" == "Battlefield: 1942" ]; then
  11. remote_fileurl="http://files.linuxgsm.com/BattleField1942/bf1942_lnxded-1.61-hacked-to-1.612.full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="bf1942_lnxded-1.61-hacked-to-1.612.full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="a86a5d3cd64ca59abcc9bb9f777c2e5d"
  12. elif [ "${gamename}" == "BrainBread" ]; then
  13. remote_fileurl="https://files.linuxgsm.com/BrainBread/brainbread-v1.2-linuxserver.tar.bz2"; local_filedir="${tmpdir}"; local_filename="brainbread-v1.2-linuxserver.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="5c729a7e9eecfa81b71a6a1f7267f0fd"
  14. elif [ "${gamename}" == "Call of Duty" ]; then
  15. remote_fileurl="http://files.linuxgsm.com/CallOfDuty/cod-lnxded-1.5b-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="cod-lnxded-1.5-large.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="19629895a4cf6fd8f6d1ee198b5304cd"
  16. elif [ "${gamename}" == "Call of Duty: United Offensive" ]; then
  17. remote_fileurl="http://files.linuxgsm.com/CallOfDutyUnitedOffensive/coduo-lnxded-1.51b-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="coduo-lnxded-1.51b-full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="f1804ef13036e2b4ab535db000b19e97"
  18. elif [ "${gamename}" == "Call of Duty 2" ]; then
  19. remote_fileurl="http://files.linuxgsm.com/CallOfDuty2/cod2-lnxded-1.3-full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="cod2-lnxded-1.3-full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="078128f83d06dc3d7699428dc2870214"
  20. elif [ "${gamename}" == "Call of Duty 4" ]; then
  21. 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"
  22. elif [ "${gamename}" == "Call of Duty: World at War" ]; then
  23. 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"
  24. elif [ "${shortname}" == "etl" ]; then
  25. 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"
  26. elif [ "${gamename}" == "GoldenEye: Source" ]; then
  27. 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"
  28. elif [ "${gamename}" == "Natural Selection" ]; then
  29. remote_fileurl="http://files.linuxgsm.com/NaturalSelection/ns_dedicated_server_v32.tar.bz2"; local_filedir="${tmpdir}"; local_filename="ns_dedicated_server_v32.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="499cf63324b76925ada6baf5f2eacd67"
  30. elif [ "${gamename}" == "Quake 2" ]; then
  31. remote_fileurl="http://files.linuxgsm.com/Quake2/quake2-3.20-glibc-i386-full-linux2.0.tar.bz2"; local_filedir="${tmpdir}"; local_filename="quake2-3.20-glibc-i386-full-linux2.0.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="0b8c7e2d51f40b56b328c69e986e7c5f"
  32. elif [ "${gamename}" == "Quake 3: Arena" ]; then
  33. remote_fileurl="http://files.linuxgsm.com/Quake3/quake3-1.32c-x86-full-linux.tar.bz2"; local_filedir="${tmpdir}"; local_filename="quake3-1.32c-x86-full-linux.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="fd7258d827474f67663dda297bff4306"
  34. elif [ "${gamename}" == "QuakeWorld" ]; then
  35. remote_fileurl="http://files.linuxgsm.com/QuakeWorld/nquake.server.linux.083116.full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="nquake.server.linux.083116.full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="75a409cf08d808f075e4dacdc7b21b78"
  36. elif [ "${gamename}" == "Unreal Tournament 2004" ]; then
  37. remote_fileurl="http://files.linuxgsm.com/UnrealTournament2004/ut2004-server-3369-2-ultimate-linux.tar.bz2"; local_filedir="${tmpdir}"; local_filename="ut2004-server-3369-2-ultimate-linux.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="67c5e2cd9c2a4b04f163962ee41eff54"
  38. elif [ "${gamename}" == "Unreal Tournament 99" ]; then
  39. remote_fileurl="http://files.linuxgsm.com/UnrealTournament99/ut99-server-451-ultimate-linux.tar.bz2"; local_filedir="${tmpdir}"; local_filename="ut99-server-451-ultimate-linux.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="49cb24d0550ff6ddeaba6007045c6edd"
  40. elif [ "${gamename}" == "Unreal Tournament" ]; then
  41. remote_fileurl="https://s3.amazonaws.com/unrealtournament/UnrealTournament-Client-XAN-3395761-Linux.zip"; local_filedir="${tmpdir}"; local_filename="UnrealTournament-Server-XAN-3395761-Linux.zip"; chmodx="noexecute" run="norun"; force="noforce"; md5="f04ad5b96865b19613303331ff4075eb"
  42. elif [ "${gamename}" == "Unreal Tournament 3" ]; then
  43. remote_fileurl="http://files.linuxgsm.com/UnrealTournament3/UT3-linux-server-2.1.tar.bz2"; local_filedir="${tmpdir}"; local_filename="UT3-linux-server-2.1.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="2527437b46f1b47f20228d27d72395a6"
  44. elif [ "${gamename}" == "Vampire Slayer" ]; then
  45. remote_fileurl="https://files.linuxgsm.com/VampireSlayer/vs_l-6.0_full.tar.bz2"; local_filedir="${tmpdir}"; local_filename="vs_l-6.0_full.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="38a79e44b98578bbdc5b15818493a066"
  46. elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
  47. remote_fileurl="http://files.linuxgsm.com/WolfensteinEnemyTerritory/enemy-territory.260b.tar.bz2"; local_filedir="${tmpdir}"; local_filename="enemy-territory.260b.tar.bz2"; chmodx="nochmodx" run="norun"; force="noforce"; md5="f833f514bfcdd46b42c111f83350c5a7"
  48. elif [ "${gamename}" == "San Andreas Multiplayer" ]; then
  49. remote_fileurl="http://files.sa-mp.com/samp037svr_R2-1.tar.gz"; local_filedir="${tmpdir}"; local_filename="samp037svr_R2-1.tar.gz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="93705e165550c97484678236749198a4"
  50. fi
  51. fn_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}"
  52. fn_dl_extract "${local_filedir}" "${local_filename}" "${serverfiles}"
  53. }
  54. fn_install_server_files_steamcmd(){
  55. counter="0"
  56. while [ "${counter}" == "0" ]||[ "${exitcode}" != "0" ]; do
  57. counter=$((counter+1))
  58. cd "${steamcmddir}"
  59. if [ "${counter}" -le "10" ]; then
  60. # Attempt 1-4: Standard attempt
  61. # Attempt 5-6: Validate attempt
  62. # Attempt 7-8: Validate, delete long name dir
  63. # Attempt 9-10: Validate, delete long name dir, re-download SteamCMD
  64. # Attempt 11: Failure
  65. if [ "${counter}" -ge "2" ]; then
  66. fn_print_warning_nl "SteamCMD did not complete the download, retrying: Attempt ${counter}"
  67. fn_script_log "SteamCMD did not complete the download, retrying: Attempt ${counter}"
  68. fi
  69. if [ "${counter}" -ge "7" ]; then
  70. echo "Removing $(find "${serverfiles}" -type d -print0 | grep -Ez '[^/]{30}$')"
  71. find "${serverfiles}" -type d -print0 | grep -Ez '[^/]{30}$' | xargs -0 rm -rf
  72. fi
  73. if [ "${counter}" -ge "9" ]; then
  74. rm -rf "${steamcmddir}"
  75. check_steamcmd.sh
  76. fi
  77. # Detects if unbuffer command is available for 32 bit distributions only.
  78. info_distro.sh
  79. if [ "$(command -v stdbuf 2>/dev/null)" ]&&[ "${arch}" != "x86_64" ]; then
  80. unbuffer="stdbuf -i0 -o0 -e0"
  81. fi
  82. if [ "${counter}" -le "4" ]; then
  83. if [ "${appid}" == "90" ]; then
  84. ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_info_print 70 +app_set_config 90 mod "${appidmod}" +app_update "${appid}" ${branch} +quit
  85. local exitcode=$?
  86. else
  87. ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} +quit
  88. local exitcode=$?
  89. fi
  90. elif [ "${counter}" -ge "5" ]; then
  91. if [ "${engine}" == "goldsource" ]; then
  92. ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_info_print 70 +app_set_config 90 mod "${appidmod}" +app_update "${appid}" ${branch} validate +quit
  93. local exitcode=$?
  94. else
  95. ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${branch} validate +quit
  96. local exitcode=$?
  97. fi
  98. fi
  99. elif [ "${counter}" -ge "11" ]; then
  100. fn_print_failure_nl "SteamCMD did not complete the download, too many retrys"
  101. fn_script_log "SteamCMD did not complete the download, too many retrys"
  102. break
  103. fi
  104. done
  105. # Goldsource servers commonly fail to download all the server files required.
  106. # Validating a few of times may reduce the chance of this issue.
  107. if [ "${engine}" == "goldsource" ]; then
  108. fn_print_information_nl "Goldsource servers commonly fail to download all the server files required. Validating a few of times may reduce the chance of this issue."
  109. counter="0"
  110. while [ "${counter}" -le "4" ]; do
  111. counter=$((counter+1))
  112. ${unbuffer} ./steamcmd.sh +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_info_print 70 +app_set_config 90 mod ${appidmod} +app_update "${appid}" ${branch} validate +quit
  113. local exitcode=$?
  114. done
  115. fi
  116. }
  117. echo ""
  118. echo "Installing ${gamename} Server"
  119. echo "================================="
  120. sleep 0.5
  121. if [ -n "${appid}" ]; then
  122. fn_install_server_files_steamcmd
  123. fi
  124. if [ "${gamename}" == "TeamSpeak 3" ]; then
  125. update_ts3.sh
  126. elif [ "${gamename}" == "Minecraft" ]; then
  127. install_minecraft_eula.sh
  128. update_minecraft.sh
  129. elif [ "${gamename}" == "Mumble" ]; then
  130. update_mumble.sh
  131. elif [ "${gamename}" == "Multi Theft Auto" ]; then
  132. update_mta.sh
  133. elif [ "${gamename}" == "Factorio" ]; then
  134. update_factorio.sh
  135. install_factorio_save.sh
  136. elif [ -z "${appid}" ]||[ "${gamename}" == "GoldenEye: Source" ]||[ "${gamename}" == "Base Defense" ]||[ "${gamename}" == "BrainBread" ]||[ "${shortname}" == "ns" ]||[ "${shortname}" == "vs" ]; then
  137. if [ "${gamename}" == "Unreal Tournament" ]; then
  138. install_unreal_tournament_eula.sh
  139. fi
  140. fn_install_server_files
  141. fi
  142. if [ -z "${autoinstall}" ]; then
  143. echo ""
  144. echo "================================="
  145. if ! fn_prompt_yn "Was the install successful?" Y; then
  146. install_retry.sh
  147. fi
  148. fi