Package: libpython2.7-minimal
Version: 2.7.13
Environment in which bug seen: Devuan 2.1 (ascii)
Problem behaviour: python function platform.linux_distribution() returns
"debian" instead of "devuan"
To reproduce:
(from command-line):
python
(from python prompt):
import platform
platform.linux_distribution()
(should return: "('debian','9','')"
quit()
Test fix:
platform.linux_distribution() tries to use the file /etc/lsb-release.
This doesn't appear to exist either in Debian stretch or Devuan ascii -
unless it's present in a package which isn't included in the default
install. Creating it with appropriate values fixes the problem:
Check whether /etc/lsb-release exists: it shouldn't, - but if so,
rename it (and rename it back after the test).
lsb_release -a > /etc/lsb-release
Edit /etc/lsb-release and change as follows:
"Distributor ID: " => "DISTRIB_ID="
"Description: " => "DISTRIB_DESCRIPTION="
"Release: " => "DISTRIB_RELEASE="
"Codename: " => "DISTRIB_CODENAME="
Above test should now return: "('Devuan','2.1','ascii')"
Additional information:
The problem is apparently caused by the combination of the absence
of /etc/lsb-release, and the presence of /etc/debian_release. The
algorithm in platform.linux_distribution() is apparently to try
reading /etc/lsb-release, and if it doesn't exist, look for any file
matching /etc/*_(version|release)
The bug also exists in python3 (package libpython3.5-minimal, version
3.5.3) - to reproduce, repeat the above test using "python3" instead of
"python"
The bug also exists in beowulf
Not sure whether above "fix" is feasible in practice - maybe other
python-based packages rely on getting back "debian" from
platform.linux_distribution()?
This problem came to light because it breaks the waagent package -
because it believes that it's running on debian, waagent tries to use
systemd-based commands and functions. I'm currently working this
problem, but I'm approaching it by putting in place internal tests to
ascertain whether debian or devuan, rather than relying on a
system-level fix.
platform.linux_distribution() is deprecated and slated for removal
If it's decided that this can be safely fixed by
creating /etc/lsb-release, one question needs answering: whether to
lowercase the DISTRIB_ID field, or to leave it as returned by
lsb_release