diff --git a/scripts/lib.sh b/scripts/lib.sh index f764798741..00f128a317 100644 --- a/scripts/lib.sh +++ b/scripts/lib.sh @@ -1,22 +1,18 @@ -function install_yq() { +readonly kata_arch_sh="${GOPATH}/src/github.com/kata-containers/tests/.ci/kata-arch.sh" + +get_kata_arch(){ + go get -u github.com/kata-containers/tests || true + [ -f "${kata_arch_sh}" ] || die "Not found $kata_arch_sh" +} + +install_yq() { GOPATH=${GOPATH:-${HOME}/go} local yq_path="${GOPATH}/bin/yq" local yq_pkg="github.com/mikefarah/yq" [ -x "${GOPATH}/bin/yq" ] && return - case "$(arch)" in - "aarch64") - goarch=arm64 - ;; - - "x86_64") - goarch=amd64 - ;; - "*") - echo "Arch $(arch) not supported" - exit - ;; - esac + get_kata_arch + goarch=$("${kata_arch_sh}" -g) mkdir -p "${GOPATH}/bin" @@ -29,11 +25,11 @@ function install_yq() { local yq_url="https://${yq_pkg}/releases/download/${yq_version}/yq_linux_${goarch}" - curl -o "${yq_path}" -L ${yq_url} - chmod +x ${yq_path} + curl -o "${yq_path}" -L "${yq_url}" + chmod +x "${yq_path}" } -function get_from_kata_deps(){ +get_from_kata_deps(){ dependency="$1" GOPATH=${GOPATH:-${HOME}/go} # This is needed in order to retrieve the version for qemu-lite @@ -41,7 +37,7 @@ function get_from_kata_deps(){ runtime_repo="github.com/kata-containers/runtime" runtime_repo_dir="$GOPATH/src/${runtime_repo}" versions_file="${runtime_repo_dir}/versions.yaml" - mkdir -p "$(dirname ${runtime_repo_dir})" + mkdir -p $(dirname "${runtime_repo_dir}") [ -d "${runtime_repo_dir}" ] || git clone --quiet https://${runtime_repo}.git "${runtime_repo_dir}" [ ! -f "$versions_file" ] && { echo >&2 "ERROR: cannot find $versions_file"; exit 1; } result=$("${GOPATH}/bin/yq" read "$versions_file" "$dependency") diff --git a/static-build/qemu/Dockerfile b/static-build/qemu/Dockerfile new file mode 100644 index 0000000000..687f21b940 --- /dev/null +++ b/static-build/qemu/Dockerfile @@ -0,0 +1,46 @@ +from ubuntu:16.04 + +ARG QEMU_REPO +# commit/tag/branch +ARG QEMU_VERSION + +WORKDIR /root/qemu +RUN apt-get update +RUN apt-get install -y \ + autoconf \ + automake \ + bc \ + bison \ + cpio \ + flex \ + gawk \ + libaudit-dev \ + libcap-dev \ + libcap-ng-dev \ + libdw-dev \ + libelf-dev \ + libglib2.0-0 \ + libglib2.0-dev \ + libglib2.0-dev git \ + libltdl-dev \ + libpixman-1-dev \ + libtool \ + pkg-config \ + pkg-config \ + python \ + python-dev \ + rsync \ + zlib1g-dev + +RUN cd .. && git clone "${QEMU_REPO}" qemu +RUN git checkout "${QEMU_VERSION}" +RUN git clone https://github.com/qemu/capstone.git capstone +RUN git clone https://github.com/qemu/keycodemapdb.git ui/keycodemapdb + +ADD configure-hypervisor.sh /root/configure-hypervisor.sh + +RUN /root/configure-hypervisor.sh -s kata-qemu | xargs ./configure --prefix=/opt/kata --with-pkgversion=kata-static +RUN make clean +RUN make -j$(nproc) +RUN make install DESTDIR=/tmp/qemu-static +RUN cd /tmp/qemu-static && tar -czvf kata-qemu-static.tar.gz * diff --git a/static-build/qemu/Makefile b/static-build/qemu/Makefile new file mode 100644 index 0000000000..00ab89e462 --- /dev/null +++ b/static-build/qemu/Makefile @@ -0,0 +1,8 @@ +MK_DIR :=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) +CONFIG_DIR := $(MK_DIR)/../../scripts/ + +build: + "$(MK_DIR)/build-static-qemu.sh" + +clean: + rm -f kata-qemu-static.tar.gz diff --git a/static-build/qemu/build-static-qemu.sh b/static-build/qemu/build-static-qemu.sh new file mode 100755 index 0000000000..9fcdbbcdb5 --- /dev/null +++ b/static-build/qemu/build-static-qemu.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# +# Copyright (c) 2018 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 + +set -o errexit +set -o nounset +set -o pipefail + +script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +source "${script_dir}/../../scripts/lib.sh" + +config_dir="${script_dir}/../../scripts/" + +qemu_repo="${qemu_repo:-}" +qemu_version="${qemu_version:-}" + +if [ -z "$qemu_repo" ]; then + info "Get qemu information from runtime versions.yaml" + qemu_url=$(get_from_kata_deps "assets.hypervisor.qemu.url") + [ -n "$qemu_url" ] || die "failed to get qemu url" + qemu_repo="${qemu_url}.git" +fi +[ -n "$qemu_repo" ] || die "failed to get qemu repo" + + +[ -n "$qemu_version" ] || qemu_version=$(get_from_kata_deps "assets.hypervisor.qemu.version") +[ -n "$qemu_version" ] || die "failed to get qemu version" + +info "Build ${qemu_repo} version: ${qemu_version}" + +http_proxy="${http_proxy:-}" +https_proxy="${https_proxy:-}" + +docker build \ + --build-arg http_proxy="${http_proxy}" \ + --build-arg https_proxy="${https_proxy}" \ + --build-arg QEMU_REPO="${qemu_repo}" \ + --build-arg QEMU_VERSION="${qemu_version}" \ + "${config_dir}" \ + -f "${script_dir}/Dockerfile" \ + -t qemu-static + +docker run \ + -ti \ + -v "${PWD}":/share qemu-static \ + mv /tmp/qemu-static/kata-qemu-static.tar.gz /share/