diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2016-06-24 00:07:01 +1200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-07-07 13:29:01 +0100 |
commit | 9e711b54487c3141d7264b8cf0d74f9465020190 (patch) | |
tree | 9f5cbc7ba66a044b53cfcb8ad0d75fe9926d2bf8 | |
parent | 1a064385d6921ec90b33c9064dafaab11a36267c (diff) | |
download | openembedded-core-9e711b54487c3141d7264b8cf0d74f9465020190.tar.gz openembedded-core-9e711b54487c3141d7264b8cf0d74f9465020190.tar.bz2 openembedded-core-9e711b54487c3141d7264b8cf0d74f9465020190.zip |
classes/sstate: add a mode to error if sstate package unavailable
If BB_SETSCENE_ENFORCE is set to "1" and an sstate package fails to
download outside of the whitelist specified by
BB_SETSCENE_ENFORCE_WHITELIST, then fail immediately so you can tell
that the problem was caused by failing to restore the task from sstate.
Part of the implementation of [YOCTO #9367].
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/sstate.bbclass | 23 | ||||
-rw-r--r-- | meta/conf/bitbake.conf | 3 | ||||
-rwxr-xr-x | scripts/oe-buildenv-internal | 2 |
3 files changed, 26 insertions, 2 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass index 4e81fc925d..621dc37d70 100644 --- a/meta/classes/sstate.bbclass +++ b/meta/classes/sstate.bbclass @@ -719,6 +719,7 @@ def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=False): ret = [] missed = [] + missing = [] extension = ".tgz" if siginfo: extension = extension + ".siginfo" @@ -740,6 +741,18 @@ def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=False): return spec, extrapath, tname + def sstate_pkg_to_pn(pkg, d): + """ + Translate an sstate filename to a PN value by way of SSTATE_PKGSPEC. This is slightly hacky but + we don't have access to everything in this context. + """ + pkgspec = d.getVar('SSTATE_PKGSPEC', False) + try: + idx = pkgspec.split(':').index('${PN}') + except ValueError: + bb.fatal('Unable to find ${PN} in SSTATE_PKGSPEC') + return pkg.split(':')[idx] + for task in range(len(sq_fn)): @@ -774,6 +787,8 @@ def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=False): if localdata.getVar('BB_NO_NETWORK', True) == "1" and localdata.getVar('SSTATE_MIRROR_ALLOW_NETWORK', True) == "1": localdata.delVar('BB_NO_NETWORK') + whitelist = bb.runqueue.get_setscene_enforce_whitelist(d) + from bb.fetch2 import FetchConnectionCache def checkstatus_init(thread_worker): thread_worker.connection_cache = FetchConnectionCache() @@ -800,6 +815,12 @@ def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=False): except: missed.append(task) bb.debug(2, "SState: Unsuccessful fetch test for %s" % srcuri) + if whitelist: + pn = sstate_pkg_to_pn(sstatefile, d) + taskname = sq_task[task] + if not bb.runqueue.check_setscene_enforce_whitelist(pn, taskname, whitelist): + missing.append(task) + bb.error('Sstate artifact unavailable for %s.%s' % (pn, taskname)) pass bb.event.fire(bb.event.ProcessProgress("Checking sstate mirror object availability", len(tasklist) - thread_worker.tasks.qsize()), d) @@ -823,6 +844,8 @@ def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=False): pool.start() pool.wait_completion() bb.event.fire(bb.event.ProcessFinished("Checking sstate mirror object availability"), d) + if whitelist and missing: + bb.fatal('Required artifacts were unavailable - exiting') inheritlist = d.getVar("INHERIT", True) if "toaster" in inheritlist: diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf index 5557c0f70e..613fc4cfdd 100644 --- a/meta/conf/bitbake.conf +++ b/meta/conf/bitbake.conf @@ -812,7 +812,8 @@ BB_HASHCONFIG_WHITELIST ?= "${BB_HASHBASE_WHITELIST} DATE TIME SSH_AGENT_PID \ SSH_AUTH_SOCK PSEUDO_BUILD BB_ENV_EXTRAWHITE DISABLE_SANITY_CHECKS \ PARALLEL_MAKE BB_NUMBER_THREADS BB_ORIGENV BB_INVALIDCONF BBINCLUDED \ GIT_PROXY_COMMAND ALL_PROXY all_proxy NO_PROXY no_proxy FTP_PROXY ftp_proxy \ - HTTP_PROXY http_proxy HTTPS_PROXY https_proxy SOCKS5_USER SOCKS5_PASSWD" + HTTP_PROXY http_proxy HTTPS_PROXY https_proxy SOCKS5_USER SOCKS5_PASSWD \ + BB_SETSCENE_ENFORCE" BB_SIGNATURE_EXCLUDE_FLAGS ?= "doc deps depends \ lockfiles type vardepsexclude vardeps vardepvalue vardepvalueexclude \ file-checksums python func task export unexport noexec nostamp dirs cleandirs \ diff --git a/scripts/oe-buildenv-internal b/scripts/oe-buildenv-internal index 56d341983e..03dc50ff91 100755 --- a/scripts/oe-buildenv-internal +++ b/scripts/oe-buildenv-internal @@ -118,7 +118,7 @@ BB_ENV_EXTRAWHITE_OE="MACHINE DISTRO TCMODE TCLIBC HTTP_PROXY http_proxy \ HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy FTPS_PROXY ftps_proxy ALL_PROXY \ all_proxy NO_PROXY no_proxy SSH_AGENT_PID SSH_AUTH_SOCK BB_SRCREV_POLICY \ SDKMACHINE BB_NUMBER_THREADS BB_NO_NETWORK PARALLEL_MAKE GIT_PROXY_COMMAND \ -SOCKS5_PASSWD SOCKS5_USER SCREENDIR STAMPS_DIR BBPATH_EXTRA" +SOCKS5_PASSWD SOCKS5_USER SCREENDIR STAMPS_DIR BBPATH_EXTRA BB_SETSCENE_ENFORCE" BB_ENV_EXTRAWHITE="$(echo $BB_ENV_EXTRAWHITE $BB_ENV_EXTRAWHITE_OE | tr ' ' '\n' | LC_ALL=C sort --unique | tr '\n' ' ')" |