# fetch_package.sh ############ # This section fetches a package from $download_url and verifies its metadata. # # Inputs: # $download_url: # $tmp_dir: # Optional Inputs: # $cmdline_filename: Name of the package downloaded on local disk. # $cmdline_dl_dir: Name of the directory downloaded package will be saved to on local disk. # # Outputs: # $download_filename: Name of the downloaded file on local disk. # $filetype: Type of the file downloaded. ############

filename=`echo $download_url | sed -e 's/?.*//' | sed -e 's/^.*///'` filetype=`echo $filename | sed -e 's/^.*.//'`

# use either $tmp_dir, the provided directory (-d) or the provided filename (-f) if test “x$cmdline_filename” != “x”; then

download_filename="$cmdline_filename"

elif test “x$cmdline_dl_dir” != “x”; then

download_filename="$cmdline_dl_dir/$filename"

else

download_filename="$tmp_dir/$filename"

fi

# ensure the parent directory where we download the installer always exists download_dir=`dirname $download_filename` (umask 077 && mkdir -p $download_dir) || exit 1

# check if we have that file locally available and if so verify the checksum # Use cases # 1) metadata - new download # 2) metadata - cached download when cmdline_dl_dir set # 3) url override - no checksum new download # 4) url override - with checksum new download # 5) url override - with checksum cached download when cmdline_dl_dir set

cached_file_available=“false” verify_checksum=“true”

if test -f $download_filename; then

echo "$download_filename exists"
cached_file_available="true"

fi

if test “x$download_url_override” != “x”; then

echo "Download URL override specified"
if test "x$cached_file_available" = "xtrue"; then
  echo "Verifying local file"
  if test "x$sha256" = "x"; then
    echo "Checksum not specified, ignoring existing file"
    cached_file_available="false" # download new file
    verify_checksum="false" # no checksum to compare after download
  elif do_checksum "$download_filename" "$sha256"; then
    echo "Checksum match, using existing file"
    cached_file_available="true" # don't need to download file
    verify_checksum="false" # don't need to checksum again
  else
    echo "Checksum mismatch, ignoring existing file"
    cached_file_available="false" # download new file
    verify_checksum="true" # checksum new downloaded file
  fi
else
  echo "$download_filename not found"
  cached_file_available="false" # download new file
  if test "x$sha256" = "x"; then
    verify_checksum="false" # no checksum to compare after download
  else
    verify_checksum="true" # checksum new downloaded file
  fi
fi

fi

if test “x$cached_file_available” != “xtrue”; then

do_download "$download_url" "$download_filename"

fi

if test “x$verify_checksum” = “xtrue”; then

do_checksum "$download_filename" "$sha256" || checksum_mismatch

fi

############ # end of fetch_package.sh ############