Most Linux distributions ship an os-release file by default. Some do not
ship lsb-release information, but they can be installed afterwards.
Installing/Removing lsb-release can lead to different OS grain values.
| OS | grain | without lsb-release | with lsb-release |
|------------------|------------|----------------------------------|------------------|
| AlmaLinux 8 | oscodename | AlmaLinux 8.5 (Arctic Sphynx) | ArcticSphynx |
| Astra CE | os | Astra (Orel) | AstraLinuxCE |
| Astra CE | os_family | Astra (Orel) | Debian |
| Astra CE | osfullname | Astra Linux (Orel) | AstraLinuxCE |
| Astra CE 2.12.40 | osfinger | Astra Linux (Orel)-2 | AstraLinuxCE-2 |
| Debian | osfullname | Debian GNU/Linux | Debian |
| Mendel | osfullname | Mendel GNU/Linux | Mendel |
| Mendel 10 | osfinger | Mendel GNU/Linux-10 | Mendel-10 |
| Mint | osfullname | Linux Mint | Linuxmint |
| Mint 20.3 | osfinger | Linuxmint-20 | Linux Mint-20 |
| Pop | osfullname | Pop!_OS | Pop |
| Pop 20.04 | osfinger | Pop!_OS-20 | Pop-20 |
| Rocky | osfullname | Rocky Linux | Rocky |
| Rocky 8 | osfinger | Rocky Linux-8 | Rocky-8 |
| Rocky 8 | oscodename | Rocky Linux 8.5 (Green Obsidian) | GreenObsidian |
The current code that determines the OS grains on Linux is a mess: First
lsb-release is queried. If that fails, fall back to read os-release and
parse some `/etc/*-release` files. Then query `_linux_distribution` and
use a mixtures of those for the OS grains. `_linux_distribution` queries
the Python `distro` library. `distro` queries the os-release file,
lsb-release, and then `/etc/*-release`.
Rewrite the code that determines the OS grains on Linux. Solely rely on
the data provided by the os-release file. To not cause regressions, only
switch the distribution that has been tested. All other distributions
will use the legacy code (which was moved to
`_legacy_linux_distribution_data`).
The new code derives the `os_family` grain from the `ID_LIKE` field from
os-release (see https://github.com/saltstack/salt/issues/59061 for this
feature request). To enable this feature, the new code needs to be used
by default (and not just for selected distributions).
This commit introduces a few changes to the OS grains:
* AlmaLinux and Rocky Linux extract the codename from the `VERSION` field
now instead of using the full `PRETTY_NAME`.
* Mendel uses now `Mendel GNU/Linux` as `osfullname` and correctly
extracts the `osrelease` from `PRETTY_NAME`.
* Pop!_OS changes the `osfullname` from `Pop` to `Pop!_OS`.
* Astra Linux changes the `osfullname` from `AstraLinuxCE` to
`Astra Linux (Orel)` and `AstraLinuxSE` to `Astra Linux (Smolensk)`
respectively.
Fixes https://github.com/saltstack/salt/issues/61618
Signed-off-by: Benjamin Drung <benjamin.drung@ionos.com>