mirror of
https://github.com/thetechprepper/emcomm-tools-os-community.git
synced 2026-09-17 15:41:44 -04:00
Post R5 Build 4 fixes - Added support for retry asset downloader
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Author : Gaston Gonzalez
|
# Author : Gaston Gonzalez
|
||||||
# Date : 1 February 2025
|
# Date : 1 February 2025
|
||||||
# Updated : 7 June 2025
|
# Updated : 20 August 2025
|
||||||
# Purpose : Common environment variables and functions
|
# Purpose : Common environment variables and functions
|
||||||
|
|
||||||
# Standardized device paths for supported hardware
|
# Standardized device paths for supported hardware
|
||||||
@@ -74,3 +74,70 @@ start_and_wait_for_service() {
|
|||||||
exit_on_service_failure ${systemd_unit_name}
|
exit_on_service_failure ${systemd_unit_name}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# download_with_retries downloads a file from a URL with retry and checksum support.
|
||||||
|
#
|
||||||
|
# This function attempts to download a file up to a maximum number of retries.
|
||||||
|
# If a checksum is provided, the downloaded file will be verified against it.
|
||||||
|
# On checksum mismatch, the file is deleted and the download retried.
|
||||||
|
#
|
||||||
|
# Args:
|
||||||
|
# url: The URL of the file to download. (required)
|
||||||
|
# filename: The local filename to save the file as. (required)
|
||||||
|
# checksum: Optional sha256 checksum string to validate the downloaded file.
|
||||||
|
# max_retries: Optional max number of retries (default: 3).
|
||||||
|
# wait_seconds: Optional wait time in seconds between retries (default: 2).
|
||||||
|
#
|
||||||
|
# Returns:
|
||||||
|
# 0 if the file was successfully downloaded (and checksum verified if given).
|
||||||
|
# 1 if arguments are missing, download fails after all retries,
|
||||||
|
# or checksum verification fails.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# download_with_retries "https://example.com/file.tar.gz" "file.tar.gz"
|
||||||
|
# download_with_retries "https://example.com/file.tar.gz" "file.tar.gz" "abc123..." 5 3
|
||||||
|
download_with_retries() {
|
||||||
|
local url="$1"
|
||||||
|
local filename="$2"
|
||||||
|
local checksum="$3" # expected checksum (sha256)
|
||||||
|
local max_retries="${4:-3}" # default = 3 retries
|
||||||
|
local wait_seconds="${5:-2}" # default = 2s wait between retries
|
||||||
|
|
||||||
|
# Require at least URL and filename
|
||||||
|
if [[ -z "$url" || -z "$filename" ]]; then
|
||||||
|
echo "Usage: download_with_retries <url> <filename> [checksum] [max_retries] [wait_seconds]"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for ((i=1; i<=max_retries; i++)); do
|
||||||
|
echo "Attempt $i of $max_retries to download $url..."
|
||||||
|
|
||||||
|
if curl -L -f -o "$filename" "$url"; then
|
||||||
|
echo "Download successful: $filename"
|
||||||
|
|
||||||
|
if [[ -n "$checksum" ]]; then
|
||||||
|
echo "Verifying checksum..."
|
||||||
|
local file_checksum
|
||||||
|
file_checksum=$(sha256sum "$filename" | awk '{print $1}')
|
||||||
|
|
||||||
|
if [[ "$file_checksum" == "$checksum" ]]; then
|
||||||
|
echo "Checksum OK"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "Checksum mismatch (expected $checksum, got $file_checksum)"
|
||||||
|
rm -f "$filename"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# no checksum provided, just succeed
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Download failed (attempt $i)."
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep "$wait_seconds"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Download failed after $max_retries attempts."
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
|
|||||||
trap 'et-log "\"${last_command}\" command failed with exit code $?."' ERR
|
trap 'et-log "\"${last_command}\" command failed with exit code $?."' ERR
|
||||||
|
|
||||||
. ./env.sh
|
. ./env.sh
|
||||||
|
. ../overlay/opt/emcomm-tools/bin/et-common
|
||||||
|
|
||||||
APP=et-api
|
APP=et-api
|
||||||
VERSION=1.0.0
|
VERSION=1.0.0
|
||||||
@@ -24,17 +25,23 @@ mkdir -v -p "${BIN_DIR}" "${DATA_DIR}" "${INDEX_DIR}"
|
|||||||
|
|
||||||
# Download and install et-api uber JAR
|
# Download and install et-api uber JAR
|
||||||
URL="${BASE_URL}/${ET_API_JAR}"
|
URL="${BASE_URL}/${ET_API_JAR}"
|
||||||
et-log "Downloading ${APP}: ${URL}"
|
download_with_retries ${URL} ${APP}
|
||||||
curl -s -L -o "${BIN_DIR}/${APP}" --fail ${URL}
|
mv ${APP} ${BIN_DIR}
|
||||||
chmod 755 "${BIN_DIR}/${APP}"
|
chmod 755 "${BIN_DIR}/${APP}"
|
||||||
|
|
||||||
# Download pre-built data sets
|
# Download pre-built data sets
|
||||||
FILES=("faa.csv" "license.csv" "zip2geo.csv" "zip2geo-elevation.csv")
|
FILES=(
|
||||||
|
"faa.csv"
|
||||||
|
"license.csv"
|
||||||
|
"zip2geo.csv"
|
||||||
|
"zip2geo-elevation.csv"
|
||||||
|
)
|
||||||
for file in "${FILES[@]}"; do
|
for file in "${FILES[@]}"; do
|
||||||
URL="${BASE_URL}/${file}"
|
URL="${BASE_URL}/${file}"
|
||||||
|
|
||||||
et-log "Downloading data set: ${URL}"
|
et-log "Downloading data set: ${URL}"
|
||||||
curl -s -L -o "${DATA_DIR}/${file}" --fail ${URL}
|
download_with_retries ${URL} ${file}
|
||||||
|
mv ${file} ${DATA_DIR}
|
||||||
done
|
done
|
||||||
|
|
||||||
et-log "Applying permissions..."
|
et-log "Applying permissions..."
|
||||||
|
|||||||
Reference in New Issue
Block a user