Today I learnt that upgrading from Ubuntu 14.04 LTS to Ubuntu 16.04 LTS doesn’t work outside non-standard desktop sessions (like my i3wm/gnome hybrid). I had to log out, and log back in to a vanilla Unity session to get the upgrade running.

Symptoms

The first inkling of the problems was that Update Manager didn’t notify me about the available release upgrade. No matter, I really prefer command line updates and ran sudo do-release-upgrade instead.

After downloading nearly 2G of new packets it crashed with an exception in exception handler:

Traceback (most recent call last):
  File "/tmp/ubuntu-release-upgrader-ukrjz3_w/xenial", line 8, in <module>
  File "/tmp/ubuntu-release-upgrader-ukrjz3_w/DistUpgrade/DistUpgradeMain.py", line 242, in main
  File "/tmp/ubuntu-release-upgrader-ukrjz3_w/DistUpgrade/DistUpgradeController.py", line 1876, in run
  File "/tmp/ubuntu-release-upgrader-ukrjz3_w/DistUpgrade/DistUpgradeController.py", line 1841, in fullUpgrade
  File "/tmp/ubuntu-release-upgrader-ukrjz3_w/DistUpgrade/DistUpgradeController.py", line 1257, in doDistUpgrade
UnboundLocalError: local variable 'e' referenced before assignment

Getting what’s basically a syntax error is a sign that this is not something that have happened during Ubuntu’s testing. That there were no useful search results for the error messages was another bad sign.

Doing nothing to lessen my frustration the monitor also went dark after 30s of inactivity. Seems something in do-release-upgrade had messed with the screensaver. This was a useful hint, though.

The upgrade log in /var/log/dist-upgrade/main.log provided more hints about that this was some problem with the desktop session, just before the traceback above:

DEBUG killing update-notifier
DEBUG killing kblueplugd kbluetooth4
DEBUG killing gnome-screensaver
DEBUG setup poke timer for the scrensaver
DEBUG inhibit gnome-session idle
DEBUG failed to find XDG_CURRENT_DESKTOP
ERROR failed to inhibit gnome-session idle

That was followed by some locking issue which looks like something in the session that was supposed to shut down didn’t:

INFO cache.commit()
DEBUG failed to SystemUnLock() (E:Not locked) 
ERROR IOError in cache.commit(): 'Failed to lock /var/cache/apt/archives/lock'. Retrying (currentTry: 0)
INFO cache.commit()
DEBUG failed to SystemUnLock() (E:Not locked) 
ERROR IOError in cache.commit(): 'Failed to lock /var/cache/apt/archives/lock'. Retrying (currentTry: 1)
INFO cache.commit()
DEBUG failed to SystemUnLock() (E:Not locked) 
ERROR IOError in cache.commit(): 'Failed to lock /var/cache/apt/archives/lock'. Retrying (currentTry: 2)
ERROR giving up on fetching after maximum retries

And that final error turned into an exception, which triggered the error in the exception handler.

Solution

The only change in the system before the crash seemed to be that /etc/apt/sources.list had been changed to point at xenian instead of trusty. It seemed somewhat safe to abandon the shell I had and log out, logging back in using the standard Unity session instead of i3wm in Gnome.

The first thing that happens in the Unity session is that the release upgrade notification pops up. Accepting the upgrade the GUI-based process happily started, noting that all packages was already downloaded and setting off installing them.

Conclusion

Ubuntu doesn’t test updates in non-Unity desktop environments.