core_dl.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #!/bin/bash
  2. # LGSM core_dl.sh function
  3. # Author: Daniel Gibbs
  4. # Website: http://gameservermanagers.com
  5. lgsm_version="050216"
  6. # Description: Deals with all downloads for LGSM.
  7. # Downloads can be defined in code like so
  8. # fn_dl "dl_filename" "dl_filepath" "dl_url" "dl_md5"
  9. # fn_dl "file.tar.bz2" "/home/gameserver" "http://example.com/file.tar/bz2" "10cd7353aa9d758a075c600a6dd193fd"
  10. fn_dl_md5(){
  11. # Runs MD5 Check if available
  12. if [ -n "${md5}" ]; then
  13. echo -ne "verifying ${filename} with MD5..."
  14. sleep 1
  15. local md5sumcmd=$(md5sum "${filedir}/${filename}"|awk '{print $1;}')
  16. if [ "${md5sumcmd}" != "${md5}" ]; then
  17. fn_printfaileolnl
  18. echo "${filename} returned MD5 checksum: ${md5sumcmd}"
  19. echo "expected MD5 checksum: ${md5}"
  20. fn_scriptlog "failed to verify ${filename} with MD5"
  21. fn_scriptlog "${filename} returned MD5 checksum: ${md5sumcmd}"
  22. fn_scriptlog "expected MD5 checksum: ${md5}"
  23. exit 1
  24. else
  25. fn_printokeolnl
  26. fn_scriptlog "verifyed ${filename} with MD5"
  27. fn_scriptlog "${filename} returned MD5 checksum: ${md5sumcmd}"
  28. fn_scriptlog "expected MD5 checksum: ${md5}"
  29. fi
  30. fi
  31. }
  32. fn_dl_extract(){
  33. filedir=${1}
  34. filename=${2}
  35. extractdir=${3}
  36. # extracts archives
  37. echo -ne "extracting ${filename}..."
  38. mime=$(file -b --mime-type "${filedir}/${filename}")
  39. if [ "${mime}" == "application/gzip" ]; then
  40. tarcmd=$(tar -zxf "${filedir}/${filename}" -C "${extractdir}")
  41. elif [ "${mime}" == "application/x-bzip2" ]; then
  42. tarcmd=$(tar -jxf "${filedir}/${filename}" -C "${extractdir}")
  43. fi
  44. local exitcode=$?
  45. if [ ${exitcode} -ne 0 ]; then
  46. fn_printfaileolnl
  47. echo "${tarcmd}"
  48. exit ${exitcode}
  49. else
  50. fn_printokeolnl
  51. fi
  52. }
  53. # Trap to remove file download if canceled before completed
  54. fn_fetch_trap() {
  55. echo ""
  56. fn_printinfomationnl "Cancelling download"
  57. sleep 1
  58. fn_printinfomation "Removing ${filename}"
  59. rm -f "${filedir}/${filename}"
  60. }
  61. # Downloads file using curl and run it if required
  62. # fn_fetch_file "fileurl" "filedir" "filename" "executecmd" "run" "force" "md5"
  63. fn_fetch_file(){
  64. fileurl=${1}
  65. filedir=${2}
  66. filename=${3}
  67. executecmd=${4:-0}
  68. run=${5:-0}
  69. force=${6:-0}
  70. md5=${7}
  71. # If the file is missing, then download
  72. if [ ! -f "${filedir}/${filename}" ]; then
  73. if [ ! -d "${filedir}" ]; then
  74. mkdir -p "${filedir}"
  75. fi
  76. # Check curl exists and use available path
  77. curlpaths="$(command -v curl 2>/dev/null) $(which curl >/dev/null 2>&1) /usr/bin/curl /bin/curl /usr/sbin/curl /sbin/curl $(echo $PATH | sed "s/\([:]\|\$\)/\/curl /g")"
  78. for curlcmd in ${curlpaths}
  79. do
  80. if [ -x "${curlcmd}" ]; then
  81. break
  82. fi
  83. done
  84. # If curl exists download file
  85. if [ "$(basename ${curlcmd})" == "curl" ]; then
  86. # trap to remove part downloaded files
  87. trap fn_fetch_trap INT
  88. # if larger file shows progress bar
  89. if [ ${filename##*.} == "bz2" ]; then
  90. echo -ne "downloading ${filename}..."
  91. sleep 1
  92. curlcmd=$(${curlcmd} --progress-bar --fail -o "${filedir}/${filename}" "${fileurl}")
  93. echo -ne "downloading ${filename}..."
  94. else
  95. echo -ne " fetching ${filename}...\c"
  96. curlcmd=$(${curlcmd} -s --fail -o "${filedir}/${filename}" "${fileurl}" 2>&1)
  97. fi
  98. local exitcode=$?
  99. if [ ${exitcode} -ne 0 ]; then
  100. fn_printfaileolnl
  101. echo "${curlcmd}"
  102. echo -e "${fileurl}\n"
  103. exit ${exitcode}
  104. else
  105. fn_printokeolnl
  106. fi
  107. # remove trap
  108. trap - INT
  109. else
  110. fn_printfaileolnl
  111. echo "Curl is not installed!"
  112. echo -e ""
  113. exit 1
  114. fi
  115. # make file executecmd if executecmd is set
  116. if [ "${executecmd}" == "executecmd" ]; then
  117. chmod +x "${filedir}/${filename}"
  118. fi
  119. fi
  120. if [ -f "${filedir}/${filename}" ]; then
  121. fn_dl_md5
  122. # run file if run is set
  123. if [ "${run}" == "run" ]; then
  124. source "${filedir}/${filename}"
  125. fi
  126. fi
  127. }
  128. # fn_fetch_file_github
  129. # Parameters:
  130. # github_file_url_dir: The directory the file is located in teh GitHub repo
  131. # github_file_url_name: name of file
  132. # filepath: location file to be saved
  133. # executecmd: set to "executecmd" to make file executecmd
  134. # run: Optional, set to run to execute the file
  135. # force: force download of file even if exists
  136. fn_fetch_file_github(){
  137. github_file_url_dir=${1}
  138. github_file_url_name=${2}
  139. filepath=${3}
  140. filename="${github_file_url_name}"
  141. executecmd=${4:-0}
  142. run=${5:-0}
  143. force=${6:-0}
  144. githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}"
  145. fn_fetch_file "${githuburl}" "${filepath}" "${filename}" "${executecmd}" "${run}" "${force}"
  146. }
  147. # Fetches functions
  148. fn_fetch_function(){
  149. github_file_url_dir="functions" # github dir containing the file
  150. github_file_url_name="${functionfile}" # name of the github file
  151. githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}"
  152. filedir="${functionsdir}" # local dir that will contain the file
  153. filename="${github_file_url_name}" # name of the local file
  154. executecmd="executecmd"
  155. run="run"
  156. fn_fetch_file "${githuburl}" "${filedir}" "${filename}" "${executecmd}" "${run}"
  157. }