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 512, in run_compose
pkgset_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/pkgset/__init__.py", line 36, in run
self.package_sets, self.path_prefix = SourceClass(self.compose)()
File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 199, in __call__
self.compose, self.koji_wrapper, path_prefix
File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 206, in get_pkgset_from_koji
return populate_global_pkgset(compose, koji_wrapper, path_prefix, event_info)
File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py", line 889, in populate_global_pkgset
include_packages=modular_packages,
File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/pkgsets.py", line 694, in populate
self.raise_invalid_sigkeys_exception(invalid_sigkey_rpms)
File "/usr/lib/python3.6/site-packages/pungi/phases/pkgset/pkgsets.py", line 171, in raise_invalid_sigkeys_exception
"\n".join(get_error(k, v) for k, v in rpminfos.items())
pungi.errors.UnsignedPackagesError: RPM(s) not found for sigs: ('8483C65D',). Check log for details. Unsigned packages:
perl-XML-Parser-2.47-7.el10
Frame raise_invalid_sigkeys_exception in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/pkgsets.py at line 171
164 "\n".join(sorted(set(nvr_formatter(rpminfo) for rpminfo in infos))),
165 )
166 )
167
168 if not isinstance(rpminfos, dict):
169 rpminfos = {self.sigkey_ordering: rpminfos}
170 raise UnsignedPackagesError(
--> 171 "\n".join(get_error(k, v) for k, v in rpminfos.items())
172 )
173
174 def read_packages(self, rpms, srpms):
175 srpm_pool = ReaderPool(self, self._logger)
176 rpm_pool = ReaderPool(self, self._logger)
177
get_error = .get_error at 0x7fead1f43ae8>
nvr_formatter = .nvr_formatter at 0x7feae401bb70>
rpminfos = {('8483C65D',): [{'arch': 'src', 'build_id': 105058, 'buildroot_id': 821892, 'buildtime': 1775033834, 'draft': False, 'epoch': None, 'extra': None, 'id': 2866560, 'metadata_only': False, 'name': 'perl
self =
self._allow_invalid_sigkeys = True
self._invalid_sigkey_rpms = [{'arch': 'src', 'build_id': 105058, 'buildroot_id': 821892, 'buildtime': 1775033834, 'draft': False, 'epoch': None, 'extra': None, 'id': 2866560, 'metadata_only': False, 'name': 'perl-XML-Parser', 'p
self._logger =
self.arches = {'src', 'aarch64', 'i686', 'athlon', 'ppc64le', 'i586', 'i386', 'noarch', 'i486', 's390x', 'x86_64'}
self.cache_region =
self.extra_builds = []
self.extra_tasks = []
self.file_cache =
self.invalid_sigkey_rpms = [{'arch': 'src', 'build_id': 105058, 'buildroot_id': 821892, 'buildtime': 1775033834, 'draft': False, 'epoch': None, 'extra': None, 'id': 2866560, 'metadata_only': False, 'name': 'perl-XML-Parser', 'p
self.koji_proxy =
self.koji_wrapper =
self.name = 'c10s-compose'
self.old_file_cache =
self.packages = {'xorg-x11-proto-devel', 'libguestfs-devel', 'strace', 'glibc-langpack-mk', 'google-noto-sans-bengali-ui-fonts', 'pcp-pmda-amdgpu', 'perl-Module-Build', 'ocaml-gettext-devel', 'tesseract-langpack-deu'
self.populate_only_packages = False
self.reuse = None
self.rpms_by_arch = {'src': [cyrus-imapd-3.8.3-10.el10.src.rpm, mariadb-connector-odbc-3.2.4-1.el10.src.rpm, lftp-4.9.2-20.el10.src.rpm, ksc-1.12-7.git869a25c.el10.src.rpm, automake-1.16.5-20.el10.src.rpm, perl-PerlIO-vi
self.sigkey_ordering = '8483C65D'
self.signed_packages_retries = 20
self.signed_packages_wait = 60
self.srpms_by_name = {'cyrus-imapd-3.8.3-10.el10.src.rpm': cyrus-imapd-3.8.3-10.el10.src.rpm, 'mariadb-connector-odbc-3.2.4-1.el10.src.rpm': mariadb-connector-odbc-3.2.4-1.el10.src.rpm, 'lftp-4.9.2-20.el10.src.rpm': lftp-
Frame populate in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/pkgsets.py at line 694
687 # Check that after reading the packages, every package that is
688 # included in a compose has the right sigkey.
689 if self._invalid_sigkey_rpms:
690 invalid_sigkey_rpms = [
691 rpm for rpm in self._invalid_sigkey_rpms if rpm["name"] in self.packages
692 ]
693 if invalid_sigkey_rpms:
--> 694 self.raise_invalid_sigkeys_exception(invalid_sigkey_rpms)
695
696 self.log_info("[DONE ] %s" % msg)
697 return result
698
699 def write_reuse_file(self, compose, include_packages):
700 """Write data to files for reusing in future.
build_id = 62385
build_info = {'build_id': 104935, 'completion_time': '2026-03-31 08:56:53.917276+00:00', 'create_event': 3192809, 'creation_event_id': 3181551, 'creation_time': '2026-03-31 08:54:10.830839+00:00', 'draft': False,
build_name = 'ceph'
builds = [{'build_id': 106468, 'completion_time': '2026-04-14 15:57:37.930302+00:00', 'create_event': 3202783, 'creation_event_id': 3201851, 'creation_time': '2026-04-14 15:25:36.571091+00:00', 'draft': False,
builds_by_id = {106468: {'build_id': 106468, 'completion_time': '2026-04-14 15:57:37.930302+00:00', 'create_event': 3202783, 'creation_event_id': 3201851, 'creation_time': '2026-04-14 15:25:36.571091+00:00', 'draft'
event = 3205454
exclude_build_id = []
extra_builds = []
extra_builds_by_name = {}
extra_rpms = []
include_packages = set()
inherit = True
invalid_sigkey_rpms = [{'arch': 'src', 'build_id': 105058, 'buildroot_id': 821892, 'buildtime': 1775033834, 'draft': False, 'epoch': None, 'extra': None, 'id': 2866560, 'metadata_only': False, 'name': 'perl-XML-Parser', 'p
msg = 'Getting latest RPMs (tag: c10s-compose, event: 3205454, inherit: True)'
result = {'src': [cyrus-imapd-3.8.3-10.el10.src.rpm, mariadb-connector-odbc-3.2.4-1.el10.src.rpm, lftp-4.9.2-20.el10.src.rpm, ksc-1.12-7.git869a25c.el10.src.rpm, automake-1.16.5-20.el10.src.rpm, perl-PerlIO-vi
result_rpms = [({'arch': 'x86_64', 'build_id': 85042, 'buildroot_id': 735075, 'buildtime': 1759432071, 'draft': False, 'epoch': None, 'extra': None, 'id': 2336897, 'metadata_only': False, 'name': 'lftp-debuginfo',
result_srpms = [({'arch': 'src', 'build_id': 85042, 'buildroot_id': 735073, 'buildtime': 1759432051, 'draft': False, 'epoch': None, 'extra': None, 'id': 2336885, 'metadata_only': False, 'name': 'lftp', 'payloadhash'
rpm_info = {'arch': 'src', 'build_id': 104935, 'buildroot_id': 821359, 'buildtime': 1774947299, 'draft': False, 'epoch': None, 'extra': None, 'id': 2861351, 'metadata_only': False, 'name': 'nghttp2', 'payloadhas
rpms = [{'arch': 'x86_64', 'build_id': 85042, 'buildroot_id': 735075, 'buildtime': 1759432071, 'draft': False, 'epoch': None, 'extra': None, 'id': 2336897, 'metadata_only': False, 'name': 'lftp-debuginfo', '
self =
self._allow_invalid_sigkeys = True
self._invalid_sigkey_rpms = [{'arch': 'src', 'build_id': 105058, 'buildroot_id': 821892, 'buildtime': 1775033834, 'draft': False, 'epoch': None, 'extra': None, 'id': 2866560, 'metadata_only': False, 'name': 'perl-XML-Parser', 'p
self._logger =
self.arches = {'src', 'aarch64', 'i686', 'athlon', 'ppc64le', 'i586', 'i386', 'noarch', 'i486', 's390x', 'x86_64'}
self.cache_region =
self.extra_builds = []
self.extra_tasks = []
self.file_cache =
self.invalid_sigkey_rpms = [{'arch': 'src', 'build_id': 105058, 'buildroot_id': 821892, 'buildtime': 1775033834, 'draft': False, 'epoch': None, 'extra': None, 'id': 2866560, 'metadata_only': False, 'name': 'perl-XML-Parser', 'p
self.koji_proxy =
self.koji_wrapper =
self.name = 'c10s-compose'
self.old_file_cache =
self.packages = {'xorg-x11-proto-devel', 'libguestfs-devel', 'strace', 'glibc-langpack-mk', 'google-noto-sans-bengali-ui-fonts', 'pcp-pmda-amdgpu', 'perl-Module-Build', 'ocaml-gettext-devel', 'tesseract-langpack-deu'
self.populate_only_packages = False
self.reuse = None
self.rpms_by_arch = {'src': [cyrus-imapd-3.8.3-10.el10.src.rpm, mariadb-connector-odbc-3.2.4-1.el10.src.rpm, lftp-4.9.2-20.el10.src.rpm, ksc-1.12-7.git869a25c.el10.src.rpm, automake-1.16.5-20.el10.src.rpm, perl-PerlIO-vi
self.sigkey_ordering = '8483C65D'
self.signed_packages_retries = 20
self.signed_packages_wait = 60
self.srpms_by_name = {'cyrus-imapd-3.8.3-10.el10.src.rpm': cyrus-imapd-3.8.3-10.el10.src.rpm, 'mariadb-connector-odbc-3.2.4-1.el10.src.rpm': mariadb-connector-odbc-3.2.4-1.el10.src.rpm, 'lftp-4.9.2-20.el10.src.rpm': lftp-
skipped_arches = []
skipped_packages_count = 0
tag = 'c10s-compose'
Frame populate_global_pkgset in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 889
882 )
883
884 if pkgset.reuse is None:
885 pkgset.populate(
886 compose_tag,
887 event,
888 inherit=should_inherit,
--> 889 include_packages=modular_packages,
890 )
891 for variant in compose.all_variants.values():
892 if compose_tag in variant_tags[variant]:
893 # If it's a modular tag, store the package set for the module.
894 for nsvc, koji_tag in variant.module_uid_to_koji_tag.items():
895 if compose_tag == koji_tag:
all_arches = {'src', 'aarch64', 'i686', 'athlon', 'ppc64le', 'i586', 'i386', 'noarch', 'i486', 's390x', 'x86_64'}
allow_invalid_sigkeys = True
compose =
compose_tag = 'c10s-compose'
compose_tags = ['c10s-compose']
comps =
event = {'id': 3205454, 'ts': 1776226411.21056}
exclude_module_ns = []
extra_builds = []
extra_modules = []
extra_tasks = []
group = 'nfv'
groups = ['mail-server', 'nfv-debug', 'virtualization-hypervisor', 'guest-desktop-agents', 'print-client', 'dns-server', 'fonts', 'hardware-support', 'base', 'ha-devel', 'emacs', 'crb', 'network-tools', 'syste
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/stream-10/production/CentOS-Stream-10-20260414.0/work/global/pkgset_c10s-compose_file_cache.pickle'
packages_to_gather = ['xorg-x11-proto-devel', 'libguestfs-devel', 'strace', 'glibc-langpack-mk', 'google-noto-sans-bengali-ui-fonts', 'pcp-pmda-amdgpu', 'perl-Module-Build', 'tesseract-langpack-deu', 'virt-sb-certs', 'pol
path_prefix = '/mnt/centos/koji/'
pkgset =
pkgset_koji_tags = ['c10s-compose']
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'], Variant(id="BaseOS", name="BaseOS", type="variant", parent=None): ['c10s-compose'], Variant(id="CRB", name="C
Frame get_pkgset_from_koji in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 206
199 self.compose, self.koji_wrapper, path_prefix
200 )
201 return (package_sets, path_prefix)
202
203
204 def get_pkgset_from_koji(compose, koji_wrapper, path_prefix):
205 event_info = get_koji_event_info(compose, koji_wrapper)
--> 206 return populate_global_pkgset(compose, koji_wrapper, path_prefix, event_info)
207
208
209 def _add_module_to_variant(
210 koji_wrapper,
211 variant,
212 build,
compose =
event_info = {'id': 3205454, 'ts': 1776226411.21056}
koji_wrapper =
path_prefix = '/mnt/centos/koji/'
Frame __call__ in /usr/lib/python3.6/site-packages/pungi/phases/pkgset/sources/source_koji.py at line 199
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 # path prefix must contain trailing '/'
197 path_prefix = self.koji_wrapper.koji_module.config.topdir.rstrip("/") + "/"
198 package_sets = get_pkgset_from_koji(
--> 199 self.compose, self.koji_wrapper, path_prefix
200 )
201 return (package_sets, path_prefix)
202
203
204 def get_pkgset_from_koji(compose, koji_wrapper, path_prefix):
205 event_info = get_koji_event_info(compose, koji_wrapper)
compose =
path_prefix = '/mnt/centos/koji/'
self =
self.compose =
self.koji_wrapper =
Frame run in /usr/lib/python3.6/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 = 1776226475.4019203
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.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 = 1776226475.4019203
self.compose =
self.finished = False
self.msg = '---------- PHASE: PKGSET ----------'
self.name = 'pkgset'
self.package_sets = []
self.path_prefix = None
self.used_patterns = None
Frame run_compose in /usr/lib/python3.6/site-packages/pungi/scripts/pungi_koji.py at line 512
505 if signing_key_password:
506 # Store the password
507 compose.conf["signing_key_password"] = signing_key_password
508
509 init_phase.start()
510 init_phase.stop()
511
--> 512 pkgset_phase.start()
513 pkgset_phase.stop()
514
515 # WEAVER phase - launches other phases which can safely run in parallel
516 essentials_schema = (
517 buildinstall_phase,
518 (gather_phase, createrepo_phase),
buildinstall_phase =
compose =
config_copy_path = '/mnt/centos/composes/stream-10/odcs-8881/logs/global/config-copy'
config_dump_full = '/mnt/centos/composes/stream-10/odcs-8881/logs/global/config-dump.global.log'
config_file = '/tmp/tmpnj4ahjgn/pungi.json'
create_latest_link = False
createiso_phase =
createrepo_phase =
errors = []
extra_isos_phase =
extrafiles_phase =
f = <_io.TextIOWrapper name='/mnt/centos/composes/stream-10/odcs-8881/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-8881/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 0x7feada563a60>
ci_path = '/mnt/centos/composes/stream-10/odcs-8881/work/global/composeinfo-base.json'
compose =
compose_dir = '/mnt/centos/composes/stream-10/odcs-8881'
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 0x7feada5639d8>
group =
kobo =
latest_link_components = -1
latest_link_status = None
logger =
notifier =
opts = Namespace(compose_dir='/mnt/centos/composes/stream-10/odcs-8881', compose_type='production', config='/tmp/tmpnj4ahjgn/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_BRANCH.'
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 = UnsignedPackagesError("RPM(s) not found for sigs: ('8483C65D',). Check log for details. Unsigned packages:\nperl-XML-Parser-2.47-7.el10",)