Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 654, in cli_main main() File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 343, in main latest_link_components=latest_link_components, File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 497, 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 76, in run write_prepopulate_file(self.compose) File "/usr/lib/python3.6/site-packages/pungi/phases/gather/__init__.py", line 864, in write_prepopulate_file shutil.rmtree(tmp_dir) File "/usr/lib64/python3.6/shutil.py", line 490, in rmtree onerror(os.rmdir, path, sys.exc_info()) File "/usr/lib64/python3.6/shutil.py", line 488, in rmtree os.rmdir(path) OSError: [Errno 39] Directory not empty: '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/work/global/tmp/prepopulate_file_4yohr6_w' Frame rmtree in /usr/lib64/python3.6/shutil.py at line 488 481 except Exception: 482 onerror(os.lstat, path, sys.exc_info()) 483 return 484 try: 485 if os.path.samestat(orig_st, os.fstat(fd)): 486 _rmtree_safe_fd(fd, path, onerror) 487 try: --> 488 os.rmdir(path) 489 except OSError: 490 onerror(os.rmdir, path, sys.exc_info()) 491 else: 492 try: 493 # symlinks to directories are forbidden, see bug #1669 494 raise OSError("Cannot call rmtree on a symbolic link") fd = 8 ignore_errors = False onerror = .onerror at 0x7f4c485eaf28> orig_st = path = '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/work/global/tmp/prepopulate_file_4yohr6_w' Frame rmtree in /usr/lib64/python3.6/shutil.py at line 490 483 return 484 try: 485 if os.path.samestat(orig_st, os.fstat(fd)): 486 _rmtree_safe_fd(fd, path, onerror) 487 try: 488 os.rmdir(path) 489 except OSError: --> 490 onerror(os.rmdir, path, sys.exc_info()) 491 else: 492 try: 493 # symlinks to directories are forbidden, see bug #1669 494 raise OSError("Cannot call rmtree on a symbolic link") 495 except OSError: 496 onerror(os.path.islink, path, sys.exc_info()) fd = 8 ignore_errors = False onerror = .onerror at 0x7f4c485eaf28> orig_st = path = '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/work/global/tmp/prepopulate_file_4yohr6_w' Frame write_prepopulate_file in /usr/lib/python3.6/site-packages/pungi/phases/gather/__init__.py at line 864 857 file_name = os.path.basename(scm_dict) 858 scm_dict = os.path.join(compose.config_dir, os.path.basename(scm_dict)) 859 860 compose.log_debug(msg) 861 tmp_dir = compose.mkdtemp(prefix="prepopulate_file_") 862 get_file_from_scm(scm_dict, tmp_dir, compose=compose) 863 shutil.copy2(os.path.join(tmp_dir, file_name), prepopulate_file) --> 864 shutil.rmtree(tmp_dir) 865 866 867 def get_prepopulate_packages(compose, arch, variant, include_arch=True): 868 """Read prepopulate file and return list of packages for given tree. 869 870 If ``variant`` is ``None``, all variants in the file are considered. The compose = file_name = 'oc-packages.json' msg = 'Writing prepopulate file: /mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/work/global/prepopulate.json' prepopulate_file = '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/work/global/prepopulate.json' scm_dict = '/root/opencloudos/compose/pungi-opencloudos/oc-packages.json' tmp_dir = '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/work/global/tmp/prepopulate_file_4yohr6_w' Frame run in /usr/lib/python3.6/site-packages/pungi/phases/init.py at line 76 69 if self.compose.has_module_defaults: 70 write_module_defaults(self.compose) 71 validate_module_defaults( 72 self.compose.paths.work.module_defaults_dir(create_dir=False) 73 ) 74 75 # write prepopulate file --> 76 write_prepopulate_file(self.compose) 77 78 79 def _arch_worker(_, args, num): 80 compose, arch = args 81 write_arch_comps(compose, arch) 82 create_comps_repo(compose, arch, None) global_comps = '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/work/global/comps/comps-global.xml' num_workers = 8 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 497 490 if release_name == distro and major_version == major_ver: 491 os.environ['ENV_PUNGI_RELEASE_SPECIAL'] = 'true' 492 print("In RV_SPECAIL?set system enviroment ENV_PUNGI_RELEASE_SPECIAL") 493 break 494 else: 495 print("Not in RV_SPECAIL") 496 --> 497 init_phase.start() 498 init_phase.stop() 499 500 pkgset_phase.start() 501 pkgset_phase.stop() 502 503 # WEAVER phase - launches other phases which can safely run in parallel buildinstall_phase = compose = config_copy_path = '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/logs/global/config-copy' config_dump_full = '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.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 = distro = 'OpenCloudOS' errors = [] extra_isos_phase = extrafiles_phase = f = <_io.TextIOWrapper name='/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.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 = major_ver = '9' major_version = '9' osbs_phase = osbuild_phase = ostree_installer_phase = ostree_phase = phase = pkgset_phase = pungi = release_name = 'OpenCloudOS' release_version = '9.4' repoclosure_phase = test_phase = Frame main in /usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py at line 343 336 notifier.compose = compose 337 COMPOSE = compose 338 try: 339 run_compose( 340 compose, 341 create_latest_link=create_latest_link, 342 latest_link_status=latest_link_status, --> 343 latest_link_components=latest_link_components, 344 ) 345 except UnsignedPackagesError: 346 # There was an unsigned package somewhere. It is not safe to reuse any 347 # package set from this compose (since we could leak the unsigned 348 # package). Let's make sure all reuse files are deleted. 349 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 0x7f4c48fe3ea0> compose = compose_dir = '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1' compose_type = 'production' conf = {'RELEASE_NAME': 'OpenCloudOS', 'RELEASE_SHORT': 'OpenCloudOS', 'RELEASE_VERSION': '9.4', '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 0x7f4c48fe3e18> 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.4', 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: GATHER_PREPOPULATE_FILE.' 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 654 647 648 649 def cli_main(): 650 signal.signal(signal.SIGINT, sigterm_handler) 651 signal.signal(signal.SIGTERM, sigterm_handler) 652 653 try: --> 654 main() 655 except (Exception, KeyboardInterrupt) as ex: 656 if COMPOSE: 657 tb_path = COMPOSE.paths.log.log_file("global", "traceback") 658 COMPOSE.log_error("Compose run failed: %s" % ex) 659 COMPOSE.log_error("Extended traceback in: %s" % tb_path) 660 COMPOSE.log_critical("Compose failed: %s" % COMPOSE.topdir) ex = OSError(39, 'Directory not empty') f = <_io.BufferedWriter name='/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/logs/global/traceback.global.log'> kobo = tb_path = '/mnt/koji/compose/9/9.4/OpenCloudOS-9.4-20251107.1/logs/global/traceback.global.log'