# DP: Use /etc/lsb-release to identify the platform. --- a/Lib/platform.py +++ b/Lib/platform.py @@ -299,7 +299,7 @@ _release_version = re.compile(r'([^0-9]+ _supported_dists = ( 'SuSE', 'debian', 'fedora', 'redhat', 'centos', 'mandrake', 'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo', - 'UnitedLinux', 'turbolinux', 'arch', 'mageia') + 'UnitedLinux', 'turbolinux', 'arch', 'mageia', 'Ubuntu') def _parse_release_file(firstline): @@ -328,6 +328,10 @@ def _parse_release_file(firstline): id = l[1] return '', version, id +_distributor_id_file_re = re.compile(r"(?:DISTRIB_ID\s*=)\s*(.*)", re.I) +_release_file_re = re.compile(r"(?:DISTRIB_RELEASE\s*=)\s*(.*)", re.I) +_codename_file_re = re.compile(r"(?:DISTRIB_CODENAME\s*=)\s*(.*)", re.I) + def linux_distribution(distname='', version='', id='', supported_dists=_supported_dists, @@ -360,6 +364,25 @@ def _linux_distribution(distname, versio args given as parameters. """ + # check for the Debian/Ubuntu /etc/lsb-release file first, needed so + # that the distribution doesn't get identified as Debian. + try: + with open("/etc/lsb-release", "r") as etclsbrel: + for line in etclsbrel: + m = _distributor_id_file_re.search(line) + if m: + _u_distname = m.group(1).strip() + m = _release_file_re.search(line) + if m: + _u_version = m.group(1).strip() + m = _codename_file_re.search(line) + if m: + _u_id = m.group(1).strip() + if _u_distname and _u_version: + return (_u_distname, _u_version, _u_id) + except (EnvironmentError, UnboundLocalError): + pass + try: etc = os.listdir(_UNIXCONFDIR) except OSError: