Skip to content

Commit

Permalink
osbuilder: Skip installing golang for building rootfs
Browse files Browse the repository at this point in the history
Building rootfs does not depend on golang, delete intalling
golang may save build time.

And there is only rust agent now, the code for golang agent should
be deleted too.

Fixes: #2170

Signed-off-by: bin <bin@hyper.sh>
  • Loading branch information
liubin committed Jul 15, 2021
1 parent 594ff3a commit b12b21f
Show file tree
Hide file tree
Showing 12 changed files with 24 additions and 102 deletions.
3 changes: 1 addition & 2 deletions tools/osbuilder/rootfs-builder/centos/Dockerfile.in
Expand Up @@ -34,7 +34,6 @@ RUN yum -y update && yum install -y \
vim \
which

# This will install the proper packages to build Kata components
@INSTALL_MUSL@
# This will install the proper golang to build Kata components
@INSTALL_GO@
@INSTALL_RUST@
3 changes: 1 addition & 2 deletions tools/osbuilder/rootfs-builder/clearlinux/Dockerfile.in
Expand Up @@ -37,7 +37,6 @@ RUN dnf -y update && dnf install -y \
vim \
which

# This will install the proper golang to build Kata components
# This will install the proper packages to build Kata components
@INSTALL_MUSL@
@INSTALL_GO@
@INSTALL_RUST@
3 changes: 1 addition & 2 deletions tools/osbuilder/rootfs-builder/debian/Dockerfile-aarch64.in
Expand Up @@ -29,7 +29,6 @@ RUN apt-get update && apt-get install -y \
systemd \
tar \
vim
# This will install the proper golang to build Kata components
@INSTALL_GO@
# This will install the proper packages to build Kata components
@INSTALL_MUSL@
@INSTALL_RUST@
3 changes: 1 addition & 2 deletions tools/osbuilder/rootfs-builder/debian/Dockerfile.in
Expand Up @@ -36,6 +36,5 @@ RUN apt-get update && apt-get --no-install-recommends install -y \
vim \
wget

# This will install the proper golang to build Kata components
@INSTALL_GO@
# This will install the proper packages to build Kata components
@INSTALL_RUST@
3 changes: 1 addition & 2 deletions tools/osbuilder/rootfs-builder/fedora/Dockerfile.in
Expand Up @@ -37,7 +37,6 @@ RUN dnf -y update && dnf install -y \
vim \
which

# This will install the proper golang to build Kata components
# This will install the proper packages to build Kata components
@INSTALL_MUSL@
@INSTALL_GO@
@INSTALL_RUST@
3 changes: 1 addition & 2 deletions tools/osbuilder/rootfs-builder/gentoo/Dockerfile.in
Expand Up @@ -9,6 +9,5 @@ FROM ${IMAGE_REGISTRY}/gentoo/stage3-amd64:latest
# This dockerfile needs to provide all the componets need to build a rootfs
# Install any package need to create a rootfs (package manager, extra tools)

# This will install the proper golang to build Kata components
@INSTALL_GO@
# This will install the proper rust to build Kata components
@INSTALL_RUST@
42 changes: 6 additions & 36 deletions tools/osbuilder/rootfs-builder/rootfs.sh
Expand Up @@ -13,17 +13,14 @@ set -o errtrace
script_name="${0##*/}"
script_dir="$(dirname $(readlink -f $0))"
AGENT_VERSION=${AGENT_VERSION:-}
GO_AGENT_PKG=${GO_AGENT_PKG:-github.com/kata-containers/agent}
RUST_AGENT_PKG=${RUST_AGENT_PKG:-github.com/kata-containers/kata-containers}
RUST_AGENT=${RUST_AGENT:-yes}
RUST_VERSION="null"
MUSL_VERSION=${MUSL_VERSION:-"null"}
AGENT_BIN=${AGENT_BIN:-kata-agent}
AGENT_INIT=${AGENT_INIT:-no}
KERNEL_MODULES_DIR=${KERNEL_MODULES_DIR:-""}
OSBUILDER_VERSION="unknown"
DOCKER_RUNTIME=${DOCKER_RUNTIME:-runc}
GO_VERSION="null"
# this GOPATH is for installing yq from install_yq.sh
export GOPATH=${GOPATH:-${HOME}/go}
LIBC=${LIBC:-musl}

Expand Down Expand Up @@ -113,9 +110,6 @@ DISTRO_REPO Use host repositories to install guest packages.
DOCKER_RUNTIME Docker runtime to use when USE_DOCKER is set.
Default value: runc
GO_AGENT_PKG URL of the Git repository hosting the agent package.
Default value: ${GO_AGENT_PKG}
GRACEFUL_EXIT If set, and if the DISTRO configuration specifies a
non-empty BUILD_CAN_FAIL variable, do not return with an
error code in case any of the build step fails.
Expand All @@ -134,12 +128,6 @@ KERNEL_MODULES_DIR Path to a directory containing kernel modules to include in
ROOTFS_DIR Path to the directory that is populated with the rootfs.
Default value: <${script_name} path>/rootfs-<DISTRO-name>
RUST_AGENT When set to "no", build kata-agent from go agent instead of kata-rust-agent
Default value: "yes"
RUST_AGENT_PKG URL of the Git repository hosting the agent package.
Default value: ${RUST_AGENT_PKG}
USE_DOCKER If set, build the rootfs inside a container (requires
Docker).
Default value: <not set>
Expand Down Expand Up @@ -291,17 +279,11 @@ compare_versions()

check_env_variables()
{
# Fetch the first element from GOPATH as working directory
# as go get only works against the first item in the GOPATH
[ -z "$GOPATH" ] && die "GOPATH not set"
# this will be mounted to container for using yq on the host side.
GOPATH_LOCAL="${GOPATH%%:*}"

[ "$AGENT_INIT" == "yes" -o "$AGENT_INIT" == "no" ] || die "AGENT_INIT($AGENT_INIT) is invalid (must be yes or no)"

if [ -z "${AGENT_SOURCE_BIN}" ]; then
[ "$RUST_AGENT" == "yes" -o "$RUST_AGENT" == "no" ] || die "RUST_AGENT($RUST_AGENT) is invalid (must be yes or no)"
fi

[ -n "${KERNEL_MODULES_DIR}" ] && [ ! -d "${KERNEL_MODULES_DIR}" ] && die "KERNEL_MODULES_DIR defined but is not an existing directory"

[ -n "${OSBUILDER_VERSION}" ] || die "need osbuilder version"
Expand Down Expand Up @@ -346,24 +328,18 @@ build_rootfs_distro()

mkdir -p ${ROOTFS_DIR}

detect_go_version ||
die "Could not detect the required Go version for AGENT_VERSION='${AGENT_VERSION:-master}'."

echo "Required Go version: $GO_VERSION"

# need to detect rustc's version too?
detect_rust_version ||
die "Could not detect the required rust version for AGENT_VERSION='${AGENT_VERSION:-master}'."
die "Could not detect the required rust version for AGENT_VERSION='${AGENT_VERSION:-main}'."

echo "Required rust version: $RUST_VERSION"

detect_musl_version ||
die "Could not detect the required musl version for AGENT_VERSION='${AGENT_VERSION:-master}'."
die "Could not detect the required musl version for AGENT_VERSION='${AGENT_VERSION:-main}'."

echo "Required musl version: $MUSL_VERSION"

if [ -z "${USE_DOCKER}" ] && [ -z "${USE_PODMAN}" ]; then
#Generate an error if the local Go version is too old
info "build directly"
build_rootfs ${ROOTFS_DIR}
else
Expand All @@ -380,7 +356,7 @@ build_rootfs_distro()
REGISTRY_ARG="--build-arg IMAGE_REGISTRY=${IMAGE_REGISTRY}"
fi

# setup to install go or rust here
# setup to install rust here
generate_dockerfile "${distro_config_dir}"
"$container_engine" build \
${REGISTRY_ARG} \
Expand All @@ -396,12 +372,7 @@ build_rootfs_distro()
docker_run_args+=" --runtime ${DOCKER_RUNTIME}"

if [ -z "${AGENT_SOURCE_BIN}" ] ; then
if [ "$RUST_AGENT" == "no" ]; then
docker_run_args+=" --env GO_AGENT_PKG=${GO_AGENT_PKG}"
else
docker_run_args+=" --env RUST_AGENT_PKG=${RUST_AGENT_PKG}"
fi
docker_run_args+=" --env RUST_AGENT=${RUST_AGENT} -v ${GOPATH_LOCAL}:${GOPATH_LOCAL} --env GOPATH=${GOPATH_LOCAL}"
docker_run_args+=" -v ${GOPATH_LOCAL}:${GOPATH_LOCAL} --env GOPATH=${GOPATH_LOCAL}"
else
docker_run_args+=" --env AGENT_SOURCE_BIN=${AGENT_SOURCE_BIN}"
docker_run_args+=" -v ${AGENT_SOURCE_BIN}:${AGENT_SOURCE_BIN}"
Expand Down Expand Up @@ -576,7 +547,6 @@ EOT
test -r "${HOME}/.cargo/env" && source "${HOME}/.cargo/env"
[ "$ARCH" == "aarch64" ] && OLD_PATH=$PATH && export PATH=$PATH:/usr/local/musl/bin

agent_pkg="${RUST_AGENT_PKG}"
agent_dir="${script_dir}/../../../src/agent/"
# For now, rust-agent doesn't support seccomp yet.
SECCOMP="no"
Expand Down
3 changes: 1 addition & 2 deletions tools/osbuilder/rootfs-builder/suse/Dockerfile.in
Expand Up @@ -15,7 +15,6 @@ COPY install-packages.sh config.sh /
# RUN commands
RUN chmod +x /install-packages.sh; /install-packages.sh

# This will install the proper golang to build Kata components
# This will install the proper packages to build Kata components
@INSTALL_MUSL@
@INSTALL_GO@
@INSTALL_RUST@
5 changes: 3 additions & 2 deletions tools/osbuilder/rootfs-builder/template/Dockerfile.template
Expand Up @@ -13,5 +13,6 @@ FROM ${IMAGE_REGISTRY}/@distro@:@OS_VERSION@

# RUN commands

# This will install the proper golang to build Kata components
@INSTALL_GO@
# This will install the proper packages to build Kata components
@INSTALL_MUSL@
@INSTALL_RUST@
3 changes: 1 addition & 2 deletions tools/osbuilder/rootfs-builder/ubuntu/Dockerfile-aarch64.in
Expand Up @@ -33,7 +33,6 @@ RUN apt-get update && apt-get install -y \
systemd \
tar \
vim
# This will install the proper golang to build Kata components
@INSTALL_GO@
# This will install the proper packages to build Kata components
@INSTALL_MUSL@
@INSTALL_RUST@
4 changes: 2 additions & 2 deletions tools/osbuilder/rootfs-builder/ubuntu/Dockerfile.in
Expand Up @@ -40,6 +40,6 @@ RUN apt-get update && apt-get --no-install-recommends install -y \
tar \
vim \
wget
# This will install the proper golang to build Kata components
@INSTALL_GO@

# This will install the proper packages to build Kata components
@INSTALL_RUST@
51 changes: 5 additions & 46 deletions tools/osbuilder/scripts/lib.sh
Expand Up @@ -150,6 +150,8 @@ build_rootfs()
else
DNF="${DNF} --releasever=${OS_VERSION}"
fi

info "install packages for rootfs"
$DNF install ${EXTRA_PKGS} ${PACKAGES}
}

Expand Down Expand Up @@ -190,14 +192,8 @@ create_summary_file()
local agent="${AGENT_DEST}"
[ "$AGENT_INIT" = yes ] && agent="${init}"

local agent_version
if [ "${RUST_AGENT}" == "no" ]; then
agent_version=$("$agent" --version|awk '{print $NF}')
else
local -r agentdir="${script_dir}/../../../"
agent_version=$(cat ${agentdir}/VERSION)
fi

local -r agentdir="${script_dir}/../../../"
local -r agent_version=$(cat ${agentdir}/VERSION)

cat >"$file"<<-EOT
---
Expand Down Expand Up @@ -241,37 +237,20 @@ generate_dockerfile()
local libc=musl
case "$(uname -m)" in
"ppc64le")
goarch=ppc64le
rustarch=powerpc64le
muslarch=powerpc64
libc=gnu
;;

"aarch64")
goarch=arm64
;;
"s390x")
goarch=s390x
libc=gnu
;;

*)
goarch=amd64
;;
esac

[ -n "${http_proxy:-}" ] && readonly set_proxy="RUN sed -i '$ a proxy="${http_proxy:-}"' /etc/dnf/dnf.conf /etc/yum.conf; true"

curlOptions=("-OL")
[ -n "${http_proxy:-}" ] && curlOptions+=("-x ${http_proxy:-}")

readonly install_go="
RUN cd /tmp ; curl ${curlOptions[@]} https://storage.googleapis.com/golang/go${GO_VERSION}.linux-${goarch}.tar.gz
RUN tar -C /usr/ -xzf /tmp/go${GO_VERSION}.linux-${goarch}.tar.gz
ENV GOROOT=/usr/go
ENV PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin
"

# Rust agent
# rust installer should set path apropiately, just in case
# install musl for compiling rust-agent
Expand Down Expand Up @@ -327,8 +306,6 @@ RUN . /root/.cargo/env; \
rustup target install ${rustarch}-unknown-linux-${libc}
RUN ln -sf /usr/bin/g++ /bin/musl-g++
"
# rust agent still need go to build
# because grpc-sys need go to build
pushd "${dir}"
dockerfile_template="Dockerfile.in"
dockerfile_arch_template="Dockerfile-${architecture}.in"
Expand All @@ -342,40 +319,22 @@ RUN ln -sf /usr/bin/g++ /bin/musl-g++
# ppc64le and s390x have no musl target
if [ "${architecture}" == "ppc64le" ] || [ "${architecture}" == "s390x" ]; then
sed \
-e "s|@GO_VERSION@|${GO_VERSION}|g" \
-e "s|@OS_VERSION@|${OS_VERSION:-}|g" \
-e "s|@INSTALL_MUSL@||g" \
-e "s|@INSTALL_GO@|${install_go//$'\n'/\\n}|g" \
-e "s|@INSTALL_RUST@|${install_rust//$'\n'/\\n}|g" \
-e "s|@SET_PROXY@|${set_proxy:-}|g" \
"${dockerfile_template}" > Dockerfile
else
sed \
-e "s|@GO_VERSION@|${GO_VERSION}|g" \
-e "s|@OS_VERSION@|${OS_VERSION:-}|g" \
-e "s|@INSTALL_MUSL@|${install_musl//$'\n'/\\n}|g" \
-e "s|@INSTALL_GO@|${install_go//$'\n'/\\n}|g" \
-e "s|@INSTALL_RUST@|${install_rust//$'\n'/\\n}|g" \
-e "s|@SET_PROXY@|${set_proxy:-}|g" \
"${dockerfile_template}" > Dockerfile
fi
popd
}

detect_go_version()
{
info "Detecting go version"
typeset yq=$(command -v yq || command -v ${GOPATH}/bin/yq || echo "${GOPATH}/bin/yq")
if [ ! -f "$yq" ]; then
source "$yq_file"
fi

info "Get Go version from ${kata_versions_file}"
GO_VERSION="$(cat "${kata_versions_file}" | $yq r -X - "languages.golang.meta.newest-version")"

[ "$?" == "0" ] && [ "$GO_VERSION" != "null" ]
}

detect_rust_version()
{
info "Detecting agent rust version"
Expand All @@ -385,7 +344,7 @@ detect_rust_version()
fi

info "Get rust version from ${kata_versions_file}"
RUST_VERSION="$(cat "${kata_versions_file}" | $yq r -X - "languages.rust.meta.newest-version")"
RUST_VERSION="$(cat "${kata_versions_file}" | $yq r -X - "languages.rust.meta.newest-version")"

[ "$?" == "0" ] && [ "$RUST_VERSION" != "null" ]
}
Expand Down

0 comments on commit b12b21f

Please sign in to comment.