diff --git a/src/runtime-rs/Makefile b/src/runtime-rs/Makefile index e8358b6760da..58d4b11d1c29 100644 --- a/src/runtime-rs/Makefile +++ b/src/runtime-rs/Makefile @@ -44,29 +44,43 @@ else endif ifeq ($(PREFIX),) - PREFIX := /usr +PREFIX := /usr +EXEC_PREFIX := $(PREFIX)/local +##VAR BINDIR= is a directory for installing executable programs +BINDIR := $(EXEC_PREFIX)/bin +else +EXEC_PREFIX := $(PREFIX) +##VAR BINDIR= is a directory for installing executable programs +# when creating the kata-deploy image, the default installation path for go runtime is $(EXEC_PREFIX)/bin, so we put it here for multiple runtime +BINDIR := $(EXEC_PREFIX)/runtime-rs/bin/ endif -PREFIXDEPS := $(PREFIX) +PREFIXDEPS := $(PREFIX) LIBEXECDIR := $(PREFIXDEPS)/libexec SHAREDIR := $(PREFIX)/share DEFAULTSDIR := $(SHAREDIR)/defaults PROJECT_DIR = $(PROJECT_TAG) IMAGENAME = $(PROJECT_TAG).img TARGET = $(PROJECT_COMPONENT) - +SYSCONFDIR := /etc CONFIG_FILE = configuration.toml HYPERVISOR_DB = dragonball +HYPERVISOR_ACRN = acrn +HYPERVISOR_FC = firecracker +HYPERVISOR_QEMU = qemu +HYPERVISOR_CLH = cloud-hypervisor DEFAULT_HYPERVISOR ?= $(HYPERVISOR_DB) -HYPERVISORS := $(HYPERVISOR_DB) +# List of hypervisors this build system can generate configuration for. +HYPERVISORS := $(HYPERVISOR_DB) $(HYPERVISOR_ACRN) $(HYPERVISOR_FC) $(HYPERVISOR_QEMU) $(HYPERVISOR_CLH) DBVALIDHYPERVISORPATHS := [] PKGDATADIR := $(PREFIXDEPS)/share/$(PROJECT_DIR) KERNELDIR := $(PKGDATADIR) IMAGEPATH := $(PKGDATADIR)/$(IMAGENAME) +PKGLIBEXECDIR := $(LIBEXECDIR)/$(PROJECT_DIR) FIRMWAREPATH := FIRMWAREVOLUMEPATH := @@ -290,9 +304,7 @@ endif TARGET_PATH = target/$(TRIPLE)/$(BUILD_TYPE)/$(TARGET) ##VAR DESTDIR= is a directory prepended to each installed target file -DESTDIR := -##VAR BINDIR= is a directory for installing executable programs -BINDIR := /usr/local/bin +DESTDIR ?= / GENERATED_CODE = crates/shim/src/config.rs @@ -330,8 +342,12 @@ define get_toolchain_version $(shell printf "%s: %s\\n" "toolchain" "$(or $(shell rustup show active-toolchain 2>/dev/null), (unknown))") endef +# Install a configuration file +# params: +# $1 : file to install +# $2 : directory path where file will be installed define INSTALL_FILE - install -D -m 644 $1 $(DESTDIR)$2/$1 || exit 1; + install --mode 0644 -D $1 $(DESTDIR)$2/$(notdir $1); endef # Returns the name of the kernel file to use based on the provided KERNELTYPE. @@ -382,20 +398,62 @@ show-header: @printf "%s - version %s (commit %s)\n\n" "$(TARGET)" "$(VERSION)" "$(COMMIT_MSG)" show-summary: show-header - @printf "project:\n" + @printf "• Project:\n" @printf " name: $(PROJECT_NAME)\n" @printf " url: $(PROJECT_URL)\n" @printf " component: $(PROJECT_COMPONENT)\n" - @printf "target: $(TARGET)\n" - @printf "architecture:\n" - @printf " host: $(ARCH)\n" - @printf "rust:\n" + @printf "\n" + @printf "• Target: $(TARGET)\n" + @printf "\n" + @printf "• Architecture: $(ARCH)\n" + @printf "\n" + @printf "• Rust:\n" @printf " %s\n" "$(call get_command_version,cargo)" @printf " %s\n" "$(call get_command_version,rustc)" @printf " %s\n" "$(call get_command_version,rustup)" @printf " %s\n" "$(call get_toolchain_version)" @printf "\n" - + @printf "• Hypervisors:\n" + @printf "\tDefault: $(DEFAULT_HYPERVISOR)\n" + @printf "\tKnown: $(sort $(HYPERVISORS))\n" + @printf "\tAvailable for this architecture: $(sort $(KNOWN_HYPERVISORS))\n" + @printf "\n" + @printf "• Summary:\n" + @printf "\n" + @printf "\tdestination install path (DESTDIR) : %s\n" $(abspath $(DESTDIR)) + @printf "\tbinary installation path (BINDIR) : %s\n" $(abspath $(BINDIR)) + @printf "\tbinaries to install :\n" + @printf \ + "$(foreach b,$(sort $(SHIMV2)),$(shell printf "\\t - $(shell readlink -m $(DESTDIR)/$(BINDIR)/$(b))\\\n"))" + @printf "\tconfigs to install (CONFIGS) :\n" + @printf \ + "$(foreach c,$(sort $(CONFIGS)),$(shell printf "\\t - $(c)\\\n"))" + @printf "\tinstall paths (CONFIG_PATHS) :\n" + @printf \ + "$(foreach c,$(sort $(CONFIG_PATHS)),$(shell printf "\\t - $(c)\\\n"))" + @printf "\talternate config paths (SYSCONFIG_PATHS) : %s\n" + @printf \ + "$(foreach c,$(sort $(SYSCONFIG_PATHS)),$(shell printf "\\t - $(c)\\\n"))" + @printf "\tdefault install path for $(DEFAULT_HYPERVISOR) (CONFIG_PATH) : %s\n" $(abspath $(CONFIG_PATH)) + @printf "\tdefault alternate config path (SYSCONFIG) : %s\n" $(abspath $(SYSCONFIG)) +ifneq (,$(findstring $(HYPERVISOR_QEMU),$(KNOWN_HYPERVISORS))) + @printf "\t$(HYPERVISOR_QEMU) hypervisor path (QEMUPATH) : %s\n" $(abspath $(QEMUPATH)) +endif +ifneq (,$(findstring $(HYPERVISOR_QEMU_VIRTIOFS),$(KNOWN_HYPERVISORS))) + @printf "\t$(HYPERVISOR_QEMU_VIRTIOFS) hypervisor path (QEMUVIRTIOFSPATH) : %s\n" $(abspath $(QEMUVIRTIOFSPATH)) +endif +ifneq (,$(findstring $(HYPERVISOR_CLH),$(KNOWN_HYPERVISORS))) + @printf "\t$(HYPERVISOR_CLH) hypervisor path (CLHPATH) : %s\n" $(abspath $(CLHPATH)) +endif +ifneq (,$(findstring $(HYPERVISOR_FC),$(KNOWN_HYPERVISORS))) + @printf "\t$(HYPERVISOR_FC) hypervisor path (FCPATH) : %s\n" $(abspath $(FCPATH)) +endif +ifneq (,$(findstring $(HYPERVISOR_ACRN),$(KNOWN_HYPERVISORS))) + @printf "\t$(HYPERVISOR_ACRN) hypervisor path (ACRNPATH) : %s\n" $(abspath $(ACRNPATH)) +endif + @printf "\tassets path (PKGDATADIR) : %s\n" $(abspath $(PKGDATADIR)) + @printf "\tshim path (PKGLIBEXECDIR) : %s\n" $(abspath $(PKGLIBEXECDIR)) + @printf "\n" ## help: Show help comments that start with `##VAR` and `##TARGET` help: Makefile show-summary @echo "========================== Help =============================" @@ -429,10 +487,10 @@ codecov-html: check_tarpaulin install: install-runtime install-configs install-runtime: runtime - install -D $(TARGET_PATH) $(BINDIR) + install -D $(TARGET_PATH) $(DESTDIR)$(BINDIR)/$(notdir $(TARGET_PATH)) install-configs: $(CONFIGS) - $(foreach f,$(CONFIGS),$(call INSTALL_CONFIG,$f,$(dir $(CONFIG_PATH)))) \ + $(foreach f,$(CONFIGS),$(call INSTALL_FILE,$f,$(dir $(CONFIG_PATH)))) \ sudo ln -sf $(DEFAULT_HYPERVISOR_CONFIG) $(DESTDIR)/$(CONFIG_PATH) .PHONY: \ diff --git a/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh b/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh index 2809d6e7d9d7..78fb8326b4e8 100755 --- a/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh +++ b/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh @@ -154,7 +154,9 @@ install_virtiofsd() { #Install all components that are not assets install_shimv2() { GO_VERSION="$(yq r ${versions_yaml} languages.golang.meta.newest-version)" + RUST_VERSION="$(yq r ${versions_yaml} languages.rust.meta.newest-version)" export GO_VERSION + export RUST_VERSION DESTDIR="${destdir}" PREFIX="${prefix}" "${shimv2_builder}" } @@ -179,7 +181,7 @@ handle_build() { install_shimv2 install_virtiofsd ;; - + cloud-hypervisor) install_clh ;; firecracker) install_firecracker ;; @@ -198,6 +200,7 @@ handle_build() { virtiofsd) install_virtiofsd ;; + *) die "Invalid build target ${build_target}" ;; diff --git a/tools/packaging/static-build/shim-v2/Dockerfile b/tools/packaging/static-build/shim-v2/Dockerfile index 49d0572bffd9..a781bb233552 100644 --- a/tools/packaging/static-build/shim-v2/Dockerfile +++ b/tools/packaging/static-build/shim-v2/Dockerfile @@ -13,10 +13,13 @@ RUN apt-get update && \ gcc \ git \ make \ + musl-tools \ sudo && \ apt-get clean && rm -rf /var/lib/apt/lists/ -COPY install_go.sh /usr/bin/install_go.sh +COPY install_go_rust.sh /usr/bin/install_go_rust.sh ARG GO_VERSION -RUN install_go.sh "${GO_VERSION}" +ARG RUST_VERSION +RUN install_go_rust.sh "${GO_VERSION}" "${RUST_VERSION}" ENV PATH=/usr/local/go/bin:${PATH} +ENV PATH=/root/.cargo/bin/:${PATH} diff --git a/tools/packaging/static-build/shim-v2/build.sh b/tools/packaging/static-build/shim-v2/build.sh index 5b073ff07c03..4d9d01da1d2c 100755 --- a/tools/packaging/static-build/shim-v2/build.sh +++ b/tools/packaging/static-build/shim-v2/build.sh @@ -14,18 +14,29 @@ readonly kernel_builder="${repo_root_dir}/tools/packaging/kernel/build-kernel.sh GO_VERSION=${GO_VERSION} +RUST_VERSION=${RUST_VERSION} DESTDIR=${DESTDIR:-${PWD}} PREFIX=${PREFIX:-/opt/kata} container_image="shim-v2-builder" -sudo docker build --build-arg GO_VERSION="${GO_VERSION}" -t "${container_image}" "${script_dir}" +sudo docker build --build-arg GO_VERSION="${GO_VERSION}" --build-arg RUST_VERSION="${RUST_VERSION}" -t "${container_image}" "${script_dir}" arch=$(uname -m) if [ ${arch} = "ppc64le" ]; then arch="ppc64" fi +sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \ + -w "${repo_root_dir}/src/runtime-rs" \ + "${container_image}" \ + bash -c "git config --global --add safe.directory ${repo_root_dir} && make PREFIX=${PREFIX} QEMUCMD=qemu-system-${arch}" + +sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \ + -w "${repo_root_dir}/src/runtime-rs" \ + "${container_image}" \ + bash -c "git config --global --add safe.directory ${repo_root_dir} && make PREFIX="${PREFIX}" DESTDIR="${DESTDIR}" install" + sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \ -w "${repo_root_dir}/src/runtime" \ "${container_image}" \ diff --git a/tools/packaging/static-build/shim-v2/install_go.sh b/tools/packaging/static-build/shim-v2/install_go_rust.sh similarity index 86% rename from tools/packaging/static-build/shim-v2/install_go.sh rename to tools/packaging/static-build/shim-v2/install_go_rust.sh index 4872dc49cf7c..db192f673b34 100755 --- a/tools/packaging/static-build/shim-v2/install_go.sh +++ b/tools/packaging/static-build/shim-v2/install_go_rust.sh @@ -50,6 +50,13 @@ EOF trap finish EXIT +rust_version=${2:-} +ARCH=${ARCH:-$(uname -m)} +LIBC=${LIBC:-musl} +curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSLf | sh -s -- -y --default-toolchain ${rust_version} -t ${ARCH}-unknown-linux-${LIBC} +source /root/.cargo/env +rustup target add x86_64-unknown-linux-musl + pushd "${tmp_dir}" while getopts "d:fh" opt