ci: add test coverage for secure boot and addons, and shim integration (#38377)

Now that we can enable SB on GHA do it by default in mkosi images with
selfenroll, and add a smoke test.
Also add one CI job that tests the shim integration. This will catch
regressions like https://github.com/systemd/systemd/issues/38349
This commit is contained in:
Yu Watanabe
2025-07-29 12:08:42 +09:00
committed by GitHub
8 changed files with 107 additions and 5 deletions
@@ -7,5 +7,6 @@ integration_tests += [
'storage': 'persistent',
'coredump-exclude-regex' : '/(test-usr-dump|test-dump|bash)$',
'vm' : true,
'firmware' : 'auto',
},
]
+5 -1
View File
@@ -156,7 +156,11 @@ test -f "$CREDENTIAL_FILE"
CREDENTIAL_NAME=${CREDENTIAL_FILE#/tmp/fakexbootldr/loader/credentials/}
CREDENTIAL_NAME=${CREDENTIAL_NAME%.cred}
systemd-creds decrypt --name="$CREDENTIAL_NAME" "$CREDENTIAL_FILE"
# If SB is enabled then this will fail as it's not locked but TPM2 is enabled
if cmp /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c <(printf '\6\0\0\0\1'); then
ALLOW_NULL=--allow-null
fi
systemd-creds decrypt "${ALLOW_NULL:-}" --name="$CREDENTIAL_NAME" "$CREDENTIAL_FILE"
ln -s "$CREDENTIAL_FILE" /tmp/fakexbootldr/loader/credentials/"$CREDENTIAL_NAME"
test -f /tmp/fakexbootldr/loader/credentials/"$CREDENTIAL_NAME"
@@ -21,7 +21,42 @@ fi
(! systemd-detect-virt -cq)
restore_esp() {
if [ ! -d /tmp/esp.bak ]; then
return
fi
if [ -d /tmp/esp.bak/EFI/ ]; then
cp -r /tmp/esp.bak/EFI/* "$(bootctl --print-esp-path)/EFI/"
fi
if [ -d /tmp/esp.bak/loader/ ]; then
cp -r /tmp/esp.bak/loader/* "$(bootctl --print-esp-path)/loader/"
fi
rm -rf /tmp/esp.bak
}
backup_esp() {
if [ -d /tmp/esp.bak ]; then
return
fi
if [[ -d "$(bootctl --print-esp-path)/EFI" ]]; then
mkdir -p /tmp/esp.bak
cp -r "$(bootctl --print-esp-path)/EFI/" /tmp/esp.bak/
fi
if [[ -d "$(bootctl --print-esp-path)/loader" ]]; then
mkdir -p /tmp/esp.bak
cp -r "$(bootctl --print-esp-path)/loader/" /tmp/esp.bak/
fi
}
basic_tests() {
# Ensure the system's ESP (no --image/--root args) is still available for the next tests
if [ $# -eq 0 ]; then
backup_esp
trap restore_esp RETURN ERR
fi
bootctl "$@" --help
bootctl "$@" --version
@@ -274,6 +309,10 @@ testcase_bootctl_varlink() {
}
testcase_bootctl_secure_boot_auto_enroll() {
# mkosi can also add keys here, so back them up and restored them
backup_esp
trap restore_esp RETURN ERR
cat >/tmp/openssl.conf <<EOF
[ req ]
prompt = no
@@ -293,6 +332,9 @@ EOF
-x509 -sha256 -nodes -days 365 -newkey rsa:4096 \
-keyout /tmp/sb.key -out /tmp/sb.crt
# This will fail if there are already keys in the ESP, so we remove them first
rm -rf "$(bootctl --print-esp-path)/loader/keys/auto"
bootctl install --make-entry-directory=yes --secure-boot-auto-enroll=yes --certificate /tmp/sb.crt --private-key /tmp/sb.key
for var in PK KEK db; do
test -f "$(bootctl --print-esp-path)/loader/keys/auto/$var.auth"
@@ -300,4 +342,21 @@ EOF
bootctl remove
}
testcase_secureboot() {
if [ ! -d /sys/firmware/efi ]; then
echo "Not booted with EFI, skipping secureboot tests."
return 0
fi
# Ensure secure boot is enabled and not in setup mode
cmp /sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c <(printf '\6\0\0\0\1')
cmp /sys/firmware/efi/efivars/SetupMode-8be4df61-93ca-11d2-aa0d-00e098032b8c <(printf '\6\0\0\0\0')
bootctl status | grep -q "Secure Boot: enabled"
# Ensure the addon is fully loaded and parsed
bootctl status | grep -q "global-addon: loader/addons/test.addon.efi"
bootctl status | grep "cmdline" | grep -q addonfoobar
grep -q addonfoobar /proc/cmdline
}
run_testcases