Traceback (most recent call last): File "/usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py", line 657, in cli_main main() File "/usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py", line 352, in main run_compose( File "/usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py", line 475, in run_compose setup_phase.stop() File "/usr/lib/python3.12/site-packages/pungi/phases/weaver.py", line 59, in stop self.pool.stop() File "/usr/lib/python3.12/site-packages/kobo/threads.py", line 120, in stop six.reraise(exc_info[0], exc_info[1], exc_info[2]) File "/usr/lib/python3.12/site-packages/six.py", line 719, in reraise raise value File "/usr/lib/python3.12/site-packages/kobo/threads.py", line 67, in run self.process(item, num) File "/usr/lib/python3.12/site-packages/pungi/phases/weaver.py", line 80, in process phase.start() File "/usr/lib/python3.12/site-packages/pungi/phases/base.py", line 66, in start self.run() File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/__init__.py", line 36, in run self.package_sets, self.path_prefix = SourceClass(self.compose)() ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 196, in __call__ package_sets = get_pkgset_from_koji(self.compose, self.koji_wrapper) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 202, in get_pkgset_from_koji return populate_global_pkgset(compose, koji_wrapper, event_info) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 903, in populate_global_pkgset pkgset.try_to_reuse( File "/usr/lib/python3.12/site-packages/pungi/phases/pkgset/pkgsets.py", line 900, in try_to_reuse copy_all(old_repo_dir, repo_dir) File "/usr/lib/python3.12/site-packages/pungi/util.py", line 606, in copy_all shutil.copytree(source, destination) File "/usr/lib64/python3.12/shutil.py", line 600, in copytree return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.12/shutil.py", line 498, in _copytree os.makedirs(dst, exist_ok=dirs_exist_ok) File "", line 225, in makedirs FileExistsError: [Errno 17] File exists: '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/work/global/repo/c10s-compose-development/repodata' Frame _copytree in /usr/lib64/python3.12/shutil.py at line 498 491 def _copytree(entries, src, dst, symlinks, ignore, copy_function, 492 ignore_dangling_symlinks, dirs_exist_ok=False): 493 if ignore is not None: 494 ignored_names = ignore(os.fspath(src), [x.name for x in entries]) 495 else: 496 ignored_names = () 497 --> 498 os.makedirs(dst, exist_ok=dirs_exist_ok) 499 errors = [] 500 use_srcentry = copy_function is copy2 or copy_function is copy 501 502 for srcentry in entries: 503 if srcentry.name in ignored_names: 504 continue copy_function = dirs_exist_ok = False dst = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/work/global/repo/c10s-compose-development/repodata' entries = [, , src = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.d.0/work/global/repo/c10s-compose-development/repodata' symlinks = False Frame copytree in /usr/lib64/python3.12/shutil.py at line 600 593 operation will continue if it encounters existing directories, and files 594 within the `dst` tree will be overwritten by corresponding files from the 595 `src` tree. 596 """ 597 sys.audit("shutil.copytree", src, dst) 598 with os.scandir(src) as itr: 599 entries = list(itr) --> 600 return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, 601 ignore=ignore, copy_function=copy_function, 602 ignore_dangling_symlinks=ignore_dangling_symlinks, 603 dirs_exist_ok=dirs_exist_ok) 604 605 if hasattr(os.stat_result, 'st_file_attributes'): 606 def _rmtree_islink(path): copy_function = dirs_exist_ok = False dst = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/work/global/repo/c10s-compose-development/repodata' entries = [, , src = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.d.0/work/global/repo/c10s-compose-development/repodata' symlinks = False Frame copy_all in /usr/lib/python3.12/site-packages/pungi/util.py at line 606 599 if not contents: 600 raise RuntimeError("Source directory %s is empty." % src) 601 makedirs(dest) 602 for item in contents: 603 source = os.path.join(src, item) 604 destination = os.path.join(dest, item) 605 if os.path.isdir(source): --> 606 shutil.copytree(source, destination) 607 else: 608 if os.path.islink(source): 609 # It's a symlink, we should preserve it instead of resolving. 610 os.symlink(os.readlink(source), destination) 611 else: 612 shutil.copy2(source, destination) contents = ['repodata'] dest = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/work/global/repo/c10s-compose-development' destination = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/work/global/repo/c10s-compose-development/repodata' item = 'repodata' source = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.d.0/work/global/repo/c10s-compose-development/repodata' src = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.d.0/work/global/repo/c10s-compose-development' Frame try_to_reuse in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/pkgsets.py at line 900 893 # If the value is not present in reuse data, the compose was 894 # generated with older version of Pungi. Best to not reuse. 895 and reuse_data.get("inherit_to_noarch") == inherit_to_noarch 896 and reuse_data.get("exclusive_noarch") == exclusive_noarch 897 and reuse_data.get("module_defaults_dir") == module_defaults_dir 898 ): 899 self.log_info("Copying repo data for reuse: %s" % old_repo_dir) --> 900 copy_all(old_repo_dir, repo_dir) 901 self.reuse = old_repo_dir 902 self.rpms_by_arch = reuse_data["rpms_by_arch"] 903 self.srpms_by_name = reuse_data["srpms_by_name"] 904 if self.old_file_cache: 905 self.file_cache = self.old_file_cache 906 return True changed = {'tag_listing': [], 'tag_inheritance': []} compose = event_file = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/work/global/koji-event' exclusive_noarch = True include_packages = set() inherit = True inherit_tags = [{'intransitive': False, 'maxdepth': None, 'name': 'c10s-candidate', 'noconfig': False, 'parent_id': 1555, 'pkg_filter': '', 'priority': 5, 'child_id': 3301, 'nextdepth': None, 'currdepth': 1, 'filter inherit_to_noarch = False koji_event = 3380830 module_defaults_dir = None old_event_file = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.d.0/work/global/koji-event' old_koji_event = 3380817 old_repo_dir = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.d.0/work/global/repo/c10s-compose-development' old_reuse_file = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.d.0/work/global/pkgset_c10s-compose-development_reuse.pickle' repo_dir = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/work/global/repo/c10s-compose-development' reuse_data = {'name': 'c10s-compose-development', 'allow_invalid_sigkeys': True, 'arches': {'aarch64', 'x86_64', 'i386', 'i586', 's390x', 'ppc64le', 'src', 'noarch', 'athlon', 'i486', 'i686'}, 'sigkeys': (None,), self = self._allow_invalid_sigkeys = True self._invalid_sigkey_rpms = [] self._logger = self.arches = {'aarch64', 'x86_64', 'i686', 'i586', 'i386', 'i486', 'src', 'noarch', 'athlon', 'ppc64le', 's390x'} self.cache_region = self.downloader = self.extra_builds = [] self.extra_tasks = [] self.file_cache = self.invalid_sigkey_rpms = [] self.koji_proxy = self.koji_wrapper = self.name = 'c10s-compose-development' self.old_file_cache = self.packages = {'yelp-xsl-devel', 'nodejs24-docs', 'python3-pycparser', 'pcp-zeroconf', 'python3-jsonpatch', 'xorg-x11-fonts-ISO8859-2-75dpi', 'mariadb11.8-gssapi-server', 'hyphen-nl', 'perl-Test-Differences', 'tpm2 self.populate_only_packages = False self.reuse = None self.rpms_by_arch = {} self.sigkey_ordering = None self.signed_packages_retries = 0 self.signed_packages_wait = 0 self.srpms_by_name = {} t = {'intransitive': False, 'maxdepth': None, 'name': 'c10s', 'noconfig': False, 'parent_id': 1553, 'pkg_filter': '', 'priority': 10, 'child_id': 1555, 'nextdepth': None, 'currdepth': 2, 'filter': []} tag = 'c10s-compose-development' Frame populate_global_pkgset in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 903 896 except KeyError: 897 # The module was filtered out 898 continue 899 for rpm_nevra in module.get_rpm_artifacts(): 900 nevra = parse_nvra(rpm_nevra) 901 modular_packages.add((nevra["name"], nevra["arch"])) 902 --> 903 pkgset.try_to_reuse( 904 compose, 905 compose_tag, 906 inherit=should_inherit, 907 include_packages=modular_packages, 908 ) 909 all_arches = {'aarch64', 'x86_64', 'i686', 'i586', 'i386', 'i486', 'src', 'noarch', 'athlon', 'ppc64le', 's390x'} allow_invalid_sigkeys = True compose = compose_tag = 'c10s-compose-development' compose_tags = ['c10s-compose-development'] comps = event = {'id': 3380830, 'ts': 1783979642.09428} exclude_module_ns = [] extra_builds = [] extra_modules = [] extra_tasks = [] group = 'dns-server' groups = ['desktop-debugging', 'haproxy', 'legacy-unix', 'sap-hana', 'virtualization-platform', 'large-systems', 'headless-management', 'virtualization-hypervisor', 'base', 'gnome-desktop', 'network-tools', 's inherit = True inherit_modules = False is_traditional = True koji_wrapper = kwargs = {'extra_builds': [], 'extra_tasks': []} modular_koji_tags = [] modular_packages = set() old_cache_path = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.d.0/work/global/pkgset_c10s-compose-development_file_cache.pickle' packages_to_gather = ['nodejs24-docs', 'python3-pycparser', 'pcp-zeroconf', 'python3-jsonpatch', 'xorg-x11-fonts-ISO8859-2-75dpi', 'mariadb11.8-gssapi-server', 'hyphen-nl', 'perl-Test-Differences', 'tpm2-tools', 'dovecot- pkgset = pkgset_koji_tags = ['c10s-compose-development'] pkgsets = [] populate_only_packages_to_gather = False should_inherit = True tag_to_mmd = {} variant = Variant(id="SAPHANA", name="SAP Solutions", type="variant", parent=None) variant_scratch_modules = [] variant_tags = {Variant(id="AppStream", name="AppStream", type="variant", parent=None): ['c10s-compose-development'], Variant(id="BaseOS", name="BaseOS", type="variant", parent=None): ['c10s-compose-development'], V Frame get_pkgset_from_koji in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 202 195 self.koji_wrapper = pungi.wrappers.kojiwrapper.KojiWrapper(compose) 196 package_sets = get_pkgset_from_koji(self.compose, self.koji_wrapper) 197 return (package_sets, self.compose.koji_downloader.path_prefix) 198 199 200 def get_pkgset_from_koji(compose, koji_wrapper): 201 event_info = get_koji_event_info(compose, koji_wrapper) --> 202 return populate_global_pkgset(compose, koji_wrapper, event_info) 203 204 205 def _add_module_to_variant( 206 koji_wrapper, 207 variant, 208 build, compose = event_info = {'id': 3380830, 'ts': 1783979642.09428} koji_wrapper = Frame __call__ in /usr/lib/python3.12/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 196 189 return modules 190 191 192 class PkgsetSourceKoji(pungi.phases.pkgset.source.PkgsetSourceBase): 193 def __call__(self): 194 compose = self.compose 195 self.koji_wrapper = pungi.wrappers.kojiwrapper.KojiWrapper(compose) --> 196 package_sets = get_pkgset_from_koji(self.compose, self.koji_wrapper) 197 return (package_sets, self.compose.koji_downloader.path_prefix) 198 199 200 def get_pkgset_from_koji(compose, koji_wrapper): 201 event_info = get_koji_event_info(compose, koji_wrapper) 202 return populate_global_pkgset(compose, koji_wrapper, event_info) compose = self = self.compose = self.koji_wrapper = Frame run in /usr/lib/python3.12/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._start_time = 1783980358.7949643 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.12/site-packages/pungi/phases/base.py at line 66 59 if self._skipped: 60 self.compose.log_warning("[SKIP ] %s" % self.msg) 61 self.finished = True 62 return 63 self._start_time = time.time() 64 self.compose.log_info("[BEGIN] %s" % self.msg) 65 self.compose.notifier.send("phase-start", phase_name=self.name) --> 66 self.run() 67 68 def get_config_block(self, variant, arch=None): 69 """In config for current phase, find a block corresponding to given 70 variant and arch. The arch should be given if and only if the config 71 uses variant/arch mapping. 72 """ self = self._skipped = False self._start_time = 1783980358.7949643 self.compose = self.finished = False self.msg = '---------- PHASE: PKGSET ----------' self.name = 'pkgset' self.package_sets = [] self.path_prefix = None self.used_patterns = None Frame process in /usr/lib/python3.12/site-packages/pungi/phases/weaver.py at line 80 73 num, 74 self.pool.queue_total, 75 phases_names, 76 ) 77 self.pool.log_info("[BEGIN] %s" % (msg,)) 78 79 for phase in pipeline: --> 80 phase.start() 81 phase.stop() 82 83 self.pool.log_info("[DONE ] %s" % (msg,)) item = [] msg = 'Running pipeline (1/2). Phases: pkgset' num = 1 phase = phases_names = 'pkgset' pipeline = [] self = self._args = self._daemonic = False self._ident = 139719622141632 self._initialized = True self._is_stopped = True self._kwargs = {} self._name = 'Thread-10' self._native_id = 2381593 self._started = self._stderr = <_io.TextIOWrapper name='' mode='w' encoding='utf-8'> self._target = None self._tstate_lock = None self.daemon = False self.failed = True self.get_timeout = 1 self.ident = 139719622141632 self.kill = True self.name = 'Thread-10' self.native_id = 2381593 self.pool = self.running = False self.traceparent = None Frame run in /usr/lib/python3.12/site-packages/kobo/threads.py at line 67 60 61 self.pool.queue_get_lock.acquire() 62 self.pool.queue_processed += 1 63 num = self.pool.queue_processed 64 self.pool.queue_get_lock.release() 65 66 try: --> 67 self.process(item, num) 68 except: 69 self.failed = True 70 self.pool.exceptions.append(sys.exc_info()) 71 self.pool.kill() 72 73 def process(self, item, num): item = [] num = 1 self = self._args = self._daemonic = False self._ident = 139719622141632 self._initialized = True self._is_stopped = True self._kwargs = {} self._name = 'Thread-10' self._native_id = 2381593 self._started = self._stderr = <_io.TextIOWrapper name='' mode='w' encoding='utf-8'> self._target = None self._tstate_lock = None self.daemon = False self.failed = True self.get_timeout = 1 self.ident = 139719622141632 self.kill = True self.name = 'Thread-10' self.native_id = 2381593 self.pool = self.running = False self.traceparent = None Frame reraise in /usr/lib/python3.12/site-packages/six.py at line 719 712 713 def reraise(tp, value, tb=None): 714 try: 715 if value is None: 716 value = tp() 717 if value.__traceback__ is not tb: 718 raise value.with_traceback(tb) --> 719 raise value 720 finally: 721 value = None 722 tb = None 723 724 else: 725 def exec_(_code_, _globs_=None, _locs_=None): tb = None tp = value = None Frame stop in /usr/lib/python3.12/site-packages/kobo/threads.py at line 120 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: 124 i.kill = True 125 i.running = False 126 exc_info = i = self = self._logger = self.exceptions = [(, FileExistsError(17, 'File exists'), )] self.queue = self.queue_get_lock = self.queue_processed = 2 self.queue_put_lock = self.queue_total = 2 self.threads = [, ] Frame stop in /usr/lib/python3.12/site-packages/pungi/phases/weaver.py at line 59 52 53 self.pool.start() 54 55 def stop(self): 56 if self.finished: 57 return 58 if hasattr(self, "pool"): --> 59 self.pool.stop() 60 self.finished = True 61 self.compose.log_info("[DONE ] %s" % self.msg) 62 63 64 class PipelineThread(WorkerThread): 65 """ 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.12/site-packages/pungi/scripts/pungi_koji.py at line 475 468 469 init_phase.start() 470 init_phase.stop() 471 472 setup_schema = (pkgset_phase, rpm_repo_mapping_phase) 473 setup_phase = pungi.phases.WeaverPhase(compose, setup_schema) 474 setup_phase.start() --> 475 setup_phase.stop() 476 477 # WEAVER phase - launches other phases which can safely run in parallel 478 essentials_schema = ( 479 buildinstall_phase, 480 (gather_phase, createrepo_phase), 481 extrafiles_phase, buildinstall_phase = compose = config_copy_path = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/logs/global/config-copy' config_dump_full = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/logs/global/config-dump.global.log' config_file = '/home/composer/jenkins/workspace/stream10-gen2-compose/pungi-centos/centos/variables.conf' create_latest_link = True createiso_phase = createrepo_phase = errors = [] extra_isos_phase = extrafiles_phase = f = <_io.TextIOWrapper name='/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/logs/global/config-dump.global.log' mode='w' encoding='UTF-8'> gather_phase = image_build_phase = image_checksum_phase = imagebuilder_phase = init_phase = installed_pkgs_log = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/logs/global/installed-pkgs.global.log' kiwibuild_phase = latest_link_components = -1 latest_link_status = None livemedia_phase = osbuild_phase = ostree_container_phase = ostree_installer_phase = ostree_phase = phase = pkgset_phase = pungi = repoclosure_phase = rpm_repo_mapping_phase = setup_phase = setup_schema = test_phase = trigger_konflux_pipeline = Frame main in /usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py at line 352 345 logger.error("Config validation failed with the error: %s" % error) 346 fail_to_start("Config validation failed", errors=errors) 347 sys.exit(1) 348 349 notifier.compose = compose 350 COMPOSE = compose 351 try: --> 352 run_compose( 353 compose, 354 create_latest_link=create_latest_link, 355 latest_link_status=latest_link_status, 356 latest_link_components=latest_link_components, 357 ) 358 except UnsignedPackagesError: Compose = PHASES_NAMES_MODIFIED = ['buildinstall', 'createiso', 'createrepo', 'extra_files', 'extra_isos', 'gather', 'image_build', 'imagebuilder', 'image_checksum', 'init', 'kiwibuild', 'live_media', 'osbuild', 'ostree_container', 'o abort = .abort at 0x7f13033c59e0> ci_path = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0/work/global/composeinfo-base.json' compose = compose_dir = '/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0' compose_type = 'development' conf = {'RELEASE_NAME': 'CentOS Stream', 'RELEASE_SHORT': 'CentOS-Stream', 'RELEASE_VERSION': '10', 'PKGSET_KOJI_TAG': 'c10s-compose', 'RUNROOT_CHANNEL': 'runroot', 'RUNROOT_TAG': 'c10s-build', 'RELEASE_VERS create_latest_link = True errors = [] fail_to_start = .fail_to_start at 0x7f13033c58a0> group = kobo = latest_link_components = -1 latest_link_status = None logger = notifier = opts = Namespace(target_dir=None, compose_dir='/mnt/centos/composes/pungi/stream-10/development/CentOS-Stream-10-20260713.0', label=None, no_label=True, supported=False, old_composes=['/mnt/centos/composes/p parser = ArgumentParser(prog='pungi-koji', usage=None, description=None, formatter_class=, conflict_handler='error', add_help=True) productmd = pungi = rv = None warning = 'WARNING: Unrecognized config option: RUNROOT_CHANNEL.' warnings = ["WARNING: Config option release_is_layered was removed and has no effect; remove it. It's layered if there's configuration for base product.", "WARNING: Config option runroot was removed and has no e Frame cli_main in /usr/lib/python3.12/site-packages/pungi/scripts/pungi_koji.py at line 657 650 signal.signal(signal.SIGINT, sigterm_handler) 651 signal.signal(signal.SIGTERM, sigterm_handler) 652 653 tracing.setup() 654 655 with tracing.span("run-compose"): 656 try: --> 657 main() 658 except (Exception, KeyboardInterrupt) as ex: 659 tracing.record_exception(ex) 660 if COMPOSE: 661 COMPOSE.log_error("Compose run failed: %s" % ex) 662 COMPOSE.traceback(show_locals=getattr(ex, "show_locals", True)) 663 COMPOSE.log_critical("Compose failed: %s" % COMPOSE.topdir) ex = FileExistsError(17, 'File exists')