bad interaction between snapd and update-notifier when snapd package is being upgraded

Bug #1969162 reported by Steve Langasek
84
This bug affects 11 people
Affects Status Importance Assigned to Milestone
snapd (Ubuntu)
Fix Released
High
Alberto Mardegan
Focal
Fix Released
Undecided
Unassigned
Impish
Fix Released
High
Unassigned
update-notifier (Ubuntu)
Invalid
Undecided
Unassigned

Bug Description

[Impact]

On a release upgrade from impish to jammy, dbus postinst hangs for 10 minutes.

[Test Case]

Testing the fix itself:

On a minimal impish system (created with autopkgtest-buildvm), install the snapd from -proposed and run:
$ sudo snap install canonical-livepatch
$ apt list -a snapd
[shows the impish proposed version is used]
$ sudo sed -i 's/impish/jammy/' /etc/apt/sources.list
$ sudo apt update
$ apt list -a snapd
[shows the PPA version as the one that will be upgraded to]
$ sudo apt full-upgrade -y

This should pass

Another test would be simply trying an upgrade from impish to jammy as per the original report.

[Regression Potential]

TBD

[Original Description]

On a release upgrade from impish to jammy, I noticed that the dbus postinst hung for 10 minutes. It hung trying to make two calls to canonical-livepatch via /usr/share/update-notifier/notify-reboot-required: first a call to /snap/bin/canonical-livepatch kernel-upgrade-required which hung for ~5 minutes, then a call to /snap/bin/canonical-livepatch status which hung for another ~5 minutes.

An strace of the second process showed that canonical-livepatch was looping trying to connect to /run/snapd.socket:

[pid 769177] connect(3, {sa_family=AF_UNIX, sun_path="/run/snapd.socket"}, 20) = -1 ECONNREFUSED (Connection refused)

This was not attached to anything, because the snapd package was among those in the current apt transaction, and was currently not in a configured state:

root 756701 0.0 0.0 24144 12556 pts/20 Ss+ 17:26 0:00 | | \_ /usr/bin/dpkg --force-overwrite --status-fd 57 --no-triggers --configure apparmor:amd64 openssl:amd64 ca-certificates:all libmd0:amd64 libmd0:i386 libbsd0:amd64 libbsd0:i386 libedit2:amd64 libtinfo6:i386 libedit2:i386 libcbor0.8:amd64 libfido2-1:amd64 libkrb5support0:amd64 libkrb5-3:amd64 libgssapi-krb5-2:amd64 openssh-client:amd64 liblzo2-2:amd64 squashfs-tools:amd64 libcap2:amd64 libkmod2:amd64 udev:amd64 libapparmor1:amd64 libapparmor1:i386 libdbus-1-3:amd64 libcap2:i386 libzstd1:i386 libsystemd0:i386 libdbus-1-3:i386 dbus:amd64 libpam-systemd:amd64 dbus-user-session:amd64 snapd:amd64

iU snapd 2.55.3+22.04 amd64 Daemon and tooling that enable snap packages

This should probably be fixed by not stopping snapd in the prerm (dh_systemd_start --restart-after-upgrade).

Revision history for this message
Alberto Mardegan (mardy) wrote :

Hi Steve, thanks for reporting this, and for the hint on how to fix it. We currently have a shell script in our prerm script, which manually stops all our systemd units:

    https://github.com/snapcore/snapd/blob/master/packaging/ubuntu-16.04/snapd.prerm

Do I correctly understand that your suggestion is not to do that?

I'm actually a bit confused (though this is probably a question for my own team) why we have that prerm script, when we are already using dh_systemd_start in out debian/rules file:

==============
override_dh_systemd_start:
 # Due to https://github.com/systemd/systemd/issues/8102
 # debhelper supporting --remaining like behaviour here would
 # have been useful
 # (Re-)start socket first
 dh_systemd_start snapd.socket
 # Then service
 dh_systemd_start snapd.service
 # Then the rest
 dh_systemd_start $(filter-out snapd.socket snapd.service, $(shell ls debian/snapd/lib/systemd/system/))
==============

wouldn't this rule already cause the units to be stopped at the prerm step (we are using debhelper compatibility level 9)?

Anyway, I'm soon going to propose a PR, so we can discuss over it.

Changed in snapd (Ubuntu):
assignee: nobody → Alberto Mardegan (mardy)
importance: Undecided → High
status: New → In Progress
Revision history for this message
Alberto Mardegan (mardy) wrote :

Here's the PR: https://github.com/snapcore/snapd/pull/11680

And please forget what I wrote about our prerm script: that script is not stopping snapd, but only all the systemd service installed *by snap packages*, so it should be fine.

Revision history for this message
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in update-notifier (Ubuntu):
status: New → Confirmed
Revision history for this message
Michael Vogt (mvo) wrote :

I uploaded a cherry pick of Albertos branch with the current jammy snapd plus the fix to https://launchpad.net/~mvo/+archive/ubuntu/tmp/+packages and will test once it's build in there.

Revision history for this message
Michael Vogt (mvo) wrote :

On a minimal impish system (created with autopkgtest-buildvm) I ran:
$ sudo apt install --no-install--recommends snapd update-notifier
$ sudo snap install canonical-livepatch
$ sudo sed -i 's/impish/jammy/' /etc/apt/sources.list
$ sudo apt update
$ sudo apt full-upgrade -y
and with that I can reproduce the hang.

Revision history for this message
Michael Vogt (mvo) wrote :

On a minimal impish system (created with autopkgtest-buildvm) I ran:
$ sudo apt install --no-install--recommends snapd update-notifier
$ sudo snap install canonical-livepatch
$ sudo apt-add-repository ppa:mvo/tmp
$ sudo sed -i 's/impish/jammy/' /etc/apt/sources.list
$ sudo sed -i 's/impish/jammy/' /etc/apt/sources.list.d/mvo-ubuntu-tmp-impish.list
$ sudo apt update
$ apt list -a snapd
[shows the PPA version as the one that will be upgraded to]
$ sudo apt full-upgrade -y

With that it still hangs, most likely because the *old* prerm is run which will stop snapd during the upgrade.

Revision history for this message
Michael Vogt (mvo) wrote :

I uploaded a version of snapd with the changes from https://github.com/snapcore/snapd/pull/11680 and https://github.com/snapcore/snapd/pull/11287 to the my ppa:mvo/tmp for impish too.

On a minimal impish system (created with autopkgtest-buildvm) I ran:
$ sudo apt-add-repository ppa:mvo/tmp
$ sudo apt install --no-install--recommends snapd update-notifier
$ sudo snap install canonical-livepatch
$ apt list -a snapd
[shows the impish PPA version is used]
$ sudo sed -i 's/impish/jammy/' /etc/apt/sources.list
$ sudo sed -i 's/impish/jammy/' /etc/apt/sources.list.d/mvo-ubuntu-tmp-impish.list
$ sudo apt update
$ apt list -a snapd
[shows the PPA version as the one that will be upgraded to]
$ sudo apt full-upgrade -y

with that the upgrade does not hang anymore.

Revision history for this message
Łukasz Zemczak (sil2100) wrote :

Accepting the jammy version into -proposed for a 0-day SRU.

Revision history for this message
Łukasz Zemczak (sil2100) wrote : Please test proposed package

Hello Steve, or anyone else affected,

Accepted snapd into impish-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/snapd/2.54.3+21.10.1ubuntu0.3 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, what testing has been performed on the package and change the tag from verification-needed-impish to verification-done-impish. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-impish. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance for helping!

N.B. The updated package will be released to -updates after the bug(s) fixed by this package have been verified and the package has been in -proposed for a minimum of 7 days.

Changed in snapd (Ubuntu):
status: In Progress → Fix Committed
Changed in snapd (Ubuntu Impish):
status: New → Fix Committed
tags: added: verification-needed verification-needed-impish
Changed in snapd (Ubuntu Impish):
importance: Undecided → High
Changed in update-notifier (Ubuntu):
status: Confirmed → Invalid
description: updated
Revision history for this message
Michael Vogt (mvo) wrote :

There is one thing I noticed - when transitioning from "dh_systemd_start" to "dh_systemd_start --restart-after-upgrade" at least on 16.04 snapd.service is stopped in the old prerm but when the new postinst runs it calls "systemctl restart snapd" but that only restarts a service if it was not stopped before by systemctl so one ends up without a running snapd. I need to check if that is just 16.04 (it was a failure in our CI) or if it also affects 21.10 and later (hope this makes sense)

Revision history for this message
Michael Vogt (mvo) wrote :

It seems the above is not an issue on 21.10 at least.

Revision history for this message
Andrew Robbins (ato-1npr3w-n1b) wrote :

ah whoops-please undo

Changed in snapd (Ubuntu):
status: Fix Committed → Fix Released
Changed in snapd (Ubuntu):
status: Fix Released → Fix Committed
Revision history for this message
Michael Vogt (mvo) wrote :

I ran the spread test in the snapd PR https://github.com/snapcore/snapd/pull/11702 against this change in 21.10 and 22.04 and the restart behavior is correct: if snapd is upgraded from a version that does not yet use "dh_systemd --restart-after-upgrade" still keep running.

tags: added: verification-done verification-done-impish
removed: verification-needed verification-needed-impish
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package snapd - 2.55.3+22.04ubuntu1

---------------
snapd (2.55.3+22.04ubuntu1) jammy; urgency=medium

  * Cherry-pick https://github.com/snapcore/snapd/pull/11680
    - This fixes a bad interaction between snapd and update-notifier
      during a release upgrade (LP: #1969162)

 -- Michael Vogt <email address hidden> Thu, 21 Apr 2022 10:50:55 +0200

Changed in snapd (Ubuntu):
status: Fix Committed → Fix Released
Revision history for this message
Łukasz Zemczak (sil2100) wrote : Update Released

The verification of the Stable Release Update for snapd has completed successfully and the package is now being released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package snapd - 2.54.3+21.10.1ubuntu0.3

---------------
snapd (2.54.3+21.10.1ubuntu0.3) impish; urgency=medium

  * Cherry-pick https://github.com/snapcore/snapd/pull/11680 and
    https://github.com/snapcore/snapd/pull/11287:
    - This fixes a bad interaction between snapd and update-notifier
      during a release upgrade (LP: #1969162)

 -- Michael Vogt <email address hidden> Thu, 21 Apr 2022 12:11:17 +0200

Changed in snapd (Ubuntu Impish):
status: Fix Committed → Fix Released
Revision history for this message
Conor Eager (mrconorae) wrote :

Now that a fix has been released for both affected versions, what's left before upgrades are enabled for 21.10→22.04?
(new to Ubuntu and Launchpad, so feel free to point out the seemingly obvious)

Revision history for this message
Jaromir Obr (jaromir-obr) wrote :

@mrconorae: I've just checked that the upgrade is enabled:
---------------------------
$ sudo do-release-upgrade -c
Checking for a new Ubuntu release
New release '22.04 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Revision history for this message
Brian Murray (brian-murray) wrote : Please test proposed package

Hello Steve, or anyone else affected,

Accepted snapd into focal-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/snapd/2.54.3+20.04.1ubuntu0.3 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, what testing has been performed on the package and change the tag from verification-needed-focal to verification-done-focal. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-focal. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance for helping!

N.B. The updated package will be released to -updates after the bug(s) fixed by this package have been verified and the package has been in -proposed for a minimum of 7 days.

Changed in snapd (Ubuntu Focal):
status: New → Fix Committed
tags: added: verification-needed verification-needed-focal
removed: verification-done
Revision history for this message
Michael Vogt (mvo) wrote :

Fwiw, I tested this also for focal->jammy on my laptop (real machien) and it worked fine there.

Revision history for this message
Brian Murray (brian-murray) wrote :

I followed the test case as detailed in the bug description and did not observe a 10 minute wait during the dbus package upgrade.

Revision history for this message
Brian Murray (brian-murray) wrote :

I also tested a distribution upgrade from Focal to Jammy with the canonical-livepatch snap installed and did not notice a 10 minute pause during the process.

tags: added: verification-done verification-done-focal
removed: verification-needed verification-needed-focal
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package snapd - 2.54.3+20.04.1ubuntu0.3

---------------
snapd (2.54.3+20.04.1ubuntu0.3) focal; urgency=medium

  * Cherry-pick https://github.com/snapcore/snapd/pull/11680 and
    https://github.com/snapcore/snapd/pull/11287:
    - This fixes a bad interaction between snapd and update-notifier
      during a release upgrade (LP: #1969162)

 -- Michael Vogt <email address hidden> Wed, 27 Apr 2022 18:12:51 +0200

Changed in snapd (Ubuntu Focal):
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.