** Description changed:
+ [Impact]
+
+ There are various setups where snap will not behave as expected, such as
+ in WSL or chroot environments. There are currently quirks in ubuntu-
+ release-upgrader that are not resilient to general snap failures.
+
+ Such errors currently are fatal to the upgrade, but they should not be.
+
+ [Test Plan]
+
+ In an Ubuntu container, simulate snap errors by doing:
+
+ $ ln -s /usr/bin/false /usr/local/bin/snap
+ $ which snap
+ /usr/local/bin/snap
+
+ Then, attempt an upgrade. Without a patch, the upgrade will fail early:
+
+ $ do-release-upgrade
+
+ [...]
+
+ Building dependency tree... Done
+ Reading state information... Done
+
+ Traceback (most recent call last):
+ File "/tmp/ubuntu-release-upgrader-0xsphvrt/noble", line 8, in <module>
+ sys.exit(main())
+ File
"/tmp/ubuntu-release-upgrader-0xsphvrt/DistUpgrade/DistUpgradeMain.py", line
241, in main
+ if app.run():
+ File
"/tmp/ubuntu-release-upgrader-0xsphvrt/DistUpgrade/DistUpgradeController.py",
line 2662, in run
+ return self.fullUpgrade()
+ File
"/tmp/ubuntu-release-upgrader-0xsphvrt/DistUpgrade/DistUpgradeController.py",
line 2467, in fullUpgrade
+ if not self.doPostInitialUpdate():
+ File
"/tmp/ubuntu-release-upgrader-0xsphvrt/DistUpgrade/DistUpgradeController.py",
line 1438, in doPostInitialUpdate
+ self.quirks.run("PostInitialUpdate")
+ File
"/tmp/ubuntu-release-upgrader-0xsphvrt/DistUpgrade/DistUpgradeQuirks.py", line
102, in run
+ func()
+ File
"/tmp/ubuntu-release-upgrader-0xsphvrt/DistUpgrade/DistUpgradeQuirks.py", line
127, in noblePostInitialUpdate
+ self._test_and_fail_on_tpm_fde()
+ File
"/tmp/ubuntu-release-upgrader-0xsphvrt/DistUpgrade/DistUpgradeQuirks.py", line
1906, in _test_and_fail_on_tpm_fde
+ snap_list = subprocess.check_output(['snap', 'list'])
+ File "/usr/lib/python3.10/subprocess.py", line 421, in check_output
+ return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
+ File "/usr/lib/python3.10/subprocess.py", line 526, in run
+ raise CalledProcessError(retcode, process.args,
+ subprocess.CalledProcessError: Command '['snap', 'list']' returned non-zero
exit status 1.
+
+ With a patch in place, the error should be logged instead, and the
+ upgrade should continue.
+
+ [Where problems could occur]
+
+ TODO
+
+ [Original Description]
+
Original report: https://github.com/ubuntu/WSL/issues/493
On WSL, systemd is not always enabled. This is the case on WSL1 where it
cannot be enabled and on WSL2 when it's been disabled or not enabled by
default.
When systemd is not available do-release-upgrade fails with the error
below and upgrade is cancelled:
- From the report
+ From the report
===
Traceback (most recent call last):
File "/tmp/ubuntu-release-upgrader-uqmd8iby/noble", line 8, in <module>
sys.exit(main())
File
"/tmp/ubuntu-release-upgrader-uqmd8iby/DistUpgrade/DistUpgradeMain.py", line
241, in main
if app.run():
File
"/tmp/ubuntu-release-upgrader-uqmd8iby/DistUpgrade/DistUpgradeController.py",
line 2642, in run
return self.fullUpgrade()
File
"/tmp/ubuntu-release-upgrader-uqmd8iby/DistUpgrade/DistUpgradeController.py",
line 2447, in fullUpgrade
if not self.doPostInitialUpdate():
File
"/tmp/ubuntu-release-upgrader-uqmd8iby/DistUpgrade/DistUpgradeController.py",
line 1438, in doPostInitialUpdate
self.quirks.run("PostInitialUpdate")
File
"/tmp/ubuntu-release-upgrader-uqmd8iby/DistUpgrade/DistUpgradeQuirks.py", line
102, in run
func()
File
"/tmp/ubuntu-release-upgrader-uqmd8iby/DistUpgrade/DistUpgradeQuirks.py", line
127, in noblePostInitialUpdate
self._test_and_fail_on_tpm_fde()
File
"/tmp/ubuntu-release-upgrader-uqmd8iby/DistUpgrade/DistUpgradeQuirks.py", line
1898, in _test_and_fail_on_tpm_fde
snap_list = subprocess.check_output(['snap', 'list'])
File "/usr/lib/python3.10/subprocess.py", line 421, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/lib/python3.10/subprocess.py", line 526, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['snap', 'list']' returned non-zero
exit status 1.
"""
This error should be ignored when systemd is not running.
Read https://github.com/ubuntu/WSL/issues/493#issuecomment-2324510606
for details. Thanks to Vadim for the investigation.
"""
In /tmp/ubuntu-release-upgrader-t8sg0mg9/DistUpgrade/DistUpgradeQuirks.py:
- def _test_and_fail_on_tpm_fde(self):
- """
- LP: #2065229
- """
- try:
- snap_list = subprocess.check_output(['snap', 'list'])
- snaps = [s.decode().split()[0] for s in snap_list.splitlines()]
- except FileNotFoundError:
- # snapd not installed?
- return
+ def _test_and_fail_on_tpm_fde(self):
+ """
+ LP: #2065229
+ """
+ try:
+ snap_list = subprocess.check_output(['snap', 'list'])
+ snaps = [s.decode().split()[0] for s in snap_list.splitlines()]
+ except FileNotFoundError:
+ # snapd not installed?
+ return
I think except FileNotFoundError: should be extended to except:
Because DistUpgradeQuirks.py is stored in some temp directory, it was hard to
change it inplace, but I succeeded, and then the upgrade process continued as
it should
===
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2080233
Title:
do-release-upgrade fails when snap returns non-zero exit code [[wsl]
do-release-upgrade fails with systemd disabled]
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+bug/2080233/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs