Skip to content

Commit 986e487

Browse files
committed
fix(os): add SEV-SNP measurement artifacts
1 parent c83948e commit 986e487

5 files changed

Lines changed: 24 additions & 7 deletions

File tree

os/mkosi/build.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ build_one() {
3232
"$work/linux-$KERNEL_VERSION" "$work/kernel-build" "$stage" "$kstage"
3333
"$SELF/scripts/build-zfs.sh" "$work/zfs-build" \
3434
"$work/linux-$KERNEL_VERSION" "$work/kernel-build" "$stage" "$kstage"
35-
"$SELF/scripts/build-ovmf.sh" "$work/ovmf-build" "$kstage/ovmf.fd"
35+
"$SELF/scripts/build-ovmf.sh" "$work/ovmf-build" \
36+
"$kstage/ovmf.fd" "$kstage/ovmf-sev.fd"
3637
# ExtraTrees is copied over Debian's usr-merged root where /bin, /sbin and
3738
# /lib are symlinks. Normalize build systems (notably OpenZFS) that install
3839
# into the legacy physical directories before handing the tree to mkosi.

os/mkosi/scripts/build-ovmf.sh

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ set -euo pipefail
66
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)
77
BUILD_DIR=${1:?build directory required}
88
OUT=${2:?output file required}
9+
SEV_OUT=${3:?SEV output file required}
910
BUILD_DIR=$(realpath -m "$BUILD_DIR")
1011
OUT=$(realpath -m "$OUT")
12+
SEV_OUT=$(realpath -m "$SEV_OUT")
1113
REV=fbe0805b2091393406952e84724188f8c1941837
1214
src="$BUILD_DIR/edk2"
1315
if [[ ! -d $src/.git ]]; then
@@ -21,6 +23,8 @@ git -C "$src" submodule update --init --recursive --depth=1
2123
git -C "$src" reset -q --hard "$REV"
2224
patch -d "$src" -p1 --forward --fuzz=0 < \
2325
"$ROOT/os/yocto/layers/meta-dstack/recipes-core/dstack-ovmf/dstack-ovmf/0004-Reproduciable.patch"
26+
patch -d "$src" -p1 --forward --fuzz=0 < \
27+
"$ROOT/os/yocto/layers/meta-dstack/recipes-core/dstack-ovmf/dstack-ovmf/0006-OvmfPkg-AmdSev-drop-embedded-grub.patch"
2428

2529
make -s -C "$src/BaseTools" -j"${JOBS:-$(nproc)}"
2630
export WORKSPACE="$src" EDK_TOOLS_PATH="$src/BaseTools"
@@ -37,4 +41,8 @@ rm -f "$src/Conf/tools_def.txt"
3741
build -a X64 -t GCC5 -b RELEASE -n "${JOBS:-$(nproc)}" \
3842
-p OvmfPkg/IntelTdx/IntelTdxX64.dsc)
3943
install -Dm0644 "$src/Build/IntelTdx/RELEASE_GCC5/FV/OVMF.fd" "$OUT"
40-
touch -d "@${SOURCE_DATE_EPOCH:?}" "$OUT"
44+
(cd "$src" && set +u && source edksetup.sh BaseTools >/dev/null && \
45+
build -a X64 -t GCC5 -b RELEASE -n "${JOBS:-$(nproc)}" \
46+
-p OvmfPkg/AmdSev/AmdSevX64.dsc)
47+
install -Dm0644 "$src/Build/AmdSev/RELEASE_GCC5/FV/OVMF.fd" "$SEV_OUT"
48+
touch -d "@${SOURCE_DATE_EPOCH:?}" "$OUT" "$SEV_OUT"

os/mkosi/scripts/make-release-artifacts.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,13 @@ find "$ird" -print0 | xargs -0 touch -h -d "@$SOURCE_DATE_EPOCH"
5858

5959
# OVMF is the pinned TDX build; the EFI stub comes from the Debian snapshot.
6060
ovmf="$KERNEL_TREE/ovmf.fd"
61+
ovmf_sev="$KERNEL_TREE/ovmf-sev.fd"
6162
stub=$(find "$TREE/usr/lib/systemd/boot/efi" -type f -name 'linuxx64.efi.stub' | head -1)
62-
[[ -f $ovmf && -f $stub ]] || { echo 'OVMF or systemd EFI stub missing' >&2; exit 1; }
63+
[[ -f $ovmf && -f $ovmf_sev && -f $stub ]] || {
64+
echo 'TDX/SEV OVMF or systemd EFI stub missing' >&2; exit 1;
65+
}
6366
install -m0644 "$ovmf" "$OUT/files/ovmf.fd"
67+
install -m0644 "$ovmf_sev" "$OUT/files/ovmf-sev.fd"
6468

6569
cmdline="console=ttyS0 init=/init panic=1 net.ifnames=0 biosdevname=0 mce=off oops=panic pci=noearly pci=nommconf random.trust_cpu=y random.trust_bootloader=n tsc=reliable no-kvmclock dstack.rootfs_hash=$root_hash dstack.rootfs_size=$data_size"
6670
ukify build --efi-arch=x64 --stub="$stub" --linux="$kernel" \
@@ -80,7 +84,7 @@ data={"schema_version":1,"backend":"mkosi","image":{"name":name,"version":versio
8084
"boot":{"ovmf_variant":ovmf_variant},"verity":{"root_hash":root_hash,"data_size":data_size},
8185
"artifacts":{"initramfs":"files/initramfs.cpio.gz","kernel":"files/bzImage",
8286
"firmware":"files/ovmf.fd","rootfs_verity":"files/rootfs.squashfs.verity",
83-
"firmware_sev":None,"uki":"files/dstack-uki.efi"},
87+
"firmware_sev":"files/ovmf-sev.fd","uki":"files/dstack-uki.efi"},
8488
"backend_metadata":{"machine":"dstack","distribution":"debian"}}
8589
with open(path,"w") as f: json.dump(data,f,indent=2); f.write("\n")
8690
PY

os/mkosi/tests/acceptance.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ grep -q 'artifact-manifest.json' "$D/scripts/make-release-artifacts.sh"
2323
grep -q 'image/assemble.sh' "$D/build.sh"
2424
grep -q 'build-ovmf.sh' "$D/build.sh"
2525
grep -q 'fbe0805b2091393406952e84724188f8c1941837' "$D/scripts/build-ovmf.sh"
26+
grep -q 'AmdSev/AmdSevX64.dsc' "$D/scripts/build-ovmf.sh"
27+
grep -q '"firmware_sev":"files/ovmf-sev.fd"' "$D/scripts/make-release-artifacts.sh"
28+
grep -q 'measurement.snp.cbor' "$D/tests/check-output.sh"
2629
grep -q '0001-validate-ocsp-response-freshness.patch' "$D/scripts/build-nvattest.sh"
2730
grep -q -- '--fuzz=0' "$D/scripts/build-nvattest.sh"
2831
grep -q '0001-pin-fetchcontent-inputs.patch' "$D/scripts/build-nvattest.sh"

os/mkosi/tests/check-output.sh

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@
33
set -euo pipefail
44
out=${1:?assembled output directory required}
55
flavor=${2:-prod}
6-
for file in bzImage initramfs.cpio.gz ovmf.fd rootfs.img.parted.verity \
7-
metadata.json measurement.tdx.cbor sha256sum.txt digest.txt; do
6+
for file in bzImage initramfs.cpio.gz ovmf.fd ovmf-sev.fd rootfs.img.parted.verity \
7+
metadata.json measurement.tdx.cbor measurement.snp.cbor sha256sum.txt digest.txt; do
88
[[ -s $out/$file ]] || { echo "missing compatible output: $file" >&2; exit 1; }
99
done
1010
(cd "$out" && sha256sum -c sha256sum.txt)
1111
grep -q 'dstack-rootfs' < <(sgdisk -p "$out/rootfs.img.parted.verity")
1212
python3 - "$out/metadata.json" "$flavor" <<'PY'
1313
import json,sys
1414
d=json.load(open(sys.argv[1]))
15-
for k in ("bios","kernel","cmdline","initrd","rootfs","version","git_revision","is_dev","ovmf_variant"):
15+
for k in ("bios","bios-sev","kernel","cmdline","initrd","rootfs","version","git_revision","is_dev","ovmf_variant"):
1616
assert k in d, k
17+
assert d["bios-sev"] == "ovmf-sev.fd"
1718
assert d["is_dev"] == (sys.argv[2] == "dev")
1819
PY
1920
echo "Yocto-compatible release format accepted: $out"

0 commit comments

Comments
 (0)