Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 162, in _new_conn (self._dns_host, self.port), self.timeout, **extra_kw) File "/usr/lib/python3.6/site-packages/urllib3/util/connection.py", line 80, in create_connection raise err File "/usr/lib/python3.6/site-packages/urllib3/util/connection.py", line 70, in create_connection sock.connect(sa) TimeoutError: [Errno 110] Connection timed out During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen chunked=chunked) File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 343, in _make_request self._validate_conn(conn) File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 839, in _validate_conn conn.connect() File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 315, in connect conn = self._new_conn() File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 171, in _new_conn self, "Failed to establish a new connection: %s" % e) urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 110] Connection timed out During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 449, in send timeout=timeout File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen _stacktrace=sys.exc_info()[2]) File "/usr/lib/python3.6/site-packages/urllib3/util/retry.py", line 399, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='build.opencloudos.tech', port=443): Max retries exceeded with url: /kojihub (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 110] Connection timed out',)) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 648, in cli_main main() File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 338, in main latest_link_components=latest_link_components, File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 494, in run_compose pkgset_phase.start() File "/usr/lib/python3.6/site-packages/pungi/phases/base.py", line 63, in start self.run() File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/__init__.py", line 36, in run self.package_sets, self.path_prefix = SourceClass(self.compose)() File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 194, in __call__ self.compose, self.koji_wrapper, path_prefix File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 200, in get_pkgset_from_koji event_info = get_koji_event_info(compose, koji_wrapper) File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 908, in get_koji_event_info result = get_koji_event_raw(koji_wrapper, compose.koji_event, event_file) File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 923, in get_koji_event_raw koji_event = koji_wrapper.koji_proxy.getLastEvent() File "/usr/lib/python3.6/site-packages/koji/__init__.py", line 2350, in __call__ return self.__func(self.__name, args, opts) File "/usr/lib/python3.6/site-packages/koji/__init__.py", line 2829, in _callMethod return self._sendCall(handler, headers, request) File "/usr/lib/python3.6/site-packages/koji/__init__.py", line 2747, in _sendCall raise e File "/usr/lib/python3.6/site-packages/koji/__init__.py", line 2743, in _sendCall return self._sendOneCall(handler, headers, request) File "/usr/lib/python3.6/site-packages/koji/__init__.py", line 2790, in _sendOneCall r = self.rsession.post(handler, **callopts) File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 581, in post return self.request('POST', url, data=data, json=json, **kwargs) File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 533, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 646, in send r = adapter.send(request, **kwargs) File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 516, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='build.opencloudos.tech', port=443): Max retries exceeded with url: /kojihub (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 110] Connection timed out',)) Frame send in /usr/lib/python3.6/site-packages/requests/adapters.py at line 516 509 if isinstance(e.reason, _ProxyError): 510 raise ProxyError(e, request=request) 511 512 if isinstance(e.reason, _SSLError): 513 # This branch is for urllib3 v1.22 and later. 514 raise SSLError(e, request=request) 515 --> 516 raise ConnectionError(e, request=request) 517 518 except ClosedPoolError as e: 519 raise ConnectionError(e, request=request) 520 521 except _ProxyError as e: 522 raise ProxyError(e) cert = None chunked = False conn = proxies = OrderedDict() request = self = self._pool_block = False self._pool_connections = 10 self._pool_maxsize = 10 self.config = {} self.max_retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) self.poolmanager = self.proxy_manager = {} stream = True timeout = url = '/kojihub' verify = True Frame send in /usr/lib/python3.6/site-packages/requests/sessions.py at line 646 639 # Get the appropriate adapter to use 640 adapter = self.get_adapter(url=request.url) 641 642 # Start time (approximately) of the request 643 start = preferred_clock() 644 645 # Send the request --> 646 r = adapter.send(request, **kwargs) 647 648 # Total elapsed time of the request (approximately) 649 elapsed = preferred_clock() - start 650 r.elapsed = timedelta(seconds=elapsed) 651 652 # Response manipulation hooks adapter = allow_redirects = True hooks = {'response': []} kwargs = {'timeout': 43200, 'verify': True, 'proxies': OrderedDict(), 'stream': True, 'cert': None} request = self = self.adapters = OrderedDict([('https://', ), ('http://', )]) self.auth = None self.cert = None self.cookies = self.headers = {'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} self.hooks = {'response': []} self.max_redirects = 30 self.params = {} self.proxies = {} self.stream = False self.trust_env = True self.verify = True start = 1718782888.500203 stream = True Frame request in /usr/lib/python3.6/site-packages/requests/sessions.py at line 533 526 527 # Send the request. 528 send_kwargs = { 529 'timeout': timeout, 530 'allow_redirects': allow_redirects, 531 } 532 send_kwargs.update(settings) --> 533 resp = self.send(prep, **send_kwargs) 534 535 return resp 536 537 def get(self, url, **kwargs): 538 r"""Sends a GET request. Returns :class:`Response` object. 539 allow_redirects = True auth = None cert = None cookies = None data = b"\n\ngetLastEvent\n\n\n\n" files = None headers = {'User-Agent': 'koji/1', 'Content-Type': 'text/xml', 'Content-Length': '106'} hooks = None json = None method = 'POST' params = None prep = proxies = {} req = self = self.adapters = OrderedDict([('https://', ), ('http://', )]) self.auth = None self.cert = None self.cookies = self.headers = {'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} self.hooks = {'response': []} self.max_redirects = 30 self.params = {} self.proxies = {} self.stream = False self.trust_env = True self.verify = True send_kwargs = {'timeout': 43200, 'allow_redirects': True, 'verify': True, 'proxies': OrderedDict(), 'stream': True, 'cert': None} settings = {'verify': True, 'proxies': OrderedDict(), 'stream': True, 'cert': None} stream = True timeout = 43200 url = 'https://build.opencloudos.tech/kojihub' verify = None Frame post in /usr/lib/python3.6/site-packages/requests/sessions.py at line 581 574 :param data: (optional) Dictionary, list of tuples, bytes, or file-like 575 object to send in the body of the :class:`Request`. 576 :param json: (optional) json to send in the body of the :class:`Request`. 577 :param \*\*kwargs: Optional arguments that ``request`` takes. 578 :rtype: requests.Response 579 """ 580 --> 581 return self.request('POST', url, data=data, json=json, **kwargs) 582 583 def put(self, url, data=None, **kwargs): 584 r"""Sends a PUT request. Returns :class:`Response` object. 585 586 :param url: URL for the new :class:`Request` object. 587 :param data: (optional) Dictionary, list of tuples, bytes, or file-like data = b"\n\ngetLastEvent\n\n\n\n" json = None kwargs = {'headers': {'User-Agent': 'koji/1', 'Content-Type': 'text/xml', 'Content-Length': '106'}, 'stream': True, 'timeout': 43200} self = self.adapters = OrderedDict([('https://', ), ('http://', )]) self.auth = None self.cert = None self.cookies = self.headers = {'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} self.hooks = {'response': []} self.max_redirects = 30 self.params = {} self.proxies = {} self.stream = False self.trust_env = True self.verify = True url = 'https://build.opencloudos.tech/kojihub' Frame _sendOneCall in /usr/lib/python3.6/site-packages/koji/__init__.py at line 2790 2783 # convert to hex-string 2784 _val = '0x' + _val.hex() 2785 if len(_val) > 1024: 2786 _val = _val[:1024] + '...' 2787 self.logger.debug("%s: %r" % (_key, _val)) 2788 with warnings.catch_warnings(): 2789 warnings.simplefilter("ignore") --> 2790 r = self.rsession.post(handler, **callopts) 2791 r.raise_for_status() 2792 try: 2793 ret = self._read_xmlrpc_response(r) 2794 finally: 2795 r.close() 2796 return ret auth = None callopts = {'headers': {'User-Agent': 'koji/1', 'Content-Type': 'text/xml', 'Content-Length': '106'}, 'data': b"\n\ngetLastEvent\n\n\n\n\ngetLastEvent\n\n\n\n" self = self._apidoc = None self._calls = [] self.authtype = None self.baseurl = 'https://build.opencloudos.tech/kojihub' self.callnum = None self.logged_in = False self.logger = self.opts = {'timeout': 43200, 'max_retries': 30, 'retry_interval': 20, 'anon_retry': False, 'offline_retry': False, 'offline_retry_interval': 20, 'debug': False, 'debug_xmlrpc': False, 'serverca': '', 'use_fast_ self.retries = 1 self.rsession = self.sinfo = None timeout = 43200 verify = '' Frame _sendCall in /usr/lib/python3.6/site-packages/koji/__init__.py at line 2743 2736 exc.request.url = self._sanitize_url(exc.request.url) 2737 return exc 2738 2739 def _sendCall(self, handler, headers, request): 2740 # handle expired connections 2741 for i in (0, 1): 2742 try: --> 2743 return self._sendOneCall(handler, headers, request) 2744 except Exception as e: 2745 e = self._sanitize_connection_error(e) 2746 if i or not is_conn_error(e): 2747 raise e 2748 self.logger.debug("Connection Error: %s", e) 2749 self.new_session() handler = 'https://build.opencloudos.tech/kojihub' headers = [('User-Agent', 'koji/1'), ('Content-Type', 'text/xml'), ('Content-Length', '106')] i = 0 request = b"\n\ngetLastEvent\n\n\n\n" self = self._apidoc = None self._calls = [] self.authtype = None self.baseurl = 'https://build.opencloudos.tech/kojihub' self.callnum = None self.logged_in = False self.logger = self.opts = {'timeout': 43200, 'max_retries': 30, 'retry_interval': 20, 'anon_retry': False, 'offline_retry': False, 'offline_retry_interval': 20, 'debug': False, 'debug_xmlrpc': False, 'serverca': '', 'use_fast_ self.retries = 1 self.rsession = self.sinfo = None Frame _sendCall in /usr/lib/python3.6/site-packages/koji/__init__.py at line 2747 2740 # handle expired connections 2741 for i in (0, 1): 2742 try: 2743 return self._sendOneCall(handler, headers, request) 2744 except Exception as e: 2745 e = self._sanitize_connection_error(e) 2746 if i or not is_conn_error(e): --> 2747 raise e 2748 self.logger.debug("Connection Error: %s", e) 2749 self.new_session() 2750 2751 def _sendOneCall(self, handler, headers, request): 2752 headers = dict(headers) 2753 callopts = { handler = 'https://build.opencloudos.tech/kojihub' headers = [('User-Agent', 'koji/1'), ('Content-Type', 'text/xml'), ('Content-Length', '106')] i = 0 request = b"\n\ngetLastEvent\n\n\n\n" self = self._apidoc = None self._calls = [] self.authtype = None self.baseurl = 'https://build.opencloudos.tech/kojihub' self.callnum = None self.logged_in = False self.logger = self.opts = {'timeout': 43200, 'max_retries': 30, 'retry_interval': 20, 'anon_retry': False, 'offline_retry': False, 'offline_retry_interval': 20, 'debug': False, 'debug_xmlrpc': False, 'serverca': '', 'use_fast_ self.retries = 1 self.rsession = self.sinfo = None Frame _callMethod in /usr/lib/python3.6/site-packages/koji/__init__.py at line 2829 2822 self.retries = 0 2823 max_retries = self.opts.get('max_retries', 30) 2824 interval = self.opts.get('retry_interval', 20) 2825 while True: 2826 tries += 1 2827 self.retries += 1 2828 try: --> 2829 return self._sendCall(handler, headers, request) 2830 # basically, we want to retry on most errors, with a few exceptions 2831 # - faults (this means the call completed and failed) 2832 # - SystemExit, KeyboardInterrupt 2833 # note that, for logged-in sessions the server should tell us (via a RetryError 2834 # fault) if the call cannot be retried. For non-logged-in sessions, all calls 2835 # should be read-only and hence retryable. args = handler = 'https://build.opencloudos.tech/kojihub' headers = [('User-Agent', 'koji/1'), ('Content-Type', 'text/xml'), ('Content-Length', '106')] interval = 20 kwargs = {} max_retries = 30 name = 'getLastEvent' request = b"\n\ngetLastEvent\n\n\n\n" retry = True self = self._apidoc = None self._calls = [] self.authtype = None self.baseurl = 'https://build.opencloudos.tech/kojihub' self.callnum = None self.logged_in = False self.logger = self.opts = {'timeout': 43200, 'max_retries': 30, 'retry_interval': 20, 'anon_retry': False, 'offline_retry': False, 'offline_retry_interval': 20, 'debug': False, 'debug_xmlrpc': False, 'serverca': '', 'use_fast_ self.retries = 1 self.rsession = self.sinfo = None tb_str = 'Traceback (most recent call last):\n File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 162, in _new_conn\n (self._dns_host, self.port), self.timeout, **extra_kw)\n File "/usr/l tries = 1 Frame __call__ in /usr/lib/python3.6/site-packages/koji/__init__.py at line 2350 2343 self.__name = name 2344 self.__session = session 2345 2346 def __getattr__(self, name): 2347 return type(self)(self.__func, "%s.%s" % (self.__name, name)) 2348 2349 def __call__(self, *args, **opts): --> 2350 return self.__func(self.__name, args, opts) 2351 2352 @property 2353 def __doc__(self): 2354 if self.__session is None: 2355 # There could be potentially session-less object 2356 return None args = opts = {} self = self._VirtualMethod__name = 'getLastEvent' self._VirtualMethod__session = Frame get_koji_event_raw in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 923 916 return result 917 918 919 def get_koji_event_raw(koji_wrapper, event_id, event_file): 920 if event_id: 921 koji_event = koji_wrapper.koji_proxy.getEvent(event_id) 922 else: --> 923 koji_event = koji_wrapper.koji_proxy.getLastEvent() 924 925 with open(event_file, "w") as f: 926 json.dump(koji_event, f) 927 928 return koji_event event_file = '/mnt/koji/compose/9/9.2/OpenCloudOS-9.2-20240619.0/work/global/koji-event' event_id = None koji_wrapper = Frame get_koji_event_info in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 908 901 return MaterializedPackageSet.create_many(partials) 902 903 904 def get_koji_event_info(compose, koji_wrapper): 905 event_file = os.path.join(compose.paths.work.topdir(arch="global"), "koji-event") 906 907 compose.log_info("Getting koji event") --> 908 result = get_koji_event_raw(koji_wrapper, compose.koji_event, event_file) 909 if compose.koji_event: 910 compose.log_info( 911 "Setting koji event to a custom value: %s" % compose.koji_event 912 ) 913 else: 914 compose.log_info("Koji event: %s" % result["id"]) compose = event_file = '/mnt/koji/compose/9/9.2/OpenCloudOS-9.2-20240619.0/work/global/koji-event' koji_wrapper = Frame get_pkgset_from_koji in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 200 193 package_sets = get_pkgset_from_koji( 194 self.compose, self.koji_wrapper, path_prefix 195 ) 196 return (package_sets, path_prefix) 197 198 199 def get_pkgset_from_koji(compose, koji_wrapper, path_prefix): --> 200 event_info = get_koji_event_info(compose, koji_wrapper) 201 return populate_global_pkgset(compose, koji_wrapper, path_prefix, event_info) 202 203 204 def _add_module_to_variant( 205 koji_wrapper, 206 variant, compose = koji_wrapper = path_prefix = '/mnt/koji/' Frame __call__ in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 194 187 def __call__(self): 188 compose = self.compose 189 koji_profile = compose.conf["koji_profile"] 190 self.koji_wrapper = pungi.wrappers.kojiwrapper.KojiWrapper(koji_profile) 191 # path prefix must contain trailing '/' 192 path_prefix = self.koji_wrapper.koji_module.config.topdir.rstrip("/") + "/" 193 package_sets = get_pkgset_from_koji( --> 194 self.compose, self.koji_wrapper, path_prefix 195 ) 196 return (package_sets, path_prefix) 197 198 199 def get_pkgset_from_koji(compose, koji_wrapper, path_prefix): 200 event_info = get_koji_event_info(compose, koji_wrapper) compose = koji_profile = 'koji' path_prefix = '/mnt/koji/' self = self.compose = self.koji_wrapper = Frame run in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/__init__.py at line 36 29 self.path_prefix = None 30 31 def run(self): 32 from . import sources 33 34 SourceClass = sources.ALL_SOURCES[self.compose.conf["pkgset_source"].lower()] 35 --> 36 self.package_sets, self.path_prefix = SourceClass(self.compose)() 37 38 def validate(self): 39 extra_tasks = self.compose.conf.get("pkgset_koji_scratch_tasks", None) 40 sigkeys = tuple(self.compose.conf["sigkeys"] or [None]) 41 if extra_tasks is not None and None not in sigkeys and "" not in sigkeys: 42 raise ValueError( SourceClass = self = self._skipped = False self.compose = self.finished = False self.msg = '---------- PHASE: PKGSET ----------' self.name = 'pkgset' self.package_sets = [] self.path_prefix = None self.used_patterns = None sources = Frame start in /usr/lib/python3.6/site-packages/pungi/phases/base.py at line 63 56 self._skipped = self.skip() 57 if self._skipped: 58 self.compose.log_warning("[SKIP ] %s" % self.msg) 59 self.finished = True 60 return 61 self.compose.log_info("[BEGIN] %s" % self.msg) 62 self.compose.notifier.send("phase-start", phase_name=self.name) --> 63 self.run() 64 65 def get_config_block(self, variant, arch=None): 66 """In config for current phase, find a block corresponding to given 67 variant and arch. The arch should be given if and only if the config 68 uses variant/arch mapping. 69 """ self = self._skipped = False self.compose = self.finished = False self.msg = '---------- PHASE: PKGSET ----------' self.name = 'pkgset' self.package_sets = [] self.path_prefix = None self.used_patterns = None Frame run_compose in /usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py at line 494 487 break 488 else: 489 print("Not in RV_SPECAIL") 490 491 init_phase.start() 492 init_phase.stop() 493 --> 494 pkgset_phase.start() 495 pkgset_phase.stop() 496 497 # WEAVER phase - launches other phases which can safely run in parallel 498 essentials_schema = ( 499 buildinstall_phase, 500 (gather_phase, createrepo_phase), buildinstall_phase = combination = compose = config_copy_path = '/mnt/koji/compose/9/9.2/OpenCloudOS-9.2-20240619.0/logs/global/config-copy' config_dump_full = '/mnt/koji/compose/9/9.2/OpenCloudOS-9.2-20240619.0/logs/global/config-dump.global.log' config_file = '/root/opencloudos/compose/pungi-opencloudos/opencloudos/override.conf' create_latest_link = True createiso_phase = createrepo_phase = errors = [] extra_isos_phase = extrafiles_phase = f = <_io.TextIOWrapper name='/mnt/koji/compose/9/9.2/OpenCloudOS-9.2-20240619.0/logs/global/config-dump.global.log' mode='w' encoding='UTF-8'> gather_phase = image_build_phase = image_checksum_phase = image_container_phase = init_phase = latest_link_components = -1 latest_link_status = None liveimages_phase = livemedia_phase = osbs_phase = osbuild_phase = ostree_installer_phase = ostree_phase = phase = pkgset_phase = pungi = repoclosure_phase = test_phase = Frame main in /usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py at line 338 331 notifier.compose = compose 332 COMPOSE = compose 333 try: 334 run_compose( 335 compose, 336 create_latest_link=create_latest_link, 337 latest_link_status=latest_link_status, --> 338 latest_link_components=latest_link_components, 339 ) 340 except UnsignedPackagesError: 341 # There was an unsigned package somewhere. It is not safe to reuse any 342 # package set from this compose (since we could leak the unsigned 343 # package). Let's make sure all reuse files are deleted. 344 for fp in glob.glob(compose.paths.work.pkgset_reuse_file("*")): Compose = PHASES_NAMES_MODIFIED = ['buildinstall', 'createiso', 'createrepo', 'extra_files', 'extra_isos', 'gather', 'image_build', 'image_checksum', 'image_container', 'init', 'live_images', 'live_media', 'osbs', 'osbuild', 'ostree', abort = .abort at 0x7f5c7a295ea0> compose = compose_dir = '/mnt/koji/compose/9/9.2/OpenCloudOS-9.2-20240619.0' compose_type = 'production' conf = {'RELEASE_NAME': 'OpenCloudOS', 'RELEASE_SHORT': 'OpenCloudOS', 'RELEASE_VERSION': '9.2', 'PKGSET_KOJI_TAG': 'dist-oc9-compose', 'RUNROOT_CHANNEL': 'image', 'RUNROOT_TAG': 'dist-oc9-build', 'RELEASE_V create_latest_link = True errors = [] fail_to_start = .fail_to_start at 0x7f5c7a295e18> group = kobo = latest_link_components = -1 latest_link_status = None logger = notifier = opts = Namespace(compose_dir=None, compose_type='production', config='/root/opencloudos/compose/pungi-opencloudos/oc.conf', just_phase=[], koji_event=None, label='RC-9.2', latest_link_components=-1, latest_l parser = ArgumentParser(prog='pungi-koji', usage=None, description=None, formatter_class=, conflict_handler='error', add_help=True) productmd = pungi = warning = 'WARNING: Unrecognized config option: RUNROOT_CHANNEL.' warnings = ["WARNING: Config option runroot was removed and has no effect; remove it. Please specify 'runroot_method' if you want to enable runroot, otherwise run things locally.", 'WARNING: Config option bootab Frame cli_main in /usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py at line 648 641 642 643 def cli_main(): 644 signal.signal(signal.SIGINT, sigterm_handler) 645 signal.signal(signal.SIGTERM, sigterm_handler) 646 647 try: --> 648 main() 649 except (Exception, KeyboardInterrupt) as ex: 650 if COMPOSE: 651 tb_path = COMPOSE.paths.log.log_file("global", "traceback") 652 COMPOSE.log_error("Compose run failed: %s" % ex) 653 COMPOSE.log_error("Extended traceback in: %s" % tb_path) 654 COMPOSE.log_critical("Compose failed: %s" % COMPOSE.topdir) ex = ConnectionError(MaxRetryError("HTTPSConnectionPool(host='build.opencloudos.tech', port=443): Max retries exceeded with url: /kojihub (Caused by NewConnectionError(' kobo = tb_path = '/mnt/koji/compose/9/9.2/OpenCloudOS-9.2-20240619.0/logs/global/traceback.global.log'