[WIP] Initial work on pre-pulling containers at buildtime.

This commit is contained in:
j1nx 2023-10-21 10:33:28 +00:00
parent a3dac255fc
commit 61351a7150
5 changed files with 80 additions and 2 deletions

View File

@ -102,6 +102,7 @@ endmenu
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/openfec/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/openfst/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/ovos-bus-server/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/ovos-containers/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/ovos-dashboard/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/ovos-shell/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/ovos-splash/Config.in"

View File

@ -141,9 +141,9 @@ BR2_PACKAGE_PYTHON_PODMAN_COMPOSE=y
BR2_PACKAGE_LILV=y
BR2_PACKAGE_OPUS=y
BR2_PACKAGE_PORTAUDIO=y
BR2_PACKAGE_SPEEXDSP=y
BR2_PACKAGE_SBC=y
BR2_PACKAGE_SBC_TOOLS=y
BR2_PACKAGE_SPEEXDSP=y
BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING=y
BR2_PACKAGE_LIBARCHIVE=y
BR2_PACKAGE_LIBDEFLATE=y
@ -172,7 +172,6 @@ BR2_PACKAGE_LIBV4L_UTILS=y
BR2_PACKAGE_JSON_GLIB=y
BR2_PACKAGE_LIBCAMERA=y
BR2_PACKAGE_LIBCAMERA_V4L2=y
BR2_PACKAGE_LIBCAMERA_PIPELINE_IPU3=y
BR2_PACKAGE_LIBCAMERA_PIPELINE_SIMPLE=y
BR2_PACKAGE_LIBCAMERA_PIPELINE_UVCVIDEO=y
BR2_PACKAGE_LIBCAMERA_PIPELINE_VIMC=y

View File

@ -0,0 +1,21 @@
menuconfig BR2_PACKAGE_OVOS_CONTAINERS
bool "Pre-install OVOS containers"
help
This is the system layer that prepares and
pre-install the required OVOS containers.
https://github.com/OpenVoiceOS/ovos-docker
if BR2_PACKAGE_OVOS_CONTAINERS
config BR2_PACKAGE_OVOS_CONTAINERS_ARCH
string "Container Arch"
help
Architecture for which we should be pull.
config BR2_PACKAGE_OVOS_CONTAINERS_IMAGES
string "Images"
help
Space separated list of images to pull.
endif

View File

@ -0,0 +1,33 @@
#!/usr/bin/env bash
# Original script from Home Assistant
set -e
set -u
set -o pipefail
arch=$1
image=$2
dl_dir=$3
dst_dir=$4
image_name="docker.io/smartgic/${image}"
full_image_name="${image_name}:alpha"
image_digest=$(skopeo inspect --retry-times=5 "docker://${full_image_name}" | jq -r '.Digest')
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"
(
# Use file locking to avoid race condition
flock --verbose 3
if [ ! -f "${image_file_path}" ]
then
echo "Fetching image: ${full_image_name} (digest ${image_digest})"
skopeo 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}"
) 3>"${image_file_path}.lock"

View File

@ -0,0 +1,24 @@
################################################################################
#
# OVOS Container images
#
################################################################################
OVOS_CONTAINERS_VERSION = 1.0.0
OVOS_CONTAINERS_LICENSE = Apache License 2.0
OVOS_CONTAINERS_LICENSE_FILES = $(BR2_EXTERNAL_OPENVOICEOS_PATH)/../LICENSE
OVOS_CONTAINERS_SITE = $(BR2_EXTERNAL_OPENVOICEOS_PATH)/package/ovos-containers
OVOS_CONTAINERS_SITE_METHOD = local
OVOS_CONTAINERS_IMAGES = $(call qstrip,$(BR2_PACKAGE_OVOS_CONTAINERS))
define OVOS_CONTAINERS_BUILD_CMDS
$(Q)mkdir -p $(@D)/images
$(Q)mkdir -p $(OVOS_CONTAINERS_DL_DIR)
$(foreach image,$(OVOS_CONTAINERS_IMAGES),\
$(BR2_EXTERNAL_OPENVOICEOS_PATH)/package/ovos-containers/fetch-container-image.sh \
$(BR2_PACKAGE_OVOS_CONTAINERS_ARCH) $(image) "$(OVOS_CONTAINERS_DL_DIR)" "$(@D)/images"
)
endef
$(eval $(generic-package))