Custom Dockerfile-based build for an Ignition Edge gateway with pre-baked base gwbk, module registration, and admin password provisioning, backed by MariaDB.
88 lines
2.6 KiB
Bash
88 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
shopt -s inherit_errexit
|
|
|
|
###############################################################################
|
|
# Retrieves third-party modules and verifies their checksums
|
|
###############################################################################
|
|
function main() {
|
|
if [ -z "${SUPPLEMENTAL_MODULES}" ]; then
|
|
return 0 # Silently exit if there are no supplemental modules to target
|
|
fi
|
|
|
|
retrieve_modules
|
|
}
|
|
|
|
###############################################################################
|
|
# Download the modules
|
|
###############################################################################
|
|
function retrieve_modules() {
|
|
IFS=', ' read -r -a module_install_key_arr <<< "${SUPPLEMENTAL_MODULES}"
|
|
for module_install_key in "${module_install_key_arr[@]}"; do
|
|
download_url_env="SUPPLEMENTAL_${module_install_key^^}_DOWNLOAD_URL"
|
|
download_sha256_env="SUPPLEMENTAL_${module_install_key^^}_DOWNLOAD_SHA256"
|
|
if [ -n "${!download_url_env:-}" ] && [ -n "${!download_sha256_env:-}" ]; then
|
|
download_basename=$(basename "${!download_url_env}")
|
|
wget --ca-certificate=/etc/ssl/certs/ca-certificates.crt --referer https://inductiveautomation.com/* "${!download_url_env}" && \
|
|
[[ "notused" == "${!download_sha256_env}" ]] || echo "${!download_sha256_env}" "${download_basename}" | sha256sum -c -
|
|
else
|
|
echo "Error finding specified module ${module_install_key} in build args, aborting..."
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
###############################################################################
|
|
# Outputs to stderr
|
|
###############################################################################
|
|
function debug() {
|
|
# shellcheck disable=SC2236
|
|
if [ ! -z ${verbose+x} ]; then
|
|
>&2 echo " DEBUG: $*"
|
|
fi
|
|
}
|
|
|
|
###############################################################################
|
|
# Print usage information
|
|
###############################################################################
|
|
function usage() {
|
|
>&2 echo "Usage: $0 -m \"space-separated modules list\""
|
|
>&2 echo " -m: space-separated list of module identifiers to download"
|
|
}
|
|
|
|
# Argument Processing
|
|
while getopts ":hvm:" opt; do
|
|
case "$opt" in
|
|
v)
|
|
verbose=1
|
|
;;
|
|
m)
|
|
SUPPLEMENTAL_MODULES="${OPTARG}"
|
|
;;
|
|
h)
|
|
usage
|
|
exit 0
|
|
;;
|
|
\?)
|
|
usage
|
|
echo "Invalid option: -${OPTARG}" >&2
|
|
exit 1
|
|
;;
|
|
:)
|
|
usage
|
|
echo "Invalid option: -${OPTARG} requires an argument" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# shift positional args based on number consumed by getopts
|
|
shift $((OPTIND-1))
|
|
|
|
# exit on missing required args
|
|
if [ -z "${SUPPLEMENTAL_MODULES:-}" ]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
main |