CCv0: Use cached cloud hypervisor

This PR allows us to use the cached for the cloud hypervisor.

Fixes #5354

Signed-off-by: Gabriela Cervantes <gabriela.cervantes.tellez@intel.com>
This commit is contained in:
Gabriela Cervantes 2022-10-31 20:51:30 +00:00
parent 3dd655d60d
commit f16b7410f7
2 changed files with 111 additions and 9 deletions

View File

@ -11,34 +11,101 @@ set -o pipefail
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${script_dir}/../scripts/lib.sh" source "${script_dir}/../scripts/lib.sh"
source "${script_dir}/qemu/build-static-qemu-cc.sh"
export KATA_BUILD_CC="${KATA_BUILD_CC:-}" export KATA_BUILD_CC="${KATA_BUILD_CC:-}"
export qemu_cc_tarball_name="kata-static-qemu-cc.tar.gz" export qemu_cc_tarball_name="kata-static-qemu-cc.tar.gz"
cache_qemu_artifacts() { cache_qemu_artifacts() {
source "${script_dir}/qemu/build-static-qemu-cc.sh"
local current_qemu_version=$(get_from_kata_deps "assets.hypervisor.qemu.version") local current_qemu_version=$(get_from_kata_deps "assets.hypervisor.qemu.version")
create_qemu_cache_asset "${qemu_cc_tarball_name}" "${current_qemu_version}" create_cache_asset "${qemu_cc_tarball_name}" "${current_qemu_version}"
local qemu_sha=$(calc_qemu_files_sha256sum) local qemu_sha=$(calc_qemu_files_sha256sum)
echo "${current_qemu_version} ${qemu_sha}" > "latest" echo "${current_qemu_version} ${qemu_sha}" > "latest"
} }
create_qemu_cache_asset() { cache_clh_artifacts() {
local binary="cloud-hypervisor"
local binary_path="$(echo $script_dir | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,')"
echo "binary path $binary_path"
local current_cloud_hypervisor_version=$(get_from_kata_deps "assets.hypervisor.cloud_hypervisor.version")
local clh_binary_path="${binary_path}/tools/packaging/kata-deploy/local-build/build/cc-cloud-hypervisor/builddir/cloud-hypervisor"
if [ -f "${clh_binary_path}/cloud-hypervisor" ]; then
cp "${clh_binary_path}/${binary}" .
else
cloud_hypervisor_build_path="${binary_path}/cloud-hypervisor"
cp "${cloud_hypervisor_build_path}/${binary}" .
fi
create_cache_asset "${binary}" "${current_cloud_hypervisor_version}"
echo "${current_cloud_hypervisor_version}" > "latest"
}
create_cache_asset() {
local component_name="$1" local component_name="$1"
local component_version="$2" local component_version="$2"
local qemu_cc_tarball_path=$(sudo find / -iname "${qemu_cc_tarball_name}") local verify_qemu=$(echo "${component_name}" | grep qemu || true)
info "qemu cc tarball_path ${qemu_cc_tarball_path}" local verify_clh=$(echo "${component_name}" | grep cloud || true)
cp -a "${qemu_cc_tarball_path}" .
if [ ! -z "${verify_qemu}" ]; then
local qemu_cc_tarball_path=$(sudo find / -iname "${qemu_cc_tarball_name}")
info "qemu cc tarball_path ${qemu_cc_tarball_path}"
cp -a "${qemu_cc_tarball_path}" .
fi
sudo chown -R "${USER}:${USER}" . sudo chown -R "${USER}:${USER}" .
sha256sum "${component_name}" > "sha256sum-${component_name}" sha256sum "${component_name}" > "sha256sum-${component_name}"
cat "sha256sum-${component_name}" cat "sha256sum-${component_name}"
} }
help() {
echo "$(cat << EOF
Usage: $0 "[options]"
Description:
Builds the cache of several kata components.
Options:
-c Cloud hypervisor cache
-q Qemu cache
-h Shows help
EOF
)"
}
main() { main() {
local cloud_hypervisor_component="${cloud_hypervisor_component:-}"
local qemu_component="${qemu_component:-}"
local OPTIND
while getopts ":cqh:" opt
do
case "$opt" in
c)
cloud_hypervisor_component="1"
;;
q)
qemu_component="1"
;;
h)
help
exit 0;
;;
:)
echo "Missing argument for -$OPTARG";
help
exit 1;
;;
esac
done
shift $((OPTIND-1))
[[ -z "${cloud_hypervisor_component}" ]] && \
[[ -z "${qemu_component}" ]] && \
help && die "Must choose at least one option"
mkdir -p "${WORKSPACE}/artifacts" mkdir -p "${WORKSPACE}/artifacts"
pushd "${WORKSPACE}/artifacts" pushd "${WORKSPACE}/artifacts"
echo "Artifacts:" echo "Artifacts:"
cache_qemu_artifacts
[ "${cloud_hypervisor_component}" == "1" ] && cache_clh_artifacts
[ "${qemu_component}" == "1" ] && cache_qemu_artifacts
ls -la "${WORKSPACE}/artifacts/" ls -la "${WORKSPACE}/artifacts/"
popd popd
sync sync

View File

@ -23,6 +23,7 @@ cloud_hypervisor_repo="${cloud_hypervisor_repo:-}"
cloud_hypervisor_version="${cloud_hypervisor_version:-}" cloud_hypervisor_version="${cloud_hypervisor_version:-}"
cloud_hypervisor_pr="${cloud_hypervisor_pr:-}" cloud_hypervisor_pr="${cloud_hypervisor_pr:-}"
cloud_hypervisor_pull_ref_branch="${cloud_hypervisor_pull_ref_branch:-main}" cloud_hypervisor_pull_ref_branch="${cloud_hypervisor_pull_ref_branch:-main}"
cloud_hypervisor_latest_build_url="${jenkins_url}/job/kata-containers-2.0-clh-cc-$(uname -m)/${cached_artifacts_path}"
if [ -z "$cloud_hypervisor_repo" ]; then if [ -z "$cloud_hypervisor_repo" ]; then
info "Get cloud_hypervisor information from runtime versions.yaml" info "Get cloud_hypervisor information from runtime versions.yaml"
@ -82,6 +83,40 @@ build_clh_from_source() {
popd popd
} }
check_cached_cloud_hypervisor() {
local cached_cloud_hypervisor_version=$(curl -sfL "${cloud_hypervisor_latest_build_url}"/latest) || latest="none"
info "Current cloud hypervisor version: ${cloud_hypervisor_version}"
info "Cached cloud hypervisor version: ${cached_cloud_hypervisor_version}"
if [ "${cloud_hypervisor_version}" == "${cached_cloud_hypervisor_version}" ] && [ "${ARCH}" == "x86_64" ]; then
install_cached_cloud_hypervisor
else
build_clh_from_source
fi
}
install_cached_cloud_hypervisor() {
local cached_path="$(echo ${script_dir} | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,')"
local clh_directory="${cached_path}/tools/packaging/kata-deploy/local-build/build/cc-cloud-hypervisor/builddir/cloud-hypervisor"
mkdir cloud-hypervisor
pushd cloud-hypervisor
local checksum_file="sha256sum-cloud-hypervisor"
info "Downloading the cloud hypervisor binary"
curl -fOL --progress-bar "${cloud_hypervisor_latest_build_url}/cloud-hypervisor" || return 1
info "Checking cloud hypervisor binary checksum"
curl -fOL --progress-bar "${cloud_hypervisor_latest_build_url}/${checksum_file}" || return 1
info "Verify checksum"
sudo sha256sum -c "${checksum_file}" || return 1
chmod +x cloud-hypervisor
local clh_binary_path="${cached_path}/cloud-hypervisor"
if [ ! -d "${clh_binary_path}" ]; then
mkdir -p "${clh_binary_path}"
fi
if [ ! -f "${clh_binary_path}/cloud-hypervisor" ]; then
cp cloud-hypervisor "${clh_binary_path}"
fi
popd
}
if [ "${ARCH}" == "aarch64" ]; then if [ "${ARCH}" == "aarch64" ]; then
info "aarch64 binaries are not distributed as part of the Cloud Hypervisor releases, forcing to build from source" info "aarch64 binaries are not distributed as part of the Cloud Hypervisor releases, forcing to build from source"
force_build_from_source="true" force_build_from_source="true"
@ -94,8 +129,8 @@ fi
if [ "${force_build_from_source}" == "true" ]; then if [ "${force_build_from_source}" == "true" ]; then
info "Build cloud-hypervisor from source as it's been request via the force_build_from_source flag" info "Build cloud-hypervisor from source as it's been request via the force_build_from_source flag"
build_clh_from_source check_cached_cloud_hypervisor
else else
pull_clh_released_binary || pull_clh_released_binary ||
(info "Failed to pull cloud-hypervisor released binary, trying to build from source" && build_clh_from_source) (info "Failed to pull cloud-hypervisor released binary, trying to build from source" && check_cached_cloud_hypervisor)
fi fi