mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-30 01:02:33 +00:00
Merge pull request #6756 from arronwy/measured_rootfs
Port Measured rootfs feature from CCv0 branch to main
This commit is contained in:
commit
b50f62ce48
@ -32,6 +32,7 @@ jobs:
|
|||||||
- qemu-snp-experimental
|
- qemu-snp-experimental
|
||||||
- qemu-tdx-experimental
|
- qemu-tdx-experimental
|
||||||
- rootfs-image
|
- rootfs-image
|
||||||
|
- rootfs-image-tdx
|
||||||
- rootfs-initrd
|
- rootfs-initrd
|
||||||
- rootfs-initrd-sev
|
- rootfs-initrd-sev
|
||||||
- shim-v2
|
- shim-v2
|
||||||
|
@ -133,6 +133,10 @@ FIRMWARETDVFVOLUMEPATH :=
|
|||||||
FIRMWARESEVPATH := $(PREFIXDEPS)/share/ovmf/OVMF.fd
|
FIRMWARESEVPATH := $(PREFIXDEPS)/share/ovmf/OVMF.fd
|
||||||
FIRMWARESNPPATH := $(PREFIXDEPS)/share/ovmf/OVMF.fd
|
FIRMWARESNPPATH := $(PREFIXDEPS)/share/ovmf/OVMF.fd
|
||||||
|
|
||||||
|
ROOTMEASURECONFIG ?= ""
|
||||||
|
KERNELPARAMS += $(ROOTMEASURECONFIG)
|
||||||
|
KERNELTDXPARAMS += $(ROOTMEASURECONFIG)
|
||||||
|
|
||||||
# Name of default configuration file the runtime will use.
|
# Name of default configuration file the runtime will use.
|
||||||
CONFIG_FILE = configuration.toml
|
CONFIG_FILE = configuration.toml
|
||||||
|
|
||||||
|
@ -14,5 +14,6 @@ RUN ([ -n "$http_proxy" ] && \
|
|||||||
gdisk \
|
gdisk \
|
||||||
parted \
|
parted \
|
||||||
qemu-img \
|
qemu-img \
|
||||||
|
veritysetup \
|
||||||
xfsprogs && \
|
xfsprogs && \
|
||||||
dnf clean all
|
dnf clean all
|
||||||
|
@ -11,6 +11,7 @@ set -o errexit
|
|||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
DOCKER_RUNTIME=${DOCKER_RUNTIME:-runc}
|
DOCKER_RUNTIME=${DOCKER_RUNTIME:-runc}
|
||||||
|
MEASURED_ROOTFS=${MEASURED_ROOTFS:-no}
|
||||||
|
|
||||||
readonly script_name="${0##*/}"
|
readonly script_name="${0##*/}"
|
||||||
readonly script_dir=$(dirname "$(readlink -f "$0")")
|
readonly script_dir=$(dirname "$(readlink -f "$0")")
|
||||||
@ -185,6 +186,7 @@ build_with_container() {
|
|||||||
--env BLOCK_SIZE="${block_size}" \
|
--env BLOCK_SIZE="${block_size}" \
|
||||||
--env ROOT_FREE_SPACE="${root_free_space}" \
|
--env ROOT_FREE_SPACE="${root_free_space}" \
|
||||||
--env NSDAX_BIN="${nsdax_bin}" \
|
--env NSDAX_BIN="${nsdax_bin}" \
|
||||||
|
--env MEASURED_ROOTFS="${MEASURED_ROOTFS}" \
|
||||||
--env SELINUX="${SELINUX}" \
|
--env SELINUX="${SELINUX}" \
|
||||||
--env DEBUG="${DEBUG}" \
|
--env DEBUG="${DEBUG}" \
|
||||||
-v /dev:/dev \
|
-v /dev:/dev \
|
||||||
@ -391,9 +393,21 @@ create_disk() {
|
|||||||
# Kata runtime expect an image with just one partition
|
# Kata runtime expect an image with just one partition
|
||||||
# The partition is the rootfs content
|
# The partition is the rootfs content
|
||||||
info "Creating partitions"
|
info "Creating partitions"
|
||||||
|
|
||||||
|
if [ "${MEASURED_ROOTFS}" == "yes" ]; then
|
||||||
|
info "Creating partitions with hash device"
|
||||||
|
# The hash data will take less than one percent disk space to store
|
||||||
|
hash_start=$(echo $img_size | awk '{print $1 * 0.99}' |cut -d $(locale decimal_point) -f 1)
|
||||||
|
partition_param="mkpart primary ${fs_type} ${part_start}M ${hash_start}M "
|
||||||
|
partition_param+="mkpart primary ${fs_type} ${hash_start}M ${rootfs_end}M "
|
||||||
|
partition_param+="set 1 boot on"
|
||||||
|
else
|
||||||
|
partition_param="mkpart primary ${fs_type} ${part_start}M ${rootfs_end}M"
|
||||||
|
fi
|
||||||
|
|
||||||
parted -s -a optimal "${image}" -- \
|
parted -s -a optimal "${image}" -- \
|
||||||
mklabel msdos \
|
mklabel msdos \
|
||||||
mkpart primary "${fs_type}" "${part_start}"M "${rootfs_end}"M
|
"${partition_param}"
|
||||||
|
|
||||||
OK "Partitions created"
|
OK "Partitions created"
|
||||||
}
|
}
|
||||||
@ -490,6 +504,12 @@ create_rootfs_image() {
|
|||||||
fsck.ext4 -D -y "${device}p1"
|
fsck.ext4 -D -y "${device}p1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "${MEASURED_ROOTFS}" == "yes" ] && [ -b "${device}p2" ]; then
|
||||||
|
info "veritysetup format rootfs device: ${device}p1, hash device: ${device}p2"
|
||||||
|
local image_dir=$(dirname "${image}")
|
||||||
|
veritysetup format "${device}p1" "${device}p2" > "${image_dir}"/root_hash.txt 2>&1
|
||||||
|
fi
|
||||||
|
|
||||||
losetup -d "${device}"
|
losetup -d "${device}"
|
||||||
rm -rf "${mount_dir}"
|
rm -rf "${mount_dir}"
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ AGENT_VERSION=${AGENT_VERSION:-}
|
|||||||
RUST_VERSION="null"
|
RUST_VERSION="null"
|
||||||
AGENT_BIN=${AGENT_BIN:-kata-agent}
|
AGENT_BIN=${AGENT_BIN:-kata-agent}
|
||||||
AGENT_INIT=${AGENT_INIT:-no}
|
AGENT_INIT=${AGENT_INIT:-no}
|
||||||
|
MEASURED_ROOTFS=${MEASURED_ROOTFS:-no}
|
||||||
KERNEL_MODULES_DIR=${KERNEL_MODULES_DIR:-""}
|
KERNEL_MODULES_DIR=${KERNEL_MODULES_DIR:-""}
|
||||||
OSBUILDER_VERSION="unknown"
|
OSBUILDER_VERSION="unknown"
|
||||||
DOCKER_RUNTIME=${DOCKER_RUNTIME:-runc}
|
DOCKER_RUNTIME=${DOCKER_RUNTIME:-runc}
|
||||||
@ -434,6 +435,7 @@ build_rootfs_distro()
|
|||||||
--env AGENT_INIT="${AGENT_INIT}" \
|
--env AGENT_INIT="${AGENT_INIT}" \
|
||||||
--env ARCH="${ARCH}" \
|
--env ARCH="${ARCH}" \
|
||||||
--env CI="${CI}" \
|
--env CI="${CI}" \
|
||||||
|
--env MEASURED_ROOTFS="${MEASURED_ROOTFS}" \
|
||||||
--env KERNEL_MODULES_DIR="${KERNEL_MODULES_DIR}" \
|
--env KERNEL_MODULES_DIR="${KERNEL_MODULES_DIR}" \
|
||||||
--env LIBC="${LIBC}" \
|
--env LIBC="${LIBC}" \
|
||||||
--env EXTRA_PKGS="${EXTRA_PKGS}" \
|
--env EXTRA_PKGS="${EXTRA_PKGS}" \
|
||||||
|
@ -7,6 +7,7 @@ OS_NAME=ubuntu
|
|||||||
OS_VERSION=${OS_VERSION:-focal}
|
OS_VERSION=${OS_VERSION:-focal}
|
||||||
PACKAGES="chrony iptables dbus"
|
PACKAGES="chrony iptables dbus"
|
||||||
[ "$AGENT_INIT" = no ] && PACKAGES+=" init"
|
[ "$AGENT_INIT" = no ] && PACKAGES+=" init"
|
||||||
|
[ "$MEASURED_ROOTFS" = yes ] && PACKAGES+=" cryptsetup-bin e2fsprogs"
|
||||||
[ "$SECCOMP" = yes ] && PACKAGES+=" libseccomp2"
|
[ "$SECCOMP" = yes ] && PACKAGES+=" libseccomp2"
|
||||||
REPO_URL=http://ports.ubuntu.com
|
REPO_URL=http://ports.ubuntu.com
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ readonly osbuilder_dir="$(cd "${repo_root_dir}/tools/osbuilder" && pwd)"
|
|||||||
export GOPATH=${GOPATH:-${HOME}/go}
|
export GOPATH=${GOPATH:-${HOME}/go}
|
||||||
|
|
||||||
arch_target="$(uname -m)"
|
arch_target="$(uname -m)"
|
||||||
|
final_image_name="kata-containers"
|
||||||
final_initrd_name="kata-containers-initrd"
|
final_initrd_name="kata-containers-initrd"
|
||||||
image_initrd_extension=".img"
|
image_initrd_extension=".img"
|
||||||
|
|
||||||
@ -54,9 +55,12 @@ build_image() {
|
|||||||
IMG_OS_VERSION="${img_os_version}" \
|
IMG_OS_VERSION="${img_os_version}" \
|
||||||
ROOTFS_BUILD_DEST="${builddir}/rootfs-image"
|
ROOTFS_BUILD_DEST="${builddir}/rootfs-image"
|
||||||
mv -f "kata-containers.img" "${install_dir}/${image_name}"
|
mv -f "kata-containers.img" "${install_dir}/${image_name}"
|
||||||
|
if [ -e "root_hash.txt" ]; then
|
||||||
|
cp root_hash.txt "${install_dir}/"
|
||||||
|
fi
|
||||||
(
|
(
|
||||||
cd "${install_dir}"
|
cd "${install_dir}"
|
||||||
ln -sf "${image_name}" kata-containers.img
|
ln -sf "${image_name}" "${final_image_name}${image_initrd_extension}"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,6 +87,7 @@ main() {
|
|||||||
image_type=image
|
image_type=image
|
||||||
destdir="$PWD"
|
destdir="$PWD"
|
||||||
prefix="/opt/kata"
|
prefix="/opt/kata"
|
||||||
|
image_suffix=""
|
||||||
image_initrd_suffix=""
|
image_initrd_suffix=""
|
||||||
builddir="${PWD}"
|
builddir="${PWD}"
|
||||||
while getopts "h-:" opt; do
|
while getopts "h-:" opt; do
|
||||||
@ -110,6 +115,11 @@ main() {
|
|||||||
initrd_os_version=$(get_from_kata_deps "assets.initrd.architecture.${arch_target}.sev.version")
|
initrd_os_version=$(get_from_kata_deps "assets.initrd.architecture.${arch_target}.sev.version")
|
||||||
initrd_name="kata-${initrd_distro}-${initrd_os_version}-${image_initrd_suffix}.${image_type}"
|
initrd_name="kata-${initrd_distro}-${initrd_os_version}-${image_initrd_suffix}.${image_type}"
|
||||||
final_initrd_name="${final_initrd_name}-${image_initrd_suffix}"
|
final_initrd_name="${final_initrd_name}-${image_initrd_suffix}"
|
||||||
|
elif [ "${image_initrd_suffix}" == "tdx" ]; then
|
||||||
|
img_distro=$(get_from_kata_deps "assets.image.architecture.${arch_target}.name")
|
||||||
|
img_os_version=$(get_from_kata_deps "assets.image.architecture.${arch_target}.version")
|
||||||
|
image_name="kata-${img_distro}-${img_os_version}-${image_initrd_suffix}.${image_type}"
|
||||||
|
final_image_name="${final_image_name}-${image_initrd_suffix}"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
prefix=*)
|
prefix=*)
|
||||||
|
@ -42,6 +42,7 @@ all: serial-targets \
|
|||||||
serial-targets:
|
serial-targets:
|
||||||
${MAKE} -f $(MK_PATH) -j 1 V= \
|
${MAKE} -f $(MK_PATH) -j 1 V= \
|
||||||
rootfs-image-tarball \
|
rootfs-image-tarball \
|
||||||
|
rootfs-image-tdx-tarball \
|
||||||
rootfs-initrd-sev-tarball \
|
rootfs-initrd-sev-tarball \
|
||||||
rootfs-initrd-tarball \
|
rootfs-initrd-tarball \
|
||||||
cloud-hypervisor-tarball
|
cloud-hypervisor-tarball
|
||||||
@ -100,6 +101,9 @@ qemu-tdx-experimental-tarball:
|
|||||||
rootfs-image-tarball:
|
rootfs-image-tarball:
|
||||||
${MAKE} $@-build
|
${MAKE} $@-build
|
||||||
|
|
||||||
|
rootfs-image-tdx-tarball: kernel-tdx-experimental-tarball
|
||||||
|
${MAKE} $@-build
|
||||||
|
|
||||||
rootfs-initrd-sev-tarball: kernel-sev-tarball
|
rootfs-initrd-sev-tarball: kernel-sev-tarball
|
||||||
${MAKE} $@-build
|
${MAKE} $@-build
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ docker run \
|
|||||||
--env SHIM_V2_CONTAINER_BUILDER="${SHIM_V2_CONTAINER_BUILDER:-}" \
|
--env SHIM_V2_CONTAINER_BUILDER="${SHIM_V2_CONTAINER_BUILDER:-}" \
|
||||||
--env TDSHIM_CONTAINER_BUILDER="${TDSHIM_CONTAINER_BUILDER:-}" \
|
--env TDSHIM_CONTAINER_BUILDER="${TDSHIM_CONTAINER_BUILDER:-}" \
|
||||||
--env VIRTIOFSD_CONTAINER_BUILDER="${VIRTIOFSD_CONTAINER_BUILDER:-}" \
|
--env VIRTIOFSD_CONTAINER_BUILDER="${VIRTIOFSD_CONTAINER_BUILDER:-}" \
|
||||||
|
--env MEASURED_ROOTFS="${MEASURED_ROOTFS:-}" \
|
||||||
--rm \
|
--rm \
|
||||||
-w ${script_dir} \
|
-w ${script_dir} \
|
||||||
build-kata-deploy "${kata_deploy_create}" $@
|
build-kata-deploy "${kata_deploy_create}" $@
|
||||||
|
@ -24,6 +24,7 @@ readonly versions_yaml="${repo_root_dir}/versions.yaml"
|
|||||||
|
|
||||||
readonly clh_builder="${static_build_dir}/cloud-hypervisor/build-static-clh.sh"
|
readonly clh_builder="${static_build_dir}/cloud-hypervisor/build-static-clh.sh"
|
||||||
readonly firecracker_builder="${static_build_dir}/firecracker/build-static-firecracker.sh"
|
readonly firecracker_builder="${static_build_dir}/firecracker/build-static-firecracker.sh"
|
||||||
|
readonly initramfs_builder="${static_build_dir}/initramfs/build.sh"
|
||||||
readonly kernel_builder="${static_build_dir}/kernel/build.sh"
|
readonly kernel_builder="${static_build_dir}/kernel/build.sh"
|
||||||
readonly ovmf_builder="${static_build_dir}/ovmf/build.sh"
|
readonly ovmf_builder="${static_build_dir}/ovmf/build.sh"
|
||||||
readonly qemu_builder="${static_build_dir}/qemu/build-static-qemu.sh"
|
readonly qemu_builder="${static_build_dir}/qemu/build-static-qemu.sh"
|
||||||
@ -38,6 +39,7 @@ readonly jenkins_url="http://jenkins.katacontainers.io"
|
|||||||
readonly cached_artifacts_path="lastSuccessfulBuild/artifact/artifacts"
|
readonly cached_artifacts_path="lastSuccessfulBuild/artifact/artifacts"
|
||||||
|
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
|
MEASURED_ROOTFS=${MEASURED_ROOTFS:-no}
|
||||||
|
|
||||||
workdir="${WORKDIR:-$PWD}"
|
workdir="${WORKDIR:-$PWD}"
|
||||||
|
|
||||||
@ -93,6 +95,7 @@ options:
|
|||||||
qemu-snp-experimental
|
qemu-snp-experimental
|
||||||
qemu-tdx-experimental
|
qemu-tdx-experimental
|
||||||
rootfs-image
|
rootfs-image
|
||||||
|
rootfs-image-tdx
|
||||||
rootfs-initrd
|
rootfs-initrd
|
||||||
rootfs-initrd-sev
|
rootfs-initrd-sev
|
||||||
shim-v2
|
shim-v2
|
||||||
@ -133,8 +136,10 @@ install_cached_tarball_component() {
|
|||||||
|
|
||||||
#Install guest image
|
#Install guest image
|
||||||
install_image() {
|
install_image() {
|
||||||
local jenkins="${jenkins_url}/job/kata-containers-main-rootfs-image-$(uname -m)/${cached_artifacts_path}"
|
local image_type="${1:-"image"}"
|
||||||
local component="rootfs-image"
|
local initrd_suffix="${2:-""}"
|
||||||
|
local jenkins="${jenkins_url}/job/kata-containers-main-rootfs-${image_type}-$(uname -m)/${cached_artifacts_path}"
|
||||||
|
local component="rootfs-${image_type}"
|
||||||
|
|
||||||
local osbuilder_last_commit="$(get_last_modification "${repo_root_dir}/tools/osbuilder")"
|
local osbuilder_last_commit="$(get_last_modification "${repo_root_dir}/tools/osbuilder")"
|
||||||
local guest_image_last_commit="$(get_last_modification "${repo_root_dir}/tools/packaging/guest-image")"
|
local guest_image_last_commit="$(get_last_modification "${repo_root_dir}/tools/packaging/guest-image")"
|
||||||
@ -154,7 +159,12 @@ install_image() {
|
|||||||
&& return 0
|
&& return 0
|
||||||
|
|
||||||
info "Create image"
|
info "Create image"
|
||||||
"${rootfs_builder}" --imagetype=image --prefix="${prefix}" --destdir="${destdir}"
|
"${rootfs_builder}" --imagetype=image --prefix="${prefix}" --destdir="${destdir}" --image_initrd_suffix="${initrd_suffix}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Install guest image for tdx
|
||||||
|
install_image_tdx() {
|
||||||
|
install_image "image-tdx" "tdx"
|
||||||
}
|
}
|
||||||
|
|
||||||
#Install guest initrd
|
#Install guest initrd
|
||||||
@ -241,6 +251,11 @@ install_kernel_helper() {
|
|||||||
|
|
||||||
install_cached_kernel_tarball_component ${kernel_name} ${module_dir} && return 0
|
install_cached_kernel_tarball_component ${kernel_name} ${module_dir} && return 0
|
||||||
|
|
||||||
|
if [ "${MEASURED_ROOTFS}" == "yes" ]; then
|
||||||
|
info "build initramfs for cc kernel"
|
||||||
|
"${initramfs_builder}"
|
||||||
|
fi
|
||||||
|
|
||||||
info "build ${kernel_name}"
|
info "build ${kernel_name}"
|
||||||
info "Kernel version ${kernel_version}"
|
info "Kernel version ${kernel_version}"
|
||||||
DESTDIR="${destdir}" PREFIX="${prefix}" "${kernel_builder}" -v "${kernel_version}" ${extra_cmd}
|
DESTDIR="${destdir}" PREFIX="${prefix}" "${kernel_builder}" -v "${kernel_version}" ${extra_cmd}
|
||||||
@ -303,6 +318,8 @@ install_kernel_experimental() {
|
|||||||
install_kernel_tdx_experimental() {
|
install_kernel_tdx_experimental() {
|
||||||
local kernel_url="$(get_from_kata_deps assets.kernel-tdx-experimental.url)"
|
local kernel_url="$(get_from_kata_deps assets.kernel-tdx-experimental.url)"
|
||||||
|
|
||||||
|
export MEASURED_ROOTFS=yes
|
||||||
|
|
||||||
install_kernel_helper \
|
install_kernel_helper \
|
||||||
"assets.kernel-tdx-experimental.version" \
|
"assets.kernel-tdx-experimental.version" \
|
||||||
"kernel-tdx-experimental" \
|
"kernel-tdx-experimental" \
|
||||||
@ -478,7 +495,19 @@ install_shimv2() {
|
|||||||
|
|
||||||
export GO_VERSION
|
export GO_VERSION
|
||||||
export RUST_VERSION
|
export RUST_VERSION
|
||||||
DESTDIR="${destdir}" PREFIX="${prefix}" "${shimv2_builder}"
|
|
||||||
|
if [ "${MEASURED_ROOTFS}" == "yes" ]; then
|
||||||
|
extra_opts="DEFSERVICEOFFLOAD=true"
|
||||||
|
if [ -f "${repo_root_dir}/tools/osbuilder/root_hash.txt" ]; then
|
||||||
|
root_hash=$(sudo sed -e 's/Root hash:\s*//g;t;d' "${repo_root_dir}/tools/osbuilder//root_hash.txt")
|
||||||
|
root_measure_config="rootfs_verity.scheme=dm-verity rootfs_verity.hash=${root_hash}"
|
||||||
|
extra_opts+=" ROOTMEASURECONFIG=\"${root_measure_config}\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
DESTDIR="${destdir}" PREFIX="${prefix}" EXTRA_OPTS="${extra_opts}" "${shimv2_builder}"
|
||||||
|
else
|
||||||
|
DESTDIR="${destdir}" PREFIX="${prefix}" "${shimv2_builder}"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
install_ovmf() {
|
install_ovmf() {
|
||||||
@ -581,6 +610,8 @@ handle_build() {
|
|||||||
|
|
||||||
rootfs-image) install_image ;;
|
rootfs-image) install_image ;;
|
||||||
|
|
||||||
|
rootfs-image-tdx) install_image_tdx ;;
|
||||||
|
|
||||||
rootfs-initrd) install_initrd ;;
|
rootfs-initrd) install_initrd ;;
|
||||||
|
|
||||||
rootfs-initrd-sev) install_initrd_sev ;;
|
rootfs-initrd-sev) install_initrd_sev ;;
|
||||||
|
@ -31,6 +31,7 @@ readonly default_kernel_config_dir="${script_dir}/configs"
|
|||||||
# Default path to search for kernel config fragments
|
# Default path to search for kernel config fragments
|
||||||
readonly default_config_frags_dir="${script_dir}/configs/fragments"
|
readonly default_config_frags_dir="${script_dir}/configs/fragments"
|
||||||
readonly default_config_whitelist="${script_dir}/configs/fragments/whitelist.conf"
|
readonly default_config_whitelist="${script_dir}/configs/fragments/whitelist.conf"
|
||||||
|
readonly default_initramfs="${script_dir}/initramfs.cpio.gz"
|
||||||
# GPU vendor
|
# GPU vendor
|
||||||
readonly GV_INTEL="intel"
|
readonly GV_INTEL="intel"
|
||||||
readonly GV_NVIDIA="nvidia"
|
readonly GV_NVIDIA="nvidia"
|
||||||
@ -64,6 +65,8 @@ kernel_url=""
|
|||||||
#Linux headers for GPU guest fs module building
|
#Linux headers for GPU guest fs module building
|
||||||
linux_headers=""
|
linux_headers=""
|
||||||
|
|
||||||
|
MEASURED_ROOTFS=${MEASURED_ROOTFS:-no}
|
||||||
|
|
||||||
packaging_scripts_dir="${script_dir}/../scripts"
|
packaging_scripts_dir="${script_dir}/../scripts"
|
||||||
source "${packaging_scripts_dir}/lib.sh"
|
source "${packaging_scripts_dir}/lib.sh"
|
||||||
|
|
||||||
@ -269,6 +272,18 @@ get_kernel_frag_path() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "${MEASURED_ROOTFS}" == "yes" ]; then
|
||||||
|
info "Enabling config for confidential guest trust storage protection"
|
||||||
|
local cryptsetup_configs="$(ls ${common_path}/confidential_containers/cryptsetup.conf)"
|
||||||
|
all_configs="${all_configs} ${cryptsetup_configs}"
|
||||||
|
|
||||||
|
if [ -f "${default_initramfs}" ]; then
|
||||||
|
info "Enabling config for confidential guest measured boot"
|
||||||
|
local initramfs_configs="$(ls ${common_path}/confidential_containers/initramfs.conf)"
|
||||||
|
all_configs="${all_configs} ${initramfs_configs}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "${conf_guest}" != "" ]];then
|
if [[ "${conf_guest}" != "" ]];then
|
||||||
info "Enabling config for '${conf_guest}' confidential guest protection"
|
info "Enabling config for '${conf_guest}' confidential guest protection"
|
||||||
local conf_configs="$(ls ${arch_path}/${conf_guest}/*.conf)"
|
local conf_configs="$(ls ${arch_path}/${conf_guest}/*.conf)"
|
||||||
@ -418,6 +433,11 @@ setup_kernel() {
|
|||||||
[ -n "${hypervisor_target}" ] || hypervisor_target="kvm"
|
[ -n "${hypervisor_target}" ] || hypervisor_target="kvm"
|
||||||
[ -n "${kernel_config_path}" ] || kernel_config_path=$(get_default_kernel_config "${kernel_version}" "${hypervisor_target}" "${arch_target}" "${kernel_path}")
|
[ -n "${kernel_config_path}" ] || kernel_config_path=$(get_default_kernel_config "${kernel_version}" "${hypervisor_target}" "${arch_target}" "${kernel_path}")
|
||||||
|
|
||||||
|
if [ "${MEASURED_ROOTFS}" == "yes" ] && [ -f "${default_initramfs}" ]; then
|
||||||
|
info "Copying initramfs from: ${default_initramfs}"
|
||||||
|
cp "${default_initramfs}" ./
|
||||||
|
fi
|
||||||
|
|
||||||
info "Copying config file from: ${kernel_config_path}"
|
info "Copying config file from: ${kernel_config_path}"
|
||||||
cp "${kernel_config_path}" ./.config
|
cp "${kernel_config_path}" ./.config
|
||||||
make oldconfig
|
make oldconfig
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
CONFIG_MD=y
|
||||||
|
CONFIG_BLK_DEV_DM_BUILTIN=y
|
||||||
|
CONFIG_BLK_DEV_DM=y
|
||||||
|
CONFIG_DM_CRYPT=y
|
||||||
|
CONFIG_DM_VERITY=y
|
||||||
|
CONFIG_DM_INTEGRITY=y
|
||||||
|
CONFIG_CRYPTO_AEAD=y
|
||||||
|
CONFIG_CRYPTO_AEAD2=y
|
||||||
|
CONFIG_CRYPTO_AKCIPHER2=y
|
||||||
|
CONFIG_CRYPTO_KPP2=y
|
||||||
|
CONFIG_CRYPTO_MANAGER=y
|
||||||
|
CONFIG_CRYPTO_MANAGER2=y
|
||||||
|
CONFIG_CRYPTO_USER=y
|
||||||
|
CONFIG_CRYPTO_NULL=y
|
||||||
|
CONFIG_CRYPTO_NULL2=y
|
||||||
|
CONFIG_CRYPTO_CRYPTD=y
|
||||||
|
CONFIG_CRYPTO_AUTHENC=y
|
||||||
|
CONFIG_CRYPTO_CBC=y
|
||||||
|
CONFIG_CRYPTO_ESSIV=y
|
||||||
|
CONFIG_CRYPTO_XTS=y
|
||||||
|
CONFIG_CRYPTO_HMAC=y
|
@ -0,0 +1 @@
|
|||||||
|
CONFIG_INITRAMFS_SOURCE="initramfs.cpio.gz"
|
@ -0,0 +1,3 @@
|
|||||||
|
# x86 cryptographic instructions to improve AES encryption and SHA256 hashing.
|
||||||
|
CONFIG_CRYPTO_SHA256_SSSE3=y
|
||||||
|
CONFIG_CRYPTO_AES_NI_INTEL=y
|
@ -1 +1 @@
|
|||||||
107
|
108
|
||||||
|
38
tools/packaging/static-build/initramfs/Dockerfile
Normal file
38
tools/packaging/static-build/initramfs/Dockerfile
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Copyright (c) 2022 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
from ubuntu:20.04
|
||||||
|
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
ENV TZ=UTC
|
||||||
|
RUN apt-get update &&\
|
||||||
|
apt-get --no-install-recommends install -y software-properties-common &&\
|
||||||
|
add-apt-repository ppa:git-core/ppa -y &&\
|
||||||
|
apt-get update && apt-get upgrade -y && \
|
||||||
|
apt-get --no-install-recommends install -y \
|
||||||
|
apt-utils \
|
||||||
|
asciidoctor \
|
||||||
|
autoconf \
|
||||||
|
autopoint \
|
||||||
|
automake \
|
||||||
|
busybox-static \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
gcc \
|
||||||
|
gettext \
|
||||||
|
git \
|
||||||
|
libaio-dev \
|
||||||
|
libblkid-dev \
|
||||||
|
libselinux1-dev \
|
||||||
|
libtool \
|
||||||
|
libpopt-dev \
|
||||||
|
libjson-c-dev \
|
||||||
|
libssl-dev \
|
||||||
|
make \
|
||||||
|
ninja-build \
|
||||||
|
pkg-config \
|
||||||
|
uuid-dev \
|
||||||
|
libseccomp-dev \
|
||||||
|
libseccomp2 \
|
||||||
|
zlib1g-dev &&\
|
||||||
|
apt-get clean && rm -rf /var/lib/apt/lists/
|
55
tools/packaging/static-build/initramfs/build-initramfs.sh
Executable file
55
tools/packaging/static-build/initramfs/build-initramfs.sh
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2022 Intel
|
||||||
|
#
|
||||||
|
# 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"
|
||||||
|
install_dir="${1:-.}"
|
||||||
|
|
||||||
|
cryptsetup_repo="${cryptsetup_repo:-}"
|
||||||
|
cryptsetup_version="${cryptsetup_version:-}"
|
||||||
|
lvm2_repo="${lvm2_repo:-}"
|
||||||
|
lvm2_version="${lvm2_version:-}"
|
||||||
|
|
||||||
|
[ -n "${cryptsetup_repo}" ] || die "Failed to get cryptsetup repo"
|
||||||
|
[ -n "${cryptsetup_version}" ] || die "Failed to get cryptsetup version"
|
||||||
|
[ -n "${lvm2_repo}" ] || die "Failed to get lvm2 repo"
|
||||||
|
[ -n "${lvm2_version}" ] || die "Failed to get lvm2 version"
|
||||||
|
|
||||||
|
build_root=$(mktemp -d)
|
||||||
|
pushd ${build_root}
|
||||||
|
|
||||||
|
info "Build ${lvm2_repo} version: ${lvm2_version}"
|
||||||
|
git clone --depth 1 --branch "${lvm2_version}" "${lvm2_repo}" lvm2
|
||||||
|
pushd lvm2
|
||||||
|
./configure --enable-static_link --disable-selinux
|
||||||
|
make && make install
|
||||||
|
cp ./libdm/libdevmapper.pc /usr/lib/pkgconfig/devmapper.pc
|
||||||
|
popd #lvm2
|
||||||
|
|
||||||
|
info "Build ${cryptsetup_repo} version: ${cryptsetup_version}"
|
||||||
|
git clone --depth 1 --branch "${cryptsetup_version}" "${cryptsetup_repo}" cryptsetup
|
||||||
|
pushd cryptsetup
|
||||||
|
./autogen.sh
|
||||||
|
./configure --enable-static --enable-static-cryptsetup --disable-udev --disable-external-tokens --disable-ssh-token
|
||||||
|
make && make install
|
||||||
|
strip /usr/sbin/veritysetup.static
|
||||||
|
popd #cryptsetup
|
||||||
|
|
||||||
|
info "Build gen_init_cpio tool"
|
||||||
|
git clone --depth 1 --filter=blob:none --sparse https://github.com/torvalds/linux.git
|
||||||
|
pushd linux
|
||||||
|
git sparse-checkout add usr && cd usr && make gen_init_cpio
|
||||||
|
install gen_init_cpio /usr/sbin/
|
||||||
|
popd #linux
|
||||||
|
|
||||||
|
popd #${build_root}
|
||||||
|
|
||||||
|
install "${script_dir}/init.sh" /usr/sbin/
|
||||||
|
gen_init_cpio "${script_dir}/initramfs.list" | gzip -9 -n > "${install_dir}"/initramfs.cpio.gz
|
46
tools/packaging/static-build/initramfs/build.sh
Executable file
46
tools/packaging/static-build/initramfs/build.sh
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2022 Intel
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
repo_root_dir="$(cd "${script_dir}/../../../.." && pwd)"
|
||||||
|
readonly initramfs_builder="${script_dir}/build-initramfs.sh"
|
||||||
|
readonly default_install_dir="$(cd "${script_dir}/../../kernel" && pwd)"
|
||||||
|
|
||||||
|
source "${script_dir}/../../scripts/lib.sh"
|
||||||
|
|
||||||
|
container_image="kata-initramfs-builder"
|
||||||
|
kata_version="${kata_version:-}"
|
||||||
|
cryptsetup_repo="${cryptsetup_repo:-}"
|
||||||
|
cryptsetup_version="${cryptsetup_version:-}"
|
||||||
|
lvm2_repo="${lvm2_repo:-}"
|
||||||
|
lvm2_version="${lvm2_version:-}"
|
||||||
|
package_output_dir="${package_output_dir:-}"
|
||||||
|
|
||||||
|
[ -n "${cryptsetup_repo}" ] || cryptsetup_repo=$(get_from_kata_deps "externals.cryptsetup.url" "${kata_version}")
|
||||||
|
[ -n "${cryptsetup_version}" ] || cryptsetup_version=$(get_from_kata_deps "externals.cryptsetup.version" "${kata_version}")
|
||||||
|
[ -n "${lvm2_repo}" ] || lvm2_repo=$(get_from_kata_deps "externals.lvm2.url" "${kata_version}")
|
||||||
|
[ -n "${lvm2_version}" ] || lvm2_version=$(get_from_kata_deps "externals.lvm2.version" "${kata_version}")
|
||||||
|
|
||||||
|
[ -n "${cryptsetup_repo}" ] || die "Failed to get cryptsetup repo"
|
||||||
|
[ -n "${cryptsetup_version}" ] || die "Failed to get cryptsetup version"
|
||||||
|
[ -n "${lvm2_repo}" ] || die "Failed to get lvm2 repo"
|
||||||
|
[ -n "${lvm2_version}" ] || die "Failed to get lvm2 version"
|
||||||
|
|
||||||
|
sudo docker build \
|
||||||
|
-t "${container_image}" "${script_dir}"
|
||||||
|
|
||||||
|
sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \
|
||||||
|
-w "${PWD}" \
|
||||||
|
--env cryptsetup_repo="${cryptsetup_repo}" \
|
||||||
|
--env cryptsetup_version="${cryptsetup_version}" \
|
||||||
|
--env lvm2_repo="${lvm2_repo}" \
|
||||||
|
--env lvm2_version="${lvm2_version}" \
|
||||||
|
"${container_image}" \
|
||||||
|
bash -c "${initramfs_builder} ${default_install_dir}"
|
44
tools/packaging/static-build/initramfs/init.sh
Executable file
44
tools/packaging/static-build/initramfs/init.sh
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2022 Intel
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
[ -d /dev ] || mkdir -m 0755 /dev
|
||||||
|
[ -d /root ] || mkdir -m 0700 /root
|
||||||
|
[ -d /sys ] || mkdir /sys
|
||||||
|
[ -d /proc ] || mkdir /proc
|
||||||
|
[ -d /mnt ] || mkdir /mnt
|
||||||
|
[ -d /tmp ] || mkdir /tmp
|
||||||
|
|
||||||
|
mount -t sysfs -o nodev,noexec,nosuid sysfs /sys
|
||||||
|
mount -t proc -o nodev,noexec,nosuid proc /proc
|
||||||
|
|
||||||
|
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
|
||||||
|
mdev -s
|
||||||
|
|
||||||
|
get_option() {
|
||||||
|
local value
|
||||||
|
value=" $(cat /proc/cmdline) "
|
||||||
|
value="${value##* ${1}=}"
|
||||||
|
value="${value%% *}"
|
||||||
|
[ "${value}" != "" ] && echo "${value}"
|
||||||
|
}
|
||||||
|
|
||||||
|
rootfs_verifier=$(get_option rootfs_verity.scheme)
|
||||||
|
rootfs_hash=$(get_option rootfs_verity.hash)
|
||||||
|
root_device=$(get_option root)
|
||||||
|
hash_device=${root_device%?}2
|
||||||
|
|
||||||
|
if [ -e ${root_device} ] && [ -e ${hash_device} ] && [ "${rootfs_verifier}" = "dm-verity" ]
|
||||||
|
then
|
||||||
|
veritysetup open "${root_device}" root "${hash_device}" "${rootfs_hash}"
|
||||||
|
mount /dev/mapper/root /mnt
|
||||||
|
else
|
||||||
|
echo "No LUKS device found"
|
||||||
|
mount "${root_device}" /mnt
|
||||||
|
fi
|
||||||
|
|
||||||
|
umount /proc
|
||||||
|
umount /sys
|
||||||
|
exec switch_root /mnt /sbin/init
|
21
tools/packaging/static-build/initramfs/initramfs.list
Normal file
21
tools/packaging/static-build/initramfs/initramfs.list
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Copyright (c) 2022 Intel Corporation
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
# initramfs to setup verified boot for rootfs
|
||||||
|
dir /dev 0755 0 0
|
||||||
|
dir /root 0700 0 0
|
||||||
|
dir /sbin 0755 0 0
|
||||||
|
dir /bin 0755 0 0
|
||||||
|
dir /run 0755 0 0
|
||||||
|
dir /mnt 0755 0 0
|
||||||
|
file /init /usr/sbin/init.sh 0755 0 0
|
||||||
|
file /sbin/busybox /usr/bin/busybox 0755 0 0
|
||||||
|
file /sbin/veritysetup /usr/sbin/veritysetup.static 0755 0 0
|
||||||
|
slink /bin/sh /sbin/busybox 0755 0 0
|
||||||
|
slink /sbin/mount /sbin/busybox 0755 0 0
|
||||||
|
slink /bin/mkdir /sbin/busybox 0755 0 0
|
||||||
|
slink /sbin/mdev /sbin/busybox 0755 0 0
|
||||||
|
slink /sbin/switch_root /sbin/busybox 0755 0 0
|
||||||
|
slink /sbin/umount /sbin/busybox 0755 0 0
|
||||||
|
slink /sbin/cat /sbin/busybox 0755 0 0
|
@ -25,6 +25,7 @@ sudo docker pull ${container_image} || \
|
|||||||
|
|
||||||
sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \
|
sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \
|
||||||
-w "${PWD}" \
|
-w "${PWD}" \
|
||||||
|
--env MEASURED_ROOTFS="${MEASURED_ROOTFS:-}" \
|
||||||
"${container_image}" \
|
"${container_image}" \
|
||||||
bash -c "${kernel_builder} $* setup"
|
bash -c "${kernel_builder} $* setup"
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ DESTDIR=${DESTDIR:-${PWD}}
|
|||||||
PREFIX=${PREFIX:-/opt/kata}
|
PREFIX=${PREFIX:-/opt/kata}
|
||||||
container_image="${SHIM_V2_CONTAINER_BUILDER:-$(get_shim_v2_image_name)}"
|
container_image="${SHIM_V2_CONTAINER_BUILDER:-$(get_shim_v2_image_name)}"
|
||||||
|
|
||||||
|
EXTRA_OPTS="${EXTRA_OPTS:-""}"
|
||||||
|
|
||||||
sudo docker pull ${container_image} || \
|
sudo docker pull ${container_image} || \
|
||||||
(sudo docker build \
|
(sudo docker build \
|
||||||
--build-arg GO_VERSION="${GO_VERSION}" \
|
--build-arg GO_VERSION="${GO_VERSION}" \
|
||||||
@ -47,12 +49,12 @@ sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \
|
|||||||
sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \
|
sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \
|
||||||
-w "${repo_root_dir}/src/runtime" \
|
-w "${repo_root_dir}/src/runtime" \
|
||||||
"${container_image}" \
|
"${container_image}" \
|
||||||
bash -c "git config --global --add safe.directory ${repo_root_dir} && make PREFIX=${PREFIX} QEMUCMD=qemu-system-${arch}"
|
bash -c "git config --global --add safe.directory ${repo_root_dir} && make PREFIX=${PREFIX} QEMUCMD=qemu-system-${arch} ${EXTRA_OPTS}"
|
||||||
|
|
||||||
sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \
|
sudo docker run --rm -i -v "${repo_root_dir}:${repo_root_dir}" \
|
||||||
-w "${repo_root_dir}/src/runtime" \
|
-w "${repo_root_dir}/src/runtime" \
|
||||||
"${container_image}" \
|
"${container_image}" \
|
||||||
bash -c "git config --global --add safe.directory ${repo_root_dir} && make PREFIX="${PREFIX}" DESTDIR="${DESTDIR}" install"
|
bash -c "git config --global --add safe.directory ${repo_root_dir} && make PREFIX="${PREFIX}" DESTDIR="${DESTDIR}" ${EXTRA_OPTS} install"
|
||||||
|
|
||||||
for vmm in ${VMM_CONFIGS}; do
|
for vmm in ${VMM_CONFIGS}; do
|
||||||
config_file="${DESTDIR}/${PREFIX}/share/defaults/kata-containers/configuration-${vmm}.toml"
|
config_file="${DESTDIR}/${PREFIX}/share/defaults/kata-containers/configuration-${vmm}.toml"
|
||||||
|
@ -228,11 +228,21 @@ externals:
|
|||||||
url: "https://github.com/kubernetes-sigs/cri-tools"
|
url: "https://github.com/kubernetes-sigs/cri-tools"
|
||||||
version: "1.23.0"
|
version: "1.23.0"
|
||||||
|
|
||||||
|
cryptsetup:
|
||||||
|
description: "A utility used to setup disk encryption, integrity protection"
|
||||||
|
url: "https://gitlab.com/cryptsetup/cryptsetup"
|
||||||
|
version: "v2.5.0"
|
||||||
|
|
||||||
gperf:
|
gperf:
|
||||||
description: "GNU gperf is a perfect hash function generator"
|
description: "GNU gperf is a perfect hash function generator"
|
||||||
url: "http://ftp.gnu.org/pub/gnu/gperf/"
|
url: "http://ftp.gnu.org/pub/gnu/gperf/"
|
||||||
version: "3.1"
|
version: "3.1"
|
||||||
|
|
||||||
|
lvm2:
|
||||||
|
description: "LVM2 and device-mapper tools and libraries"
|
||||||
|
url: "https://github.com/lvmteam/lvm2"
|
||||||
|
version: "v2_03_16"
|
||||||
|
|
||||||
kubernetes:
|
kubernetes:
|
||||||
description: "Kubernetes project container manager"
|
description: "Kubernetes project container manager"
|
||||||
url: "https://github.com/kubernetes/kubernetes"
|
url: "https://github.com/kubernetes/kubernetes"
|
||||||
|
Loading…
Reference in New Issue
Block a user