Public bug reported:

This is related to https://bugs.launchpad.net/bugs/1825655.

When trying to upgrade to jammy, I got
```
Your python3 install is corrupted. Please fix the '/usr/bin/python3' 
symlink. 
```

Digging into the matter, it comes down to this symlink checker in 
`DistUpgradeController.py`:
```
import logging
from configparser import ConfigParser
import os
from configparser import NoOptionError

logging.basicConfig(filename='example.log', encoding='utf-8',
level=logging.DEBUG)

def _pythonSymlinkCheck():
    """ sanity check that /usr/bin/python3 points to the default
        python version. Users tend to modify this symlink, which
        breaks stuff in obscure ways (Ubuntu #75557).
    """
    logging.debug("_pythonSymlinkCheck run")
    binaries_and_dirnames = [("python3", "python3")]
    for binary, dirname in binaries_and_dirnames:
        debian_defaults = '/usr/share/%s/debian_defaults' % dirname
        if os.path.exists(debian_defaults):
            config = ConfigParser()
            with open(debian_defaults) as f:
                config.read_file(f)
            try:
                expected_default = config.get('DEFAULT', 'default-version')
            except NoOptionError:
                logging.debug("no default version for %s found in '%s'" %
                              (binary, config))
                return False
            try:
                fs_default_version = os.readlink('/usr/bin/%s' % binary)
            except OSError as e:
                logging.error("os.readlink failed (%s)" % e)
                return False
            if not fs_default_version in (expected_default, 
os.path.join('/usr/bin', expected_default)):
                logging.debug("%s symlink points to: '%s', but expected is '%s' 
or '%s'" %
                              (binary, fs_default_version, expected_default, 
os.path.join('/usr/bin', expected_default)))
                return False
    return True


res = _pythonSymlinkCheck()
print(res)
```
Running it indeed returns `False` on my machine. The log gives the reason:
```
DEBUG:root:_pythonSymlinkCheck run
DEBUG:root:python3 symlink points to: '/etc/alternatives/python3', but expected 
is 'python3.9' or '/usr/bin/python3.9'
```
The symlink is not followed through.

Instead of `os.readlink`, you want to use `os.path.realpath`.

** Affects: ubuntu-release-upgrader (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1953135

Title:
  Incorrect symlink checking => Your python3 install is corrupted.

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


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to