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-14 16:37:09 +0000 |
commit | 062a5f6c69f9be2057920f9cbf5ab8cc1511589b (patch) | |
tree | a9e82956018b2dfb1ae324dc6c817ae8eaf9bff6 /meta/lib | |
parent | 4da406cd50cf02a63ed76810a670aba1eb561c79 (diff) | |
download | ast2050-yocto-poky-062a5f6c69f9be2057920f9cbf5ab8cc1511589b.zip ast2050-yocto-poky-062a5f6c69f9be2057920f9cbf5ab8cc1511589b.tar.gz |
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].
(From OE-Core rev: 106a7bcdb5ad9956f1d78f508408bfbcf7ff5120)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-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 9133356..f4a5ba1 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: |