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')