#!/bin/bash # # Copyright (c) 2017 Intel Corporation # # SPDX-License-Identifier: Apache-2.0 set -e script_name="${0##*/}" script_dir="$(dirname $(realpath -s $0))" ROOTFS_DIR=${ROOTFS_DIR:-${PWD}/rootfs} AGENT_VERSION=${AGENT_VERSION:-master} GO_AGENT_PKG=${GO_AGENT_PKG:-github.com/kata-containers/agent} AGENT_BIN=${AGENT_BIN:-kata-agent} # Name of file that will implement build_rootfs typeset -r LIB_SH="rootfs_lib.sh" if [ -n "$DEBUG" ] ; then set -x fi #$1: Error code if want to exit differnt to 0 usage(){ error="${1:-0}" cat < : Linux distribution to use as base OS. Supported Linux distributions: $(get_distros) Options: -h : Show this help message -a : agent version DEFAULT: ${AGENT_VERSION} ENV: AGENT_VERSION -r : rootfs directory DEFAULT: ${ROOTFS_DIR} ENV: ROOTFS_DIR ENV VARIABLES: GO_AGENT_PKG: Change the golang package url to get the agent source code DEFAULT: ${AGENT_REPO} EOT exit "${error}" } die() { msg="$*" echo "ERROR: ${msg}" >&2 exit 1 } info() { msg="$*" echo "INFO: ${msg}" >&2 } OK() { msg="$*" echo "INFO: [OK] ${msg}" >&2 } get_distros() { cdirs=$(find "${script_dir}" -maxdepth 1 -type d) find ${cdirs} -maxdepth 1 -name "${LIB_SH}" -printf '%H\n' | while read dir; do basename "${dir}" done } check_function_exist() { function_name="$1" [ "$(type -t ${function_name})" == "function" ] || die "${function_name} function was not defined" } while getopts c:hr: opt do case $opt in a) AGENT_VERSION="${OPTARG}" ;; h) usage ;; r) ROOTFS_DIR="${OPTARG}" ;; esac done shift $(($OPTIND - 1)) distro="$1" [ -n "${distro}" ] || usage 1 distro_config_dir="${script_dir}/${distro}" [ -d "${distro_config_dir}" ] || die "Not found configuration directory ${distro_config_dir}" rootfs_lib="${distro_config_dir}/${LIB_SH}" source "${rootfs_lib}" rootfs_config="${distro_config_dir}/config.sh" source "${rootfs_config}" CONFIG_DIR=${distro_config_dir} check_function_exist "build_rootfs" mkdir -p ${ROOTFS_DIR} build_rootfs ${ROOTFS_DIR} info "Check init is installed" init="${ROOTFS_DIR}/sbin/init" [ -x "${init}" ] || [ -L ${init} ] || die "/sbin/init is not installed in ${ROOTFS_DIR}" OK "init is installed" info "Pull Agent source code" go get -d "${GO_AGENT_PKG}" || true OK "Pull Agent source code" info "Build agent" pushd "${GOPATH}/src/${GO_AGENT_PKG}" make INIT=no make install DESTDIR="${ROOTFS_DIR}" INIT=no popd [ -x "${ROOTFS_DIR}/bin/${AGENT_BIN}" ] || die "/bin/${AGENT_BIN} is not installed in ${ROOTFS_DIR}" OK "Agent installed"