From 106a7bcdb5ad9956f1d78f508408bfbcf7ff5120 Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Tue, 12 Mar 2013 03:39:56 +0000 Subject: lib/oe/lsb: enable getting distro ID when lsb_release is not installed If lsb_release is not installed (as it may not be on headless/minimal installations on distros whose LSB package has a long list of dependencies) we need to gather the information directly from files in /etc. Fixes [YOCTO #4012]. Signed-off-by: Paul Eggleton Signed-off-by: Richard Purdie --- meta/lib/oe/lsb.py | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'meta/lib') diff --git a/meta/lib/oe/lsb.py b/meta/lib/oe/lsb.py index 9133356afb..f4a5ba1c17 100644 --- a/meta/lib/oe/lsb.py +++ b/meta/lib/oe/lsb.py @@ -17,6 +17,37 @@ def release_dict(): data[key] = value return data +def release_dict_file(): + """ Try to gather LSB release information manually when lsb_release tool is unavailable """ + data = None + try: + if os.path.exists('/etc/lsb-release'): + data = {} + with open('/etc/lsb-release') as f: + for line in f: + key, value = line.split("=", 1) + data[key] = value + elif os.path.exists('/etc/redhat-release'): + data = {} + with open('/etc/redhat-release') as f: + distro = f.readline().strip() + import re + match = re.match(r'(.*) release (.*) \((.*)\)', distro) + if match: + data['DISTRIB_ID'] = match.group(1) + data['DISTRIB_RELEASE'] = match.group(2) + elif os.path.exists('/etc/SuSE-release'): + data = {} + data['DISTRIB_ID'] = 'SUSE LINUX' + with open('/etc/SuSE-release') as f: + for line in f: + if line.startswith('VERSION = '): + data['DISTRIB_RELEASE'] = line[10:].rstrip() + break + except IOError: + return None + return data + def distro_identifier(adjust_hook=None): """Return a distro identifier string based upon lsb_release -ri, with optional adjustment via a hook""" @@ -25,8 +56,12 @@ def distro_identifier(adjust_hook=None): if lsb_data: distro_id, release = lsb_data['Distributor ID'], lsb_data['Release'] else: - distro_id, release = None, None - + lsb_data_file = release_dict_file() + if lsb_data_file: + distro_id, release = lsb_data_file['DISTRIB_ID'], lsb_data_file['DISTRIB_RELEASE'] + else: + distro_id, release = None, None + if adjust_hook: distro_id, release = adjust_hook(distro_id, release) if not distro_id: -- cgit 1.2.3-korg