From: Daan De Meyer Date: Thu, 14 Dec 2023 08:57:12 +0000 (+0100) Subject: Fall back to fw_cfg if SMBIOS is not available X-Git-Tag: v20~67^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F2174%2Fhead;p=thirdparty%2Fmkosi.git Fall back to fw_cfg if SMBIOS is not available --- diff --git a/mkosi/qemu.py b/mkosi/qemu.py index c7bfafb8e..513e9f91a 100644 --- a/mkosi/qemu.py +++ b/mkosi/qemu.py @@ -586,19 +586,23 @@ def run_qemu(args: MkosiArgs, config: MkosiConfig, qemu_device_fds: Mapping[Qemu "-mon", "console", ] - if config.architecture.supports_smbios(): - for k, v in config.credentials.items(): - payload = base64.b64encode(v.encode()).decode() - cmdline += [ - "-smbios", f"type=11,value=io.systemd.credential.binary:{k}={payload}" - ] - # QEMU has built-in logic to look for the BIOS firmware so we don't need to do anything special for that. if firmware == QemuFirmware.uefi: cmdline += ["-drive", f"if=pflash,format=raw,readonly=on,file={ovmf}"] notifications: dict[str, str] = {} with contextlib.ExitStack() as stack: + for k, v in config.credentials.items(): + payload = base64.b64encode(v.encode()).decode() + if config.architecture.supports_smbios() and firmware == QemuFirmware.uefi: + cmdline += ["-smbios", f"type=11,value=io.systemd.credential.binary:{k}={payload}"] + else: + f = stack.enter_context(tempfile.NamedTemporaryFile(prefix="mkosi-fw-cfg", mode="w")) + f.write(v) + f.flush() + os.fchown(f.fileno(), INVOKING_USER.uid, INVOKING_USER.gid) + cmdline += ["-fw_cfg", f"name=opt/io.systemd.credentials/{k},file={f.name}"] + if firmware == QemuFirmware.uefi: ovmf_vars = stack.enter_context(tempfile.NamedTemporaryFile(prefix="mkosi-ovmf-vars")) shutil.copy2(config.qemu_firmware_variables or find_ovmf_vars(config), Path(ovmf_vars.name))