1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
From: Mathias Gibbens <gibmat@debian.org>
Description: Fix QEMU detection
Forwarded: no (this patch is licensed as Apache-2.0 and I haven't signed Canonical's CLA)
diff --git a/lxd/instance/drivers/driver_qemu.go b/lxd/instance/drivers/driver_qemu.go
index 8f19feb95..fadcca84e 100644
--- a/lxd/instance/drivers/driver_qemu.go
+++ b/lxd/instance/drivers/driver_qemu.go
@@ -110,6 +110,7 @@ type ovmfFirmware struct {
var ovmfGenericFirmwares = []ovmfFirmware{
{code: "OVMF_CODE.4MB.fd", vars: "OVMF_VARS.4MB.fd"},
+ {code: "OVMF_CODE_4M.fd", vars: "OVMF_VARS_4M.fd"},
{code: "OVMF_CODE.2MB.fd", vars: "OVMF_VARS.2MB.fd"},
{code: "OVMF_CODE.fd", vars: "OVMF_VARS.fd"},
{code: "OVMF_CODE.fd", vars: "qemu.nvram"},
@@ -117,6 +118,7 @@ var ovmfGenericFirmwares = []ovmfFirmware{
var ovmfSecurebootFirmwares = []ovmfFirmware{
{code: "OVMF_CODE.4MB.fd", vars: "OVMF_VARS.4MB.ms.fd"},
+ {code: "OVMF_CODE_4M.ms.fd", vars: "OVMF_VARS_4M.ms.fd"},
{code: "OVMF_CODE.2MB.fd", vars: "OVMF_VARS.2MB.ms.fd"},
{code: "OVMF_CODE.fd", vars: "OVMF_VARS.ms.fd"},
{code: "OVMF_CODE.fd", vars: "qemu.nvram"},
@@ -7807,7 +7809,27 @@ func (d *qemu) checkFeatures(hostArch int, qemuPath string) (map[string]any, err
}
if d.architectureSupportsUEFI(hostArch) {
- qemuArgs = append(qemuArgs, "-drive", fmt.Sprintf("if=pflash,format=raw,readonly=on,file=%s", filepath.Join(d.ovmfPath(), "OVMF_CODE.fd")))
+ // Determine expected firmware.
+ firmwares := ovmfGenericFirmwares
+ if shared.IsTrue(d.expandedConfig["security.csm"]) {
+ firmwares = ovmfCSMFirmwares
+ } else if shared.IsTrueOrEmpty(d.expandedConfig["security.secureboot"]) {
+ firmwares = ovmfSecurebootFirmwares
+ }
+
+ var ovmfCode string
+ for _, firmware := range firmwares {
+ if shared.PathExists(filepath.Join(d.ovmfPath(), firmware.code)) {
+ ovmfCode = firmware.code
+ break
+ }
+ }
+
+ if ovmfCode == "" {
+ return nil, fmt.Errorf("Unable to locate matching firmware: %+v", firmwares)
+ }
+
+ qemuArgs = append(qemuArgs, "-drive", fmt.Sprintf("if=pflash,format=raw,readonly=on,file=%s", filepath.Join(d.ovmfPath(), ovmfCode)))
}
var stderr bytes.Buffer
|