diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2013-03-12 03:39:56 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-03-12 18:40:10 +0000 |
commit | 106a7bcdb5ad9956f1d78f508408bfbcf7ff5120 (patch) | |
tree | 3af8d9c4eb28c6369ee50fffcd378118606b5b27 /meta | |
parent | 375ed2eaef10dd7d8f46badca6d779708724e5f6 (diff) | |
download | openembedded-core-106a7bcdb5ad9956f1d78f508408bfbcf7ff5120.tar.gz openembedded-core-106a7bcdb5ad9956f1d78f508408bfbcf7ff5120.tar.bz2 openembedded-core-106a7bcdb5ad9956f1d78f508408bfbcf7ff5120.zip |
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 <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/lib/oe/lsb.py | 39 |
1 files changed, 37 insertions, 2 deletions
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: |