[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1035564: unblock: lxd/5.0.2-5



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
Control: affects -1 + src:lxd

Please unblock package lxd

[ Reason ]
Added a missing Replaces in d/control for bin:lxd-client to address an
upgrade edge case from bullseye where lxc was already installed and
some other package being upgraded Depends/Recommends lxd which could
potentially result in a dpkg error (see #1034971).

lxd has autopkgtests, but as we're now within 20 days of the full
freeze, a manual unblock is required.

[ Impact ]
There's a chance that an upgrade from bullseye to bookworm might fail.

Additionally, this upload of lxd to unstable reset the migration
counter before lxd 5.0.2-4 was able to migrate with a fix for running
with the version of qemu in testing.

[ Tests ]
I manually tested installing lxd-client on a bullseye system with lxc
installed:

> Preparing to unpack lxd-client_5.0.2-3_amd64.deb ...
> Unpacking lxd-client (5.0.2-3) ...
> dpkg: error processing archive lxd-client_5.0.2-3_amd64.deb (--install):
>  trying to overwrite '/usr/share/bash-completion/completions/lxc', which is also in package lxc 1:4.0.6-2+deb11u2
> dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)

With the fix:

> Preparing to unpack .../lxd-client_5.0.2-5_amd64.deb ...
> Unpacking lxd-client (5.0.2-5) ...
> Replacing files in old package lxc (1:4.0.6-2+deb11u2) ...

[ Risks ]
I don't believe there are any risks with this change.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

[ Other info ]
As mentioned, lxd 5.0.2-4 had been on track to automatically migrate
around May 14 with a fix for use with the version of qemu in testing
(see #1030365). Since the requested debdiff is against the version of
lxd in testing, it contains changes from both -4 and -5.

unblock lxd/5.0.2-5
diff -Nru lxd-5.0.2/debian/changelog lxd-5.0.2/debian/changelog
--- lxd-5.0.2/debian/changelog	2023-03-08 02:27:33.000000000 +0000
+++ lxd-5.0.2/debian/changelog	2023-05-05 12:42:21.000000000 +0000
@@ -1,3 +1,16 @@
+lxd (5.0.2-5) unstable; urgency=medium
+
+  * Add missing Replaces in d/control for lxd-client to fix potential bullseye
+    upgrade issue (Closes: #1034971)
+
+ -- Mathias Gibbens <gibmat@debian.org>  Fri, 05 May 2023 12:42:21 +0000
+
+lxd (5.0.2-4) unstable; urgency=medium
+
+  * Cherry-pick upstream fix for qemu >= 7.2 (Closes: #1030365)
+
+ -- Mathias Gibbens <gibmat@debian.org>  Sun, 23 Apr 2023 17:50:08 +0000
+
 lxd (5.0.2-3) unstable; urgency=medium
 
   * Cherry-pick upstream commit to fix issue with btrfs-progs >= 6.0
diff -Nru lxd-5.0.2/debian/control lxd-5.0.2/debian/control
--- lxd-5.0.2/debian/control	2023-03-08 02:27:33.000000000 +0000
+++ lxd-5.0.2/debian/control	2023-05-05 12:42:21.000000000 +0000
@@ -99,8 +99,9 @@
 Package: lxd-client
 # The lxc binary doesn't depend on liblxc1, so it can be built for any architecture
 Architecture: any
-# lxc prior to 5.0.0 shipped a file that conflicts with LXD (see #1010843)
-Breaks: lxc (<< 1:5.0.0)
+# lxc prior to 5.0.1 shipped a file that conflicts with LXD (see #1010843, #1034971)
+Breaks: lxc (<< 1:5.0.1)
+Replaces: lxc (<< 1:5.0.1)
 Depends: ${misc:Depends},
          ${shlibs:Depends}
 Built-Using: ${misc:Built-Using}
diff -Nru lxd-5.0.2/debian/patches/006-cherry-pick-btrfs-fix.patch lxd-5.0.2/debian/patches/006-cherry-pick-btrfs-fix.patch
--- lxd-5.0.2/debian/patches/006-cherry-pick-btrfs-fix.patch	2023-03-08 02:27:33.000000000 +0000
+++ lxd-5.0.2/debian/patches/006-cherry-pick-btrfs-fix.patch	2023-05-05 12:42:21.000000000 +0000
@@ -1,3 +1,6 @@
+From: Mathias Gibbens <gibmat@debian.org>
+Description: Cherry-pick upstream commit to fix issue with btrfs-progs >= 6.0
+Origin: https://github.com/lxc/lxd/pull/11333
 From e7c852e43c0479060e630adb50342d2552a6cdad Mon Sep 17 00:00:00 2001
 From: Thomas Parrott <thomas.parrott@canonical.com>
 Date: Tue, 7 Feb 2023 10:04:27 +0000
diff -Nru lxd-5.0.2/debian/patches/007-cherry-pick-qemu-fix.patch lxd-5.0.2/debian/patches/007-cherry-pick-qemu-fix.patch
--- lxd-5.0.2/debian/patches/007-cherry-pick-qemu-fix.patch	1970-01-01 00:00:00.000000000 +0000
+++ lxd-5.0.2/debian/patches/007-cherry-pick-qemu-fix.patch	2023-05-05 12:42:21.000000000 +0000
@@ -0,0 +1,90 @@
+From: Mathias Gibbens <gibmat@debian.org>
+Description: Cherry-pick upstream fix for qemu >= 7.2, rebase, and drop SEV features not in current LTS release
+Origin: https://github.com/lxc/lxd/pull/11594
+diff --git a/lxd/instance/drivers/driver_qemu.go b/lxd/instance/drivers/driver_qemu.go
+index 9dcdd9da7..08211b034 100644
+--- a/lxd/instance/drivers/driver_qemu.go
++++ b/lxd/instance/drivers/driver_qemu.go
+@@ -2878,17 +2878,11 @@ func (d *qemu) generateQemuConfigFile(mountInfo *storagePools.MountInfo, busName
+ // addCPUMemoryConfig adds the qemu config required for setting the number of virtualised CPUs and memory.
+ // If sb is nil then no config is written.
+ func (d *qemu) addCPUMemoryConfig(cfg *[]cfgSection) error {
+-	drivers := DriverStatuses()
+-	info := drivers[instancetype.VM].Info
+-	if info.Name == "" {
+-		return fmt.Errorf("Unable to ascertain QEMU version")
+-	}
+-
+ 	// Figure out what memory object layout we're going to use.
+ 	// Before v6.0 or if version unknown, we use the "repeated" format, otherwise we use "indexed" format.
+ 	qemuMemObjectFormat := "repeated"
+ 	qemuVer6, _ := version.NewDottedVersion("6.0")
+-	qemuVer, _ := version.NewDottedVersion(info.Version)
++	qemuVer, _ := d.version()
+ 	if qemuVer != nil && qemuVer.Compare(qemuVer6) >= 0 {
+ 		qemuMemObjectFormat = "indexed"
+ 	}
+@@ -3154,11 +3148,9 @@ func (d *qemu) addDriveConfig(bootIndexes map[string]int, driveConf deviceConfig
+ 	isRBDImage := strings.HasPrefix(driveConf.DevPath, device.RBDFormatPrefix)
+ 
+ 	// Check supported features.
+-	drivers := DriverStatuses()
+-	info := drivers[d.Type()].Info
+-
+ 	// Use io_uring over native for added performance (if supported by QEMU and kernel is recent enough).
+ 	// We've seen issues starting VMs when running with io_ring AIO mode on kernels before 5.13.
++	info := DriverStatuses()[instancetype.VM].Info
+ 	minVer, _ := version.NewDottedVersion("5.13.0")
+ 	if shared.StringInSlice(device.DiskIOUring, driveConf.Opts) && shared.StringInSlice("io_uring", info.Features) && d.state.OS.KernelVersion.Compare(minVer) >= 0 {
+ 		aioMode = "io_uring"
+@@ -3592,12 +3584,21 @@ func (d *qemu) addNetDevConfig(busName string, qemuDev map[string]string, bootIn
+ 			qemuNetDev := map[string]any{
+ 				"id":         fmt.Sprintf("%s%s", qemuNetDevIDPrefix, escapedDeviceName),
+ 				"type":       "tap",
+-				"vhost":      true,
++				"vhost":      false, // This is selectively enabled based on QEMU version later.
+ 				"script":     "no",
+ 				"downscript": "no",
+ 				"ifname":     nicName,
+ 			}
+ 
++			// vhost-net network accelerator is causing asserts since QEMU 7.2.
++			// Until previous behaviour is restored or we figure out how to pass the veth device using
++			// file descriptors we will just disable the vhost-net accelerator.
++			qemuVer, _ := d.version()
++			vhostMaxVer, _ := version.NewDottedVersion("7.2")
++			if qemuVer != nil && qemuVer.Compare(vhostMaxVer) < 0 {
++				qemuNetDev["vhost"] = true
++			}
++
+ 			queueCount := configureQueues(len(cpus))
+ 			if queueCount > 0 {
+ 				qemuNetDev["queues"] = queueCount
+@@ -6501,6 +6502,17 @@ func (d *qemu) checkFeatures(hostArch int, qemuPath string) ([]string, error) {
+ 	return features, nil
+ }
+ 
++// version returns the QEMU version.
++func (d *qemu) version() (*version.DottedVersion, error) {
++	info := DriverStatuses()[instancetype.VM].Info
++	qemuVer, err := version.NewDottedVersion(info.Version)
++	if err != nil {
++		return nil, fmt.Errorf("Failed parsing QEMU version: %w", err)
++	}
++
++	return qemuVer, nil
++}
++
+ func (d *qemu) Metrics(hostInterfaces []net.Interface) (*metrics.MetricSet, error) {
+ 	if d.agentMetricsEnabled() {
+ 		metrics, err := d.getAgentMetrics()
+@@ -6764,8 +6776,6 @@ func (d *qemu) setCPUs(count int) error {
+ 
+ func (d *qemu) architectureSupportsCPUHotplug() bool {
+ 	// Check supported features.
+-	drivers := DriverStatuses()
+-	info := drivers[d.Type()].Info
+-
++	info := DriverStatuses()[instancetype.VM].Info
+ 	return shared.StringInSlice("cpu_hotplug", info.Features)
+ }
diff -Nru lxd-5.0.2/debian/patches/series lxd-5.0.2/debian/patches/series
--- lxd-5.0.2/debian/patches/series	2023-03-08 02:27:33.000000000 +0000
+++ lxd-5.0.2/debian/patches/series	2023-05-05 12:42:21.000000000 +0000
@@ -3,3 +3,4 @@
 004-revert-use-of-go-criu.patch
 005-add-mips-aliases.patch
 006-cherry-pick-btrfs-fix.patch
+007-cherry-pick-qemu-fix.patch
diff -Nru lxd-5.0.2/debian/README.debian lxd-5.0.2/debian/README.debian
--- lxd-5.0.2/debian/README.debian	2023-03-08 02:27:33.000000000 +0000
+++ lxd-5.0.2/debian/README.debian	2023-05-05 12:42:21.000000000 +0000
@@ -61,10 +61,6 @@
 Known issues
 ============
 
-  * Virtual machine creation is broken with QEMU version 7.2 when utilizing the
-    default network profile. As of March 2023, a fix has not yet been
-    identified (see bug #1030365 for further details).
-
   * Running LXD and Docker on the same host can cause connectivity issues. A
 common reason for these issues is that Docker sets the FORWARD policy to DROP,
 which prevents LXD from forwarding traffic and thus causes the instances to lose

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: