mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-31 23:36:12 +00:00
kata-deploy: Refactor builder options.
Update kata-deploy-binaries.sh cli options. Add options to allow ask build a tarball for a specific asset. It will help developers build a specific component and update a kata-deploy installation. Also build each asset independetly can help to create cache tarballs per asset in the future. e.g. Build a tarball with shimv2. ``` ./kata-deploy-binaries.sh --build=shim-v2 ``` Additionally, the script path is moved to a new directory as not only will work for releases. Signed-off-by: Carlos Venegas <jos.c.venegas.munoz@intel.com>
This commit is contained in:
parent
7125f5d8cf
commit
8befb1f39f
276
tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh
Executable file
276
tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh
Executable file
@ -0,0 +1,276 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2018-2021 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
[ -z "${DEBUG}" ] || set -x
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
readonly project="kata-containers"
|
||||
|
||||
readonly script_name="$(basename "${BASH_SOURCE[0]}")"
|
||||
readonly script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
readonly prefix="/opt/kata"
|
||||
readonly repo_root_dir="$(cd "${script_dir}/../../../.." && pwd)"
|
||||
readonly version_file="${repo_root_dir}/VERSION"
|
||||
readonly versions_yaml="${repo_root_dir}/versions.yaml"
|
||||
|
||||
readonly clh_builder="${repo_root_dir}/tools/packaging/static-build/cloud-hypervisor/build-static-clh.sh"
|
||||
readonly firecracker_builder="${repo_root_dir}/tools/packaging/static-build/firecracker/build-static-firecracker.sh"
|
||||
readonly kernel_builder="${repo_root_dir}/tools/packaging/kernel/build-kernel.sh"
|
||||
readonly qemu_builder="${repo_root_dir}/tools/packaging/static-build/qemu/build-static-qemu.sh"
|
||||
readonly rootfs_builder="${repo_root_dir}/tools/packaging/guest-image/build_image.sh"
|
||||
|
||||
workdir="${WORKDIR:-$PWD}"
|
||||
|
||||
destdir="${workdir}/kata-static"
|
||||
|
||||
die() {
|
||||
msg="$*"
|
||||
echo "ERROR: ${msg}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
info() {
|
||||
echo "INFO: $*"
|
||||
}
|
||||
|
||||
error() {
|
||||
echo "ERROR: $*"
|
||||
}
|
||||
|
||||
usage() {
|
||||
return_code=${1:-0}
|
||||
cat <<EOT
|
||||
This script is used as part of the ${project} release process.
|
||||
It is used to create a tarball with static binaries.
|
||||
|
||||
|
||||
Usage:
|
||||
${script_name} <options> [version]
|
||||
|
||||
Args:
|
||||
version: The kata version that will be use to create the tarball
|
||||
|
||||
options:
|
||||
|
||||
-h|--help : Show this help
|
||||
--build=<asset> :
|
||||
all
|
||||
cloud-hypervisor
|
||||
firecracker
|
||||
kernel
|
||||
qemu
|
||||
rootfs-image
|
||||
rootfs-initrd
|
||||
shim-v2
|
||||
EOT
|
||||
|
||||
exit "${return_code}"
|
||||
}
|
||||
|
||||
#Install guest image
|
||||
install_image() {
|
||||
info "Create image"
|
||||
"${rootfs_builder}" --imagetype=image --prefix="${prefix}" --destdir="${destdir}"
|
||||
}
|
||||
|
||||
#Install guest initrd
|
||||
install_initrd() {
|
||||
info "Create initrd"
|
||||
"${rootfs_builder}" --imagetype=initrd --prefix="${prefix}" --destdir="${destdir}"
|
||||
}
|
||||
|
||||
#Install kernel asset
|
||||
install_kernel() {
|
||||
info "build kernel"
|
||||
export kernel_version=="$(yq r $versions_yaml assets.version)"
|
||||
"${kernel_builder}" setup
|
||||
"${kernel_builder}" build
|
||||
info "install kernel"
|
||||
DESTDIR="${destdir}" PREFIX="${prefix}" "${kernel_builder}" install
|
||||
}
|
||||
|
||||
#Install experimental kernel asset
|
||||
install_experimental_kernel() {
|
||||
info "build experimental kernel"
|
||||
export kernel_version="$(yq r $versions_yaml assets.kernel-experimental.version)"
|
||||
"${kernel_builder}" -e setup
|
||||
"${kernel_builder}" -e build
|
||||
info "install experimental kernel"
|
||||
DESTDIR="${destdir}" PREFIX="${prefix}" "${kernel_builder}" -e install
|
||||
}
|
||||
|
||||
# Install static qemu asset
|
||||
install_qemu() {
|
||||
info "build static qemu"
|
||||
export qemu_repo="$(yq r $versions_yaml assets.hypervisor.qemu.url)"
|
||||
export qemu_version="$(yq r $versions_yaml assets.hypervisor.qemu.version)"
|
||||
"${qemu_builder}"
|
||||
tar xvf "${builddir}/kata-static-qemu.tar.gz" -C "${destdir}"
|
||||
}
|
||||
|
||||
# Install static firecracker asset
|
||||
install_firecracker() {
|
||||
info "build static firecracker"
|
||||
"${firecracker_builder}"
|
||||
info "Install static firecracker"
|
||||
mkdir -p "${destdir}/opt/kata/bin/"
|
||||
sudo install -D --owner root --group root --mode 0744 firecracker/firecracker-static "${destdir}/opt/kata/bin/firecracker"
|
||||
sudo install -D --owner root --group root --mode 0744 firecracker/jailer-static "${destdir}/opt/kata/bin/jailer"
|
||||
}
|
||||
|
||||
# Install static cloud-hypervisor asset
|
||||
install_clh() {
|
||||
local cloud_hypervisor_repo
|
||||
local cloud_hypervisor_version
|
||||
|
||||
cloud_hypervisor_repo="$(yq r $versions_yaml assets.hypervisor.cloud_hypervisor.url)"
|
||||
cloud_hypervisor_version="$(yq r $versions_yaml assets.hypervisor.cloud_hypervisor.version)"
|
||||
|
||||
info "build static cloud-hypervisor"
|
||||
"${clh_builder}"
|
||||
info "Install static cloud-hypervisor"
|
||||
mkdir -p "${destdir}/opt/kata/bin/"
|
||||
sudo install -D --owner root --group root --mode 0744 cloud-hypervisor/cloud-hypervisor "${destdir}/opt/kata/bin/cloud-hypervisor"
|
||||
}
|
||||
|
||||
#Install all components that are not assets
|
||||
install_shimv2() {
|
||||
pushd "${repo_root_dir}/src/runtime"
|
||||
echo "Build"
|
||||
make \
|
||||
PREFIX="${prefix}" \
|
||||
QEMUCMD="qemu-system-x86_64"
|
||||
echo "Install"
|
||||
make PREFIX="${prefix}" \
|
||||
DESTDIR="${destdir}" \
|
||||
install
|
||||
popd
|
||||
sed -i -e '/^initrd =/d' "${destdir}/${prefix}/share/defaults/${project}/configuration-qemu.toml"
|
||||
sed -i -e '/^initrd =/d' "${destdir}/${prefix}/share/defaults/${project}/configuration-fc.toml"
|
||||
pushd "${destdir}/${prefix}/share/defaults/${project}"
|
||||
ln -sf "configuration-qemu.toml" configuration.toml
|
||||
popd
|
||||
}
|
||||
|
||||
get_kata_version() {
|
||||
local v
|
||||
v=$(cat "${version_file}")
|
||||
echo ${v}
|
||||
}
|
||||
|
||||
handle_build() {
|
||||
info "DESTDIR ${destdir}"
|
||||
local build_target
|
||||
build_target="$1"
|
||||
case "${build_target}" in
|
||||
all)
|
||||
install_clh
|
||||
install_experimental_kernel
|
||||
install_firecracker
|
||||
install_image
|
||||
install_initrd
|
||||
install_kernel
|
||||
install_qemu
|
||||
install_shimv2
|
||||
;;
|
||||
|
||||
cloud-hypervisor) install_clh ;;
|
||||
|
||||
firecracker) install_firecracker ;;
|
||||
|
||||
kernel) install_kernel ;;
|
||||
|
||||
qemu) install_qemu ;;
|
||||
|
||||
rootfs-image) install_image ;;
|
||||
|
||||
rootfs-initrd) install_initrd ;;
|
||||
|
||||
shim-v2) install_shimv2 ;;
|
||||
|
||||
*)
|
||||
die "Invalid build target ${build_target}"
|
||||
;;
|
||||
esac
|
||||
|
||||
tarball_name="${workdir}/kata-static-${build_target}.tar.xz"
|
||||
(
|
||||
cd "${destdir}"
|
||||
sudo tar cvfJ "${tarball_name}" "."
|
||||
)
|
||||
tar tvf "${tarball_name}"
|
||||
}
|
||||
|
||||
main() {
|
||||
local build_targets
|
||||
local silent
|
||||
build_targets=(
|
||||
cloud-hypervisor
|
||||
firecracker
|
||||
kernel
|
||||
qemu
|
||||
rootfs-image
|
||||
rootfs-initrd
|
||||
shim-v2
|
||||
)
|
||||
silent=false
|
||||
while getopts "hs-:" opt; do
|
||||
case $opt in
|
||||
-)
|
||||
case "${OPTARG}" in
|
||||
build=*)
|
||||
build_targets=(${OPTARG#*=})
|
||||
;;
|
||||
help)
|
||||
usage 0
|
||||
;;
|
||||
*)
|
||||
usage 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
h) usage 0 ;;
|
||||
s) silent=true ;;
|
||||
*) usage 1 ;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND - 1))
|
||||
|
||||
kata_version=$(get_kata_version)
|
||||
|
||||
workdir="${workdir}/build"
|
||||
for t in "${build_targets[@]}"; do
|
||||
destdir="${workdir}/${t}/destdir"
|
||||
builddir="${workdir}/${t}/builddir"
|
||||
echo "Build kata version ${kata_version}: ${t}"
|
||||
mkdir -p "${destdir}"
|
||||
mkdir -p "${builddir}"
|
||||
if [ "${silent}" == true ]; then
|
||||
log_file="${builddir}/log"
|
||||
echo "build log: ${log_file}"
|
||||
fi
|
||||
(
|
||||
cd "${builddir}"
|
||||
if [ "${silent}" == true ]; then
|
||||
if ! handle_build "${t}" &>"$log_file"; then
|
||||
error "Failed to build: $t, logs:"
|
||||
cat "${log_file}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
handle_build "${t}"
|
||||
fi
|
||||
)
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
main $@
|
||||
fi
|
@ -1,254 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2018 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
[ -z "${DEBUG}" ] || set -x
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
readonly script_name="$(basename "${BASH_SOURCE[0]}")"
|
||||
readonly script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
readonly pkg_root_dir="$(cd "${script_dir}/.." && pwd)"
|
||||
readonly repo_root_dir="$(cd "${script_dir}/../../../" && pwd)"
|
||||
readonly project="kata-containers"
|
||||
readonly prefix="/opt/kata"
|
||||
readonly project_to_attach="github.com/${project}/${project}"
|
||||
readonly tmp_dir=$(mktemp -d -t static-build-tmp.XXXXXXXXXX)
|
||||
readonly GOPATH="${tmp_dir}/go"
|
||||
# flag to decide if push tarball to github
|
||||
push=false
|
||||
export GOPATH
|
||||
workdir="${WORKDIR:-$PWD}"
|
||||
# This flag help us to test and run this script with changes
|
||||
# that are local
|
||||
test_local="false"
|
||||
|
||||
destdir="${workdir}/kata-static"
|
||||
mkdir -p "${destdir}"
|
||||
|
||||
exit_handler() {
|
||||
[ -d "${tmp_dir}" ] || sudo rm -rf "${tmp_dir}"
|
||||
}
|
||||
trap exit_handler EXIT
|
||||
|
||||
die() {
|
||||
msg="$*"
|
||||
echo "ERROR: ${msg}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
info() {
|
||||
echo "INFO: $*"
|
||||
}
|
||||
|
||||
usage() {
|
||||
return_code=${1:-0}
|
||||
cat <<EOT
|
||||
This script is used as part of the ${project} release process.
|
||||
It is used to create a tarball with static binaries.
|
||||
|
||||
|
||||
Usage:
|
||||
${script_name} <options> [version]
|
||||
|
||||
Args:
|
||||
version: The kata version that will be use to create the tarball
|
||||
|
||||
options:
|
||||
|
||||
-h : Show this help
|
||||
-l : Run this script to test changes locally
|
||||
-p : push tarball to ${project_to_attach}
|
||||
-w <dir>: directory where tarball will be created
|
||||
|
||||
|
||||
EOT
|
||||
|
||||
exit "${return_code}"
|
||||
}
|
||||
|
||||
#Verify that hub is installed and in case that is not
|
||||
# install it to avoid issues when we try to push
|
||||
verify_hub() {
|
||||
check_command=$(whereis hub | cut -d':' -f2)
|
||||
# Install hub if is not installed
|
||||
if [ -z ${check_command} ]; then
|
||||
hub_repo="github.com/github/hub"
|
||||
hub_url="https://${hub_repo}"
|
||||
go get -d ${hub_repo} || true
|
||||
pushd ${GOPATH}/src/${hub_repo}
|
||||
make
|
||||
sudo -E make install prefix=/usr/local
|
||||
popd
|
||||
fi
|
||||
}
|
||||
|
||||
#Install guest image/initrd asset
|
||||
install_image() {
|
||||
kata_version=${1:-$kata_version}
|
||||
image_destdir="${destdir}/${prefix}/share/kata-containers/"
|
||||
info "Create image"
|
||||
image_tarball=$(find . -name 'kata-containers-'"${kata_version}"'-*.tar.gz')
|
||||
[ -f "${image_tarball}" ] || "${pkg_root_dir}/guest-image/build_image.sh" -v "${kata_version}"
|
||||
image_tarball=$(find . -name 'kata-containers-'"${kata_version}"'-*.tar.gz')
|
||||
[ -f "${image_tarball}" ] || die "image not found"
|
||||
info "Install image in destdir ${image_tarball}"
|
||||
mkdir -p "${image_destdir}"
|
||||
tar xf "${image_tarball}" -C "${image_destdir}"
|
||||
pushd "${destdir}/${prefix}/share/kata-containers/" >>/dev/null
|
||||
info "Create image default symlinks"
|
||||
image=$(find . -name 'kata-containers-image*.img')
|
||||
initrd=$(find . -name 'kata-containers-initrd*.initrd')
|
||||
ln -sf "${image}" kata-containers.img
|
||||
ln -sf "${initrd}" kata-containers-initrd.img
|
||||
popd >>/dev/null
|
||||
pushd ${destdir}
|
||||
tar -czvf ../kata-static-image.tar.gz *
|
||||
popd
|
||||
}
|
||||
|
||||
#Install kernel asset
|
||||
install_kernel() {
|
||||
kata_version=${1:-$kata_version}
|
||||
pushd "${pkg_root_dir}"
|
||||
info "build kernel"
|
||||
kata_version="${kata_version}" ./kernel/build-kernel.sh setup
|
||||
kata_version="${kata_version}" ./kernel/build-kernel.sh build
|
||||
info "install kernel"
|
||||
kata_version="${kata_version}" DESTDIR="${destdir}" PREFIX="${prefix}" ./kernel/build-kernel.sh install
|
||||
popd
|
||||
pushd ${destdir}
|
||||
tar -czvf ../kata-static-kernel.tar.gz *
|
||||
popd
|
||||
}
|
||||
|
||||
#Install experimental kernel asset
|
||||
install_experimental_kernel() {
|
||||
kata_version=${1:-$kata_version}
|
||||
pushd "${pkg_root_dir}"
|
||||
info "build experimental kernel"
|
||||
kata_version="${kata_version}" ./kernel/build-kernel.sh -e setup
|
||||
kata_version="${kata_version}" ./kernel/build-kernel.sh -e build
|
||||
info "install experimental kernel"
|
||||
kata_version="${kata_version}" DESTDIR="${destdir}" PREFIX="${prefix}" ./kernel/build-kernel.sh -e install
|
||||
popd
|
||||
pushd ${destdir}
|
||||
tar -czvf ../kata-static-experimental-kernel.tar.gz *
|
||||
popd
|
||||
}
|
||||
|
||||
# Install static qemu asset
|
||||
install_qemu() {
|
||||
kata_version=${1:-$kata_version}
|
||||
info "build static qemu"
|
||||
kata_version="${kata_version}" "${pkg_root_dir}/static-build/qemu/build-static-qemu.sh"
|
||||
}
|
||||
|
||||
# Install static firecracker asset
|
||||
install_firecracker() {
|
||||
kata_version=${1:-$kata_version}
|
||||
info "build static firecracker"
|
||||
[ -f "firecracker/firecracker-static" ] || kata_version="${kata_version}" "${pkg_root_dir}/static-build/firecracker/build-static-firecracker.sh"
|
||||
info "Install static firecracker"
|
||||
mkdir -p "${destdir}/opt/kata/bin/"
|
||||
sudo install -D --owner root --group root --mode 0744 firecracker/firecracker-static "${destdir}/opt/kata/bin/firecracker"
|
||||
sudo install -D --owner root --group root --mode 0744 firecracker/jailer-static "${destdir}/opt/kata/bin/jailer"
|
||||
pushd ${destdir}
|
||||
tar -czvf ../kata-static-firecracker.tar.gz *
|
||||
popd
|
||||
}
|
||||
|
||||
# Install static cloud-hypervisor asset
|
||||
install_clh() {
|
||||
kata_version=${1:-$kata_version}
|
||||
info "build static cloud-hypervisor"
|
||||
kata_version="${kata_version}" "${pkg_root_dir}/static-build/cloud-hypervisor/build-static-clh.sh"
|
||||
info "Install static cloud-hypervisor"
|
||||
mkdir -p "${destdir}/opt/kata/bin/"
|
||||
sudo install -D --owner root --group root --mode 0744 cloud-hypervisor/cloud-hypervisor "${destdir}/opt/kata/bin/cloud-hypervisor"
|
||||
pushd "${destdir}"
|
||||
# create tarball for github release action
|
||||
tar -czvf ../kata-static-clh.tar.gz *
|
||||
popd
|
||||
}
|
||||
|
||||
#Install all components that are not assets
|
||||
install_kata_components() {
|
||||
kata_version=${1:-$kata_version}
|
||||
pushd "${repo_root_dir}/src/runtime"
|
||||
echo "Checkout to version ${kata_version}"
|
||||
git checkout "${kata_version}"
|
||||
echo "Build"
|
||||
make \
|
||||
PREFIX="${prefix}" \
|
||||
QEMUCMD="qemu-system-x86_64"
|
||||
echo "Install"
|
||||
make PREFIX="${prefix}" \
|
||||
DESTDIR="${destdir}" \
|
||||
install
|
||||
popd
|
||||
sed -i -e '/^initrd =/d' "${destdir}/${prefix}/share/defaults/${project}/configuration-qemu.toml"
|
||||
sed -i -e '/^initrd =/d' "${destdir}/${prefix}/share/defaults/${project}/configuration-fc.toml"
|
||||
pushd "${destdir}/${prefix}/share/defaults/${project}"
|
||||
ln -sf "configuration-qemu.toml" configuration.toml
|
||||
popd
|
||||
|
||||
pushd ${destdir}
|
||||
tar -czvf ../kata-static-kata-components.tar.gz *
|
||||
popd
|
||||
}
|
||||
|
||||
untar_qemu_binaries() {
|
||||
info "Install static qemu"
|
||||
tar xf kata-static-qemu.tar.gz -C "${destdir}"
|
||||
}
|
||||
|
||||
main() {
|
||||
while getopts "hlpw:" opt; do
|
||||
case $opt in
|
||||
h) usage 0 ;;
|
||||
l) test_local="true" ;;
|
||||
p) push="true" ;;
|
||||
w) workdir="${OPTARG}" ;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND - 1))
|
||||
|
||||
kata_version=${1:-}
|
||||
[ -n "${kata_version}" ] || usage 1
|
||||
info "Requested version: ${kata_version}"
|
||||
|
||||
if [[ "$test_local" == "true" ]]; then
|
||||
verify_hub
|
||||
fi
|
||||
|
||||
destdir="${workdir}/kata-static-${kata_version}-$(uname -m)"
|
||||
info "DESTDIR ${destdir}"
|
||||
mkdir -p "${destdir}"
|
||||
install_kata_components
|
||||
install_experimental_kernel
|
||||
install_kernel
|
||||
install_clh
|
||||
install_qemu
|
||||
install_firecracker
|
||||
install_image
|
||||
|
||||
untar_qemu_binaries
|
||||
|
||||
tarball_name="${destdir}.tar.xz"
|
||||
pushd "${destdir}" >>/dev/null
|
||||
tar cfJ "${tarball_name}" "./opt"
|
||||
popd >>/dev/null
|
||||
if [ "${push}" == "true" ]; then
|
||||
hub -C "${GOPATH}/src/github.com/${project}/${project}" release edit -a "${tarball_name}" "${kata_version}"
|
||||
else
|
||||
echo "Wont push the tarball to github use -p option to do it."
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
main $@
|
||||
fi
|
Loading…
Reference in New Issue
Block a user