diff options
Diffstat (limited to 'script/update/vendor')
-rwxr-xr-x | script/update/vendor/download | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/script/update/vendor/download b/script/update/vendor/download index 6c83b0ca..a32be3ba 100755 --- a/script/update/vendor/download +++ b/script/update/vendor/download @@ -76,6 +76,60 @@ download_vendorfiles() "${CONFIG_MRC_FILE}" } +fetch() +{ + dl_type="${1}" + dl="${2}" + dl_bkup="${3}" + dlsum="${4}" + [ "${5# }" = "${5}" ] || err "fetch: space not allowed in _dest: '${5}'" + [ "${5#/}" = "${5}" ] || err "fetch: absolute path not allowed: '${5}'" + _dest="${5##*../}" + _dl="${vendir}/cache/${dlsum}" + + x_ mkdir -p "${_dl%/*}" + + dl_fail="y" + vendor_checksum "${dlsum}" "${_dl}" && dl_fail="n" + for url in "${dl}" "${dl_bkup}"; do + [ "${dl_fail}" = "n" ] && break + [ -z "${url}" ] && continue + x_ rm -f "${_dl}" + curl --location --retry 3 -A "${_ua}" "${url}" -o "${_dl}" || \ + wget --tries 3 -U "${_ua}" "${url}" -O "${_dl}" || \ + continue + vendor_checksum "${dlsum}" "${_dl}" && dl_fail="n" + done + [ "${dl_fail}" = "y" ] && \ + err "fetch ${dlsum}: matched file unavailable" + + x_ rm -Rf "${_dl}_extracted" + mkdirs "${_dest}" "extract_${dl_type}" || return 0 + eval "extract_${dl_type}" + + [ -f "${_dest}" ] && return 0 + err "extract_${dl_type} (fetch): missing file: '${_dest}'" +} + +vendor_checksum() +{ + [ "$(sha512sum ${2} | awk '{print $1}')" != "${1}" ] || return 0 + printf "Bad checksum for file: %s\n" "${2}" 1>&2 + rm -f "${2}" || : + return 1 +} + +mkdirs() +{ + [ -f "${1}" ] && \ + printf "mkdirs ${1} ${2}: already downloaded\n" 1>&2 && return 1 + x_ mkdir -p "${1%/*}" + x_ rm -Rf "${appdir}" + x_ mkdir -p "${appdir}/" + extract_archive "${_dl}" "${appdir}" || \ + [ "${2}" = "extract_e6400vga" ] || err "mkdirs ${1} ${2}: !extract" +} + extract_intel_me() { _me="${PWD}/${_dest}" # must always be an absolute path @@ -111,6 +165,13 @@ extract_intel_me() rm -Rf "${sdir}" || err "extract_intel_me: !rm -Rf ${sdir}" } +extract_archive() +{ + innoextract "${1}" -d "${2}" || python "${pfs_extract}" "${1}" -e || \ + 7z x "${1}" -o"${2}" || unar "${1}" -o "${2}" || \ + unzip "${1}" -d "${2}" || return 1 +} + extract_kbc1126ec() { ( |