OpenVoiceOS/buildroot-external/package/ovos-containers/fetch-container-image.sh

45 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Original script from Home Assistant
set -eu
# Variables
arch="$1"
image="$2"
dl_dir="$3"
dst_dir="$4"
image_name="docker.io/smartgic/${image}"
full_image_name="${image_name}:alpha"
# Fetch image digest
image_digest=$(skopeo --override-arch "${arch}" inspect --retry-times=5 "docker://${full_image_name}" | jq -r '.Digest')
if [ -z "${image_digest}" ]; then
echo "Failed to fetch digest for ${full_image_name}"
exit 1
fi
# Prepare file paths
image_file_name="${full_image_name//[:\/]/_}@${image_digest//[:\/]/_}"
image_file_path="${dl_dir}/${image_file_name}.tar"
dst_image_file_path="${dst_dir}/${image_file_name}.tar"
lock_file="${image_file_path}.lock"
# Function to fetch and copy image
fetch_and_copy_image() {
if [ ! -f "${image_file_path}" ]; then
echo "Fetching image: ${full_image_name} (digest ${image_digest})"
skopeo --override-arch "${arch}" copy "docker://${image_name}@${image_digest}" "docker-archive:${image_file_path}:${full_image_name}"
else
echo "Skipping download of existing image: ${full_image_name} (digest ${image_digest})"
fi
cp "${image_file_path}" "${dst_image_file_path}"
}
# Main execution
{
flock --verbose 3
fetch_and_copy_image
} 3>"${lock_file}"