mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
lib/oe/lsb: prefer /etc/os-release for distribution data
os-release(5) is an increasingly standard source of operating system identification and more likely to be present on modern OS deployments, i.e. many container variants of common distros include os-release and not the lsb_release tool. Therefore we should favour parsing /etc/os-release in distro_identifier(), try lsb_release when that fails and finally fall back on various distro specific sources of OS identification. (From OE-Core rev: fc4eddecddec68d03a985086fa32db40ad0c7bfc) Signed-off-by: Joshua Lock <joshua.g.lock@intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
545f5f96d9
commit
42441ea481
|
@ -1,3 +1,25 @@
|
|||
def release_dict_osr():
|
||||
""" Populate a dict with pertinent values from /etc/os-release """
|
||||
if not os.path.exists('/etc/os-release'):
|
||||
return None
|
||||
|
||||
data = {}
|
||||
with open('/etc/os-release') as f:
|
||||
for line in f:
|
||||
try:
|
||||
key, val = line.rstrip().split('=', 1)
|
||||
except ValueError:
|
||||
continue
|
||||
if key == 'NAME':
|
||||
data['DISTRIB_ID'] = val.strip('"')
|
||||
if key == 'VERSION_ID':
|
||||
data['DISTRIB_RELEASE'] = val.strip('"')
|
||||
|
||||
if len(data.keys()) != 2:
|
||||
return None
|
||||
|
||||
return data
|
||||
|
||||
def release_dict_lsb():
|
||||
""" Return the output of lsb_release -ir as a dictionary """
|
||||
from subprocess import PIPE
|
||||
|
@ -46,14 +68,6 @@ def release_dict_file():
|
|||
if match:
|
||||
data['DISTRIB_ID'] = match.group(1)
|
||||
data['DISTRIB_RELEASE'] = match.group(2)
|
||||
elif os.path.exists('/etc/os-release'):
|
||||
data = {}
|
||||
with open('/etc/os-release') as f:
|
||||
for line in f:
|
||||
if line.startswith('NAME='):
|
||||
data['DISTRIB_ID'] = line[5:].rstrip().strip('"')
|
||||
if line.startswith('VERSION_ID='):
|
||||
data['DISTRIB_RELEASE'] = line[11:].rstrip().strip('"')
|
||||
elif os.path.exists('/etc/SuSE-release'):
|
||||
data = {}
|
||||
data['DISTRIB_ID'] = 'SUSE LINUX'
|
||||
|
@ -73,7 +87,12 @@ def distro_identifier(adjust_hook=None):
|
|||
|
||||
import re
|
||||
|
||||
distro_data = release_dict_lsb()
|
||||
# Try /etc/os-release first, then the output of `lsb_release -ir` and
|
||||
# finally fall back on parsing various release files in order to determine
|
||||
# host distro name and version.
|
||||
distro_data = release_dict_osr()
|
||||
if not distro_data:
|
||||
distro_data = release_dict_lsb()
|
||||
if not distro_data:
|
||||
distro_data = release_dict_file()
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user