[Bug 1825655] Re: do-release-upgrade fails with "Your python3 install is corrupted" if /usr/bin/python points to /etc/alternatives/python

Dmitrii Shcherbakov 1825655 at bugs.launchpad.net
Thu Oct 24 15:24:40 UTC 2019


If I am not mistaken, Disco/19.04 doesn't have the fix backported yet:

https://git.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/tree/DistUpgrade/DistUpgradeController.py?h=ubuntu/disco-updates#n362
        binaries_and_dirnames = [("python", "python"), ("python2", "python"),
                                 ("python3", "python3")]


While 19.10 does:

https://git.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/tree/DistUpgrade/DistUpgradeController.py?h=ubuntu/eoan#n362
        binaries_and_dirnames = [("python3", "python3")]


wolfgang-rumpf,

* do you have python2 installed by any chance?
* does /usr/bin/python point to /usr/bin/python2.7 or /etc/alternatives/python?
* if it points to /etc/alternatives/python you are hitting the original bug I filed about the incorrect check performed by the release upgrader. Without the fix, it looks at /usr/bin/python while it only actually cares about python3. So if you fix this symlink everything will work as expected.

If you just need to do it quickly on one system (i.e. upgrade your
laptop):

sudo rm /usr/bin/python
sudo ln -s /usr/bin/python2.7 /usr/bin/python
do-release-upgrade


Also, do you remember why an alternative was set up in the first place? It would be helpful to understand where this kind of setup is coming from.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to ubuntu-release-upgrader in
Ubuntu.
https://bugs.launchpad.net/bugs/1825655

Title:
  do-release-upgrade fails with "Your python3 install is corrupted" if
  /usr/bin/python points to /etc/alternatives/python

Status in ubuntu-release-upgrader package in Ubuntu:
  Fix Released

Bug description:
  do-release-upgrade from 18.04 to 18.10 fails (likewise, when I
  upgraded with a workaround the same happened for 18.10 -> 19.04):

  "
  Reading cache

  Checking package manager

  Can not upgrade

  Your python3 install is corrupted. Please fix the '/usr/bin/python3'
  symlink.
  === Command terminated with exit status 1 (Sat Apr 20 17:19:49 2019) ===
  "

  There is nothing wrong with /usr/bin/python3

  ➜  ~ ls -al /usr/bin/python3
  lrwxrwxrwx 1 root root 9 окт 25 14:11 /usr/bin/python3 -> python3.6

  I also have python2 installed for which Debian alternatives are
  configured which causes the problem as far as I can see:

  ➜  ~ update-alternatives --display python
  python - auto mode
    link best version is /usr/bin/python2.7
    link currently points to /usr/bin/python2.7
    link python is /usr/bin/python
  /usr/bin/python2.7 - priority 100

  https://git.launchpad.net/ubuntu/+source/ubuntu-release-
  upgrader/tree/DistUpgrade/DistUpgradeController.py?h=ubuntu/bionic-
  updates#n361

  (Pdb) l
   11  	        debian_defaults = '/usr/share/%s/debian_defaults' % dirname
   12  	        if os.path.exists(debian_defaults):
   13  	            config = SafeConfigParser()
   14  	            with open(debian_defaults) as f:
   15  	                config.readfp(f)
   16  ->	            try:
   17  	                expected_default = config.get('DEFAULT', 'default-version')
   18  	            except NoOptionError:
   19  	                logging.debug("no default version for %s found in '%s'" %
   20  	                              (binary, config))
   21  	                return False
  (Pdb) n
  > <ipython-input-13-93c4105e7796>(17)_pythonSymlinkCheck()
  -> expected_default = config.get('DEFAULT', 'default-version')
  (Pdb) n
  > <ipython-input-13-93c4105e7796>(22)_pythonSymlinkCheck()
  -> try:
  (Pdb) expected_default
  'python2.7'

  > <ipython-input-13-93c4105e7796>(23)_pythonSymlinkCheck()
  -> fs_default_version = os.readlink('/usr/bin/%s' % binary)
  (Pdb) n
  > <ipython-input-13-93c4105e7796>(27)_pythonSymlinkCheck()
  -> if not fs_default_version in (expected_default, os.path.join('/usr/bin', expected_default))                     and not (binary == 'python' and fs_default_version in ('python2', '/usr/bin/python2')):
  (Pdb) fs_default_version
  '/etc/alternatives/python'
  (Pdb) os.path.join('/usr/bin', expected_default)
  '/usr/bin/python2.7'

  (Pdb) not fs_default_version in (expected_default, os.path.join('/usr/bin', expected_default))
  True

  (Pdb) print("%s symlink points to: '%s', but expected is '%s' or '%s'" % (binary, fs_default_version, expected_default, os.path.join('/usr/bin', expected_default)))
  python symlink points to: '/etc/alternatives/python', but expected is 'python2.7' or '/usr/bin/python2.7'

  A workaround is:

  sudo rm /usr/bin/python
  sudo ln -s /usr/bin/python2.7 /usr/bin/python
  do-release-upgrade

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+bug/1825655/+subscriptions



More information about the foundations-bugs mailing list