** 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

Reply via email to