Package: lxd / 5.0.2+git20231211.1364ae4-9

004-fix-qemu-detection.patch Patch series | download
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