mirror of
https://git.yoctoproject.org/poky
synced 2026-05-31 00:39:46 +00: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:
committed by
Richard Purdie
parent
545f5f96d9
commit
42441ea481
+28
-9
@@ -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():
|
def release_dict_lsb():
|
||||||
""" Return the output of lsb_release -ir as a dictionary """
|
""" Return the output of lsb_release -ir as a dictionary """
|
||||||
from subprocess import PIPE
|
from subprocess import PIPE
|
||||||
@@ -46,14 +68,6 @@ def release_dict_file():
|
|||||||
if match:
|
if match:
|
||||||
data['DISTRIB_ID'] = match.group(1)
|
data['DISTRIB_ID'] = match.group(1)
|
||||||
data['DISTRIB_RELEASE'] = match.group(2)
|
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'):
|
elif os.path.exists('/etc/SuSE-release'):
|
||||||
data = {}
|
data = {}
|
||||||
data['DISTRIB_ID'] = 'SUSE LINUX'
|
data['DISTRIB_ID'] = 'SUSE LINUX'
|
||||||
@@ -73,7 +87,12 @@ def distro_identifier(adjust_hook=None):
|
|||||||
|
|
||||||
import re
|
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:
|
if not distro_data:
|
||||||
distro_data = release_dict_file()
|
distro_data = release_dict_file()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user