mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-23 22:17:19 +00:00
snap: Use helper script and cleanup
Move the common shell code to a helper script that is sourced by all parts. Add extra quoting to some variables in the snap config file and simplify. Fixes: #4304. Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
This commit is contained in:
parent
9b108d9937
commit
002f2cd109
114
snap/local/snap-common.sh
Normal file
114
snap/local/snap-common.sh
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2022 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
# Description: Idempotent script to be sourced by all parts in a
|
||||||
|
# snapcraft config file.
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
# XXX: Bash-specific code. zsh doesn't support this option and that *does*
|
||||||
|
# matter if this script is run sourced... since it'll be using zsh! ;)
|
||||||
|
[ -n "$BASH_VERSION" ] && set -o errtrace
|
||||||
|
|
||||||
|
[ -n "${DEBUG:-}" ] && set -o xtrace
|
||||||
|
|
||||||
|
die()
|
||||||
|
{
|
||||||
|
echo >&2 "ERROR: $0: $*"
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -n "${SNAPCRAFT_STAGE:-}" ] ||\
|
||||||
|
die "must be sourced from a snapcraft config file"
|
||||||
|
|
||||||
|
snap_yq_version=3.4.1
|
||||||
|
|
||||||
|
snap_common_install_yq()
|
||||||
|
{
|
||||||
|
export yq="${SNAPCRAFT_STAGE}/bin/yq"
|
||||||
|
|
||||||
|
local yq_pkg
|
||||||
|
yq_pkg="github.com/mikefarah/yq"
|
||||||
|
|
||||||
|
local yq_url
|
||||||
|
yq_url="https://${yq_pkg}/releases/download/${snap_yq_version}/yq_${goos}_${goarch}"
|
||||||
|
curl -o "${yq}" -L "${yq_url}"
|
||||||
|
chmod +x "${yq}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function that should be called for each snap "part" in
|
||||||
|
# snapcraft.yaml.
|
||||||
|
snap_common_main()
|
||||||
|
{
|
||||||
|
# Architecture
|
||||||
|
arch="$(uname -m)"
|
||||||
|
|
||||||
|
case "${arch}" in
|
||||||
|
aarch64)
|
||||||
|
goarch="arm64"
|
||||||
|
qemu_arch="${arch}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
ppc64le)
|
||||||
|
goarch="ppc64le"
|
||||||
|
qemu_arch="ppc64"
|
||||||
|
;;
|
||||||
|
|
||||||
|
s390x)
|
||||||
|
goarch="${arch}"
|
||||||
|
qemu_arch="${arch}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
x86_64)
|
||||||
|
goarch="amd64"
|
||||||
|
qemu_arch="${arch}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*) die "unsupported architecture: ${arch}" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
dpkg_arch=$(dpkg --print-architecture)
|
||||||
|
|
||||||
|
# golang
|
||||||
|
#
|
||||||
|
# We need the O/S name in golang format, but since we don't
|
||||||
|
# know if the godeps part has run, we don't know if golang is
|
||||||
|
# available yet, hence fall back to a standard system command.
|
||||||
|
goos="$(go env GOOS &>/dev/null || true)"
|
||||||
|
[ -z "$goos" ] && goos=$(uname -s|tr '[A-Z]' '[a-z]')
|
||||||
|
|
||||||
|
export GOROOT="${SNAPCRAFT_STAGE}"
|
||||||
|
export GOPATH="${GOROOT}/gopath"
|
||||||
|
export GO111MODULE="auto"
|
||||||
|
|
||||||
|
mkdir -p "${GOPATH}/bin"
|
||||||
|
export PATH="${GOPATH}/bin:${PATH}"
|
||||||
|
|
||||||
|
# Proxy
|
||||||
|
export http_proxy="${http_proxy:-}"
|
||||||
|
export https_proxy="${https_proxy:-}"
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
mkdir -p "${SNAPCRAFT_STAGE}/bin"
|
||||||
|
|
||||||
|
export PATH="$PATH:${SNAPCRAFT_STAGE}/bin"
|
||||||
|
|
||||||
|
# YAML query tool
|
||||||
|
export yq="${SNAPCRAFT_STAGE}/bin/yq"
|
||||||
|
|
||||||
|
# Kata paths
|
||||||
|
export kata_dir=$(printf "%s/src/github.com/%s/%s" \
|
||||||
|
"${GOPATH}" \
|
||||||
|
"${SNAPCRAFT_PROJECT_NAME}" \
|
||||||
|
"${SNAPCRAFT_PROJECT_NAME}")
|
||||||
|
|
||||||
|
export versions_file="${kata_dir}/versions.yaml"
|
||||||
|
|
||||||
|
[ -n "${yq:-}" ] && [ -x "${yq:-}" ] || snap_common_install_yq
|
||||||
|
}
|
||||||
|
|
||||||
|
snap_common_main
|
@ -19,6 +19,8 @@ parts:
|
|||||||
- git
|
- git
|
||||||
- git-extras
|
- git-extras
|
||||||
override-pull: |
|
override-pull: |
|
||||||
|
source "${SNAPCRAFT_PROJECT_DIR}/snap/local/snap-common.sh"
|
||||||
|
|
||||||
version="9999"
|
version="9999"
|
||||||
|
|
||||||
if echo "${GITHUB_REF:-}" | grep -q -E "^refs/tags"; then
|
if echo "${GITHUB_REF:-}" | grep -q -E "^refs/tags"; then
|
||||||
@ -29,9 +31,6 @@ parts:
|
|||||||
snapcraftctl set-grade "stable"
|
snapcraftctl set-grade "stable"
|
||||||
snapcraftctl set-version "${version}"
|
snapcraftctl set-version "${version}"
|
||||||
|
|
||||||
# setup GOPATH - this repo dir should be there
|
|
||||||
export GOPATH=${SNAPCRAFT_STAGE}/gopath
|
|
||||||
kata_dir=${GOPATH}/src/github.com/${SNAPCRAFT_PROJECT_NAME}/${SNAPCRAFT_PROJECT_NAME}
|
|
||||||
mkdir -p $(dirname ${kata_dir})
|
mkdir -p $(dirname ${kata_dir})
|
||||||
ln -sf $(realpath "${SNAPCRAFT_STAGE}/..") ${kata_dir}
|
ln -sf $(realpath "${SNAPCRAFT_STAGE}/..") ${kata_dir}
|
||||||
|
|
||||||
@ -43,28 +42,12 @@ parts:
|
|||||||
build-packages:
|
build-packages:
|
||||||
- curl
|
- curl
|
||||||
override-build: |
|
override-build: |
|
||||||
|
source "${SNAPCRAFT_PROJECT_DIR}/snap/local/snap-common.sh"
|
||||||
|
|
||||||
# put everything in stage
|
# put everything in stage
|
||||||
cd ${SNAPCRAFT_STAGE}
|
cd "${SNAPCRAFT_STAGE}"
|
||||||
|
|
||||||
mkdir -p "${SNAPCRAFT_STAGE}/bin/"
|
version="$(${yq} r ${kata_dir}/versions.yaml languages.golang.meta.newest-version)"
|
||||||
yq_path="${SNAPCRAFT_STAGE}/bin/yq"
|
|
||||||
yq_pkg="github.com/mikefarah/yq"
|
|
||||||
goos="linux"
|
|
||||||
case "$(uname -m)" in
|
|
||||||
aarch64) goarch="arm64";;
|
|
||||||
ppc64le) goarch="ppc64le";;
|
|
||||||
x86_64) goarch="amd64";;
|
|
||||||
s390x) goarch="s390x";;
|
|
||||||
*) echo "unsupported architecture: $(uname -m)"; exit 1;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
yq_version=3.4.1
|
|
||||||
yq_url="https://${yq_pkg}/releases/download/${yq_version}/yq_${goos}_${goarch}"
|
|
||||||
curl -o "${yq_path}" -L "${yq_url}"
|
|
||||||
chmod +x "${yq_path}"
|
|
||||||
|
|
||||||
kata_dir=gopath/src/github.com/${SNAPCRAFT_PROJECT_NAME}/${SNAPCRAFT_PROJECT_NAME}
|
|
||||||
version="$(${yq_path} r ${kata_dir}/versions.yaml languages.golang.meta.newest-version)"
|
|
||||||
tarfile="go${version}.${goos}-${goarch}.tar.gz"
|
tarfile="go${version}.${goos}-${goarch}.tar.gz"
|
||||||
curl -LO https://golang.org/dl/${tarfile}
|
curl -LO https://golang.org/dl/${tarfile}
|
||||||
tar -xf ${tarfile} --strip-components=1
|
tar -xf ${tarfile} --strip-components=1
|
||||||
@ -81,28 +64,17 @@ parts:
|
|||||||
- uidmap
|
- uidmap
|
||||||
- gnupg2
|
- gnupg2
|
||||||
override-build: |
|
override-build: |
|
||||||
[ "$(uname -m)" = "ppc64le" ] || [ "$(uname -m)" = "s390x" ] && sudo apt-get --no-install-recommends install -y protobuf-compiler
|
source "${SNAPCRAFT_PROJECT_DIR}/snap/local/snap-common.sh"
|
||||||
|
|
||||||
yq=${SNAPCRAFT_STAGE}/bin/yq
|
[ "${arch}" = "ppc64le" ] || [ "${arch}" = "s390x" ] && sudo apt-get --no-install-recommends install -y protobuf-compiler
|
||||||
|
|
||||||
# set GOPATH
|
|
||||||
export GOPATH=${SNAPCRAFT_STAGE}/gopath
|
|
||||||
kata_dir=${GOPATH}/src/github.com/${SNAPCRAFT_PROJECT_NAME}/${SNAPCRAFT_PROJECT_NAME}
|
|
||||||
|
|
||||||
export GOROOT=${SNAPCRAFT_STAGE}
|
|
||||||
export PATH="${GOROOT}/bin:${PATH}"
|
|
||||||
export GO111MODULE="auto"
|
|
||||||
|
|
||||||
http_proxy=${http_proxy:-""}
|
|
||||||
https_proxy=${https_proxy:-""}
|
|
||||||
if [ -n "$http_proxy" ]; then
|
if [ -n "$http_proxy" ]; then
|
||||||
echo "Setting proxy $http_proxy"
|
echo "Setting proxy $http_proxy"
|
||||||
sudo -E systemctl set-environment http_proxy=$http_proxy || true
|
sudo -E systemctl set-environment http_proxy="$http_proxy" || true
|
||||||
sudo -E systemctl set-environment https_proxy=$https_proxy || true
|
sudo -E systemctl set-environment https_proxy="$https_proxy" || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy yq binary. It's used in the container
|
# Copy yq binary. It's used in the container
|
||||||
mkdir -p "${GOPATH}/bin/"
|
|
||||||
cp -a "${yq}" "${GOPATH}/bin/"
|
cp -a "${yq}" "${GOPATH}/bin/"
|
||||||
|
|
||||||
echo "Unmasking docker service"
|
echo "Unmasking docker service"
|
||||||
@ -113,63 +85,54 @@ parts:
|
|||||||
echo "Starting docker"
|
echo "Starting docker"
|
||||||
sudo -E systemctl start docker || true
|
sudo -E systemctl start docker || true
|
||||||
|
|
||||||
cd ${kata_dir}/tools/osbuilder
|
cd "${kata_dir}/tools/osbuilder"
|
||||||
|
|
||||||
# build image
|
# build image
|
||||||
export AGENT_INIT=yes
|
export AGENT_INIT=yes
|
||||||
export USE_DOCKER=1
|
export USE_DOCKER=1
|
||||||
export DEBUG=1
|
export DEBUG=1
|
||||||
arch="$(uname -m)"
|
|
||||||
initrd_distro=$(${yq} r -X ${kata_dir}/versions.yaml assets.initrd.architecture.${arch}.name)
|
initrd_distro=$(${yq} r -X ${kata_dir}/versions.yaml assets.initrd.architecture.${arch}.name)
|
||||||
image_distro=$(${yq} r -X ${kata_dir}/versions.yaml assets.image.architecture.${arch}.name)
|
image_distro=$(${yq} r -X ${kata_dir}/versions.yaml assets.image.architecture.${arch}.name)
|
||||||
case "$arch" in
|
case "$arch" in
|
||||||
x86_64)
|
x86_64)
|
||||||
# In some build systems it's impossible to build a rootfs image, try with the initrd image
|
# In some build systems it's impossible to build a rootfs image, try with the initrd image
|
||||||
sudo -E PATH=$PATH make image DISTRO=${image_distro} || sudo -E PATH=$PATH make initrd DISTRO=${initrd_distro}
|
sudo -E PATH=$PATH make image DISTRO="${image_distro}" || sudo -E PATH="$PATH" make initrd DISTRO="${initrd_distro}"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
aarch64|ppc64le|s390x)
|
aarch64|ppc64le|s390x)
|
||||||
sudo -E PATH=$PATH make initrd DISTRO=${initrd_distro}
|
sudo -E PATH="$PATH" make initrd DISTRO="${initrd_distro}"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*) echo "unsupported architecture: $(uname -m)"; exit 1;;
|
*) die "unsupported architecture: ${arch}" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Install image
|
# Install image
|
||||||
kata_image_dir=${SNAPCRAFT_PART_INSTALL}/usr/share/kata-containers
|
kata_image_dir="${SNAPCRAFT_PART_INSTALL}/usr/share/kata-containers"
|
||||||
mkdir -p ${kata_image_dir}
|
mkdir -p "${kata_image_dir}"
|
||||||
cp kata-containers*.img ${kata_image_dir}
|
cp kata-containers*.img "${kata_image_dir}"
|
||||||
|
|
||||||
runtime:
|
runtime:
|
||||||
after: [godeps, image, cloud-hypervisor]
|
after: [godeps, image, cloud-hypervisor]
|
||||||
plugin: nil
|
plugin: nil
|
||||||
build-attributes: [no-patchelf]
|
build-attributes: [no-patchelf]
|
||||||
override-build: |
|
override-build: |
|
||||||
# set GOPATH
|
source "${SNAPCRAFT_PROJECT_DIR}/snap/local/snap-common.sh"
|
||||||
export GOPATH=${SNAPCRAFT_STAGE}/gopath
|
|
||||||
export GOROOT=${SNAPCRAFT_STAGE}
|
|
||||||
export PATH="${GOROOT}/bin:${PATH}"
|
|
||||||
export GO111MODULE="auto"
|
|
||||||
kata_dir=${GOPATH}/src/github.com/${SNAPCRAFT_PROJECT_NAME}/${SNAPCRAFT_PROJECT_NAME}
|
|
||||||
|
|
||||||
cd ${kata_dir}/src/runtime
|
cd "${kata_dir}/src/runtime"
|
||||||
|
|
||||||
# setup arch
|
qemu_cmd="qemu-system-${qemu_arch}"
|
||||||
arch=$(uname -m)
|
|
||||||
if [ ${arch} = "ppc64le" ]; then
|
|
||||||
arch="ppc64"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# build and install runtime
|
# build and install runtime
|
||||||
make \
|
make \
|
||||||
PREFIX=/snap/${SNAPCRAFT_PROJECT_NAME}/current/usr \
|
PREFIX="/snap/${SNAPCRAFT_PROJECT_NAME}/current/usr" \
|
||||||
SKIP_GO_VERSION_CHECK=1 \
|
SKIP_GO_VERSION_CHECK=1 \
|
||||||
QEMUCMD=qemu-system-$arch
|
QEMUCMD="${qemu_cmd}"
|
||||||
|
|
||||||
make install \
|
make install \
|
||||||
PREFIX=/usr \
|
PREFIX=/usr \
|
||||||
DESTDIR=${SNAPCRAFT_PART_INSTALL} \
|
DESTDIR="${SNAPCRAFT_PART_INSTALL}" \
|
||||||
SKIP_GO_VERSION_CHECK=1 \
|
SKIP_GO_VERSION_CHECK=1 \
|
||||||
QEMUCMD=qemu-system-$arch
|
QEMUCMD="${qemu_cmd}"
|
||||||
|
|
||||||
if [ ! -f ${SNAPCRAFT_PART_INSTALL}/../../image/install/usr/share/kata-containers/kata-containers.img ]; then
|
if [ ! -f ${SNAPCRAFT_PART_INSTALL}/../../image/install/usr/share/kata-containers/kata-containers.img ]; then
|
||||||
sed -i -e "s|^image =.*|initrd = \"/snap/${SNAPCRAFT_PROJECT_NAME}/current/usr/share/kata-containers/kata-containers-initrd.img\"|" \
|
sed -i -e "s|^image =.*|initrd = \"/snap/${SNAPCRAFT_PROJECT_NAME}/current/usr/share/kata-containers/kata-containers-initrd.img\"|" \
|
||||||
@ -186,44 +149,37 @@ parts:
|
|||||||
- bison
|
- bison
|
||||||
- flex
|
- flex
|
||||||
override-build: |
|
override-build: |
|
||||||
yq=${SNAPCRAFT_STAGE}/bin/yq
|
source "${SNAPCRAFT_PROJECT_DIR}/snap/local/snap-common.sh"
|
||||||
export PATH="${PATH}:${SNAPCRAFT_STAGE}"
|
|
||||||
export GOPATH=${SNAPCRAFT_STAGE}/gopath
|
|
||||||
kata_dir=${GOPATH}/src/github.com/${SNAPCRAFT_PROJECT_NAME}/${SNAPCRAFT_PROJECT_NAME}
|
|
||||||
versions_file="${kata_dir}/versions.yaml"
|
|
||||||
kernel_version="$(${yq} r $versions_file assets.kernel.version)"
|
kernel_version="$(${yq} r $versions_file assets.kernel.version)"
|
||||||
#Remove extra 'v'
|
#Remove extra 'v'
|
||||||
kernel_version=${kernel_version#v}
|
kernel_version="${kernel_version#v}"
|
||||||
|
|
||||||
[ "$(uname -m)" = "s390x" ] && sudo apt-get --no-install-recommends install -y libssl-dev
|
[ "${arch}" = "s390x" ] && sudo apt-get --no-install-recommends install -y libssl-dev
|
||||||
|
|
||||||
export GOPATH=${SNAPCRAFT_STAGE}/gopath
|
cd "${kata_dir}/tools/packaging/kernel"
|
||||||
export GO111MODULE="auto"
|
|
||||||
kata_dir=${GOPATH}/src/github.com/${SNAPCRAFT_PROJECT_NAME}/${SNAPCRAFT_PROJECT_NAME}
|
|
||||||
|
|
||||||
cd ${kata_dir}/tools/packaging/kernel
|
|
||||||
kernel_dir_prefix="kata-linux-"
|
kernel_dir_prefix="kata-linux-"
|
||||||
|
|
||||||
# Setup and build kernel
|
# Setup and build kernel
|
||||||
./build-kernel.sh -v ${kernel_version} -d setup
|
./build-kernel.sh -v "${kernel_version}" -d setup
|
||||||
cd ${kernel_dir_prefix}*
|
cd ${kernel_dir_prefix}*
|
||||||
make -j $(($(nproc)-1)) EXTRAVERSION=".container"
|
make -j $(($(nproc)-1)) EXTRAVERSION=".container"
|
||||||
|
|
||||||
kernel_suffix=${kernel_version}.container
|
kernel_suffix="${kernel_version}.container"
|
||||||
kata_kernel_dir=${SNAPCRAFT_PART_INSTALL}/usr/share/kata-containers
|
kata_kernel_dir="${SNAPCRAFT_PART_INSTALL}/usr/share/kata-containers"
|
||||||
mkdir -p ${kata_kernel_dir}
|
mkdir -p "${kata_kernel_dir}"
|
||||||
|
|
||||||
# Install bz kernel
|
# Install bz kernel
|
||||||
make install INSTALL_PATH=${kata_kernel_dir} EXTRAVERSION=".container" || true
|
make install INSTALL_PATH="${kata_kernel_dir}" EXTRAVERSION=".container" || true
|
||||||
vmlinuz_name=vmlinuz-${kernel_suffix}
|
vmlinuz_name="vmlinuz-${kernel_suffix}"
|
||||||
ln -sf ${vmlinuz_name} ${kata_kernel_dir}/vmlinuz.container
|
ln -sf "${vmlinuz_name}" "${kata_kernel_dir}/vmlinuz.container"
|
||||||
|
|
||||||
# Install raw kernel
|
# Install raw kernel
|
||||||
vmlinux_path=vmlinux
|
vmlinux_path="vmlinux"
|
||||||
[ "$(uname -m)" = "s390x" ] && vmlinux_path=arch/s390/boot/compressed/vmlinux
|
[ "${arch}" = "s390x" ] && vmlinux_path="arch/s390/boot/compressed/vmlinux"
|
||||||
vmlinux_name=vmlinux-${kernel_suffix}
|
vmlinux_name="vmlinux-${kernel_suffix}"
|
||||||
cp ${vmlinux_path} ${kata_kernel_dir}/${vmlinux_name}
|
cp "${vmlinux_path}" "${kata_kernel_dir}/${vmlinux_name}"
|
||||||
ln -sf ${vmlinux_name} ${kata_kernel_dir}/vmlinux.container
|
ln -sf "${vmlinux_name}" "${kata_kernel_dir}/vmlinux.container"
|
||||||
|
|
||||||
qemu:
|
qemu:
|
||||||
plugin: make
|
plugin: make
|
||||||
@ -250,12 +206,8 @@ parts:
|
|||||||
- libselinux1-dev
|
- libselinux1-dev
|
||||||
- ninja-build
|
- ninja-build
|
||||||
override-build: |
|
override-build: |
|
||||||
yq=${SNAPCRAFT_STAGE}/bin/yq
|
source "${SNAPCRAFT_PROJECT_DIR}/snap/local/snap-common.sh"
|
||||||
export GOPATH=${SNAPCRAFT_STAGE}/gopath
|
|
||||||
export GO111MODULE="auto"
|
|
||||||
kata_dir=${GOPATH}/src/github.com/${SNAPCRAFT_PROJECT_NAME}/${SNAPCRAFT_PROJECT_NAME}
|
|
||||||
|
|
||||||
versions_file="${kata_dir}/versions.yaml"
|
|
||||||
branch="$(${yq} r ${versions_file} assets.hypervisor.qemu.version)"
|
branch="$(${yq} r ${versions_file} assets.hypervisor.qemu.version)"
|
||||||
url="$(${yq} r ${versions_file} assets.hypervisor.qemu.url)"
|
url="$(${yq} r ${versions_file} assets.hypervisor.qemu.url)"
|
||||||
commit=""
|
commit=""
|
||||||
@ -263,11 +215,11 @@ parts:
|
|||||||
patches_version_dir="${kata_dir}/tools/packaging/qemu/patches/tag_patches/${branch}"
|
patches_version_dir="${kata_dir}/tools/packaging/qemu/patches/tag_patches/${branch}"
|
||||||
|
|
||||||
# download source
|
# download source
|
||||||
qemu_dir=${SNAPCRAFT_STAGE}/qemu
|
qemu_dir="${SNAPCRAFT_STAGE}/qemu"
|
||||||
rm -rf "${qemu_dir}"
|
rm -rf "${qemu_dir}"
|
||||||
git clone --depth 1 --branch ${branch} --single-branch ${url} "${qemu_dir}"
|
git clone --depth 1 --branch ${branch} --single-branch ${url} "${qemu_dir}"
|
||||||
cd ${qemu_dir}
|
cd "${qemu_dir}"
|
||||||
[ -z "${commit}" ] || git checkout ${commit}
|
[ -z "${commit}" ] || git checkout "${commit}"
|
||||||
|
|
||||||
[ -n "$(ls -A ui/keycodemapdb)" ] || git clone --depth 1 https://github.com/qemu/keycodemapdb ui/keycodemapdb/
|
[ -n "$(ls -A ui/keycodemapdb)" ] || git clone --depth 1 https://github.com/qemu/keycodemapdb ui/keycodemapdb/
|
||||||
[ -n "$(ls -A capstone)" ] || git clone --depth 1 https://github.com/qemu/capstone capstone
|
[ -n "$(ls -A capstone)" ] || git clone --depth 1 https://github.com/qemu/capstone capstone
|
||||||
@ -278,10 +230,10 @@ parts:
|
|||||||
${kata_dir}/tools/packaging/scripts/apply_patches.sh "${patches_version_dir}"
|
${kata_dir}/tools/packaging/scripts/apply_patches.sh "${patches_version_dir}"
|
||||||
|
|
||||||
# Only x86_64 supports libpmem
|
# Only x86_64 supports libpmem
|
||||||
[ "$(uname -m)" = "x86_64" ] && sudo apt-get --no-install-recommends install -y apt-utils ca-certificates libpmem-dev
|
[ "${arch}" = "x86_64" ] && sudo apt-get --no-install-recommends install -y apt-utils ca-certificates libpmem-dev
|
||||||
|
|
||||||
configure_hypervisor=${kata_dir}/tools/packaging/scripts/configure-hypervisor.sh
|
configure_hypervisor="${kata_dir}/tools/packaging/scripts/configure-hypervisor.sh"
|
||||||
chmod +x ${configure_hypervisor}
|
chmod +x "${configure_hypervisor}"
|
||||||
# static build. The --prefix, --libdir, --libexecdir, --datadir arguments are
|
# static build. The --prefix, --libdir, --libexecdir, --datadir arguments are
|
||||||
# based on PREFIX and set by configure-hypervisor.sh
|
# based on PREFIX and set by configure-hypervisor.sh
|
||||||
echo "$(PREFIX=/snap/${SNAPCRAFT_PROJECT_NAME}/current/usr ${configure_hypervisor} -s kata-qemu) \
|
echo "$(PREFIX=/snap/${SNAPCRAFT_PROJECT_NAME}/current/usr ${configure_hypervisor} -s kata-qemu) \
|
||||||
@ -291,17 +243,17 @@ parts:
|
|||||||
# Copy QEMU configurations (Kconfigs)
|
# Copy QEMU configurations (Kconfigs)
|
||||||
case "${branch}" in
|
case "${branch}" in
|
||||||
"v5.1.0")
|
"v5.1.0")
|
||||||
cp -a ${kata_dir}/tools/packaging/qemu/default-configs/* default-configs
|
cp -a "${kata_dir}"/tools/packaging/qemu/default-configs/* default-configs
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
cp -a ${kata_dir}/tools/packaging/qemu/default-configs/* configs/devices/
|
cp -a "${kata_dir}"/tools/packaging/qemu/default-configs/* configs/devices/
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# build and install
|
# build and install
|
||||||
make -j $(($(nproc)-1))
|
make -j $(($(nproc)-1))
|
||||||
make install DESTDIR=${SNAPCRAFT_PART_INSTALL}
|
make install DESTDIR="${SNAPCRAFT_PART_INSTALL}"
|
||||||
prime:
|
prime:
|
||||||
- -snap/
|
- -snap/
|
||||||
- -usr/bin/qemu-ga
|
- -usr/bin/qemu-ga
|
||||||
@ -321,11 +273,13 @@ parts:
|
|||||||
plugin: nil
|
plugin: nil
|
||||||
after: [godeps]
|
after: [godeps]
|
||||||
override-build: |
|
override-build: |
|
||||||
|
source "${SNAPCRAFT_PROJECT_DIR}/snap/local/snap-common.sh"
|
||||||
|
|
||||||
# Currently, only one platform uses the new rust virtiofsd. The
|
# Currently, only one platform uses the new rust virtiofsd. The
|
||||||
# others make use of QEMU's C implementation.
|
# others make use of QEMU's C implementation.
|
||||||
#
|
#
|
||||||
# See "tools/packaging/scripts/configure-hypervisor.sh".
|
# See "tools/packaging/scripts/configure-hypervisor.sh".
|
||||||
if [ "$(uname -m)" = 'x86_64' ]
|
if [ "${arch}" = 'x86_64' ]
|
||||||
then
|
then
|
||||||
echo "INFO: Building rust version of virtiofsd"
|
echo "INFO: Building rust version of virtiofsd"
|
||||||
else
|
else
|
||||||
@ -334,14 +288,8 @@ parts:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# put everything in stage
|
|
||||||
cd ${SNAPCRAFT_STAGE}
|
|
||||||
|
|
||||||
export PATH="$PATH:${SNAPCRAFT_STAGE}/bin"
|
|
||||||
export GOPATH=${SNAPCRAFT_STAGE}/gopath
|
|
||||||
|
|
||||||
kata_dir=${GOPATH}/src/github.com/${SNAPCRAFT_PROJECT_NAME}/${SNAPCRAFT_PROJECT_NAME}
|
|
||||||
cd "${kata_dir}"
|
cd "${kata_dir}"
|
||||||
|
|
||||||
# Download the rust implementation of virtiofsd
|
# Download the rust implementation of virtiofsd
|
||||||
tools/packaging/static-build/virtiofsd/build-static-virtiofsd.sh
|
tools/packaging/static-build/virtiofsd/build-static-virtiofsd.sh
|
||||||
sudo install \
|
sudo install \
|
||||||
@ -356,22 +304,31 @@ parts:
|
|||||||
plugin: nil
|
plugin: nil
|
||||||
after: [godeps]
|
after: [godeps]
|
||||||
override-build: |
|
override-build: |
|
||||||
arch=$(uname -m)
|
source "${SNAPCRAFT_PROJECT_DIR}/snap/local/snap-common.sh"
|
||||||
|
|
||||||
if [ "${arch}" == "aarch64" ] || [ "${arch}" == "x86_64" ]; then
|
if [ "${arch}" == "aarch64" ] || [ "${arch}" == "x86_64" ]; then
|
||||||
sudo apt-get -y update
|
sudo apt-get -y update
|
||||||
sudo apt-get -y install ca-certificates curl gnupg lsb-release
|
sudo apt-get -y install ca-certificates curl gnupg lsb-release
|
||||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --batch --yes --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |\
|
||||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
sudo gpg --batch --yes --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||||
|
distro_codename=$(lsb_release -cs)
|
||||||
|
echo "deb [arch=${dpkg_arch} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu ${distro_codename} stable" |\
|
||||||
|
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
sudo apt-get -y update
|
sudo apt-get -y update
|
||||||
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
|
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
|
||||||
sudo systemctl start docker.socket
|
sudo systemctl start docker.socket
|
||||||
|
|
||||||
export GOPATH=${SNAPCRAFT_STAGE}/gopath
|
cd "${SNAPCRAFT_PROJECT_DIR}"
|
||||||
kata_dir=${GOPATH}/src/github.com/${SNAPCRAFT_PROJECT_NAME}/${SNAPCRAFT_PROJECT_NAME}
|
|
||||||
cd ${kata_dir}
|
|
||||||
sudo -E NO_TTY=true make cloud-hypervisor-tarball
|
sudo -E NO_TTY=true make cloud-hypervisor-tarball
|
||||||
tar xvJpf build/kata-static-cloud-hypervisor.tar.xz -C /tmp/
|
|
||||||
install -D /tmp/opt/kata/bin/cloud-hypervisor ${SNAPCRAFT_PART_INSTALL}/usr/bin/cloud-hypervisor
|
tarfile="${SNAPCRAFT_PROJECT_DIR}/tools/packaging/kata-deploy/local-build/build/kata-static-cloud-hypervisor.tar.xz"
|
||||||
|
tmpdir=$(mktemp -d)
|
||||||
|
|
||||||
|
tar -xvJpf "${tarfile}" -C "${tmpdir}"
|
||||||
|
|
||||||
|
install -D "${tmpdir}/opt/kata/bin/cloud-hypervisor" "${SNAPCRAFT_PART_INSTALL}/usr/bin/cloud-hypervisor"
|
||||||
|
|
||||||
|
rm -rf "${tmpdir}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
apps:
|
apps:
|
||||||
|
Loading…
Reference in New Issue
Block a user