| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- #!/bin/bash
- # LinuxGSM core_dl.sh function
- # Author: Daniel Gibbs
- # Contributor: UltimateByte
- # Website: https://linuxgsm.com
- # Description: Deals with all downloads for LinuxGSM.
- # remote_fileurl: The URL of the file: http://example.com/dl/File.tar.bz2
- # local_filedir: location the file is to be saved: /home/server/lgsm/tmp
- # local_filename: name of file (this can be different from the url name): file.tar.bz2
- # chmodx: Optional, set to "chmodx" to make file executable using chmod +x
- # run: Optional, set run to execute the file after download
- # forcedl: Optional, force re-download of file even if exists
- # md5: Optional, set an md5 sum and will compare it against the file.
- #
- # Downloads can be defined in code like so:
- # fn_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}"
- # fn_fetch_file "http://example.com/file.tar.bz2" "/some/dir" "file.tar.bz2" "chmodx" "run" "forcedl" "10cd7353aa9d758a075c600a6dd193fd"
- commandname="DOWNLOAD"
- commandaction="Download"
- function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
- fn_dl_md5(){
- # Runs MD5 Check if available
- if [ "${md5}" != "0" ]&&[ "${md5}" != "nomd5" ]; then
- echo -ne "verifying ${local_filename} with MD5..."
- sleep 0.5
- local md5sumcmd=$(md5sum "${local_filedir}/${local_filename}"|awk '{print $1;}')
- if [ "${md5sumcmd}" != "${md5}" ]; then
- fn_print_fail_eol_nl
- echo "${local_filename} returned MD5 checksum: ${md5sumcmd}"
- echo "expected MD5 checksum: ${md5}"
- fn_script_log_fatal "Verifying ${local_filename} with MD5: FAIL"
- fn_script_log_info "${local_filename} returned MD5 checksum: ${md5sumcmd}"
- fn_script_log_info "Expected MD5 checksum: ${md5}"
- core_exit.sh
- else
- fn_print_ok_eol_nl
- fn_script_log_pass "Verifying ${local_filename} with MD5: OK"
- fn_script_log_info "${local_filename} returned MD5 checksum: ${md5sumcmd}"
- fn_script_log_info "Expected MD5 checksum: ${md5}"
- fi
- fi
- }
- # Extracts bzip2, gzip or zip files
- # Extracts can be defined in code like so:
- # fn_dl_extract "${local_filedir}" "${local_filename}" "${extractdir}"
- # fn_dl_extract "/home/gameserver/lgsm/tmp" "file.tar.bz2" "/home/gamserver/serverfiles"
- fn_dl_extract(){
- local_filedir="${1}"
- local_filename="${2}"
- extractdir="${3}"
- # extracts archives
- echo -ne "extracting ${local_filename}..."
- mime=$(file -b --mime-type "${local_filedir}/${local_filename}")
- if [ ! -d "${extractdir}" ]; then
- mkdir "${extractdir}"
- fi
- if [ "${mime}" == "application/gzip" ]||[ "${mime}" == "application/x-gzip" ]; then
- extractcmd=$(tar -zxf "${local_filedir}/${local_filename}" -C "${extractdir}")
- elif [ "${mime}" == "application/x-bzip2" ]; then
- tarcmd=$(tar -jxf "${local_filedir}/${local_filename}" -C "${extractdir}")
- elif [ "${mime}" == "application/x-xz" ]; then
- tarcmd=$(tar -xf "${local_filedir}/${local_filename}" -C "${extractdir}")
- elif [ "${mime}" == "application/zip" ]; then
- extractcmd=$(unzip -d "${extractdir}" "${local_filedir}/${local_filename}")
- fi
- local exitcode=$?
- if [ ${exitcode} -ne 0 ]; then
- fn_print_fail_eol_nl
- fn_script_log_fatal "Extracting download: FAIL"
- if [ -f "${lgsmlog}" ]; then
- echo "${extractcmd}" >> "${lgsmlog}"
- fi
- echo "${extractcmd}"
- core_exit.sh
- else
- fn_print_ok_eol_nl
- fn_script_log_pass "Extracting download: OK"
- fi
- }
- # Trap to remove file download if canceled before completed
- fn_fetch_trap(){
- echo ""
- echo -ne "downloading ${local_filename}..."
- fn_print_canceled_eol_nl
- fn_script_log_info "Downloading ${local_filename}...CANCELED"
- sleep 0.5
- rm -f "${local_filedir}/${local_filename}"
- echo -ne "downloading ${local_filename}..."
- fn_print_removed_eol_nl
- fn_script_log_info "Downloading ${local_filename}...REMOVED"
- core_exit.sh
- }
- fn_fetch_file(){
- remote_fileurl="${1}"
- local_filedir="${2}"
- local_filename="${3}"
- chmodx="${4:-0}"
- run="${5:-0}"
- forcedl="${6:-0}"
- md5="${7:-0}"
- # Download file if missing or download forced
- if [ ! -f "${local_filedir}/${local_filename}" ]||[ "${forcedl}" == "forcedl" ]; then
- if [ ! -d "${local_filedir}" ]; then
- mkdir -p "${local_filedir}"
- fi
- # Trap will remove part downloaded files if canceled
- trap fn_fetch_trap INT
- # if larger file shows progress bar
- if [ "${local_filename##*.}" == "bz2" ]||[ "${local_filename##*.}" == "gz" ]||[ "${local_filename##*.}" == "zip" ]||[ "${local_filename##*.}" == "jar" ]; then
- echo -ne "downloading ${local_filename}..."
- sleep 0.5
- echo -ne "downloading ${local_filename}..."
- curlcmd=$(${curlpath} --progress-bar --fail -L -o "${local_filedir}/${local_filename}" "${remote_fileurl}")
- else
- echo -ne " fetching ${local_filename}...\c"
- curlcmd=$(${curlpath} -s --fail -L -o "${local_filedir}/${local_filename}" "${remote_fileurl}" 2>&1)
- fi
- local exitcode=$?
- if [ ${exitcode} -ne 0 ]; then
- fn_print_fail_eol_nl
- if [ -f "${lgsmlog}" ]; then
- fn_script_log_fatal "Downloading ${local_filename}: FAIL"
- echo -e "${remote_fileurl}" >> "${lgsmlog}"
- echo "${curlcmd}" >> "${lgsmlog}"
- fi
- echo -e "${remote_fileurl}"
- echo "${curlcmd}"
- core_exit.sh
- else
- fn_print_ok_eol_nl
- if [ -f "${lgsmlog}" ]; then
- fn_script_log_pass "Downloading ${local_filename}: OK"
- fi
- fi
- # Remove trap
- trap - INT
- # Make file executable if chmodx is set
- if [ "${chmodx}" == "chmodx" ]; then
- chmod +x "${local_filedir}/${local_filename}"
- fi
- fi
- if [ -f "${local_filedir}/${local_filename}" ]; then
- fn_dl_md5
- # Execute file if run is set
- if [ "${run}" == "run" ]; then
- source "${local_filedir}/${local_filename}"
- fi
- fi
- }
- # GitHub file download functions
- # Used to simplify downloading specific files from GitHub
- # github_file_url_dir: the directory of the file in the GitHub: lgsm/functions
- # github_file_url_name: the filename of the file to download from GitHub: core_messages.sh
- # githuburl: the full GitHub url
- # remote_fileurl: The URL of the file: http://example.com/dl/File.tar.bz2
- # local_filedir: location the file is to be saved: /home/server/lgsm/tmp
- # local_filename: name of file (this can be different from the url name): file.tar.bz2
- # chmodx: Optional, set to "chmodx" to make file executable using chmod +x
- # run: Optional, set run to execute the file after download
- # forcedl: Optional, force re-download of file even if exists
- # md5: Optional, set an md5 sum and will compare it against the file.
- # Fetches any files from the GitHub repo
- fn_fetch_file_github(){
- github_file_url_dir="${1}"
- github_file_url_name="${2}"
- githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}"
- remote_fileurl="${githuburl}"
- local_filedir="${3}"
- local_filename="${github_file_url_name}"
- chmodx="${4:-0}"
- run="${5:-0}"
- forcedl="${6:-0}"
- md5="${7:-0}"
- # Passes vars to the file download function
- fn_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}"
- }
- fn_fetch_config(){
- github_file_url_dir="${1}"
- github_file_url_name="${2}"
- githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}"
- remote_fileurl="${githuburl}"
- local_filedir="${3}"
- local_filename="${4}"
- chmodx="nochmodx"
- run="norun"
- forcedl="noforce"
- md5="nomd5"
- # Passes vars to the file download function
- fn_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}"
- }
- # Fetches functions
- fn_fetch_function(){
- github_file_url_dir="lgsm/functions"
- github_file_url_name="${functionfile}"
- githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}"
- remote_fileurl="${githuburl}"
- local_filedir="${functionsdir}"
- local_filename="${github_file_url_name}"
- chmodx="chmodx"
- run="run"
- forcedl="noforce"
- md5="nomd5"
- # Passes vars to the file download function
- fn_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}"
- }
- fn_update_function(){
- exitbypass=1
- github_file_url_dir="lgsm/functions"
- github_file_url_name="${functionfile}"
- githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}"
- remote_fileurl="${githuburl}"
- local_filedir="${functionsdir}"
- local_filename="${github_file_url_name}"
- chmodx="chmodx"
- run="norun"
- forcedl="noforce"
- md5="nomd5"
- fn_fetch_file "${remote_fileurl}" "${local_filedir}" "${local_filename}" "${chmodx}" "${run}" "${forcedl}" "${md5}"
- }
- # Defines curl path
- curlpath=$(command -v curl 2>/dev/null)
- if [ "$(basename "${curlpath}")" != "curl" ]; then
- echo "[ FAIL ] Curl is not installed"
- exit 1
- fi
|