Skip to content
This repository was archived by the owner on Feb 8, 2021. It is now read-only.

Commit 6748eae

Browse files
committed
setup the kata-container runing env for test
Signed-off-by: fupan <[email protected]>
1 parent 970024d commit 6748eae

7 files changed

+534
-1
lines changed

.travis.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ env:
1616

1717
before_install:
1818
- sudo apt-get update -qq
19-
- sudo apt-get install -y -qq autoconf automake pkg-config libdevmapper-dev libsqlite3-dev libvirt-dev libvirt-bin aufs-tools wget libaio1 libpixman-1-0 netcat
19+
- sudo apt-get install -y -qq autoconf automake pkg-config libdevmapper-dev libsqlite3-dev libvirt-dev libvirt-bin aufs-tools wget libaio1 libpixman-1-0 netcat coreutils
2020
- wget https://s3-us-west-1.amazonaws.com/hypercontainer-download/qemu-hyper/qemu-hyper_2.4.1-1_amd64.deb && sudo dpkg -i --force-all qemu-hyper_2.4.1-1_amd64.deb
2121
- cd `mktemp -d`
2222
- mkdir -p ${GOPATH}/src/github.com/hyperhq
@@ -36,4 +36,5 @@ install:
3636
- ./autogen.sh && ./configure && make
3737

3838
script:
39+
- ./scripts/kata-env-setup.sh
3940
- cd ${TRAVIS_BUILD_DIR} && hack/test-cmd.sh

scripts/install_agent.sh

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/bin/bash
2+
#
3+
# Copyright (c) 2017-2018 Intel Corporation
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
#
7+
8+
set -e
9+
10+
cidir=$(dirname "$0")
11+
12+
source "${cidir}/lib.sh"
13+
14+
clone_build_and_install "github.com/kata-containers/agent"

scripts/install_kata_image.sh

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
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

scripts/install_kata_kernel.sh

+122
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
#!/bin/bash
2+
#
3+
# Copyright (c) 2017-2018 Intel Corporation
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
#
7+
8+
# Currently we will use this repository until this issue is solved
9+
# See https://github.com/kata-containers/packaging/issues/1
10+
11+
set -e
12+
13+
cidir=$(dirname "$0")
14+
source "${cidir}/lib.sh"
15+
source "/etc/os-release"
16+
17+
repo_name="packaging"
18+
repo_owner="kata-containers"
19+
kata_kernel_dir="/usr/share/kata-containers"
20+
kernel_arch="$(arch)"
21+
get_kernel_url="https://cdn.kernel.org/pub/linux/kernel"
22+
tmp_dir="$(mktemp -d)"
23+
hypervisor="kvm"
24+
packaged_kernel="kata-linux-container"
25+
26+
download_repo() {
27+
pushd ${tmp_dir}
28+
git clone --depth 1 https://github.com/${repo_owner}/${repo_name}
29+
popd
30+
}
31+
32+
get_current_kernel_version() {
33+
kernel_version=$(get_version "assets.kernel.version")
34+
echo "${kernel_version/v/}"
35+
}
36+
37+
get_kata_config_version() {
38+
pushd "${tmp_dir}/${repo_name}" >> /dev/null
39+
kata_config_version=$(cat kernel/kata_config_version)
40+
popd >> /dev/null
41+
echo "${kata_config_version}"
42+
}
43+
44+
get_packaged_kernel_version() {
45+
if [ "$ID" == "ubuntu" ]; then
46+
kernel_version=$(sudo apt-cache madison $packaged_kernel | awk '{print $3}' | cut -d'-' -f1)
47+
elif [ "$ID" == "fedora" ]; then
48+
kernel_version=$(sudo dnf --showduplicate list ${packaged_kernel}.${kernel_arch} | awk '/'$packaged_kernel'/ {print $2}' | cut -d'-' -f1)
49+
elif [ "$ID" == "centos" ]; then
50+
kernel_version=$(sudo yum --showduplicate list $packaged_kernel | awk '/'$packaged_kernel'/ {print $2}' | cut -d'-' -f1)
51+
fi
52+
53+
if [ -z "$kernel_version" ]; then
54+
die "unknown kernel version"
55+
else
56+
echo "${kernel_version}"
57+
fi
58+
59+
}
60+
61+
# download the linux kernel, first argument is the kernel version
62+
download_kernel() {
63+
kernel_version=$1
64+
pushd $tmp_dir
65+
kernel_tar_file="linux-${kernel_version}.tar.xz"
66+
kernel_url="${get_kernel_url}/v$(echo $kernel_version | cut -f1 -d.).x/${kernel_tar_file}"
67+
curl -LOk ${kernel_url}
68+
tar -xf ${kernel_tar_file}
69+
popd
70+
}
71+
72+
# build the linux kernel, first argument is the kernel version
73+
build_and_install_kernel() {
74+
kernel_version=$1
75+
pushd ${tmp_dir}
76+
kernel_config_file=$(realpath ${repo_name}/kernel/configs/[${kernel_arch}]*_kata_${hypervisor}_* | tail -1)
77+
kernel_patches=$(realpath ${repo_name}/kernel/patches/*)
78+
kernel_src_dir="linux-${kernel_version}"
79+
pushd ${kernel_src_dir}
80+
cp ${kernel_config_file} .config
81+
for p in ${kernel_patches}; do patch -p1 < $p; done
82+
make -s ARCH=${kernel_arch} oldconfig > /dev/null
83+
if [ $CI == "true" ]; then
84+
make ARCH=${kernel_arch} -j$(nproc)
85+
else
86+
make ARCH=${kernel_arch}
87+
fi
88+
sudo mkdir -p ${kata_kernel_dir}
89+
sudo cp -a "$(realpath arch/${kernel_arch}/boot/bzImage)" "${kata_kernel_dir}/vmlinuz.container"
90+
sudo cp -a "$(realpath vmlinux)" "${kata_kernel_dir}/vmlinux.container"
91+
popd
92+
popd
93+
}
94+
95+
install_packaged_kernel(){
96+
if [ "$ID" == "ubuntu" ]; then
97+
sudo apt install -y "$packaged_kernel"
98+
elif [ "$ID" == "fedora" ]; then
99+
sudo dnf install -y "$packaged_kernel"
100+
elif [ "$ID" == "centos" ]; then
101+
sudo yum install -y "$packaged_kernel"
102+
else
103+
die "Unrecognized distro"
104+
fi
105+
}
106+
107+
cleanup() {
108+
rm -rf "${tmp_dir}"
109+
}
110+
111+
main() {
112+
download_repo
113+
kernel_version="$(get_current_kernel_version)"
114+
kata_config_version="$(get_kata_config_version)"
115+
current_kernel_version="${kernel_version}.${kata_config_version}"
116+
117+
download_kernel ${kernel_version}
118+
build_and_install_kernel ${kernel_version}
119+
cleanup
120+
}
121+
122+
main

scripts/install_qemu.sh

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#!/bin/bash
2+
#
3+
# Copyright (c) 2018 Intel Corporation
4+
#
5+
# SPDX-License-Identifier: Apache-2.0
6+
#
7+
8+
set -e
9+
10+
cidir=$(dirname "$0")
11+
source "${cidir}/lib.sh"
12+
source /etc/os-release
13+
14+
CURRENT_QEMU_COMMIT=$(get_version "assets.hypervisor.qemu-lite.commit")
15+
PACKAGED_QEMU="qemu-lite"
16+
QEMU_ARCH=$(arch)
17+
18+
get_packaged_qemu_commit() {
19+
if [ "$ID" == "ubuntu" ]; then
20+
qemu_commit=$(sudo apt-cache madison $PACKAGED_QEMU \
21+
| awk '{print $3}' | cut -d'-' -f1 | cut -d'.' -f4)
22+
elif [ "$ID" == "fedora" ]; then
23+
qemu_commit=$(sudo dnf --showduplicate list ${PACKAGED_QEMU}.${QEMU_ARCH} \
24+
| awk '/'$PACKAGED_QEMU'/ {print $2}' | cut -d'-' -f1 | cut -d'.' -f4)
25+
elif [ "$ID" == "centos" ]; then
26+
qemu_commit=$(sudo yum --showduplicate list $PACKAGED_QEMU \
27+
| awk '/'$PACKAGED_QEMU'/ {print $2}' | cut -d'-' -f1 | cut -d'.' -f4)
28+
fi
29+
30+
if [ -z "$qemu_commit" ]; then
31+
die "unknown qemu commit"
32+
else
33+
echo "${qemu_commit}"
34+
fi
35+
}
36+
37+
install_packaged_qemu() {
38+
if [ "$ID" == "ubuntu" ]; then
39+
sudo apt install -y "$PACKAGED_QEMU"
40+
elif [ "$ID" == "fedora" ]; then
41+
sudo dnf install -y "$PACKAGED_QEMU"
42+
elif [ "$ID" == "centos" ]; then
43+
sudo yum install -y "$PACKAGED_QEMU"
44+
else
45+
die "Unrecognized distro"
46+
fi
47+
}
48+
49+
build_and_install_qemu() {
50+
QEMU_REPO=$(get_version "assets.hypervisor.qemu-lite.url")
51+
# Remove 'https://' from the repo url to be able to clone the repo using 'go get'
52+
QEMU_REPO=${QEMU_REPO/https:\/\//}
53+
PACKAGING_REPO="github.com/kata-containers/packaging"
54+
QEMU_CONFIG_SCRIPT="${GOPATH}/src/${PACKAGING_REPO}/scripts/configure-hypervisor.sh"
55+
56+
go get -d "${QEMU_REPO}" || true
57+
go get -d "$PACKAGING_REPO" || true
58+
59+
pushd "${GOPATH}/src/${QEMU_REPO}"
60+
git fetch
61+
git checkout "$CURRENT_QEMU_COMMIT"
62+
[ -d "capstone" ] || git clone https://github.com/qemu/capstone.git capstone
63+
[ -d "ui/keycodemapdb" ] || git clone https://github.com/qemu/keycodemapdb.git ui/keycodemapdb
64+
65+
echo "Build Qemu"
66+
"${QEMU_CONFIG_SCRIPT}" "qemu" | xargs ./configure
67+
make -j $(nproc)
68+
69+
echo "Install Qemu"
70+
sudo -E make install
71+
72+
# Add link from /usr/local/bin to /usr/bin
73+
sudo ln -sf $(command -v qemu-system-${QEMU_ARCH}) "/usr/bin/qemu-lite-system-${QEMU_ARCH}"
74+
popd
75+
}
76+
77+
main() {
78+
packaged_qemu_commit=$(get_packaged_qemu_commit)
79+
short_current_qemu_commit=${CURRENT_QEMU_COMMIT:0:10}
80+
build_and_install_qemu
81+
}
82+
83+
main

scripts/kata-env-setup.sh

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
cidir=$(dirname "$0")
6+
7+
source "${cidir}/lib.sh"
8+
9+
clone_repo "github.com/kata-containers/runtime"
10+
11+
${cidir}/install_kata_image.sh && ${cidir}/install_kata_kernel.sh && ${cidir}/install_qemu.sh

0 commit comments

Comments
 (0)