| |
| |
| |
| |
| |
| rtl_fetch_url_wget() { |
| local _urls="${1}" _sha256sum_src="${2}" _target_dname="${3}" _target_fname="${4}" _target_name="${5}" _mirrors="${6:-}"\ |
| _rc=0 _sha256sum_target="" _target_fname_full="" _url="" _url_base="" _urls_count=0 _urls_full=""; |
| |
| _urls_full="${_urls}"; |
| for _url_base in ${_mirrors}; do |
| _urls_full="$(rtl_lconcat "${_urls_full}" "${_url_base%/}/${_target_name}/${_target_fname}")"; |
| done; |
| _urls_count="$(rtl_llength "${_urls_full}")"; |
| for _url in ${_urls_full}; do |
| if [ -z "${_target_fname}" ]; then |
| _target_fname="$(rtl_basename "${_url}")"; |
| fi; |
| _target_fname_full="${_target_dname}/${_target_fname}"; |
| (set +o errexit -o noglob -o nounset; |
| rtl_flock_acquire 4 || exit 1; |
| trap "_rc=\"\${?}\"; rm -f \"${_target_fname_full}.fetching\"; exit \"\${_rc}\";" EXIT; |
| if [ -z "${_sha256sum_src}" ]\ |
| || ! rtl_check_digest_file "${_target_fname_full}" "${_sha256sum_src}" "${_target_fname_full}.fetched"; then |
| wget ${DEFAULT_WGET_ARGS} -O "${_target_fname_full}" "${_url}"; _rc="${?}"; |
| if [ "${_rc}" -ne 0 ]; then |
| exit $((${_rc}+2)); |
| elif [ -n "${_sha256sum_src}" ]\ |
| && ! rtl_check_digest "${_target_fname_full}" "${_sha256sum_src}"; then |
| exit 2; |
| else |
| printf "%s" "${RTL_CHECK_DIGEST_DIGEST}" > "${_target_fname_full}.fetched"; exit 0; |
| fi; |
| else |
| exit 0; |
| fi;) 4<>"${_target_fname_full}.fetching"; _rc="${?}"; : $((_urls_count-=1)); |
| case "${_rc}" in |
| 0) break; ;; |
| 1) if [ "${_urls_count}" -ge 1 ]; then |
| rtl_log_msg "warning" "${MSG_rtl_fetch_lockfail_retryurl}" "${_url}"; |
| else |
| rtl_log_msg "fatal" "${MSG_rtl_fetch_lockfail}" "${_url}"; |
| rtl_fileop rm "${_target_fname_full}"; break; |
| fi; ;; |
| 2) if [ "${_urls_count}" -ge 1 ]; then |
| rtl_log_msg "warning" "${MSG_rtl_fetch_hashfail_retryurl}" "${_url}" "${_sha256sum_src}"; |
| else |
| if _sha256sum_target="$(sha256sum "${_target_fname_full}" |\ |
| awk '{print $1}' 2>/dev/null)"; then |
| rtl_log_msg "fatal" "${MSG_rtl_fetch_hashfail1}" "${_url}" "${_sha256sum_src}" "${_sha256sum_target}"; |
| else |
| rtl_log_msg "fatal" "${MSG_rtl_fetch_hashfail2}" "${_url}" "${_sha256sum_src}"; |
| fi; |
| rtl_fileop rm "${_target_fname_full}"; break; |
| fi; ;; |
| *) if [ "${_urls_count}" -ge 1 ]; then |
| rtl_log_msg "warning" "${MSG_rtl_fetch_fail_retryurl}" "${_url}" "$((${_rc}-2))"; |
| else |
| rtl_log_msg "fatal" "${MSG_rtl_fetch_fail}" "${_url}" "$((${_rc}-2))"; |
| rtl_fileop rm "${_target_fname_full}"; break; |
| fi; ;; |
| esac; |
| done; |
| return "${_rc}"; |
| }; |
| |
| |