diff --git a/src/oebuild/app/plugins/bitbake/in_container.py b/src/oebuild/app/plugins/bitbake/in_container.py index 2bd0503516ec1984655d45639edd8ed2dc698c87..ab1753fd5dd1e35b9dd4e37df7067a336cfa85f5 100644 --- a/src/oebuild/app/plugins/bitbake/in_container.py +++ b/src/oebuild/app/plugins/bitbake/in_container.py @@ -11,8 +11,9 @@ See the Mulan PSL v2 for more details. ''' import re import os +import sys -from docker.models.containers import Container +from docker.models.containers import Container,ExecResult from oebuild.local_conf import NATIVE_GCC_DIR, SSTATE_CACHE from oebuild.parse_env import ParseEnv, EnvContainer @@ -139,14 +140,20 @@ class InContainer(BaseBuild): content = self._get_bashrc_content(container=container) new_content = self._add_bashrc(content=content, line=command) self.update_bashrc(container=container, content=new_content) - res = self.client.container_exec_command( + res:ExecResult = self.client.container_exec_command( container=container, command="bash .bashrc", user=oebuild_util.CONTAINER_USER, - work_space=f"/home/{oebuild_util.CONTAINER_USER}") - + work_space=f"/home/{oebuild_util.CONTAINER_USER}", + demux=True) + exit_code = 0 for line in res.output: - logger.info(line.decode().strip('\n')) + if line[1] is not None: + logger.error(line[1].decode().strip('\n')) + exit_code = 1 + else: + logger.info(line[0].decode().strip('\n')) + sys.exit(exit_code) else: content = self._get_bashrc_content(container=container) for b_s in bitbake_const.BASH_BANNER.split('\n'): @@ -308,11 +315,15 @@ class InContainer(BaseBuild): content=self._restore_bashrc_content(old_content=old_content)) def _get_bashrc_content(self, container: Container): - content = self.client.container_exec_command( + res = self.client.container_exec_command( container=container, command=f"cat /home/{oebuild_util.CONTAINER_USER}/.bashrc", user="root", work_space=None, - stream=False).output + stream=False) + + if res.exit_code != 0: + logger.error(res.output) + sys.exit(1) - return content.decode() + return res.output.decode() diff --git a/src/oebuild/app/plugins/bitbake/in_host.py b/src/oebuild/app/plugins/bitbake/in_host.py index 970ce09ef23cf3aa39a70ef88bf4823802743f81..1eb0e655470cc578a7ad37911a453e9ab406d4a9 100644 --- a/src/oebuild/app/plugins/bitbake/in_host.py +++ b/src/oebuild/app/plugins/bitbake/in_host.py @@ -13,6 +13,7 @@ import os import subprocess import pty import shutil +import sys from oebuild.local_conf import NativesdkNotExist, NativesdkNotValid from oebuild.configure import Configure @@ -71,17 +72,24 @@ initialization operations''') shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - encoding="utf-8") as s_p: + encoding="utf-8", + text=True) as s_p: if s_p.returncode is not None and s_p.returncode != 0: err_msg = '' if s_p.stderr is not None: for line in s_p.stderr: err_msg.join(line) raise ValueError(err_msg) - - if s_p.stdout is not None: - for line in s_p.stdout: - logger.info(line.strip('\n')) + res = None + while res is None: + res = s_p.poll() + if s_p.stdout is not None: + for line in s_p.stdout: + logger.info(line.strip('\n')) + if s_p.stderr is not None: + for line in s_p.stderr: + logger.error(line.strip('\n')) + sys.exit(res) else: # run in Interactive mode banner_list = [] diff --git a/src/oebuild/docker_proxy.py b/src/oebuild/docker_proxy.py index 3a491cac9bfc18430bd4d395af41acdb4bbbc93d..d6e75f08e3cdb737ce75a95073fd5cb7943f738e 100644 --- a/src/oebuild/docker_proxy.py +++ b/src/oebuild/docker_proxy.py @@ -184,7 +184,8 @@ class DockerProxy: command: str or list, user: str = '', work_space = None, - stream = True): + stream = True, + demux = False): ''' run command like 'docker run exec', other param will be default and just use a little params @@ -196,7 +197,8 @@ class DockerProxy: workdir=work_space, stderr=True, stdout=True, - stream=stream + stream=stream, + demux=demux ) return res