From c9b5bde30b23ed7269666f296a378e634aa9a4a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Thu, 28 Jul 2022 21:15:35 +0200 Subject: [PATCH] versions: Track and build TDVF MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TDVF is the firmware used by QEMU to start TDX capable VMs. Let's start tracking it as it'll become part of the Confidential Containers sooner or later. TDVF lives in the public https://github.com/tianocore/edk2-staging repo and we're using as its version tags that are consumed internally at Intel. Fixes: #4624 Signed-off-by: Fabiano FidĂȘncio --- tools/packaging/static-build/ovmf/Dockerfile | 1 + .../packaging/static-build/ovmf/build-ovmf.sh | 32 ++++++++++++++++--- tools/packaging/static-build/ovmf/build.sh | 10 +++++- versions.yaml | 6 ++++ 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/tools/packaging/static-build/ovmf/Dockerfile b/tools/packaging/static-build/ovmf/Dockerfile index cffeb2ffb..a9a148a75 100644 --- a/tools/packaging/static-build/ovmf/Dockerfile +++ b/tools/packaging/static-build/ovmf/Dockerfile @@ -17,5 +17,6 @@ RUN apt-get update && \ nasm \ python \ python3 \ + python3-distutils \ uuid-dev && \ apt-get clean && rm -rf /var/lib/lists/ diff --git a/tools/packaging/static-build/ovmf/build-ovmf.sh b/tools/packaging/static-build/ovmf/build-ovmf.sh index 906293ee5..fe3925b1c 100755 --- a/tools/packaging/static-build/ovmf/build-ovmf.sh +++ b/tools/packaging/static-build/ovmf/build-ovmf.sh @@ -54,19 +54,41 @@ if [ "${ovmf_build}" == "sev" ]; then fi info "Building ovmf" -build -b "${build_target}" -t "${toolchain}" -a "${architecture}" -p "${ovmf_package}" +build_cmd="build -b ${build_target} -t ${toolchain} -a ${architecture} -p ${ovmf_package}" +if [ "${ovmf_build}" == "tdx" ]; then + build_cmd+=" -D DEBUG_ON_SERIAL_PORT=TRUE -D TDX_MEM_PARTIAL_ACCEPT=512 -D TDX_EMULATION_ENABLE=FALSE -D TDX_ACCEPT_PAGE_SIZE=2M" +fi + +eval "${build_cmd}" info "Done Building" -build_path="Build/${package_output_dir}/${build_target}_${toolchain}/FV/OVMF.fd" -stat "${build_path}" +build_path_target_toolchain="Build/${package_output_dir}/${build_target}_${toolchain}" +build_path_fv="${build_path_target_toolchain}/FV" +stat "${build_path_fv}/OVMF.fd" +if [ "${ovmf_build}" == "tdx" ]; then + build_path_arch="${build_path_target_toolchain}/X64" + stat "${build_path_fv}/OVMF_CODE.fd" + stat "${build_path_fv}/OVMF_VARS.fd" + stat "${build_path_arch}/DumpTdxEventLog.efi" +fi #need to leave tmp dir popd info "Install fd to destdir" -mkdir -p "$DESTDIR/$PREFIX/share/ovmf" -cp $build_root/$ovmf_dir/"${build_path}" "$DESTDIR/$PREFIX/share/ovmf" +install_dir="${DESTDIR}/${PREFIX}/share/ovmf" +if [ "${ovmf_build}" == "tdx" ]; then + install_dir="$DESTDIR/$PREFIX/share/tdvf" +fi + +mkdir -p "${install_dir}" +install $build_root/$ovmf_dir/"${build_path_fv}"/OVMF.fd "${install_dir}" +if [ "${ovmf_build}" == "tdx" ]; then + install $build_root/$ovmf_dir/"${build_path_fv}"/OVMF_CODE.fd ${install_dir} + install $build_root/$ovmf_dir/"${build_path_fv}"/OVMF_VARS.fd ${install_dir} + install $build_root/$ovmf_dir/"${build_path_arch}"/DumpTdxEventLog.efi ${install_dir} +fi pushd $DESTDIR tar -czvf "${ovmf_dir}-${ovmf_build}.tar.gz" "./$PREFIX" diff --git a/tools/packaging/static-build/ovmf/build.sh b/tools/packaging/static-build/ovmf/build.sh index 0662d20b8..fcbbd9321 100755 --- a/tools/packaging/static-build/ovmf/build.sh +++ b/tools/packaging/static-build/ovmf/build.sh @@ -25,7 +25,11 @@ ovmf_package="${ovmf_package:-}" package_output_dir="${package_output_dir:-}" if [ -z "$ovmf_repo" ]; then - ovmf_repo=$(get_from_kata_deps "externals.ovmf.url" "${kata_version}") + if [ "${ovmf_build}" == "tdx" ]; then + ovmf_repo=$(get_from_kata_deps "externals.ovmf.tdx.url" "${kata_version}") + else + ovmf_repo=$(get_from_kata_deps "externals.ovmf.url" "${kata_version}") + fi fi [ -n "$ovmf_repo" ] || die "failed to get ovmf repo" @@ -38,6 +42,10 @@ elif [ "${ovmf_build}" == "sev" ]; then [ -n "$ovmf_version" ] || ovmf_version=$(get_from_kata_deps "externals.ovmf.sev.version" "${kata_version}") [ -n "$ovmf_package" ] || ovmf_package=$(get_from_kata_deps "externals.ovmf.sev.package" "${kata_version}") [ -n "$package_output_dir" ] || package_output_dir=$(get_from_kata_deps "externals.ovmf.sev.package_output_dir" "${kata_version}") +elif [ "${ovmf_build}" == "tdx" ]; then + [ -n "$ovmf_version" ] || ovmf_version=$(get_from_kata_deps "externals.ovmf.tdx.version" "${kata_version}") + [ -n "$ovmf_package" ] || ovmf_package=$(get_from_kata_deps "externals.ovmf.tdx.package" "${kata_version}") + [ -n "$package_output_dir" ] || package_output_dir=$(get_from_kata_deps "externals.ovmf.tdx.package_output_dir" "${kata_version}") fi [ -n "$ovmf_version" ] || die "failed to get ovmf version or commit" diff --git a/versions.yaml b/versions.yaml index b903546d3..075b7e007 100644 --- a/versions.yaml +++ b/versions.yaml @@ -261,6 +261,12 @@ externals: version: "edk2-stable202202" package: "OvmfPkg/AmdSev/AmdSevX64.dsc" package_output_dir: "AmdSev" + tdx: + url: "https://github.com/tianocore/edk2-staging" + description: "TDVF build needed for TDX measured direct boot." + version: "2022-tdvf-ww28.5" + package: "OvmfPkg/OvmfPkgX64.dsc" + package_output_dir: "OvmfX64" td-shim: description: "Confidential Containers Shim Firmware"