summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-03-14 09:52:18 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-03-15 15:38:18 -0700
commitcca8bde9d700d68c5f36d7d4c47c048526aedfc0 (patch)
treecaa90b791f0f60d83935aaaf895ec7dd2424d165
parent287ed0c9ad5551b0ce4a66c59ebc36b84fca1bd6 (diff)
downloadpoky-cca8bde9d700d68c5f36d7d4c47c048526aedfc0.tar.gz
uninative: Add compatiblity version check
If glibc is newer on the host than in uninative, the failure mode is pretty nasty for clusters where the sstate is shared, including the Yocto Project autobuilder. This check aborts the use of uninative in such scenarios where a newer glibc version appears and avoids corruption of sstate caches. We use ldd to check the glibc version since that is included in libc-bin (or equivalent) which locales use so it should always be present. (From OE-Core rev: 7dccdf82d49fb11cb2a7cb205ae08311e5d43291) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/uninative.bbclass7
-rw-r--r--meta/conf/distro/include/yocto-uninative.inc2
2 files changed, 9 insertions, 0 deletions
diff --git a/meta/classes/uninative.bbclass b/meta/classes/uninative.bbclass
index 670efa9f05..1723364284 100644
--- a/meta/classes/uninative.bbclass
+++ b/meta/classes/uninative.bbclass
@@ -77,6 +77,11 @@ python uninative_event_fetchloader() {
77 except FileExistsError: 77 except FileExistsError:
78 pass 78 pass
79 79
80 # ldd output is "ldd (Ubuntu GLIBC 2.23-0ubuntu10) 2.23", extract last option from first line
81 glibcver = subprocess.check_output(["ldd", "--version"]).decode('utf-8').split('\n')[0].split()[-1]
82 if bb.utils.vercmp_string(d.getVar("UNINATIVE_MAXGLIBCVERSION"), glibcver) < 0:
83 raise RuntimeError("Your host glibc verson (%s) is newer than that in uninative (%s). Disabling uninative so that sstate is not corrupted." % (glibcver, d.getVar("UNINATIVE_MAXGLIBCVERSION")))
84
80 cmd = d.expand("\ 85 cmd = d.expand("\
81mkdir -p ${UNINATIVE_STAGING_DIR}-uninative; \ 86mkdir -p ${UNINATIVE_STAGING_DIR}-uninative; \
82cd ${UNINATIVE_STAGING_DIR}-uninative; \ 87cd ${UNINATIVE_STAGING_DIR}-uninative; \
@@ -94,6 +99,8 @@ ${UNINATIVE_STAGING_DIR}-uninative/relocate_sdk.py \
94 99
95 enable_uninative(d) 100 enable_uninative(d)
96 101
102 except RuntimeError as e:
103 bb.warn(str(e))
97 except bb.fetch2.BBFetchException as exc: 104 except bb.fetch2.BBFetchException as exc:
98 bb.warn("Disabling uninative as unable to fetch uninative tarball: %s" % str(exc)) 105 bb.warn("Disabling uninative as unable to fetch uninative tarball: %s" % str(exc))
99 bb.warn("To build your own uninative loader, please bitbake uninative-tarball and set UNINATIVE_TARBALL appropriately.") 106 bb.warn("To build your own uninative loader, please bitbake uninative-tarball and set UNINATIVE_TARBALL appropriately.")
diff --git a/meta/conf/distro/include/yocto-uninative.inc b/meta/conf/distro/include/yocto-uninative.inc
index b3f8c247f5..cd5fc0bfe5 100644
--- a/meta/conf/distro/include/yocto-uninative.inc
+++ b/meta/conf/distro/include/yocto-uninative.inc
@@ -6,6 +6,8 @@
6# to the distro running on the build machine. 6# to the distro running on the build machine.
7# 7#
8 8
9UNINATIVE_MAXGLIBCVERSION = "2.27"
10
9UNINATIVE_URL ?= "http://downloads.yoctoproject.org/releases/uninative/1.8/" 11UNINATIVE_URL ?= "http://downloads.yoctoproject.org/releases/uninative/1.8/"
10UNINATIVE_CHECKSUM[i686] ?= "427ce522ec97f65c75fd89587d90ef789e8cbca4a617abc4b5822abb01c2d0ae" 12UNINATIVE_CHECKSUM[i686] ?= "427ce522ec97f65c75fd89587d90ef789e8cbca4a617abc4b5822abb01c2d0ae"
11UNINATIVE_CHECKSUM[x86_64] ?= "de4947e98e09e1432d069311cc2093974ecb9138a714fd5466f73524de66a693" 13UNINATIVE_CHECKSUM[x86_64] ?= "de4947e98e09e1432d069311cc2093974ecb9138a714fd5466f73524de66a693"