mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-01 09:42:45 +00:00
Merge pull request #90 from jcvenegas/build-image-fixes.sh
image build: Improve image generation
This commit is contained in:
commit
8ed7e397e1
@ -4,61 +4,116 @@
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
set -x
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
tmp_dir=$(mktemp -d -t build-image-tmp.XXXXXXXXXX)
|
||||
[ -z "${DEBUG:-}" ] || set -x
|
||||
|
||||
script_dir=$(dirname "$0")
|
||||
source ${script_dir}/../versions.txt
|
||||
readonly script_name="$(basename "${BASH_SOURCE[0]}")"
|
||||
readonly script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
readonly project="kata-containers"
|
||||
readonly tmp_dir=$(mktemp -d -t build-image-tmp.XXXXXXXXXX)
|
||||
readonly osbuilder_url=https://github.com/${project}/osbuilder.git
|
||||
|
||||
|
||||
readonly OSBUILDER_URL=https://github.com/kata-containers/osbuilder.git
|
||||
AGENT_SHA="$kata_agent_hash"
|
||||
|
||||
#Image information
|
||||
IMG_DISTRO="${osbuilder_default_os:-clearlinux}"
|
||||
IMG_OS_VERSION="$clearlinux_version"
|
||||
CLR_BASE_URL="https://download.clearlinux.org/releases/${clearlinux_version}/clear/x86_64/os/"
|
||||
|
||||
#Initrd information
|
||||
INITRD_DISTRO="${osbuilder_default_initrd_os:-alpine}"
|
||||
INITRD_OS_VERSION="$alpine_version"
|
||||
|
||||
readonly IMAGE_NAME="kata-containers-image_${IMG_DISTRO}_agent_${AGENT_SHA:0:7}.img"
|
||||
readonly INITRD_NAME="kata-containers-initrd_${INITRD_DISTRO}_agent_${AGENT_SHA:0:7}.initrd"
|
||||
|
||||
rm -f "${IMAGE_NAME}"
|
||||
rm -f "${INITRD_NAME}"
|
||||
export GOPATH=${GOPATH:-${HOME}/go}
|
||||
source "${script_dir}/../../scripts/lib.sh"
|
||||
|
||||
|
||||
pushd ${tmp_dir}
|
||||
git clone $OSBUILDER_URL osbuilder
|
||||
pushd osbuilder
|
||||
git checkout $kata_osbuilder_version
|
||||
arch_target="$(uname -m)"
|
||||
#image information
|
||||
img_distro=$(get_from_kata_deps "assets.image.architecture.${arch_target}.name")
|
||||
img_os_version=$(get_from_kata_deps "assets.image.architecture.${arch_target}.version")
|
||||
|
||||
sudo -E PATH=$PATH make initrd\
|
||||
DISTRO=$INITRD_DISTRO \
|
||||
AGENT_VERSION=$AGENT_SHA \
|
||||
OS_VERSION=$INITRD_OS_VERSION \
|
||||
DISTRO_ROOTFS="${PWD}/initrd-image" \
|
||||
USE_DOCKER=1 \
|
||||
AGENT_INIT="yes"
|
||||
#initrd information
|
||||
initrd_distro=$(get_from_kata_deps "assets.image.architecture.${arch_target}.name")
|
||||
initrd_os_version=$(get_from_kata_deps "assets.image.architecture.${arch_target}.version")
|
||||
|
||||
sudo -E PATH=$PATH make image \
|
||||
DISTRO=$IMG_DISTRO \
|
||||
AGENT_VERSION=$AGENT_SHA \
|
||||
IMG_OS_VERSION=$IMG_OS_VERSION \
|
||||
DISTRO_ROOTFS="${PWD}/rootfs-image" \
|
||||
BASE_URL=$CLR_BASE_URL
|
||||
kata_version="master"
|
||||
|
||||
popd
|
||||
# osbuilder info
|
||||
kata_osbuilder_version="${KATA_OSBUILDER_VERSION:-}"
|
||||
# Agent version
|
||||
agent_version="${AGENT_VERSION:-}"
|
||||
|
||||
popd
|
||||
mv "${tmp_dir}/osbuilder/kata-containers.img" "${IMAGE_NAME}"
|
||||
mv "${tmp_dir}/osbuilder/kata-containers-initrd.img" "${INITRD_NAME}"
|
||||
sudo tar cfz "kata-containers.tar.gz" "${INITRD_NAME}" "${IMAGE_NAME}"
|
||||
|
||||
readonly destdir="${script_dir}"
|
||||
|
||||
build_initrd(){
|
||||
sudo -E PATH="$PATH" make initrd\
|
||||
DISTRO="$initrd_distro" \
|
||||
AGENT_VERSION="${agent_version}" \
|
||||
OS_VERSION="${initrd_os_version}" \
|
||||
DISTRO_ROOTFS="${tmp_dir}/initrd-image" \
|
||||
USE_DOCKER=1 \
|
||||
AGENT_INIT="yes"
|
||||
|
||||
}
|
||||
|
||||
build_image(){
|
||||
sudo -E PATH="${PATH}" make image \
|
||||
DISTRO="${img_distro}" \
|
||||
AGENT_VERSION="${agent_version}" \
|
||||
IMG_OS_VERSION="${img_os_version}" \
|
||||
DISTRO_ROOTFS="${tmp_dir}/rootfs-image"
|
||||
}
|
||||
|
||||
create_tarball(){
|
||||
agent_sha=$(get_repo_hash "${GOPATH}/src/github.com/kata-containers/agent")
|
||||
#reduce sha size for short names
|
||||
agent_sha=${agent_sha:0:11}
|
||||
tarball_name="kata-containers-${kata_osbuilder_version}-${agent_sha}-${arch_target}.tar.gz"
|
||||
image_name="kata-containers-image_${img_distro}_${kata_osbuilder_version}_agent_${agent_sha}.img"
|
||||
initrd_name="kata-containers-initrd_${initrd_distro}_${kata_osbuilder_version}_agent_${agent_sha}.initrd"
|
||||
|
||||
mv "${tmp_dir}/osbuilder/kata-containers.img" "${image_name}"
|
||||
mv "${tmp_dir}/osbuilder/kata-containers-initrd.img" "${initrd_name}"
|
||||
sudo tar cfzv "${tarball_name}" "${initrd_name}" "${image_name}"
|
||||
}
|
||||
|
||||
usage(){
|
||||
return_code=${1:-0}
|
||||
cat << EOT
|
||||
Create image and initrd in a tarball for kata containers.
|
||||
Use it to build an image to distribute kata.
|
||||
|
||||
Usage:
|
||||
${script_name} [options]
|
||||
|
||||
Options:
|
||||
-v <version> : Kata version to build images. Use kata release for
|
||||
for agent and osbuilder.
|
||||
|
||||
EOT
|
||||
|
||||
exit "${return_code}"
|
||||
}
|
||||
|
||||
main(){
|
||||
while getopts "v:h" opt
|
||||
do
|
||||
case "$opt" in
|
||||
h) usage 0 ;;
|
||||
v) kata_version="${OPTARG}" ;;
|
||||
*) echo "Invalid option $opt"; usage 1;;
|
||||
esac
|
||||
done
|
||||
# osbuilder info
|
||||
[ -n "${kata_osbuilder_version}" ] || kata_osbuilder_version="${kata_version}"
|
||||
# Agent version
|
||||
[ -n "${agent_version}" ] || agent_version="${kata_version}"
|
||||
|
||||
shift $(( "$OPTIND" - 1 ))
|
||||
git clone "$osbuilder_url" "${tmp_dir}/osbuilder"
|
||||
pushd "${tmp_dir}/osbuilder"
|
||||
git checkout "${kata_osbuilder_version}"
|
||||
build_initrd
|
||||
build_image
|
||||
create_tarball
|
||||
cp "${tarball_name}" "${destdir}"
|
||||
popd
|
||||
}
|
||||
|
||||
main $*
|
||||
|
@ -23,7 +23,6 @@ install_yq() {
|
||||
# https://github.com/mikefarah/yq/releases/tag/<VERSION-HERE>
|
||||
yq_version=$(basename "${yq_latest_url}")
|
||||
|
||||
|
||||
local yq_url="https://${yq_pkg}/releases/download/${yq_version}/yq_linux_${goarch}"
|
||||
curl -o "${yq_path}" -L "${yq_url}"
|
||||
chmod +x "${yq_path}"
|
||||
@ -53,3 +52,12 @@ die() {
|
||||
info() {
|
||||
echo >&2 "INFO: $*"
|
||||
}
|
||||
|
||||
get_repo_hash(){
|
||||
local repo_dir=${1:-}
|
||||
[ -d "${repo_dir}" ] || die "${repo_dir} is not a directory"
|
||||
pushd "${repo_dir}" >> /dev/null
|
||||
git rev-parse --verify HEAD
|
||||
popd >> /dev/null
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user