Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 683, in cli_main main() File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 356, in main latest_link_components=latest_link_components, File "/usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py", line 524, 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 120, in stop six.reraise(exc_info[0], exc_info[1], exc_info[2]) File "/usr/lib/python3.6/site-packages/six.py", line 703, in reraise raise value File "/usr/lib/python3.6/site-packages/kobo/threads.py", line 67, in run self.process(item, num) File "/usr/lib/python3.6/site-packages/pungi/phases/weaver.py", line 78, in process phase.start() File "/usr/lib/python3.6/site-packages/pungi/phases/base.py", line 66, in start self.run() File "/usr/lib/python3.6/site-packages/pungi/phases/extra_files.py", line 59, in run self.metadata, File "/usr/lib/python3.6/site-packages/pungi/phases/extra_files.py", line 115, in copy_extra_files getter(scm_dict, target_path, compose=compose) File "/usr/lib/python3.6/site-packages/pungi/wrappers/scm.py", line 391, in get_file_from_scm scm.export_file(scm_repo, i, scm_branch=scm_branch, target_dir=tmp_dir) File "/usr/lib/python3.6/site-packages/pungi/wrappers/scm.py", line 229, in export_file shutil.copy2(os.path.join(tmp_dir, scm_file), target_path) File "/usr/lib64/python3.6/shutil.py", line 263, in copy2 copyfile(src, dst, follow_symlinks=follow_symlinks) File "/usr/lib64/python3.6/shutil.py", line 120, in copyfile with open(src, 'rb') as fsrc: FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpe_fo5e86/LICENSE' Frame copyfile in /usr/lib64/python3.6/shutil.py at line 120 113 # XXX What about other special files? (sockets, devices...) 114 if stat.S_ISFIFO(st.st_mode): 115 raise SpecialFileError("`%s` is a named pipe" % fn) 116 117 if not follow_symlinks and os.path.islink(src): 118 os.symlink(os.readlink(src), dst) 119 else: --> 120 with open(src, 'rb') as fsrc: 121 with open(dst, 'wb') as fdst: 122 copyfileobj(fsrc, fdst) 123 return dst 124 125 def copymode(src, dst, *, follow_symlinks=True): 126 """Copy mode bits from src to dst. dst = '/tmp/scm_checkout__v2in525/LICENSE' fn = '/tmp/scm_checkout__v2in525/LICENSE' follow_symlinks = True src = '/tmp/tmpe_fo5e86/LICENSE' Frame copy2 in /usr/lib64/python3.6/shutil.py at line 263 256 257 If follow_symlinks is false, symlinks won't be followed. This 258 resembles GNU's "cp -P src dst". 259 260 """ 261 if os.path.isdir(dst): 262 dst = os.path.join(dst, os.path.basename(src)) --> 263 copyfile(src, dst, follow_symlinks=follow_symlinks) 264 copystat(src, dst, follow_symlinks=follow_symlinks) 265 return dst 266 267 def ignore_patterns(*patterns): 268 """Function that can be used as copytree() ignore parameter. 269 dst = '/tmp/scm_checkout__v2in525/LICENSE' follow_symlinks = True src = '/tmp/tmpe_fo5e86/LICENSE' Frame export_file in /usr/lib/python3.6/site-packages/pungi/wrappers/scm.py at line 229 222 "Exporting file %s from git %s (branch %s)..." 223 % (scm_file, scm_root, scm_branch) 224 ) 225 226 self._clone(scm_root, scm_branch, tmp_dir) 227 228 makedirs(target_dir) --> 229 shutil.copy2(os.path.join(tmp_dir, scm_file), target_path) 230 231 232 class RpmScmWrapper(ScmBase): 233 def _list_rpms(self, pats): 234 for pat in force_list(pats): 235 for rpm in glob.glob(pat): scm_branch = 'c10s' scm_file = 'LICENSE' scm_root = 'https://gitlab.com/redhat/centos-stream/rpms/centos-release.git' self = self._logger = self.command = None self.compose = self.options = {} target_dir = '/tmp/scm_checkout__v2in525' target_path = '/tmp/scm_checkout__v2in525/LICENSE' tmp_dir = '/tmp/tmpe_fo5e86' Frame get_file_from_scm in /usr/lib/python3.6/site-packages/pungi/wrappers/scm.py at line 391 384 scm = _get_wrapper( 385 scm_type, logger=logger, command=command, compose=compose, options=options 386 ) 387 388 files_copied = [] 389 for i in force_list(scm_file): 390 with temp_dir(prefix="scm_checkout_") as tmp_dir: --> 391 scm.export_file(scm_repo, i, scm_branch=scm_branch, target_dir=tmp_dir) 392 files_copied += copy_all(tmp_dir, target_path) 393 return files_copied 394 395 396 def get_file(source, destination, compose, overwrite=False): 397 """ command = None compose = files_copied = [] i = 'LICENSE' logger = options = {} scm = scm_branch = 'c10s' scm_dict = {'scm': 'git', 'repo': 'https://gitlab.com/redhat/centos-stream/rpms/centos-release.git', 'branch': 'c10s', 'file': ['LICENSE', 'EULA'], 'target': ''} scm_file = ['LICENSE', 'EULA'] scm_repo = 'https://gitlab.com/redhat/centos-stream/rpms/centos-release.git' scm_type = 'git' target_path = '/mnt/centos/composes/stream-10/odcs-6263/work/aarch64/AppStream/extra-files/' tmp_dir = '/tmp/scm_checkout__v2in525' Frame copy_extra_files in /usr/lib/python3.6/site-packages/pungi/phases/extra_files.py at line 115 108 ) 109 scm_dict["repo"] = rpms 110 111 getter = get_file_from_scm if "file" in scm_dict else get_dir_from_scm 112 target_path = os.path.join( 113 extra_files_dir, scm_dict.get("target", "").lstrip("/") 114 ) --> 115 getter(scm_dict, target_path, compose=compose) 116 117 if os.listdir(extra_files_dir): 118 metadata.populate_extra_files_metadata( 119 extra_metadata, 120 variant, 121 arch, arch = 'aarch64' cfg = [{'scm': 'git', 'repo': 'https://gitlab.com/redhat/centos-stream/rpms/centos-release.git', 'branch': 'c10s', 'file': ['LICENSE', 'EULA'], 'target': ''}] checksum_type = ['md5', 'sha1', 'sha256'] compose = extra_files_dir = '/mnt/centos/composes/stream-10/odcs-6263/work/aarch64/AppStream/extra-files' extra_metadata = getter = msg = 'Getting extra files (arch: aarch64, variant: AppStream)' os_tree = '/mnt/centos/composes/stream-10/odcs-6263/compose/AppStream/aarch64/os' package_sets = [] scm_dict = {'scm': 'git', 'repo': 'https://gitlab.com/redhat/centos-stream/rpms/centos-release.git', 'branch': 'c10s', 'file': ['LICENSE', 'EULA'], 'target': ''} target_path = '/mnt/centos/composes/stream-10/odcs-6263/work/aarch64/AppStream/extra-files/' var_dict = {'arch': 'aarch64', 'variant_id': 'AppStream', 'variant_id_lower': 'appstream', 'variant_uid': 'AppStream', 'variant_uid_lower': 'appstream'} variant = Variant(id="AppStream", name="AppStream", type="variant", parent=None) Frame run in /usr/lib/python3.6/site-packages/pungi/phases/extra_files.py at line 59 52 if cfg: 53 copy_extra_files( 54 self.compose, 55 cfg, 56 arch, 57 variant, 58 self.pkgset_phase.package_sets, --> 59 self.metadata, 60 ) 61 else: 62 self.compose.log_info( 63 "[SKIP ] No extra files (arch: %s, variant: %s)" 64 % (arch, variant.uid) 65 ) arch = 'aarch64' cfg = [{'scm': 'git', 'repo': 'https://gitlab.com/redhat/centos-stream/rpms/centos-release.git', 'branch': 'c10s', 'file': ['LICENSE', 'EULA'], 'target': ''}] self = self._skipped = False self._start_time = 1731003054.4395626 self.compose = self.finished = False self.metadata = self.msg = '---------- PHASE: EXTRA_FILES ----------' self.name = 'extra_files' self.pkgset_phase = self.used_patterns = None variant = Variant(id="AppStream", name="AppStream", type="variant", parent=None) Frame start in /usr/lib/python3.6/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 = 1731003054.4395626 self.compose = self.finished = False self.metadata = self.msg = '---------- PHASE: EXTRA_FILES ----------' self.name = 'extra_files' self.pkgset_phase = self.used_patterns = None Frame process in /usr/lib/python3.6/site-packages/pungi/phases/weaver.py at line 78 71 num, 72 self.pool.queue_total, 73 phases_names, 74 ) 75 self.pool.log_info("[BEGIN] %s" % (msg,)) 76 77 for phase in pipeline: --> 78 phase.start() 79 phase.stop() 80 81 self.pool.log_info("[DONE ] %s" % (msg,)) item = [] msg = 'Running pipeline (3/4). Phases: extra_files' num = 3 phase = phases_names = 'extra_files' pipeline = [] self = self._args = self._daemonic = False self._ident = 140368590927616 self._initialized = True self._is_stopped = True self._kwargs = {} self._name = 'Thread-42' 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 = 140368590927616 self.kill = True self.name = 'Thread-42' self.pool = self.running = False Frame run in /usr/lib/python3.6/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 = 3 self = self._args = self._daemonic = False self._ident = 140368590927616 self._initialized = True self._is_stopped = True self._kwargs = {} self._name = 'Thread-42' 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 = 140368590927616 self.kill = True self.name = 'Thread-42' self.pool = self.running = False Frame reraise in /usr/lib/python3.6/site-packages/six.py at line 703 696 697 def reraise(tp, value, tb=None): 698 try: 699 if value is None: 700 value = tp() 701 if value.__traceback__ is not tb: 702 raise value.with_traceback(tb) --> 703 raise value 704 finally: 705 value = None 706 tb = None 707 708 else: 709 def exec_(_code_, _globs_=None, _locs_=None): tb = None tp = value = None Frame stop in /usr/lib/python3.6/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 = [(, FileNotFoundError(2, 'No such file or directory'), )] 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 524 517 buildinstall_phase, 518 (gather_phase, createrepo_phase), 519 extrafiles_phase, 520 (ostree_phase, ostree_installer_phase), 521 ) 522 essentials_phase = pungi.phases.WeaverPhase(compose, essentials_schema) 523 essentials_phase.start() --> 524 essentials_phase.stop() 525 526 # write treeinfo before ISOs are created 527 for variant in compose.get_variants(): 528 for arch in variant.arches + ["src"]: 529 pungi.metadata.write_tree_info( 530 compose, arch, variant, bi=buildinstall_phase buildinstall_phase = compose = config_copy_path = '/mnt/centos/composes/stream-10/odcs-6263/logs/global/config-copy' config_dump_full = '/mnt/centos/composes/stream-10/odcs-6263/logs/global/config-dump.global.log' config_file = '/tmp/tmp8yho2d9j/pungi.json' create_latest_link = False createiso_phase = createrepo_phase = errors = [] essentials_phase = essentials_schema = extra_isos_phase = extrafiles_phase = f = <_io.TextIOWrapper name='/mnt/centos/composes/stream-10/odcs-6263/logs/global/config-dump.global.log' mode='w' encoding='UTF-8'> gather_phase = image_build_phase = image_checksum_phase = image_container_phase = init_phase = installed_pkgs_log = '/mnt/centos/composes/stream-10/odcs-6263/logs/global/installed-pkgs.global.log' 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 356 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: 359 # There was an unsigned package somewhere. It is not safe to reuse any 360 # package set from this compose (since we could leak the unsigned 361 # package). Let's make sure all reuse files are deleted. 362 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 0x7faa3c4e67b8> ci_path = '/mnt/centos/composes/stream-10/odcs-6263/work/global/composeinfo-base.json' compose = compose_dir = '/mnt/centos/composes/stream-10/odcs-6263' compose_type = 'production' 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 = False errors = [] fail_to_start = .fail_to_start at 0x7faa3c4e6730> group = kobo = latest_link_components = -1 latest_link_status = None logger = notifier = opts = Namespace(compose_dir='/mnt/centos/composes/stream-10/odcs-6263', compose_type='production', config='/tmp/tmp8yho2d9j/pungi.json', just_phase=[], koji_event=None, label='RC-0.1', latest_link_component 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: COMPS_FILE.' 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.6/site-packages/pungi/scripts/pungi_koji.py at line 683 676 677 678 def cli_main(): 679 signal.signal(signal.SIGINT, sigterm_handler) 680 signal.signal(signal.SIGTERM, sigterm_handler) 681 682 try: --> 683 main() 684 except (Exception, KeyboardInterrupt) as ex: 685 if COMPOSE: 686 COMPOSE.log_error("Compose run failed: %s" % ex) 687 COMPOSE.traceback(show_locals=getattr(ex, "show_locals", True)) 688 COMPOSE.log_critical("Compose failed: %s" % COMPOSE.topdir) 689 COMPOSE.write_status("DOOMED") ex = FileNotFoundError(2, 'No such file or directory')