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 506, in run_compose essentials_phase.stop() File "/usr/lib/python3.6/site-packages/pungi/phases/weaver.py", line 57, in stop self.pool.stop() File "/usr/lib/python3.6/site-packages/kobo/threads.py", line 117, in stop i.join() File "/usr/lib64/python3.6/threading.py", line 1059, in join self._wait_for_tstate_lock() File "/usr/lib64/python3.6/threading.py", line 1075, in _wait_for_tstate_lock elif lock.acquire(block, timeout): File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 638, in sigterm_handler sys.stdout.flush() BrokenPipeError: [Errno 32] Broken pipe Frame sigterm_handler in /usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py at line 638 631 try_kill_children(signum) 632 COMPOSE.log_error("Compose run failed: signal %s" % signum) 633 COMPOSE.log_error("Traceback:\n%s" % "\n".join(traceback.format_stack(frame))) 634 COMPOSE.log_critical("Compose failed: %s" % COMPOSE.topdir) 635 COMPOSE.write_status("TERMINATED") 636 else: 637 print("Signal %s captured" % signum) --> 638 sys.stdout.flush() 639 sys.stderr.flush() 640 sys.exit(1) 641 642 643 def cli_main(): 644 signal.signal(signal.SIGINT, sigterm_handler) frame = signum = 2 Frame _wait_for_tstate_lock in /usr/lib64/python3.6/threading.py at line 1075 1068 # is removed from C data structures, C code releases our _tstate_lock. 1069 # This method passes its arguments to _tstate_lock.acquire(). 1070 # If the lock is acquired, the C code is done, and self._stop() is 1071 # called. That sets ._is_stopped to True, and ._tstate_lock to None. 1072 lock = self._tstate_lock 1073 if lock is None: # already determined that the C code is done 1074 assert self._is_stopped --> 1075 elif lock.acquire(block, timeout): 1076 lock.release() 1077 self._stop() 1078 1079 @property 1080 def name(self): 1081 """A string used for identification purposes only. block = True lock = self = self._args = self._daemonic = False self._ident = 140193418434304 self._initialized = True self._is_stopped = False self._kwargs = {} self._name = 'Thread-36' self._started = self._stderr = <_io.TextIOWrapper name='' mode='w' encoding='UTF-8'> self._target = None self._tstate_lock = self.daemon = False self.failed = False self.get_timeout = 1 self.ident = 140193418434304 self.kill = False self.name = 'Thread-36' self.pool = self.running = False timeout = -1 Frame join in /usr/lib64/python3.6/threading.py at line 1059 1052 raise RuntimeError("Thread.__init__() not called") 1053 if not self._started.is_set(): 1054 raise RuntimeError("cannot join thread before it is started") 1055 if self is current_thread(): 1056 raise RuntimeError("cannot join current thread") 1057 1058 if timeout is None: --> 1059 self._wait_for_tstate_lock() 1060 else: 1061 # the behavior of a negative timeout isn't documented, but 1062 # historically .join(timeout=x) for x<0 has acted as if timeout=0 1063 self._wait_for_tstate_lock(timeout=max(timeout, 0)) 1064 1065 def _wait_for_tstate_lock(self, block=True, timeout=-1): self = self._args = self._daemonic = False self._ident = 140193418434304 self._initialized = True self._is_stopped = False self._kwargs = {} self._name = 'Thread-36' self._started = self._stderr = <_io.TextIOWrapper name='' mode='w' encoding='UTF-8'> self._target = None self._tstate_lock = self.daemon = False self.failed = False self.get_timeout = 1 self.ident = 140193418434304 self.kill = False self.name = 'Thread-36' self.pool = self.running = False timeout = None Frame stop in /usr/lib/python3.6/site-packages/kobo/threads.py at line 117 110 It is essential to call this method. If you do any work in between 111 ``start`` and ``stop``, make sure the ``stop`` method will always be 112 called, otherwise the program will never exit. 113 """ 114 for i in self.threads: 115 i.running = False 116 for i in self.threads: --> 117 i.join() 118 if self.exceptions: 119 exc_info = self.exceptions[0] 120 six.reraise(exc_info[0], exc_info[1], exc_info[2]) 121 122 def kill(self): 123 for i in self.threads: i = self = self._logger = self.exceptions = [] self.queue = self.queue_get_lock = self.queue_processed = 4 self.queue_put_lock = self.queue_total = 4 self.threads = [, , , Frame stop in /usr/lib/python3.6/site-packages/pungi/phases/weaver.py at line 57 50 51 self.pool.start() 52 53 def stop(self): 54 if self.finished: 55 return 56 if hasattr(self, "pool"): --> 57 self.pool.stop() 58 self.finished = True 59 self.compose.log_info("[DONE ] %s" % self.msg) 60 61 62 class PipelineThread(WorkerThread): 63 """ self = self._phases_schema = self.compose = self.finished = False self.msg = '---------- PHASE: WEAVER ----------' self.name = 'weaver' self.pool = Frame run_compose in /usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py at line 506 499 buildinstall_phase, 500 (gather_phase, createrepo_phase), 501 extrafiles_phase, 502 (ostree_phase, ostree_installer_phase), 503 ) 504 essentials_phase = pungi.phases.WeaverPhase(compose, essentials_schema) 505 essentials_phase.start() --> 506 essentials_phase.stop() 507 508 # write treeinfo before ISOs are created 509 for variant in compose.get_variants(): 510 for arch in variant.arches + ["src"]: 511 pungi.metadata.write_tree_info( 512 compose, arch, variant, bi=buildinstall_phase buildinstall_phase = combination = compose = config_copy_path = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20240222.1/logs/global/config-copy' config_dump_full = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20240222.1/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 = [] essentials_phase = essentials_schema = extra_isos_phase = extrafiles_phase = f = <_io.TextIOWrapper name='/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20240222.1/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 0x7f8181232ea0> compose = compose_dir = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20240222.1' compose_type = 'production' conf = {'RELEASE_NAME': 'OpenCloudOS', 'RELEASE_SHORT': 'OpenCloudOS', 'RELEASE_VERSION': '9.0', '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 0x7f8181232e18> 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-updates.conf', just_phase=[], koji_event=None, label='RC-9.0', latest_link_components=-1, parser = ArgumentParser(prog='pungi-koji', usage=None, description=None, formatter_class=, conflict_handler='error', add_help=True) productmd = pungi = warning = 'WARNING: Unrecognized config option: GATHER_PREPOPULATE_REPO.' 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 = BrokenPipeError(32, 'Broken pipe') f = <_io.BufferedWriter name='/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20240222.1/logs/global/traceback.global.log'> kobo = tb_path = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20240222.1/logs/global/traceback.global.log'