Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 637, in cli_main main() File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 337, in main latest_link_components=latest_link_components, File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 480, in run_compose init_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/init.py", line 47, in run validate_comps(global_comps) File "/usr/lib/python3.6/site-packages/pungi/phases/init.py", line 248, in validate_comps wrapper = CompsWrapper(path) File "/usr/lib/python3.6/site-packages/pungi/wrappers/comps.py", line 239, in __init__ self.comps.fromxml_f(comps_file) _libpycomps.ParserError: Fatal parser error Frame __init__ in /usr/lib/python3.6/site-packages/pungi/wrappers/comps.py at line 239 232 Class for reading and retrieving information from comps XML files. This 233 class is based on libcomps, and therefore only valid comps file with no 234 additional extensions are supported by it. 235 """ 236 237 def __init__(self, comps_file): 238 self.comps = libcomps.Comps() --> 239 self.comps.fromxml_f(comps_file) 240 self.comps_file = comps_file 241 242 def get_comps_groups(self): 243 """Return a list of group IDs.""" 244 return [group.id for group in self.comps.groups] 245 comps_file = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20231012.0/work/global/comps/comps-global.xml' self = self.comps = <_libpycomps.Comps object at 0x7fe614f84a08> Frame validate_comps in /usr/lib/python3.6/site-packages/pungi/phases/init.py at line 248 241 raise RuntimeError( 242 "There are duplicated module defaults:\n%s" % "\n".join(errors) 243 ) 244 245 246 def validate_comps(path): 247 """Check that there are whitespace issues in comps.""" --> 248 wrapper = CompsWrapper(path) 249 wrapper.validate() path = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20231012.0/work/global/comps/comps-global.xml' Frame run in /usr/lib/python3.6/site-packages/pungi/phases/init.py at line 47 40 # because it generates data for LIVEIMAGES 41 return False 42 43 def run(self): 44 if self.compose.has_comps: 45 # write global comps and arch comps, create comps repos 46 global_comps = write_global_comps(self.compose) --> 47 validate_comps(global_comps) 48 num_workers = self.compose.conf["createrepo_num_threads"] 49 run_in_threads( 50 _arch_worker, 51 [(self.compose, arch) for arch in self.compose.get_arches()], 52 threads=num_workers, 53 ) global_comps = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20231012.0/work/global/comps/comps-global.xml' self = self._skipped = False self.compose = self.finished = False self.msg = '---------- PHASE: INIT ----------' self.name = 'init' self.used_patterns = None 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: INIT ----------' self.name = 'init' self.used_patterns = None Frame run_compose in /usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py at line 480 473 print(err_msg) 474 raise RuntimeError(err_msg) 475 476 if signing_key_password: 477 # Store the password 478 compose.conf["signing_key_password"] = signing_key_password 479 --> 480 init_phase.start() 481 init_phase.stop() 482 483 pkgset_phase.start() 484 pkgset_phase.stop() 485 486 # WEAVER phase - launches other phases which can safely run in parallel buildinstall_phase = compose = config_copy_path = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20231012.0/logs/global/config-copy' config_dump_full = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20231012.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/OpenCloudOS-9.0-updates-20231012.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 337 330 notifier.compose = compose 331 COMPOSE = compose 332 try: 333 run_compose( 334 compose, 335 create_latest_link=create_latest_link, 336 latest_link_status=latest_link_status, --> 337 latest_link_components=latest_link_components, 338 ) 339 except UnsignedPackagesError: 340 # There was an unsigned package somewhere. It is not safe to reuse any 341 # package set from this compose (since we could leak the unsigned 342 # package). Let's make sure all reuse files are deleted. 343 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 0x7fe615996048> compose = compose_dir = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20231012.0' 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 0x7fe61598dea0> 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: EXTRA_ISO_ARCHES.' 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 637 630 631 632 def cli_main(): 633 signal.signal(signal.SIGINT, sigterm_handler) 634 signal.signal(signal.SIGTERM, sigterm_handler) 635 636 try: --> 637 main() 638 except (Exception, KeyboardInterrupt) as ex: 639 if COMPOSE: 640 tb_path = COMPOSE.paths.log.log_file("global", "traceback") 641 COMPOSE.log_error("Compose run failed: %s" % ex) 642 COMPOSE.log_error("Extended traceback in: %s" % tb_path) 643 COMPOSE.log_critical("Compose failed: %s" % COMPOSE.topdir) ex = ParserError('Fatal parser error',) f = <_io.BufferedWriter name='/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20231012.0/logs/global/traceback.global.log'> kobo = tb_path = '/mnt/koji/compose/9/OpenCloudOS-9.0-updates-20231012.0/logs/global/traceback.global.log'