|
| 1 | +#!/bin/bash |
| 2 | +# |
| 3 | +# Copyright (c) 2017-2018 Intel Corporation |
| 4 | +# |
| 5 | +# SPDX-License-Identifier: Apache-2.0 |
| 6 | +# |
| 7 | + |
| 8 | +set -o errexit |
| 9 | +set -o nounset |
| 10 | +set -o pipefail |
| 11 | + |
| 12 | +cidir=$(dirname "$0") |
| 13 | + |
| 14 | +source /etc/os-release |
| 15 | +source "${cidir}/lib.sh" |
| 16 | + |
| 17 | +AGENT_INIT=${AGENT_INIT:-no} |
| 18 | +TEST_INITRD=${TEST_INITRD:-no} |
| 19 | + |
| 20 | +TMP_DIR= |
| 21 | +ROOTFS_DIR= |
| 22 | + |
| 23 | +PACKAGED_IMAGE="kata-containers-image" |
| 24 | +IMG_PATH="/usr/share/kata-containers" |
| 25 | +IMG_NAME="kata-containers.img" |
| 26 | + |
| 27 | +agent_path="${GOPATH}/src/github.com/kata-containers/agent" |
| 28 | + |
| 29 | +IMG_MOUNT_DIR= |
| 30 | +LOOP_DEVICE= |
| 31 | + |
| 32 | +# Build Kata agent |
| 33 | +bash -f "${cidir}/install_agent.sh" |
| 34 | +agent_commit=$(git --work-tree="${agent_path}" --git-dir="${agent_path}/.git" log --format=%h -1 HEAD) |
| 35 | + |
| 36 | +cleanup() { |
| 37 | + [ -d "${ROOTFS_DIR}" ] && [[ "${ROOTFS_DIR}" = *"rootfs"* ]] && sudo rm -rf "${ROOTFS_DIR}" |
| 38 | + [ -d "${TMP_DIR}" ] && rm -rf "${TMP_DIR}" |
| 39 | + if [ -n "${IMG_MOUNT_DIR}" ] && mount | grep -q "${IMG_MOUNT_DIR}"; then |
| 40 | + sudo umount "${IMG_MOUNT_DIR}" |
| 41 | + fi |
| 42 | + if [ -d "${IMG_MOUNT_DIR}" ]; then |
| 43 | + rm -rf "${IMG_MOUNT_DIR}" |
| 44 | + fi |
| 45 | + if [ -n "${LOOP_DEVICE}" ]; then |
| 46 | + sudo losetup -d "${LOOP_DEVICE}" |
| 47 | + fi |
| 48 | +} |
| 49 | + |
| 50 | +trap cleanup EXIT |
| 51 | + |
| 52 | +get_packaged_agent_version() { |
| 53 | + version=$(ls "$IMG_PATH" | grep "$PACKAGED_IMAGE" | cut -d'_' -f4 | cut -d'.' -f1) |
| 54 | + if [ -z "$version" ]; then |
| 55 | + die "unknown agent version" |
| 56 | + fi |
| 57 | + echo "$version" |
| 58 | +} |
| 59 | + |
| 60 | +install_packaged_image() { |
| 61 | + if [ "$ID" == "ubuntu" ]; then |
| 62 | + sudo -E apt install -y "$PACKAGED_IMAGE" |
| 63 | + elif [ "$ID" == "fedora" ]; then |
| 64 | + sudo -E dnf install -y "$PACKAGED_IMAGE" |
| 65 | + elif [ "$ID" == "centos" ]; then |
| 66 | + sudo -E yum install -y "$PACKAGED_IMAGE" |
| 67 | + else |
| 68 | + die "Linux distribution not supported" |
| 69 | + fi |
| 70 | +} |
| 71 | + |
| 72 | +update_agent() { |
| 73 | + pushd "$agent_path" |
| 74 | + |
| 75 | + LOOP_DEVICE=$(sudo losetup -f --show "${IMG_PATH}/${IMG_NAME}") |
| 76 | + IMG_MOUNT_DIR=$(mktemp -d -t kata-image-mount.XXXXXXXXXX) |
| 77 | + sudo partprobe "$LOOP_DEVICE" |
| 78 | + sudo mount "${LOOP_DEVICE}p1" "$IMG_MOUNT_DIR" |
| 79 | + |
| 80 | + echo "Old agent version:" |
| 81 | + "${IMG_MOUNT_DIR}/usr/bin/kata-agent" --version |
| 82 | + |
| 83 | + echo "Install new agent" |
| 84 | + sudo -E PATH="$PATH" bash -c "make install DESTDIR=$IMG_MOUNT_DIR" |
| 85 | + installed_version=$("${IMG_MOUNT_DIR}/usr/bin/kata-agent" --version) |
| 86 | + echo "New agent version: $installed_version" |
| 87 | + |
| 88 | + popd |
| 89 | + installed_version=${installed_version##k*-} |
| 90 | + [[ "${installed_version}" == *"${current_version}"* ]] |
| 91 | +} |
| 92 | + |
| 93 | +build_image() { |
| 94 | + TMP_DIR=$(mktemp -d -t kata-image-install.XXXXXXXXXX) |
| 95 | + readonly ROOTFS_DIR="${TMP_DIR}/rootfs" |
| 96 | + export ROOTFS_DIR |
| 97 | + |
| 98 | + image_type=$(get_version "assets.image.meta.image-type") |
| 99 | + OSBUILDER_DISTRO="alpine" |
| 100 | + |
| 101 | + osbuilder_repo="github.com/kata-containers/osbuilder" |
| 102 | + |
| 103 | + # Clone os-builder repository |
| 104 | + go get -d "${osbuilder_repo}" || true |
| 105 | + |
| 106 | + (cd "${GOPATH}/src/${osbuilder_repo}/rootfs-builder" && \ |
| 107 | + sudo -E AGENT_INIT="${AGENT_INIT}" AGENT_VERSION="${agent_commit}" \ |
| 108 | + GOPATH="$GOPATH" USE_DOCKER=true ./rootfs.sh "${OSBUILDER_DISTRO}") |
| 109 | + |
| 110 | + # Build the image |
| 111 | + if [ x"${TEST_INITRD}" == x"yes" ]; then |
| 112 | + pushd "${GOPATH}/src/${osbuilder_repo}/initrd-builder" |
| 113 | + sudo -E AGENT_INIT="${AGENT_INIT}" USE_DOCKER=true ./initrd_builder.sh "$ROOTFS_DIR" |
| 114 | + image_name="kata-containers-initrd.img" |
| 115 | + else |
| 116 | + pushd "${GOPATH}/src/${osbuilder_repo}/image-builder" |
| 117 | + sudo -E AGENT_INIT="${AGENT_INIT}" USE_DOCKER=true ./image_builder.sh "$ROOTFS_DIR" |
| 118 | + image_name="kata-containers.img" |
| 119 | + fi |
| 120 | + |
| 121 | + # Install the image |
| 122 | + commit=$(git log --format=%h -1 HEAD) |
| 123 | + date=$(date +%Y-%m-%d-%T.%N%z) |
| 124 | + image="kata-containers-${date}-osbuilder-${commit}-agent-${agent_commit}" |
| 125 | + |
| 126 | + sudo install -o root -g root -m 0640 -D ${image_name} "/usr/share/kata-containers/${image}" |
| 127 | + (cd /usr/share/kata-containers && sudo ln -sf "$image" ${image_name}) |
| 128 | + |
| 129 | + popd |
| 130 | +} |
| 131 | + |
| 132 | +main() { |
| 133 | + install_yq || build_image |
| 134 | +} |
| 135 | + |
| 136 | +main |
0 commit comments