From e92b2e3ef11589515fd42a6cfc9470f3cc883f85 Mon Sep 17 00:00:00 2001 From: Gabriela Cervantes Date: Tue, 8 Nov 2022 17:40:47 +0000 Subject: [PATCH 1/2] CCv0: Use cached kernel This PR enables the use for the cached kernel. Fixes #5355 Signed-off-by: Gabriela Cervantes --- .../static-build/cache_components.sh | 19 ++++- tools/packaging/static-build/kernel/build.sh | 78 ++++++++++++++----- 2 files changed, 78 insertions(+), 19 deletions(-) diff --git a/tools/packaging/static-build/cache_components.sh b/tools/packaging/static-build/cache_components.sh index 3310501d3b..f9aa7bdfe6 100755 --- a/tools/packaging/static-build/cache_components.sh +++ b/tools/packaging/static-build/cache_components.sh @@ -39,6 +39,16 @@ cache_clh_artifacts() { echo "${current_cloud_hypervisor_version}" > "latest" } +cache_kernel_artifacts() { + local current_kernel_version=$(get_from_kata_deps "assets.kernel.version") + source "${script_dir}/kernel/build.sh" + local kernel_tarball_name="linux-${cached_kernel_version}.tar.xz" + local gral_path="$(echo $script_dir | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,')" + local kernel_config_file="${gral_path}/tools/packaging/kernel/kata_config_version" + local kernel_config="$(cat $kernel_config_file)" + echo "${current_kernel_version} ${kernel_config_file}" > "latest" +} + create_cache_asset() { local component_name="$1" local component_version="$2" @@ -63,6 +73,7 @@ Usage: $0 "[options]" Builds the cache of several kata components. Options: -c Cloud hypervisor cache + -k Kernel cache -q Qemu cache -h Shows help EOF @@ -72,13 +83,17 @@ EOF main() { local cloud_hypervisor_component="${cloud_hypervisor_component:-}" local qemu_component="${qemu_component:-}" + local kernel_component="${kernel_component:-}" local OPTIND - while getopts ":cqh:" opt + while getopts ":ckqh:" opt do case "$opt" in c) cloud_hypervisor_component="1" ;; + k) + kernel_component="1" + ;; q) qemu_component="1" ;; @@ -96,6 +111,7 @@ main() { shift $((OPTIND-1)) [[ -z "${cloud_hypervisor_component}" ]] && \ + [[ -z "${kernel_component}" ]] && \ [[ -z "${qemu_component}" ]] && \ help && die "Must choose at least one option" @@ -104,6 +120,7 @@ main() { echo "Artifacts:" [ "${cloud_hypervisor_component}" == "1" ] && cache_clh_artifacts + [ "${kernel_component}" == "1" ] && cache_kernel_artifacts [ "${qemu_component}" == "1" ] && cache_qemu_artifacts ls -la "${WORKSPACE}/artifacts/" diff --git a/tools/packaging/static-build/kernel/build.sh b/tools/packaging/static-build/kernel/build.sh index 8bd4dc2da8..f44d4d2463 100755 --- a/tools/packaging/static-build/kernel/build.sh +++ b/tools/packaging/static-build/kernel/build.sh @@ -17,25 +17,67 @@ source "${script_dir}/../../scripts/lib.sh" DESTDIR=${DESTDIR:-${PWD}} PREFIX=${PREFIX:-/opt/kata} container_image="${KERNEL_CONTAINER_BUILDER:-${CC_BUILDER_REGISTRY}:kernel-$(get_last_modification ${repo_root_dir} ${script_dir})-$(uname -m)}" +kernel_latest_build_url="${jenkins_url}/job/kata-containers-2.0-kernel-cc-$(uname -m)/${cached_artifacts_path}" +current_kernel_version=${kernel_version:-$(get_from_kata_deps "assets.kernel.version")} +cached_path="$(echo ${script_dir} | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,')" -sudo docker pull ${container_image} || \ - (sudo docker build -t "${container_image}" "${script_dir}" && \ - # No-op unless PUSH_TO_REGISTRY is exported as "yes" - push_to_registry "${container_image}") +build_from_source() { + sudo docker pull ${container_image} || \ + (sudo docker build -t "${container_image}" "${script_dir}" && \ + # No-op unless PUSH_TO_REGISTRY is exported as "yes" + push_to_registry "${container_image}") -sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \ - -w "${PWD}" \ - --env KATA_BUILD_CC="${KATA_BUILD_CC:-}" \ - "${container_image}" \ - bash -c "${kernel_builder} $* setup" + sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \ + -w "${PWD}" \ + --env KATA_BUILD_CC="${KATA_BUILD_CC:-}" \ + "${container_image}" \ + bash -c "${kernel_builder} $* setup" -sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \ - -w "${PWD}" \ - "${container_image}" \ - bash -c "${kernel_builder} $* build" + sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \ + -w "${PWD}" \ + "${container_image}" \ + bash -c "${kernel_builder} $* build" -sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \ - -w "${PWD}" \ - --env DESTDIR="${DESTDIR}" --env PREFIX="${PREFIX}" \ - "${container_image}" \ - bash -c "${kernel_builder} $* install" + sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \ + -w "${PWD}" \ + --env DESTDIR="${DESTDIR}" --env PREFIX="${PREFIX}" \ + "${container_image}" \ + bash -c "${kernel_builder} $* install" +} + +check_cached_kernel() { + local latest=$(curl -sfL "${kernel_latest_build_url}"/latest) || latest="none" + local cached_kernel_version="$(echo ${latest} | awk '{print $1}')" + info "Current kernel version: ${current_kernel_version}" + info "Cached kernel version: ${cached_kernel_version}" + if [ "${current_kernel_version}" == "${cached_kernel_version}" ] && [ "${ARCH}" == "x86_64" ]; then + local cached_kernel_config="$(echo ${latest} | awk '{print $2}')" + info "Cached kernel config: ${cached_kernel_config}" + local current_kernel_config_file="${cached_path}/tools/packaging/kernel/kata_config_version" + local current_kernel_config="$(cat $current_kernel_config_file)" + info "Current kernel config: ${current_kernel_config}" + if [ -z "${cached_kernel_config}" ]; then + build_from_source + else + install_cached_kernel + fi + else + build_from_source + fi +} + +install_cached_kernel() { + local kernel_directory="${cached_path}/tools/packaging/kata-deploy/local-build/build/cc-kernel/builddir" + local kernel_tarball_name="linux-${cached_kernel_version}.tar.xz" + mkdir -p "${kernel_directory}" + pushd "${kernel_directory}" + curl -fL --progress-bar "${kernel_latest_build_url}/${kernel_tarball_name}" -o "${kernel_tarball_name}" || return 1 + popd + +} + +main() { + check_cached_kernel +} + +main "$@" From f72fe061eb81491977e722b99548d30cc847e610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Tue, 22 Nov 2022 22:19:43 +0100 Subject: [PATCH 2/2] tools: Pass kernel version to build script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR passes the kernel version to the build script. Signed-off-by: Fabiano FidĂȘncio --- .../static-build/cache_components.sh | 22 ++++++++--- tools/packaging/static-build/kernel/build.sh | 39 +++++++++++++------ 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/tools/packaging/static-build/cache_components.sh b/tools/packaging/static-build/cache_components.sh index f9aa7bdfe6..9c72efc02f 100755 --- a/tools/packaging/static-build/cache_components.sh +++ b/tools/packaging/static-build/cache_components.sh @@ -40,13 +40,25 @@ cache_clh_artifacts() { } cache_kernel_artifacts() { - local current_kernel_version=$(get_from_kata_deps "assets.kernel.version") - source "${script_dir}/kernel/build.sh" - local kernel_tarball_name="linux-${cached_kernel_version}.tar.xz" + local current_kernel_version=$(get_from_kata_deps "assets.kernel.version" | cut -c2- ) local gral_path="$(echo $script_dir | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,')" local kernel_config_file="${gral_path}/tools/packaging/kernel/kata_config_version" - local kernel_config="$(cat $kernel_config_file)" - echo "${current_kernel_version} ${kernel_config_file}" > "latest" + local kernel_config="$(cat ${kernel_config_file})" + echo "${current_kernel_version} ${kernel_config}" > "latest" + local kernel_path="${gral_path}/tools/packaging/kata-deploy/local-build/build/cc-kernel/destdir/opt/confidential-containers/share/kata-containers" + local vmlinux_binary_name="vmlinux-${current_kernel_version}-${kernel_config}" + ls ${kernel_path} + local vmlinux_file="${kernel_path}/${vmlinux_binary_name}" + if [ -f "${vmlinux_file}" ]; then + cp -a "${vmlinux_file}" . + create_cache_asset "${vmlinux_binary_name}" "${current_kernel_version}" + fi + local vmlinuz_binary_name="vmlinuz-${current_kernel_version}-${kernel_config}" + local vmlinuz_file="${kernel_path}/${vmlinuz_binary_name}" + if [ -f "${vmlinuz_file}" ]; then + cp -a "${vmlinuz_file}" . + create_cache_asset "${vmlinuz_binary_name}" "${current_kernel_version}" + fi } create_cache_asset() { diff --git a/tools/packaging/static-build/kernel/build.sh b/tools/packaging/static-build/kernel/build.sh index f44d4d2463..663a007c8e 100755 --- a/tools/packaging/static-build/kernel/build.sh +++ b/tools/packaging/static-build/kernel/build.sh @@ -20,6 +20,9 @@ container_image="${KERNEL_CONTAINER_BUILDER:-${CC_BUILDER_REGISTRY}:kernel-$(get kernel_latest_build_url="${jenkins_url}/job/kata-containers-2.0-kernel-cc-$(uname -m)/${cached_artifacts_path}" current_kernel_version=${kernel_version:-$(get_from_kata_deps "assets.kernel.version")} cached_path="$(echo ${script_dir} | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,' | sed 's,/*[^/]\+/*$,,')" +current_kernel_config_file="${cached_path}/tools/packaging/kernel/kata_config_version" +current_kernel_config="$(cat $current_kernel_config_file)" +kernel_version="$(echo ${current_kernel_version} | cut -c2- )" build_from_source() { sudo docker pull ${container_image} || \ @@ -48,36 +51,48 @@ build_from_source() { check_cached_kernel() { local latest=$(curl -sfL "${kernel_latest_build_url}"/latest) || latest="none" local cached_kernel_version="$(echo ${latest} | awk '{print $1}')" - info "Current kernel version: ${current_kernel_version}" + info "Current kernel version: ${kernel_version}" info "Cached kernel version: ${cached_kernel_version}" - if [ "${current_kernel_version}" == "${cached_kernel_version}" ] && [ "${ARCH}" == "x86_64" ]; then + if [ "${kernel_version}" == "${cached_kernel_version}" ] && [ "$(uname -m)" == "x86_64" ]; then local cached_kernel_config="$(echo ${latest} | awk '{print $2}')" info "Cached kernel config: ${cached_kernel_config}" - local current_kernel_config_file="${cached_path}/tools/packaging/kernel/kata_config_version" - local current_kernel_config="$(cat $current_kernel_config_file)" info "Current kernel config: ${current_kernel_config}" if [ -z "${cached_kernel_config}" ]; then - build_from_source + build_from_source $* else - install_cached_kernel + install_cached_kernel $* fi else - build_from_source + build_from_source $* fi } install_cached_kernel() { - local kernel_directory="${cached_path}/tools/packaging/kata-deploy/local-build/build/cc-kernel/builddir" - local kernel_tarball_name="linux-${cached_kernel_version}.tar.xz" + local kernel_directory="${cached_path}/tools/packaging/kata-deploy/local-build/build/cc-kernel/destdir/opt/confidential-containers/share/kata-containers" + local vmlinux_kernel_name="vmlinux-${cached_kernel_version}-${cached_kernel_config}" + local vmlinuz_kernel_name="vmlinuz-${cached_kernel_version}-${cached_kernel_config}" mkdir -p "${kernel_directory}" pushd "${kernel_directory}" - curl -fL --progress-bar "${kernel_latest_build_url}/${kernel_tarball_name}" -o "${kernel_tarball_name}" || return 1 + ls + local vmlinux_url="${kernel_latest_build_url}/${vmlinux_kernel_name}" + if curl --output /dev/null --silent --head --fail "${vmlinux_url}"; then + info "Installing vmlinux cached kernel" + curl -fL --progress-bar "${kernel_latest_build_url}/${vmlinux_kernel_name}" -o "${vmlinux_kernel_name}" || return 1 + sudo -E ln -sf "${kernel_directory}/${vmlinux_kernel_name}" "${kernel_directory}/vmlinux.container" + fi + + local vmlinuz_url="${kernel_latest_build_url}/${vmlinuz_kernel_name}" + if curl --output /dev/null --silent --head --fail "${vmlinuz_url}"; then + info "Installing vmlinuz cached kernel" + curl -fL --progress-bar "${kernel_latest_build_url}/${vmlinuz_kernel_name}" -o "${vmlinuz_kernel_name}" || return 1 + sudo -E ln -sf "${kernel_directory}/${vmlinuz_kernel_name}" "${kernel_directory}/vmlinuz.container" + fi popd } main() { - check_cached_kernel + check_cached_kernel $* } -main "$@" +main $*