diff --git a/0050-packit-Enable-8.10to9.5-tests.patch b/0050-packit-Enable-8.10to9.5-tests.patch new file mode 100644 index 0000000..15ac0a4 --- /dev/null +++ b/0050-packit-Enable-8.10to9.5-tests.patch @@ -0,0 +1,61 @@ +From 281b59832182679e8a8dc609b6b433673bcd1d39 Mon Sep 17 00:00:00 2001 +From: Matej Matuska +Date: Tue, 28 May 2024 14:49:12 +0200 +Subject: [PATCH 50/92] packit: Enable 8.10to9.5 tests + +--- + .packit.yaml | 41 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 41 insertions(+) + +diff --git a/.packit.yaml b/.packit.yaml +index dc9b9431..dd97c6ee 100644 +--- a/.packit.yaml ++++ b/.packit.yaml +@@ -552,3 +552,44 @@ jobs: + TARGET_RELEASE: "9.4" + RHSM_REPOS: "rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms" + LEAPPDATA_BRANCH: "upstream" ++ ++ ++# Tests: 8.10 -> 9.5 ++- &sanity-810to95 ++ <<: *sanity-abstract-8to9 ++ trigger: pull_request ++ identifier: sanity-8.10to9.5 ++ env: ++ SOURCE_RELEASE: "8.10" ++ TARGET_RELEASE: "9.5" ++ RHSM_REPOS: "rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms" ++ LEAPPDATA_BRANCH: "upstream" ++ ++# On-demand minimal beaker tests ++- &beaker-minimal-810to95 ++ <<: *beaker-minimal-8to9-abstract-ondemand ++ trigger: pull_request ++ labels: ++ - beaker-minimal ++ - beaker-minimal-8.10to9.5 ++ - 8.10to9.5 ++ identifier: sanity-8.10to9.5-beaker-minimal-ondemand ++ env: ++ SOURCE_RELEASE: "8.10" ++ TARGET_RELEASE: "9.5" ++ LEAPPDATA_BRANCH: "upstream" ++ ++# On-demand kernel-rt tests ++- &kernel-rt-810to95 ++ <<: *kernel-rt-abstract-8to9-ondemand ++ trigger: pull_request ++ labels: ++ - kernel-rt ++ - kernel-rt-8.10to9.5 ++ - 8.10to9.5 ++ identifier: sanity-8.10to9.5-kernel-rt-ondemand ++ env: ++ SOURCE_RELEASE: "8.10" ++ TARGET_RELEASE: "9.5" ++ RHSM_REPOS: "rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms" ++ LEAPPDATA_BRANCH: "upstream" +-- +2.42.0 + diff --git a/0051-dnf-plugin-data-sort-intput-lists.patch b/0051-dnf-plugin-data-sort-intput-lists.patch new file mode 100644 index 0000000..19eacb5 --- /dev/null +++ b/0051-dnf-plugin-data-sort-intput-lists.patch @@ -0,0 +1,41 @@ +From 7ee37486990d36a710f1573845f21deab45ba2b6 Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Tue, 14 May 2024 12:03:30 +0200 +Subject: [PATCH 51/92] dnf-plugin-data: sort intput lists +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Previously to_install, to_remove, to_upgrade, ... lists have been +unsorted. Having these lists sorted is helpful when checking these +tasks manually (e.g. during investigations). + +Co-authored-by: Michal Hečko +--- + repos/system_upgrade/common/libraries/dnfplugin.py | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/repos/system_upgrade/common/libraries/dnfplugin.py b/repos/system_upgrade/common/libraries/dnfplugin.py +index e59168ef..6f056a33 100644 +--- a/repos/system_upgrade/common/libraries/dnfplugin.py ++++ b/repos/system_upgrade/common/libraries/dnfplugin.py +@@ -85,11 +85,11 @@ def build_plugin_data(target_repoids, debug, test, tasks, on_aws): + # get list of repo IDs of target repositories that should be used for upgrade + data = { + 'pkgs_info': { +- 'local_rpms': [os.path.join('/installroot', pkg.lstrip('/')) for pkg in tasks.local_rpms], +- 'to_install': tasks.to_install, +- 'to_remove': tasks.to_remove, +- 'to_upgrade': tasks.to_upgrade, +- 'modules_to_enable': ['{}:{}'.format(m.name, m.stream) for m in tasks.modules_to_enable], ++ 'local_rpms': sorted(os.path.join('/installroot', pkg.lstrip('/')) for pkg in tasks.local_rpms), ++ 'to_install': sorted(tasks.to_install), ++ 'to_remove': sorted(tasks.to_remove), ++ 'to_upgrade': sorted(tasks.to_upgrade), ++ 'modules_to_enable': sorted(['{}:{}'.format(m.name, m.stream) for m in tasks.modules_to_enable]), + }, + 'dnf_conf': { + 'allow_erasing': True, +-- +2.42.0 + diff --git a/0052-rhui-setups-support-alibaba-cloud.patch b/0052-rhui-setups-support-alibaba-cloud.patch new file mode 100644 index 0000000..b4afbfc --- /dev/null +++ b/0052-rhui-setups-support-alibaba-cloud.patch @@ -0,0 +1,37 @@ +From 76ac12560c4ea8223a59ec5a8233a86412dbf158 Mon Sep 17 00:00:00 2001 +From: "jinkangkang.jkk" +Date: Mon, 3 Jun 2024 17:12:02 +0800 +Subject: [PATCH 52/92] rhui setups support alibaba cloud + +--- + repos/system_upgrade/common/libraries/rhui.py | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index 2dfb209c..ab6a27f8 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -290,7 +290,19 @@ RHUI_SETUPS = { + RHUIFamily(RHUIProvider.ALIBABA, client_files_folder='alibaba'): [ + mk_rhui_setup(clients={'client-rhel7'}, os_version='7'), + mk_rhui_setup(clients={'aliyun_rhui_rhel8'}, leapp_pkg='leapp-rhui-alibaba', +- mandatory_files=[('leapp-alibaba.repo', YUM_REPOS_PATH)], os_version='8'), ++ mandatory_files=[('leapp-alibaba.repo', YUM_REPOS_PATH)], ++ optional_files=[ ++ ('key.pem', RHUI_PKI_DIR), ++ ('content.crt', RHUI_PKI_PRODUCT_DIR) ++ ], ++ os_version='8'), ++ mk_rhui_setup(clients={'aliyun_rhui_rhel9'}, leapp_pkg='leapp-rhui-alibaba', ++ mandatory_files=[('leapp-alibaba.repo', YUM_REPOS_PATH)], ++ optional_files=[ ++ ('key.pem', RHUI_PKI_DIR), ++ ('content.crt', RHUI_PKI_PRODUCT_DIR) ++ ], ++ os_version='9'), + ] + } + +-- +2.42.0 + diff --git a/0053-check_rhui-allow-minor-versions-in-the-RHUI-table.patch b/0053-check_rhui-allow-minor-versions-in-the-RHUI-table.patch new file mode 100644 index 0000000..e429bc0 --- /dev/null +++ b/0053-check_rhui-allow-minor-versions-in-the-RHUI-table.patch @@ -0,0 +1,409 @@ +From 986fa6f90f68a7d3e5d9173d8496dd222d5f7884 Mon Sep 17 00:00:00 2001 +From: mhecko +Date: Thu, 23 May 2024 15:28:12 +0200 +Subject: [PATCH 53/92] check_rhui: allow minor versions in the RHUI table + +With RHEL8.10, different target RHUI clients have to be installed, +depending on the target minor version. The RHUI_SETUPS structure +used for navigating upgrades on RHUI and associated infrastructure +did not allow to setups based on their minor version. RHUI_SETUPS +is used to both determine what RHUI variant are we running on and what +is the target setup. Therefore, any solution would have to: +- ensure that when we are on RHEL8.10, we will look for correct client + (this point is fairly easy, and it would be sufficient to just declare + another setup description in RHUI_SETUPS) +- determine what target client to install depending on whether we are + targetting RHEL8.10 or, e.g., RHEL8.8 +Introducing another setup to the map causes multiple target variants +to be eligible, and, thus, leapp would error due to not being able to +pick the target setup. Therefore, a solution has to include such +conflict resolution based on target minor version. + +Given the above description of the solution space, this patch allows +specifying minor versions in the RHUI_SETUPS table used to resolve +conflicts when multiple target setups matching the major version are +eligable. Identification of the source and corresponding target RHUI +variant works by using the entry with the closest (younger) minor +version. For example, when 8.4 and 8.8 are suitable target setups (based +on the installed clients), 8.4 will be used when the upgrade taget is +8.6. The minor versions in the RHUI_SETUPS table, therefore, are +in a sense a "changelog" of leapp's RHUI knowledge. If the table +contains an entry A with version 8.0, and an entry B with version +8.8, this can be understood as: + Since 8.0, we know that the setups use this client and we need to do + these things to access target content. Since 8.8 onwards, we know + that we need to use a different client etc. +--- + .../libraries/checkhybridimage.py | 3 +- + .../cloud/checkrhui/libraries/checkrhui.py | 165 ++++++++++++++---- + .../tests/component_test_checkrhui.py | 48 +++++ + repos/system_upgrade/common/libraries/rhui.py | 44 ++++- + 4 files changed, 222 insertions(+), 38 deletions(-) + +diff --git a/repos/system_upgrade/common/actors/cloud/checkhybridimage/libraries/checkhybridimage.py b/repos/system_upgrade/common/actors/cloud/checkhybridimage/libraries/checkhybridimage.py +index e2b7f5b2..a4eb6fa1 100644 +--- a/repos/system_upgrade/common/actors/cloud/checkhybridimage/libraries/checkhybridimage.py ++++ b/repos/system_upgrade/common/actors/cloud/checkhybridimage/libraries/checkhybridimage.py +@@ -28,7 +28,8 @@ def is_azure_agent_installed(): + + agent_pkg = None + for setup in azure_setups: +- if setup.os_version == src_ver_major: ++ setup_major_ver = str(setup.os_version[0]) ++ if setup_major_ver == src_ver_major: + agent_pkg = setup.extra_info.get('agent_pkg') + break + +diff --git a/repos/system_upgrade/common/actors/cloud/checkrhui/libraries/checkrhui.py b/repos/system_upgrade/common/actors/cloud/checkrhui/libraries/checkrhui.py +index e1c158c7..3b217917 100644 +--- a/repos/system_upgrade/common/actors/cloud/checkrhui/libraries/checkrhui.py ++++ b/repos/system_upgrade/common/actors/cloud/checkrhui/libraries/checkrhui.py +@@ -30,8 +30,98 @@ def into_set(pkgs): + return set(pkgs) + + ++def fmt_matching_rhui_setups(setups): ++ def fmt_matching_rhui_setup(matching_setup): ++ if isinstance(matching_setup, MatchingSetup): ++ return '(ver={os_ver}, variant={variant}, clients={clients})'.format( ++ os_ver=matching_setup.description.os_version, ++ variant=matching_setup.family, ++ clients=matching_setup.description.clients ++ ) ++ # Just a RHUISetup ++ return '(ver={os_ver}, clients={clients})'.format( ++ os_ver=matching_setup.os_version, ++ clients=matching_setup.clients ++ ) ++ ++ return ', '.join(fmt_matching_rhui_setup(setup) for setup in setups) ++ ++ ++def select_chronologically_closest_setups(matching_setups, optimal_minor_ver, minor_ver_extractor, system_role): ++ if not matching_setups: ++ return None ++ ++ # Select only setups that are chronologically closest ++ highest_minor_less_than_optimal = 0 ++ for setup in matching_setups: ++ setup_minor = minor_ver_extractor(setup) ++ ++ less_than_src_minor = (setup_minor <= optimal_minor_ver) if optimal_minor_ver else True ++ higher_than_previous = setup_minor > highest_minor_less_than_optimal ++ if less_than_src_minor and higher_than_previous: ++ highest_minor_less_than_optimal = setup_minor ++ ++ msg = 'RHUI setups matching installed clients and %s major version: %s' ++ api.current_logger().debug(msg, system_role, fmt_matching_rhui_setups(matching_setups)) ++ ++ chronologically_closest_setups = [ ++ setup for setup in matching_setups if minor_ver_extractor(setup) == highest_minor_less_than_optimal ++ ] ++ if chronologically_closest_setups: ++ matching_setups = chronologically_closest_setups ++ msg = 'Further narrowed matching setups based on their %s minor version: %s' ++ api.current_logger().debug(msg, system_role, fmt_matching_rhui_setups(matching_setups)) ++ else: ++ newest_minor = max(matching_setups, key=minor_ver_extractor).os_version[1] ++ matching_setups = [setup for setup in matching_setups if minor_ver_extractor(setup) == newest_minor] ++ api.current_logger().warning( ++ 'The %s predates any of the setups that match the installed clients. Using newest matching: %s', ++ system_role, ++ fmt_matching_rhui_setups(matching_setups) ++ ) ++ return matching_setups ++ ++ ++def error_due_to_ambiguous_source_setups(match0, match1): ++ msg = 'Could not identify the source RHUI setup (ambiguous setup)' ++ ++ variant_detail_table = { ++ rhui.RHUIVariant.ORDINARY: '', ++ rhui.RHUIVariant.SAP: ' for SAP', ++ rhui.RHUIVariant.SAP_APPS: ' for SAP Applications', ++ rhui.RHUIVariant.SAP_HA: ' for SAP HA', ++ } ++ ++ variant0_detail = variant_detail_table[match0.family.variant] ++ clients0 = ' '.join(match0.description.clients) ++ ++ variant1_detail = variant_detail_table[match1.family.variant] ++ clients1 = ' '.join(match1.description.clients) ++ ++ details = ('Leapp uses client-based identification of the used RHUI setup in order to determine what the ' ++ 'target RHEL content should be. According to the installed RHUI clients the system should be ' ++ 'RHEL {os_major}{variant0_detail} ({provider0}) (identified by clients {clients0}) but also ' ++ 'RHEL {os_major}{variant1_detail} ({provider1}) (identified by clients {clients1}).') ++ details = details.format(os_major=version.get_source_major_version(), ++ variant0_detail=variant0_detail, clients0=clients0, provider0=match0.family.provider, ++ variant1_detail=variant1_detail, clients1=clients1, provider1=match1.family.provider) ++ ++ raise StopActorExecutionError(message=msg, details={'details': details}) ++ ++ ++def _get_canonical_version_tuple(version): ++ ver_fragments = version.split('.') ++ major = int(ver_fragments[0]) ++ try: ++ minor = int(ver_fragments[1]) if len(ver_fragments) > 1 else None ++ except ValueError as error: ++ api.current_logger().debug('Failed to convert minor version into integer: %s', error) ++ minor = None # Unlikely, the code using this can handle None as minor ++ return (major, minor) ++ ++ + def find_rhui_setup_matching_src_system(installed_pkgs, rhui_map): +- src_ver = version.get_source_major_version() ++ src_major_ver, src_minor_ver = _get_canonical_version_tuple(version.get_source_version()) + arch = api.current_actor().configuration.architecture + + matching_setups = [] +@@ -40,8 +130,9 @@ def find_rhui_setup_matching_src_system(installed_pkgs, rhui_map): + continue + + for setup in family_setups: +- if setup.os_version != src_ver: ++ if setup.os_version[0] != src_major_ver: + continue ++ + if setup.clients.issubset(installed_pkgs): + matching_setups.append(MatchingSetup(family=rhui_family, description=setup)) + +@@ -50,50 +141,54 @@ def find_rhui_setup_matching_src_system(installed_pkgs, rhui_map): + + # In case that a RHUI variant uses a combination of clients identify the maximal client set + matching_setups_by_size = sorted(matching_setups, key=lambda match: -len(match.description.clients)) ++ max_client_cnt = len(matching_setups_by_size[0].description.clients) ++ matching_setups = tuple( ++ setup for setup in matching_setups if len(setup.description.clients) == max_client_cnt ++ ) ++ msg = 'Identified RHUI setups with the largest installed client sets: %s' ++ api.current_logger().debug(msg, fmt_matching_rhui_setups(matching_setups)) + +- match = matching_setups_by_size[0] # Matching setup with the highest number of clients +- if len(matching_setups) == 1: +- return match ++ if not matching_setups: ++ return None + +- if len(matching_setups_by_size[0].description.clients) == len(matching_setups_by_size[1].description.clients): +- # Should not happen as no cloud providers use multi-client setups (at the moment) +- msg = 'Could not identify the source RHUI setup (ambiguous setup)' ++ # Since we allow minor versions in RHUI table, we might have multiple entries that are identified by the ++ # same clients. E.g.: ++ # RHEL8.4 with client X ++ # RHEL8.9 with client X (but with some modified setup info) ++ # If upgrading from 8.6, select 8.4. If upgrading from 8.10, select 8.9 ++ matching_setups = select_chronologically_closest_setups(matching_setups, ++ src_minor_ver, ++ lambda setup: setup.description.os_version[1], ++ 'source') + +- variant_detail_table = { +- rhui.RHUIVariant.ORDINARY: '', +- rhui.RHUIVariant.SAP: ' for SAP', +- rhui.RHUIVariant.SAP_APPS: ' for SAP Applications', +- rhui.RHUIVariant.SAP_HA: ' for SAP HA', +- } ++ # If we fail to identify chronologically proper setup, we always return a nonempty list + +- match0 = matching_setups_by_size[0] +- variant0_detail = variant_detail_table[match0.family.variant] +- clients0 = ' '.join(match0.description.clients) ++ match = matching_setups[0] # Matching setup with the highest number of clients ++ if len(matching_setups) == 1: ++ return match + +- match1 = matching_setups_by_size[1] +- variant1_detail = variant_detail_table[match1.family.variant] +- clients1 = ' '.join(match1.description.clients) ++ other_match = matching_setups[1] ++ error_due_to_ambiguous_source_setups(match, other_match) ++ return None # Unreachable + +- details = ('Leapp uses client-based identification of the used RHUI setup in order to determine what the ' +- 'target RHEL content should be. According to the installed RHUI clients the system should be ' +- 'RHEL {os_major}{variant0_detail} ({provider0}) (identified by clients {clients0}) but also ' +- 'RHEL {os_major}{variant1_detail} ({provider1}) (identified by clients {clients1}).') +- details = details.format(os_major=version.get_source_major_version(), +- variant0_detail=variant0_detail, clients0=clients0, provider0=match0.family.provider, +- variant1_detail=variant1_detail, clients1=clients1, provider1=match1.family.provider) + +- raise StopActorExecutionError(message=msg, details={'details': details}) ++def determine_target_setup_desc(cloud_map, rhui_family): ++ variant_setups = cloud_map[rhui_family] + +- return match ++ target_major, target_minor = _get_canonical_version_tuple(version.get_target_version()) + ++ matching_setups = [setup for setup in variant_setups if setup.os_version[0] == target_major] ++ msg = 'Identified target RHUI setups matching target major: %s' ++ api.current_logger().debug(msg, fmt_matching_rhui_setups(matching_setups)) + +-def determine_target_setup_desc(cloud_map, rhui_family): +- variant_setups = cloud_map[rhui_family] +- target_major = version.get_target_major_version() ++ matching_setups = select_chronologically_closest_setups(matching_setups, ++ target_minor, ++ lambda setup: setup.os_version[1], ++ 'target') ++ ++ if matching_setups: ++ return next(iter(matching_setups)) + +- for setup in variant_setups: +- if setup.os_version == target_major: +- return setup + return None + + +diff --git a/repos/system_upgrade/common/actors/cloud/checkrhui/tests/component_test_checkrhui.py b/repos/system_upgrade/common/actors/cloud/checkrhui/tests/component_test_checkrhui.py +index aa0089b6..27e70eea 100644 +--- a/repos/system_upgrade/common/actors/cloud/checkrhui/tests/component_test_checkrhui.py ++++ b/repos/system_upgrade/common/actors/cloud/checkrhui/tests/component_test_checkrhui.py +@@ -326,3 +326,51 @@ def test_unknown_target_rhui_setup(monkeypatch, is_target_setup_known): + else: + with pytest.raises(StopActorExecutionError): + checkrhui_lib.process() ++ ++ ++@pytest.mark.parametrize( ++ ('setups', 'desired_minor', 'expected_setup'), ++ [ ++ ( ++ [ ++ mk_rhui_setup(clients={'A'}, os_version='8.4', leapp_pkg='leapp-A'), ++ mk_rhui_setup(clients={'A'}, os_version='8.6', leapp_pkg='leapp-B'), ++ ], ++ 8, ++ mk_rhui_setup(clients={'A'}, os_version='8.6', leapp_pkg='leapp-B'), ++ ), ++ ( ++ [ ++ mk_rhui_setup(clients={'A'}, os_version='8.4', leapp_pkg='leapp-A'), ++ mk_rhui_setup(clients={'A'}, os_version='8.6', leapp_pkg='leapp-B'), ++ ], ++ 6, ++ mk_rhui_setup(clients={'A'}, os_version='8.6', leapp_pkg='leapp-B'), ++ ), ++ ( ++ [ ++ mk_rhui_setup(clients={'A'}, os_version='8.4', leapp_pkg='leapp-A'), ++ mk_rhui_setup(clients={'A'}, os_version='8.6', leapp_pkg='leapp-B'), ++ ], ++ 5, ++ mk_rhui_setup(clients={'A'}, os_version='8.4', leapp_pkg='leapp-A'), ++ ), ++ ( ++ [ ++ mk_rhui_setup(clients={'A'}, os_version='8.4', leapp_pkg='leapp-A'), ++ mk_rhui_setup(clients={'A'}, os_version='8.6', leapp_pkg='leapp-B'), ++ ], ++ 3, ++ mk_rhui_setup(clients={'A'}, os_version='8.6', leapp_pkg='leapp-B'), ++ ) ++ ] ++) ++def test_select_chronologically_closest(monkeypatch, setups, desired_minor, expected_setup): ++ setups = checkrhui_lib.select_chronologically_closest_setups(setups, ++ desired_minor, ++ lambda setup: setup.os_version[1], ++ 'source') ++ assert len(setups) == 1 ++ setup = setups[0] ++ ++ assert setup == expected_setup +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index ab6a27f8..a0669ec4 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -101,8 +101,15 @@ class RHUIFamily(object): + + + def mk_rhui_setup(clients=None, leapp_pkg='', mandatory_files=None, optional_files=None, +- extra_info=None, os_version='7', arch=arch.ARCH_X86_64, content_channel=ContentChannel.GA, ++ extra_info=None, os_version='7.0', arch=arch.ARCH_X86_64, content_channel=ContentChannel.GA, + files_supporting_client_operation=None): ++ ++ os_version_fragments = os_version.split('.') ++ if len(os_version_fragments) == 1: ++ os_version_tuple = (int(os_version), 0) ++ else: ++ os_version_tuple = (int(os_version_fragments[0]), int(os_version_fragments[1])) ++ + clients = clients or set() + mandatory_files = mandatory_files or [] + extra_info = extra_info or {} +@@ -115,7 +122,7 @@ def mk_rhui_setup(clients=None, leapp_pkg='', mandatory_files=None, optional_fil + + return RHUISetup(clients=clients, leapp_pkg=leapp_pkg, mandatory_files=mandatory_files, arch=arch, + content_channel=content_channel, optional_files=optional_files, extra_info=extra_info, +- os_version=os_version, files_supporting_client_operation=files_supporting_client_operation) ++ os_version=os_version_tuple, files_supporting_client_operation=files_supporting_client_operation) + + + # This will be the new "cloud map". Essentially a directed graph with edges defined implicitly by OS versions + +@@ -186,6 +193,8 @@ RHUI_SETUPS = { + mandatory_files=[ + ('rhui-client-config-server-8-sap-bundle.crt', RHUI_PKI_PRODUCT_DIR), + ('rhui-client-config-server-8-sap-bundle.key', RHUI_PKI_DIR), ++ ('content-rhel8-sap-bundle-e4s.crt', RHUI_PKI_PRODUCT_DIR), ++ ('content-rhel8-sap-bundle-e4s.key', RHUI_PKI_DIR), + (AWS_DNF_PLUGIN_NAME, DNF_PLUGIN_PATH_PY2), + ('leapp-aws-sap-e4s.repo', YUM_REPOS_PATH) + ], +@@ -195,6 +204,21 @@ RHUI_SETUPS = { + ('cdn.redhat.com-chain.crt', RHUI_PKI_DIR), + ('content-rhel8-sap.crt', RHUI_PKI_PRODUCT_DIR) + ], os_version='8', content_channel=ContentChannel.E4S), ++ mk_rhui_setup(clients={'rh-amazon-rhui-client-sap-bundle'}, leapp_pkg='leapp-rhui-aws-sap-e4s', ++ mandatory_files=[ ++ ('rhui-client-config-server-8-sap-bundle.crt', RHUI_PKI_PRODUCT_DIR), ++ ('rhui-client-config-server-8-sap-bundle.key', RHUI_PKI_DIR), ++ ('content-rhel8-sap-bundle.crt', RHUI_PKI_PRODUCT_DIR), ++ ('content-rhel8-sap-bundle.key', RHUI_PKI_DIR), ++ (AWS_DNF_PLUGIN_NAME, DNF_PLUGIN_PATH_PY2), ++ ('leapp-aws-sap.repo', YUM_REPOS_PATH) ++ ], ++ files_supporting_client_operation=[AWS_DNF_PLUGIN_NAME], ++ optional_files=[ ++ ('content-rhel8-sap.key', RHUI_PKI_DIR), ++ ('cdn.redhat.com-chain.crt', RHUI_PKI_DIR), ++ ('content-rhel8-sap.crt', RHUI_PKI_PRODUCT_DIR) ++ ], os_version='8.10'), + mk_rhui_setup(clients={'rh-amazon-rhui-client-sap-bundle-e4s'}, leapp_pkg='leapp-rhui-aws-sap-e4s', + mandatory_files=[ + ('rhui-client-config-server-9-sap-bundle.crt', RHUI_PKI_PRODUCT_DIR), +@@ -237,6 +261,14 @@ RHUI_SETUPS = { + ], + extra_info={'agent_pkg': 'WALinuxAgent'}, + os_version='8', content_channel=ContentChannel.EUS), ++ mk_rhui_setup(clients={'rhui-azure-rhel8-base-sap-apps'}, leapp_pkg='leapp-rhui-azure-sap', ++ mandatory_files=[('leapp-azure-sap-apps.repo', YUM_REPOS_PATH)], ++ optional_files=[ ++ ('key-sapapps.pem', RHUI_PKI_DIR), ++ ('content-sapapps.crt', RHUI_PKI_PRODUCT_DIR) ++ ], ++ extra_info={'agent_pkg': 'WALinuxAgent'}, ++ os_version='8.10', content_channel=ContentChannel.GA), + mk_rhui_setup(clients={'rhui-azure-rhel9-sapapps'}, leapp_pkg='leapp-rhui-azure-sap', + mandatory_files=[('leapp-azure-sap-apps.repo', YUM_REPOS_PATH)], + optional_files=[ +@@ -256,6 +288,14 @@ RHUI_SETUPS = { + ], + extra_info={'agent_pkg': 'WALinuxAgent'}, + os_version='8', content_channel=ContentChannel.E4S), ++ mk_rhui_setup(clients={'rhui-azure-rhel8-base-sap-ha'}, leapp_pkg='leapp-rhui-azure-sap', ++ mandatory_files=[('leapp-azure-sap-ha.repo', YUM_REPOS_PATH)], ++ optional_files=[ ++ ('key-sap-ha.pem', RHUI_PKI_DIR), ++ ('content-sap-ha.crt', RHUI_PKI_PRODUCT_DIR) ++ ], ++ extra_info={'agent_pkg': 'WALinuxAgent'}, ++ os_version='8.10'), + mk_rhui_setup(clients={'rhui-azure-rhel9-sap-ha'}, leapp_pkg='leapp-rhui-azure-sap', + mandatory_files=[('leapp-azure-sap-ha.repo', YUM_REPOS_PATH)], + optional_files=[ +-- +2.42.0 + diff --git a/0054-rhui-google-add-RHEL7-ELS-setup-into-RHUI_SETUPS.patch b/0054-rhui-google-add-RHEL7-ELS-setup-into-RHUI_SETUPS.patch new file mode 100644 index 0000000..c3b2d69 --- /dev/null +++ b/0054-rhui-google-add-RHEL7-ELS-setup-into-RHUI_SETUPS.patch @@ -0,0 +1,68 @@ +From 94224a42be57a6da1bd372580b5378b71f45a7f3 Mon Sep 17 00:00:00 2001 +From: mhecko +Date: Tue, 28 May 2024 10:38:02 +0200 +Subject: [PATCH 54/92] rhui(google): add RHEL7 ELS setup into RHUI_SETUPS + +Add RHEL7 ELS setup into RHUI_SETUPS and modify repomapping +accordingly. +--- + etc/leapp/files/repomap.json | 18 +++++++++++++++++- + repos/system_upgrade/common/libraries/rhui.py | 1 + + 2 files changed, 18 insertions(+), 1 deletion(-) + +diff --git a/etc/leapp/files/repomap.json b/etc/leapp/files/repomap.json +index 1ee6c56a..8a490b84 100644 +--- a/etc/leapp/files/repomap.json ++++ b/etc/leapp/files/repomap.json +@@ -1,5 +1,5 @@ + { +- "datetime": "202404091246Z", ++ "datetime": "202405281033Z", + "version_format": "1.2.1", + "mapping": [ + { +@@ -414,6 +414,14 @@ + "repo_type": "rpm", + "rhui": "google" + }, ++ { ++ "major_version": "7", ++ "repoid": "rhui-rhel-7-server-els-rhui-rpms", ++ "arch": "x86_64", ++ "channel": "els", ++ "repo_type": "rpm", ++ "rhui": "google" ++ }, + { + "major_version": "7", + "repoid": "rhui-rhel-7-server-rhui-eus-rpms", +@@ -618,6 +626,14 @@ + "repo_type": "rpm", + "rhui": "google" + }, ++ { ++ "major_version": "7", ++ "repoid": "rhui-rhel-7-server-els-optional-rhui-rpms", ++ "arch": "x86_64", ++ "channel": "els", ++ "repo_type": "rpm", ++ "rhui": "google" ++ }, + { + "major_version": "7", + "repoid": "rhui-rhel-7-server-rhui-optional-rpms", +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index a0669ec4..8ae81537 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -307,6 +307,7 @@ RHUI_SETUPS = { + ], + RHUIFamily(RHUIProvider.GOOGLE, client_files_folder='google'): [ + mk_rhui_setup(clients={'google-rhui-client-rhel7'}, os_version='7'), ++ mk_rhui_setup(clients={'google-rhui-client-rhel7-els'}, os_version='7'), + mk_rhui_setup(clients={'google-rhui-client-rhel8'}, leapp_pkg='leapp-rhui-google', + mandatory_files=[('leapp-google.repo', YUM_REPOS_PATH)], + files_supporting_client_operation=['leapp-google.repo'], +-- +2.42.0 + diff --git a/0055-rhui-aws-arm-fix-incorrect-client-names.patch b/0055-rhui-aws-arm-fix-incorrect-client-names.patch new file mode 100644 index 0000000..ca5acf1 --- /dev/null +++ b/0055-rhui-aws-arm-fix-incorrect-client-names.patch @@ -0,0 +1,34 @@ +From 40244434a0a9fcf3e368254d1de5737b6fd0cdef Mon Sep 17 00:00:00 2001 +From: mhecko +Date: Wed, 29 May 2024 09:49:48 +0200 +Subject: [PATCH 55/92] rhui(aws-arm): fix incorrect client names + +--- + repos/system_upgrade/common/libraries/rhui.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index 8ae81537..dc50bf45 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -161,7 +161,7 @@ RHUI_SETUPS = { + ], + RHUIFamily(RHUIProvider.AWS, arch=arch.ARCH_ARM64, client_files_folder='aws'): [ + mk_rhui_setup(clients={'rh-amazon-rhui-client-arm'}, optional_files=[], os_version='7', arch=arch.ARCH_ARM64), +- mk_rhui_setup(clients={'rh-amazon-rhui-client-arm'}, leapp_pkg='leapp-rhui-aws', ++ mk_rhui_setup(clients={'rh-amazon-rhui-client'}, leapp_pkg='leapp-rhui-aws', + mandatory_files=[ + ('rhui-client-config-server-8.crt', RHUI_PKI_PRODUCT_DIR), + ('rhui-client-config-server-8.key', RHUI_PKI_DIR), +@@ -174,7 +174,7 @@ RHUI_SETUPS = { + ('cdn.redhat.com-chain.crt', RHUI_PKI_DIR), + ('content-rhel8.crt', RHUI_PKI_PRODUCT_DIR) + ], os_version='8', arch=arch.ARCH_ARM64), +- mk_rhui_setup(clients={'rh-amazon-rhui-client-arm'}, leapp_pkg='leapp-rhui-aws', ++ mk_rhui_setup(clients={'rh-amazon-rhui-client'}, leapp_pkg='leapp-rhui-aws', + mandatory_files=[ + ('rhui-client-config-server-9.crt', RHUI_PKI_PRODUCT_DIR), + ('rhui-client-config-server-9.key', RHUI_PKI_DIR), +-- +2.42.0 + diff --git a/0056-rhui-azure-hardcore-client-repoids-changes-for-RHEL8.patch b/0056-rhui-azure-hardcore-client-repoids-changes-for-RHEL8.patch new file mode 100644 index 0000000..e935e88 --- /dev/null +++ b/0056-rhui-azure-hardcore-client-repoids-changes-for-RHEL8.patch @@ -0,0 +1,94 @@ +From 6f20f5e83eb9ad9fb2ae76e2e499f9e36632b31e Mon Sep 17 00:00:00 2001 +From: mhecko +Date: Thu, 30 May 2024 22:08:37 +0200 +Subject: [PATCH 56/92] rhui(azure): hardcore client repoids changes for + RHEL8.10 SAP + +--- + .../libraries/setuptargetrepos.py | 27 ++++++++++++++++++- + repos/system_upgrade/common/libraries/rhui.py | 4 +-- + 2 files changed, 28 insertions(+), 3 deletions(-) + +diff --git a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py b/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py +index 2b14a29a..a6073aa3 100644 +--- a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py ++++ b/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py +@@ -1,6 +1,6 @@ + + from leapp.libraries.actor import setuptargetrepos_repomap +-from leapp.libraries.common.config.version import get_source_major_version ++from leapp.libraries.common.config.version import get_source_major_version, get_source_version, get_target_version + from leapp.libraries.stdlib import api + from leapp.models import ( + CustomTargetRepository, +@@ -16,6 +16,11 @@ from leapp.models import ( + UsedRepositories + ) + ++RHUI_CLIENT_REPOIDS_RHEL88_TO_RHEL810 = { ++ 'rhui-microsoft-azure-rhel8-sapapps': 'rhui-microsoft-azure-rhel8-base-sap-apps', ++ 'rhui-microsoft-azure-rhel8-sap-ha': 'rhui-microsoft-azure-rhel8-base-sap-ha', ++} ++ + + def _get_enabled_repoids(): + """ +@@ -99,6 +104,16 @@ def process(): + # can be used to upgrade installed packages. + repoids_to_map = enabled_repoids.union(repoids_from_installed_packages_with_mapping) + ++ # RHEL8.10 use a different repoid for client repository, but the repomapping mechanism cannot distinguish these ++ # as it does not use minor versions. Therefore, we have to hardcode these changes. ++ if get_source_version() == '8.10': ++ for rhel88_rhui_client_repoid, rhel810_rhui_client_repoid in RHUI_CLIENT_REPOIDS_RHEL88_TO_RHEL810.items(): ++ if rhel810_rhui_client_repoid in repoids_to_map: ++ # Replace RHEL8.10 rhui client repoids with RHEL8.8 repoids, ++ # so that they are mapped to target repoids correctly. ++ repoids_to_map.remove(rhel810_rhui_client_repoid) ++ repoids_to_map.add(rhel88_rhui_client_repoid) ++ + # Set default repository channels for the repomap + # TODO(pstodulk): what about skip this completely and keep the default 'ga'..? + default_channels = setuptargetrepos_repomap.get_default_repository_channels(repomap, repoids_to_map) +@@ -138,6 +153,16 @@ def process(): + continue + target_rhel_repoids.add(repo) + ++ # On 8.10, some RHUI setups have different names than the one computed by repomapping. ++ # Although such situation could be avoided (having another client repo when a single ++ # repo can hold more than one RPM), we have to deal with it here. This is not a proper ++ # solution. ++ if get_target_version() == '8.10': ++ for pre_810_repoid, post_810_repoid in RHUI_CLIENT_REPOIDS_RHEL88_TO_RHEL810.items(): ++ if pre_810_repoid in target_rhel_repoids: ++ target_rhel_repoids.remove(pre_810_repoid) ++ target_rhel_repoids.add(post_810_repoid) ++ + # create the final lists and sort them (for easier testing) + rhel_repos = [RHELTargetRepository(repoid=repoid) for repoid in sorted(target_rhel_repoids)] + custom_repos = [repo for repo in custom_repos if repo.repoid not in excluded_repoids] +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index dc50bf45..28f1aeee 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -262,7 +262,7 @@ RHUI_SETUPS = { + extra_info={'agent_pkg': 'WALinuxAgent'}, + os_version='8', content_channel=ContentChannel.EUS), + mk_rhui_setup(clients={'rhui-azure-rhel8-base-sap-apps'}, leapp_pkg='leapp-rhui-azure-sap', +- mandatory_files=[('leapp-azure-sap-apps.repo', YUM_REPOS_PATH)], ++ mandatory_files=[('leapp-azure-base-sap-apps.repo', YUM_REPOS_PATH)], + optional_files=[ + ('key-sapapps.pem', RHUI_PKI_DIR), + ('content-sapapps.crt', RHUI_PKI_PRODUCT_DIR) +@@ -289,7 +289,7 @@ RHUI_SETUPS = { + extra_info={'agent_pkg': 'WALinuxAgent'}, + os_version='8', content_channel=ContentChannel.E4S), + mk_rhui_setup(clients={'rhui-azure-rhel8-base-sap-ha'}, leapp_pkg='leapp-rhui-azure-sap', +- mandatory_files=[('leapp-azure-sap-ha.repo', YUM_REPOS_PATH)], ++ mandatory_files=[('leapp-azure-base-sap-ha.repo', YUM_REPOS_PATH)], + optional_files=[ + ('key-sap-ha.pem', RHUI_PKI_DIR), + ('content-sap-ha.crt', RHUI_PKI_PRODUCT_DIR) +-- +2.42.0 + diff --git a/0057-fix-rhui-package-collection.patch b/0057-fix-rhui-package-collection.patch new file mode 100644 index 0000000..913acf3 --- /dev/null +++ b/0057-fix-rhui-package-collection.patch @@ -0,0 +1,26 @@ +From f645c520a6bd7ce53e7db2e2a9f58f2554141695 Mon Sep 17 00:00:00 2001 +From: mhecko +Date: Fri, 7 Jun 2024 10:42:01 +0200 +Subject: [PATCH 57/92] fix rhui package collection + +--- + repos/system_upgrade/common/libraries/rhui.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index 28f1aeee..dbb3d71e 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -594,7 +594,8 @@ def get_all_known_rhui_pkgs_for_current_upg(): + known_pkgs = set() + for setup_family in RHUI_SETUPS.values(): + for setup in setup_family: +- if setup.os_version not in upg_major_versions: ++ setup_major = str(setup.os_version[0]) ++ if setup_major not in upg_major_versions: + continue + known_pkgs.update(setup.clients) + known_pkgs.add(setup.leapp_pkg) +-- +2.42.0 + diff --git a/0058-.packit.yaml-update-ENV-variables.patch b/0058-.packit.yaml-update-ENV-variables.patch new file mode 100644 index 0000000..07a0ec8 --- /dev/null +++ b/0058-.packit.yaml-update-ENV-variables.patch @@ -0,0 +1,187 @@ +From f417bac7cbc489d713c2102af5a511762ab4c63c Mon Sep 17 00:00:00 2001 +From: Martin Kluson +Date: Tue, 4 Jun 2024 15:26:30 +0200 +Subject: [PATCH 58/92] .packit.yaml: update ENV variables + +- Remove unused `RHSM_REPOS` and `LEAPPDATA_BRANCH` +- Update ENV variables for RHUI tests +- enable upgrade path to 8.10 on AWS +--- + .packit.yaml | 50 +++++++++++--------------------------------------- + 1 file changed, 11 insertions(+), 39 deletions(-) + +diff --git a/.packit.yaml b/.packit.yaml +index dd97c6ee..805eb2b5 100644 +--- a/.packit.yaml ++++ b/.packit.yaml +@@ -201,10 +201,8 @@ jobs: + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +- RHUI: "aws" +- LEAPPDATA_BRANCH: "upstream" + LEAPP_NO_RHSM: "1" +- USE_CUSTOM_REPOS: rhui ++ RHUI_HYPERSCALER: aws + + - &sanity-79to88 + <<: *sanity-abstract-7to8 +@@ -213,7 +211,6 @@ jobs: + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +- LEAPPDATA_BRANCH: "upstream" + + - &beaker-minimal-79to88 + <<: *beaker-minimal-7to8-abstract-ondemand +@@ -226,7 +223,6 @@ jobs: + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +- LEAPPDATA_BRANCH: "upstream" + + - &kernel-rt-79to88 + <<: *kernel-rt-abstract-7to8-ondemand +@@ -239,7 +235,6 @@ jobs: + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +- LEAPPDATA_BRANCH: "upstream" + + # Tests: 7.9 -> 8.10 + - &sanity-79to810 +@@ -249,20 +244,15 @@ jobs: + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +- LEAPPDATA_BRANCH: "upstream" +- +-# NOTE(mkluson) RHEL 8.10 content is not publicly available (via RHUI) +-#- &sanity-79to810-aws +-# <<: *sanity-abstract-7to8-aws +-# trigger: pull_request +-# identifier: sanity-7.9to8.10-aws +-# env: +-# SOURCE_RELEASE: "7.9" +-# TARGET_RELEASE: "8.10" +-# RHUI: "aws" +-# LEAPPDATA_BRANCH: "upstream" +-# LEAPP_NO_RHSM: "1" +-# USE_CUSTOM_REPOS: rhui ++ ++- &sanity-79to810-aws ++ <<: *sanity-abstract-7to8-aws ++ trigger: pull_request ++ identifier: sanity-7.9to8.10-aws ++ env: ++ SOURCE_RELEASE: "7.9" ++ TARGET_RELEASE: "8.10" ++ RHUI_HYPERSCALER: aws + + - &beaker-minimal-79to810 + <<: *beaker-minimal-7to8-abstract-ondemand +@@ -275,7 +265,6 @@ jobs: + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +- LEAPPDATA_BRANCH: "upstream" + + - &kernel-rt-79to810 + <<: *kernel-rt-abstract-7to8-ondemand +@@ -288,7 +277,6 @@ jobs: + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +- LEAPPDATA_BRANCH: "upstream" + + + # ###################################################################### # +@@ -420,7 +408,6 @@ jobs: + SOURCE_RELEASE: "8.8" + TARGET_RELEASE: "9.2" + RHSM_REPOS_EUS: "eus" +- LEAPPDATA_BRANCH: "upstream" + LEAPP_DEVEL_TARGET_RELEASE: "9.2" + + - &sanity-88to92-aws +@@ -447,11 +434,8 @@ jobs: + env: + SOURCE_RELEASE: "8.8" + TARGET_RELEASE: "9.2" +- RHSM_REPOS: "rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms" +- RHUI: "aws" +- LEAPPDATA_BRANCH: "upstream" + LEAPP_NO_RHSM: "1" +- USE_CUSTOM_REPOS: rhui ++ RHUI_HYPERSCALER: aws + + - &beaker-minimal-88to92 + <<: *beaker-minimal-8to9-abstract-ondemand +@@ -480,7 +464,6 @@ jobs: + env: + SOURCE_RELEASE: "8.8" + TARGET_RELEASE: "9.2" +- LEAPPDATA_BRANCH: "upstream" + LEAPP_DEVEL_TARGET_RELEASE: "9.2" + + - &kernel-rt-88to92 +@@ -509,7 +492,6 @@ jobs: + env: + SOURCE_RELEASE: "8.8" + TARGET_RELEASE: "9.2" +- LEAPPDATA_BRANCH: "upstream" + LEAPP_DEVEL_TARGET_RELEASE: "9.2" + + +@@ -521,8 +503,6 @@ jobs: + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.4" +- RHSM_REPOS: "rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms" +- LEAPPDATA_BRANCH: "upstream" + + # On-demand minimal beaker tests + - &beaker-minimal-810to94 +@@ -536,7 +516,6 @@ jobs: + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.4" +- LEAPPDATA_BRANCH: "upstream" + + # On-demand kernel-rt tests + - &kernel-rt-810to94 +@@ -550,8 +529,6 @@ jobs: + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.4" +- RHSM_REPOS: "rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms" +- LEAPPDATA_BRANCH: "upstream" + + + # Tests: 8.10 -> 9.5 +@@ -562,8 +539,6 @@ jobs: + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.5" +- RHSM_REPOS: "rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms" +- LEAPPDATA_BRANCH: "upstream" + + # On-demand minimal beaker tests + - &beaker-minimal-810to95 +@@ -577,7 +552,6 @@ jobs: + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.5" +- LEAPPDATA_BRANCH: "upstream" + + # On-demand kernel-rt tests + - &kernel-rt-810to95 +@@ -591,5 +565,3 @@ jobs: + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.5" +- RHSM_REPOS: "rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms" +- LEAPPDATA_BRANCH: "upstream" +-- +2.42.0 + diff --git a/0059-.packit.yaml-adjust-post_install_script-for-RHEL-7.9.patch b/0059-.packit.yaml-adjust-post_install_script-for-RHEL-7.9.patch new file mode 100644 index 0000000..d25f148 --- /dev/null +++ b/0059-.packit.yaml-adjust-post_install_script-for-RHEL-7.9.patch @@ -0,0 +1,27 @@ +From 84e63e6789c15ada85ec9bc615e545da1acf21b5 Mon Sep 17 00:00:00 2001 +From: Martin Kluson +Date: Mon, 20 May 2024 12:57:32 +0200 +Subject: [PATCH 59/92] .packit.yaml: adjust `post_install_script` for RHEL 7.9 + +Remove enabling repos step from .packit.yaml, it was moved to TF, where +it logically belongs to. +--- + .packit.yaml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/.packit.yaml b/.packit.yaml +index 805eb2b5..0b81a2f1 100644 +--- a/.packit.yaml ++++ b/.packit.yaml +@@ -145,7 +145,7 @@ jobs: + distro: "rhel-7.9" + settings: + provisioning: +- post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys; yum-config-manager --enable rhel-7-server-rhui-optional-rpms" ++ post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys" + tags: + BusinessUnit: sst_upgrades@leapp_upstream_test + +-- +2.42.0 + diff --git a/0060-Additional-.packit.yaml-fixes.patch b/0060-Additional-.packit.yaml-fixes.patch new file mode 100644 index 0000000..ff69b67 --- /dev/null +++ b/0060-Additional-.packit.yaml-fixes.patch @@ -0,0 +1,500 @@ +From d23fba228fe7110b8cbac59958f5b549bb5a8567 Mon Sep 17 00:00:00 2001 +From: Manuel Moran <101399189+mm0ran@users.noreply.github.com> +Date: Thu, 6 Jun 2024 08:43:00 +0200 +Subject: [PATCH 60/92] Additional .packit.yaml fixes + +--- + .packit.yaml | 253 +++++++++++++++++++++++++++++---------------------- + 1 file changed, 145 insertions(+), 108 deletions(-) + +diff --git a/.packit.yaml b/.packit.yaml +index 0b81a2f1..81a0cabe 100644 +--- a/.packit.yaml ++++ b/.packit.yaml +@@ -111,18 +111,6 @@ jobs: + distros: [RHEL-7.9-ZStream] + identifier: sanity-abstract-7to8 + tmt_plan: "" +- tf_extra_params: +- test: +- tmt: +- plan_filter: 'tag:tier0 & enabled:true' +- environments: +- - tmt: +- context: +- distro: "rhel-7.9" +- settings: +- provisioning: +- tags: +- BusinessUnit: sst_upgrades@leapp_upstream_test + + - &sanity-abstract-7to8-aws + <<: *sanity-abstract-7to8 +@@ -135,19 +123,6 @@ jobs: + identifier: sanity-abstract-7to8-aws + # NOTE(ivasilev) Unfortunately to use yaml templates we need to rewrite the whole tf_extra_params dict + # to use plan_filter (can't just specify one section test.tmt.plan_filter, need to specify environments.* as well) +- tf_extra_params: +- test: +- tmt: +- plan_filter: 'tag:upgrade_happy_path & enabled:true' +- environments: +- - tmt: +- context: +- distro: "rhel-7.9" +- settings: +- provisioning: +- post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys" +- tags: +- BusinessUnit: sst_upgrades@leapp_upstream_test + + # On-demand minimal beaker tests + - &beaker-minimal-7to8-abstract-ondemand +@@ -156,18 +131,6 @@ jobs: + labels: + - beaker-minimal + identifier: beaker-minimal-7to8-abstract-ondemand +- tf_extra_params: +- test: +- tmt: +- plan_filter: 'tag:partitioning & tag:7to8 & enabled:true' +- environments: +- - tmt: +- context: +- distro: "rhel-7.9" +- settings: +- provisioning: +- tags: +- BusinessUnit: sst_upgrades@leapp_upstream_test + + # On-demand kernel-rt tests + - &kernel-rt-abstract-7to8-ondemand +@@ -175,39 +138,48 @@ jobs: + labels: + - kernel-rt + identifier: sanity-7to8-kernel-rt-abstract-ondemand ++ ++# ###################################################################### # ++# ######################### Individual tests ########################### # ++# ###################################################################### # ++ ++# Tests: 7.9 -> 8.8 ++- &sanity-79to88-aws ++ <<: *sanity-abstract-7to8-aws ++ trigger: pull_request ++ identifier: sanity-7.9to8.8-aws + tf_extra_params: + test: + tmt: +- plan_filter: 'tag:kernel-rt & tag:7to8 & enabled:true' ++ plan_filter: 'tag:7to8 & tag:rhui-tier[0] & enabled:true' + environments: + - tmt: + context: + distro: "rhel-7.9" ++ distro_target: "rhel-8.8" + settings: + provisioning: ++ post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys" + tags: + BusinessUnit: sst_upgrades@leapp_upstream_test +- +- +-# ###################################################################### # +-# ######################### Individual tests ########################### # +-# ###################################################################### # +- +-# Tests: 7.9 -> 8.8 +-- &sanity-79to88-aws +- <<: *sanity-abstract-7to8-aws +- trigger: pull_request +- identifier: sanity-7.9to8.8-aws + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +- LEAPP_NO_RHSM: "1" + RHUI_HYPERSCALER: aws + + - &sanity-79to88 + <<: *sanity-abstract-7to8 + trigger: pull_request + identifier: sanity-7.9to8.8 ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:7to8 & tag:tier0 & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-7.9" ++ distro_target: "rhel-8.8" + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +@@ -220,6 +192,15 @@ jobs: + - beaker-minimal-7.9to8.8 + - 7.9to8.8 + identifier: sanity-7.9to8.8-beaker-minimal-ondemand ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:7to8 & tag:partitioning & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-7.9" ++ distro_target: "rhel-8.8" + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +@@ -232,6 +213,15 @@ jobs: + - kernel-rt-7.9to8.8 + - 7.9to8.8 + identifier: sanity-7.9to8.8-kernel-rt-ondemand ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:7to8 & tag:kernel-rt & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-7.9" ++ distro_target: "rhel-8.8" + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +@@ -241,6 +231,15 @@ jobs: + <<: *sanity-abstract-7to8 + trigger: pull_request + identifier: sanity-7.9to8.10 ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:7to8 & tag:tier0 & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-7.9" ++ distro_target: "rhel-8.10" + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +@@ -249,6 +248,20 @@ jobs: + <<: *sanity-abstract-7to8-aws + trigger: pull_request + identifier: sanity-7.9to8.10-aws ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:7to8 & tag:rhui-tier[0] & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-7.9" ++ distro_target: "rhel-8.10" ++ settings: ++ provisioning: ++ post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys" ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +@@ -262,6 +275,15 @@ jobs: + - beaker-minimal-7.9to8.10 + - 7.9to8.10 + identifier: sanity-7.9to8.10-beaker-minimal-ondemand ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:7to8 & tag:partitioning & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-7.9" ++ distro_target: "rhel-8.10" + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +@@ -274,6 +296,15 @@ jobs: + - kernel-rt-7.9to8.10 + - 7.9to8.10 + identifier: sanity-7.9to8.10-kernel-rt-ondemand ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:7to8 & tag:kernel-rt & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-7.9" ++ distro_target: "rhel-8.10" + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +@@ -303,18 +334,6 @@ jobs: + epel-8-x86_64: + distros: [RHEL-8.10.0-Nightly] + identifier: sanity-abstract-8to9 +- tf_extra_params: +- test: +- tmt: +- plan_filter: 'tag:tier0 & tag:8to9 & enabled:true' +- environments: +- - tmt: +- context: +- distro: "rhel-8.10" +- settings: +- provisioning: +- tags: +- BusinessUnit: sst_upgrades@leapp_upstream_test + + - &sanity-abstract-8to9-aws + <<: *sanity-abstract-8to9 +@@ -325,19 +344,6 @@ jobs: + epel-8-x86_64: + distros: [RHEL-8.10-rhui] + identifier: sanity-abstract-8to9-aws +- tf_extra_params: +- test: +- tmt: +- plan_filter: 'tag:upgrade_happy_path & enabled:true' +- environments: +- - tmt: +- context: +- distro: "rhel-8.10" +- settings: +- provisioning: +- post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys" +- tags: +- BusinessUnit: sst_upgrades@leapp_upstream_test + + - &beaker-minimal-8to9-abstract-ondemand + <<: *sanity-abstract-8to9 +@@ -348,37 +354,12 @@ jobs: + epel-8-x86_64: + distros: [RHEL-8.10.0-Nightly] + identifier: beaker-minimal-8to9-abstract-ondemand +- tf_extra_params: +- test: +- tmt: +- plan_filter: 'tag:partitioning & tag:8to9 & enabled:true' +- environments: +- - tmt: +- context: +- distro: "rhel-8.10" +- settings: +- provisioning: +- tags: +- BusinessUnit: sst_upgrades@leapp_upstream_test + + - &kernel-rt-abstract-8to9-ondemand + <<: *beaker-minimal-8to9-abstract-ondemand + labels: + - kernel-rt + identifier: sanity-8to9-kernel-rt-abstract-ondemand +- tf_extra_params: +- test: +- tmt: +- plan_filter: 'tag:kernel-rt & tag:8to9 & enabled:true' +- environments: +- - tmt: +- context: +- distro: "rhel-8.10" +- settings: +- provisioning: +- tags: +- BusinessUnit: sst_upgrades@leapp_upstream_test +- + + # ###################################################################### # + # ######################### Individual tests ########################### # +@@ -395,11 +376,12 @@ jobs: + tf_extra_params: + test: + tmt: +- plan_filter: 'tag:tier0 & tag:8to9 & enabled:true' ++ plan_filter: 'tag:8to9 & tag:tier0 & enabled:true' + environments: + - tmt: + context: + distro: "rhel-8.8" ++ distro_target: "rhel-9.2" + settings: + provisioning: + tags: +@@ -408,7 +390,6 @@ jobs: + SOURCE_RELEASE: "8.8" + TARGET_RELEASE: "9.2" + RHSM_REPOS_EUS: "eus" +- LEAPP_DEVEL_TARGET_RELEASE: "9.2" + + - &sanity-88to92-aws + <<: *sanity-abstract-8to9-aws +@@ -421,11 +402,12 @@ jobs: + tf_extra_params: + test: + tmt: +- plan_filter: 'tag:upgrade_happy_path & enabled:true' ++ plan_filter: 'tag:8to9 & tag:rhui-tier[0] & enabled:true' + environments: + - tmt: + context: + distro: "rhel-8.8" ++ distro_target: "rhel-9.2" + settings: + provisioning: + post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys" +@@ -434,7 +416,6 @@ jobs: + env: + SOURCE_RELEASE: "8.8" + TARGET_RELEASE: "9.2" +- LEAPP_NO_RHSM: "1" + RHUI_HYPERSCALER: aws + + - &beaker-minimal-88to92 +@@ -451,11 +432,12 @@ jobs: + tf_extra_params: + test: + tmt: +- plan_filter: 'tag:partitioning & tag:8to9 & enabled:true' ++ plan_filter: 'tag:8to9 &tag:partitioning & enabled:true' + environments: + - tmt: + context: + distro: "rhel-8.8" ++ distro_target: "rhel-9.2" + settings: + provisioning: + post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys" +@@ -464,7 +446,7 @@ jobs: + env: + SOURCE_RELEASE: "8.8" + TARGET_RELEASE: "9.2" +- LEAPP_DEVEL_TARGET_RELEASE: "9.2" ++ RHSM_REPOS_EUS: "eus" + + - &kernel-rt-88to92 + <<: *kernel-rt-abstract-8to9-ondemand +@@ -480,11 +462,12 @@ jobs: + tf_extra_params: + test: + tmt: +- plan_filter: 'tag:kernel-rt & tag:8to9 & enabled:true' ++ plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true' + environments: + - tmt: + context: + distro: "rhel-8.8" ++ distro_target: "rhel-9.2" + settings: + provisioning: + tags: +@@ -492,7 +475,7 @@ jobs: + env: + SOURCE_RELEASE: "8.8" + TARGET_RELEASE: "9.2" +- LEAPP_DEVEL_TARGET_RELEASE: "9.2" ++ RHSM_REPOS_EUS: "eus" + + + # Tests: 8.10 -> 9.4 +@@ -500,6 +483,15 @@ jobs: + <<: *sanity-abstract-8to9 + trigger: pull_request + identifier: sanity-8.10to9.4 ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:8to9 & tag:tier0 & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-8.10" ++ distro_target: "rhel-9.4" + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.4" +@@ -513,6 +505,15 @@ jobs: + - beaker-minimal-8.10to9.4 + - 8.10to9.4 + identifier: sanity-8.10to9.4-beaker-minimal-ondemand ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:8to9 & tag:partitioning & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-8.10" ++ distro_target: "rhel-9.4" + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.4" +@@ -526,6 +527,15 @@ jobs: + - kernel-rt-8.10to9.4 + - 8.10to9.4 + identifier: sanity-8.10to9.4-kernel-rt-ondemand ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-8.10" ++ distro_target: "rhel-9.4" + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.4" +@@ -536,6 +546,15 @@ jobs: + <<: *sanity-abstract-8to9 + trigger: pull_request + identifier: sanity-8.10to9.5 ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:8to9 & tag:tier0 & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-8.10" ++ distro_target: "rhel-9.5" + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.5" +@@ -549,6 +568,15 @@ jobs: + - beaker-minimal-8.10to9.5 + - 8.10to9.5 + identifier: sanity-8.10to9.5-beaker-minimal-ondemand ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:8to9 & tag:partitioning & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-8.10" ++ distro_target: "rhel-9.5" + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.5" +@@ -562,6 +590,15 @@ jobs: + - kernel-rt-8.10to9.5 + - 8.10to9.5 + identifier: sanity-8.10to9.5-kernel-rt-ondemand ++ tf_extra_params: ++ test: ++ tmt: ++ plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true' ++ environments: ++ - tmt: ++ context: ++ distro: "rhel-8.10" ++ distro_target: "rhel-9.5" + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.5" +-- +2.42.0 + diff --git a/0061-Add-PR-review-changes.patch b/0061-Add-PR-review-changes.patch new file mode 100644 index 0000000..a8550f3 --- /dev/null +++ b/0061-Add-PR-review-changes.patch @@ -0,0 +1,167 @@ +From 91f4e3b5d243f957f35d999ebd99ddf270125cb1 Mon Sep 17 00:00:00 2001 +From: Manuel Moran <101399189+mm0ran@users.noreply.github.com> +Date: Fri, 7 Jun 2024 14:02:39 +0200 +Subject: [PATCH 61/92] Add PR review changes + +- Remove comment connected to deleted lines +- Add BusinessUnit to all environments +--- + .packit.yaml | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 48 insertions(+), 3 deletions(-) + +diff --git a/.packit.yaml b/.packit.yaml +index 81a0cabe..a27806f2 100644 +--- a/.packit.yaml ++++ b/.packit.yaml +@@ -121,8 +121,6 @@ jobs: + epel-7-x86_64: + distros: [RHEL-7.9-rhui] + identifier: sanity-abstract-7to8-aws +- # NOTE(ivasilev) Unfortunately to use yaml templates we need to rewrite the whole tf_extra_params dict +- # to use plan_filter (can't just specify one section test.tmt.plan_filter, need to specify environments.* as well) + + # On-demand minimal beaker tests + - &beaker-minimal-7to8-abstract-ondemand +@@ -180,6 +178,10 @@ jobs: + context: + distro: "rhel-7.9" + distro_target: "rhel-8.8" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +@@ -201,6 +203,10 @@ jobs: + context: + distro: "rhel-7.9" + distro_target: "rhel-8.8" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +@@ -222,6 +228,10 @@ jobs: + context: + distro: "rhel-7.9" + distro_target: "rhel-8.8" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +@@ -240,6 +250,10 @@ jobs: + context: + distro: "rhel-7.9" + distro_target: "rhel-8.10" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +@@ -284,6 +298,10 @@ jobs: + context: + distro: "rhel-7.9" + distro_target: "rhel-8.10" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +@@ -305,6 +323,10 @@ jobs: + context: + distro: "rhel-7.9" + distro_target: "rhel-8.10" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +@@ -398,7 +420,6 @@ jobs: + epel-8-x86_64: + distros: [RHEL-8.8-rhui] + identifier: sanity-8.8to9.2-aws +- # NOTE(mkluson) Unfortunately to use yaml templates we need to rewrite the whole tf_extra_params dict + tf_extra_params: + test: + tmt: +@@ -492,6 +513,10 @@ jobs: + context: + distro: "rhel-8.10" + distro_target: "rhel-9.4" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.4" +@@ -514,6 +539,10 @@ jobs: + context: + distro: "rhel-8.10" + distro_target: "rhel-9.4" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.4" +@@ -536,6 +565,10 @@ jobs: + context: + distro: "rhel-8.10" + distro_target: "rhel-9.4" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.4" +@@ -555,6 +588,10 @@ jobs: + context: + distro: "rhel-8.10" + distro_target: "rhel-9.5" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.5" +@@ -577,6 +614,10 @@ jobs: + context: + distro: "rhel-8.10" + distro_target: "rhel-9.5" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.5" +@@ -599,6 +640,10 @@ jobs: + context: + distro: "rhel-8.10" + distro_target: "rhel-9.5" ++ settings: ++ provisioning: ++ tags: ++ BusinessUnit: sst_upgrades@leapp_upstream_test + env: + SOURCE_RELEASE: "8.10" + TARGET_RELEASE: "9.5" +-- +2.42.0 + diff --git a/0062-rhui-gcp-add-SAP-RHEL-8.10-client-1253.patch b/0062-rhui-gcp-add-SAP-RHEL-8.10-client-1253.patch new file mode 100644 index 0000000..ad79a07 --- /dev/null +++ b/0062-rhui-gcp-add-SAP-RHEL-8.10-client-1253.patch @@ -0,0 +1,67 @@ +From ba46700ed91381458fefe556fb68ca0d2d3b758c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michal=20He=C4=8Dko?= +Date: Mon, 10 Jun 2024 22:30:39 +0200 +Subject: [PATCH 62/92] rhui(gcp): add SAP RHEL 8.10 client (#1253) + +* rhui(gcp): add SAP RHEL 8.10 client + +Add a dedicated entry for SAP RHEL 8.10 on GCP due to the same reasons +as with other cloud providers - 8.10 is the last RHEL8 release, thus, +there are no content channels. A dedicated client is introduced, +providing SAP systems with GA content. + +* Add spaces to message strings + +--------- + +Co-authored-by: mhecko +Co-authored-by: Toshio Kuratomi +--- + .../libraries/userspacegen.py | 15 ++++++++++++++- + repos/system_upgrade/common/libraries/rhui.py | 4 ++++ + 2 files changed, 18 insertions(+), 1 deletion(-) + +diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py +index dc93c9a0..6e8214dd 100644 +--- a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py ++++ b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py +@@ -1220,7 +1220,20 @@ def setup_target_rhui_access_if_needed(context, indata): + _apply_rhui_access_postinstall_tasks(context, setup_info) + + # Do a cleanup so there are not duplicit repoids +- files_owned_by_clients = _query_rpm_for_pkg_files(context, indata.rhui_info.target_client_pkg_names) ++ try: ++ files_owned_by_clients = _query_rpm_for_pkg_files(context, indata.rhui_info.target_client_pkg_names) ++ except CalledProcessError as err: # We failed to rpm -qf PKG, the PKG is most likely not installed ++ api.current_logger().critical('Failed to query files owned by target RHUI clients (clients=%s). This is caused' ++ ' by failing to install the target clients during the client-swap step.' ++ ' Full error: %s', indata.rhui_info.target_client_pkg_names, err) ++ ++ target_major = get_target_major_version() ++ plural_suffix = 's' if len(indata.rhui_info.target_client_pkg_names) > 1 else '' ++ client_rpms = ', '.join(indata.rhui_info.target_client_pkg_names) ++ msg = ('Could not find the RHEL {target_major} RHUI client rpm{plural_suffix} ({client_rpms})' ++ ' in the cloud provider\'s client repository.') ++ raise StopActorExecutionError(msg.format(target_major=target_major, plural_suffix=plural_suffix, ++ client_rpms=client_rpms)) + + for copy_task in setup_info.preinstall_tasks.files_to_copy_into_overlay: + dest = get_copy_location_from_copy_in_task(context.base_dir, copy_task) +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index dbb3d71e..86f74084 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -323,6 +323,10 @@ RHUI_SETUPS = { + mandatory_files=[('leapp-google-sap.repo', YUM_REPOS_PATH)], + files_supporting_client_operation=['leapp-google-sap.repo'], + os_version='8', content_channel=ContentChannel.E4S), ++ mk_rhui_setup(clients={'google-rhui-client-rhel810-sap'}, leapp_pkg='leapp-rhui-google-sap', ++ mandatory_files=[('leapp-google-sap.repo', YUM_REPOS_PATH)], ++ files_supporting_client_operation=['leapp-google-sap.repo'], ++ os_version='8.10', content_channel=ContentChannel.GA), + mk_rhui_setup(clients={'google-rhui-client-rhel9-sap'}, leapp_pkg='leapp-rhui-google-sap', + mandatory_files=[('leapp-google-sap.repo', YUM_REPOS_PATH)], + files_supporting_client_operation=['leapp-google-sap.repo'], +-- +2.42.0 + diff --git a/0063-PR-welcome-msg-update-the-msg-to-cover-additional-Pa.patch b/0063-PR-welcome-msg-update-the-msg-to-cover-additional-Pa.patch new file mode 100644 index 0000000..94a2d73 --- /dev/null +++ b/0063-PR-welcome-msg-update-the-msg-to-cover-additional-Pa.patch @@ -0,0 +1,49 @@ +From f3913f7b8ee11f5e67354bf18963f05269bb511c Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Mon, 6 May 2024 09:33:34 +0200 +Subject: [PATCH 63/92] PR welcome msg: update the msg to cover additional + Packit cmds + +I found useful to be able to run just failed tests (when they crashed +due to infrastructure issues). Updating the welcome msg to provide +this info and little bit restructured original statement, to make +it more friendly for reading. +--- + .github/workflows/pr-welcome-msg.yml | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/.github/workflows/pr-welcome-msg.yml b/.github/workflows/pr-welcome-msg.yml +index c6527da4..ff9414d2 100644 +--- a/.github/workflows/pr-welcome-msg.yml ++++ b/.github/workflows/pr-welcome-msg.yml +@@ -21,16 +21,21 @@ jobs: + ## **Thank you for contributing to the Leapp project!** + Please note that every PR needs to comply with the [Leapp Guidelines](https://leapp.readthedocs.io/en/latest/contributing.html#) and must pass all tests in order to be mergeable. + If you want to request a review or rebuild a package in copr, you can use following commands as a comment: +- - **review please @oamg/developers** to notify leapp developers of the review request +- - **/packit copr-build** to submit a public copr build using packit ++ - **`review please @oamg/developers`** to notify leapp developers of the review request ++ - **`/packit copr-build`** to submit a public copr build using packit + +- Packit will automatically schedule regression tests for this PR's build and latest upstream leapp build. If you need a different version of leapp, e.g. from PR#42, use `/packit test oamg/leapp#42` +- Note that first time contributors cannot run tests automatically - they will be started by a reviewer. ++ Packit will automatically schedule regression tests for this PR's build and latest upstream leapp build. ++ However, here are additional useful commands for packit: ++ - **`/packit test`** to re-run manually the default tests ++ - **`/packit retest-failed`** to re-run failed tests manually ++ - **`/packit test oamg/leapp#42`** to run tests with leapp builds for the leapp PR#42 (default is latest upstream - master - build) ++ ++ Note that first time contributors cannot run tests automatically - they need to be started by a reviewer. + + It is possible to schedule specific on-demand tests as well. Currently 2 test sets are supported, `beaker-minimal` and `kernel-rt`, both can be used to be run on all upgrade paths or just a couple of specific ones. + To launch on-demand tests with packit: +- - **/packit test --labels kernel-rt** to schedule `kernel-rt` tests set for all upgrade paths +- - **/packit test --labels beaker-minimal-8.10to9.4,kernel-rt-8.10to9.4** to schedule `kernel-rt` and `beaker-minimal` test sets for 8.10->9.4 upgrade path ++ - **`/packit test --labels kernel-rt`** to schedule `kernel-rt` tests set for all upgrade paths ++ - **`/packit test --labels beaker-minimal-8.10to9.4,kernel-rt-8.10to9.4`** to schedule `kernel-rt` and `beaker-minimal` test sets for 8.10->9.4 upgrade path + + See other labels for particular jobs defined in the `.packit.yaml` file. + +-- +2.42.0 + diff --git a/0064-Add-RHEL-7-for-SAP-ELS-to-the-RHUI-config-1254.patch b/0064-Add-RHEL-7-for-SAP-ELS-to-the-RHUI-config-1254.patch new file mode 100644 index 0000000..bed1d3d --- /dev/null +++ b/0064-Add-RHEL-7-for-SAP-ELS-to-the-RHUI-config-1254.patch @@ -0,0 +1,26 @@ +From 4ba0ec3d51126cdff31b47f96312d7c6c0d138ad Mon Sep 17 00:00:00 2001 +From: "Michal Reznik (mreznik)" +Date: Wed, 19 Jun 2024 15:59:01 +0200 +Subject: [PATCH 64/92] Add RHEL 7 for SAP ELS to the RHUI config (#1254) + +There is going to be a separate ELS RHUI client package for +RHEL 7 for SAP. +--- + repos/system_upgrade/common/libraries/rhui.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index 86f74084..b2b906c3 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -319,6 +319,7 @@ RHUI_SETUPS = { + ], + RHUIFamily(RHUIProvider.GOOGLE, variant=RHUIVariant.SAP, client_files_folder='google-sap'): [ + mk_rhui_setup(clients={'google-rhui-client-rhel79-sap'}, os_version='7', content_channel=ContentChannel.E4S), ++ mk_rhui_setup(clients={'google-rhui-client-rhel7-sap-els'}, os_version='7'), + mk_rhui_setup(clients={'google-rhui-client-rhel8-sap'}, leapp_pkg='leapp-rhui-google-sap', + mandatory_files=[('leapp-google-sap.repo', YUM_REPOS_PATH)], + files_supporting_client_operation=['leapp-google-sap.repo'], +-- +2.42.0 + diff --git a/0065-Revert-Add-RHEL-7-for-SAP-ELS-to-the-RHUI-config-125.patch b/0065-Revert-Add-RHEL-7-for-SAP-ELS-to-the-RHUI-config-125.patch new file mode 100644 index 0000000..8585aef --- /dev/null +++ b/0065-Revert-Add-RHEL-7-for-SAP-ELS-to-the-RHUI-config-125.patch @@ -0,0 +1,28 @@ +From 82d2db8e803c2865c5aea1c0abef75a3dd8c5f1c Mon Sep 17 00:00:00 2001 +From: Michal Reznik +Date: Fri, 21 Jun 2024 12:02:16 +0200 +Subject: [PATCH 65/92] Revert "Add RHEL 7 for SAP ELS to the RHUI config + (#1254)" + +This reverts commit 4ba0ec3d51126cdff31b47f96312d7c6c0d138ad. + +It turned out this change is not needed at the end. +--- + repos/system_upgrade/common/libraries/rhui.py | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index b2b906c3..86f74084 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -319,7 +319,6 @@ RHUI_SETUPS = { + ], + RHUIFamily(RHUIProvider.GOOGLE, variant=RHUIVariant.SAP, client_files_folder='google-sap'): [ + mk_rhui_setup(clients={'google-rhui-client-rhel79-sap'}, os_version='7', content_channel=ContentChannel.E4S), +- mk_rhui_setup(clients={'google-rhui-client-rhel7-sap-els'}, os_version='7'), + mk_rhui_setup(clients={'google-rhui-client-rhel8-sap'}, leapp_pkg='leapp-rhui-google-sap', + mandatory_files=[('leapp-google-sap.repo', YUM_REPOS_PATH)], + files_supporting_client_operation=['leapp-google-sap.repo'], +-- +2.42.0 + diff --git a/0066-codespell-Use-specific-version-instead-of-master.patch b/0066-codespell-Use-specific-version-instead-of-master.patch new file mode 100644 index 0000000..3f8bbbd --- /dev/null +++ b/0066-codespell-Use-specific-version-instead-of-master.patch @@ -0,0 +1,26 @@ +From 0ef7402e1b517dbe58ee004735d995a8e4eab24f Mon Sep 17 00:00:00 2001 +From: Matej Matuska +Date: Mon, 1 Jul 2024 15:30:11 +0200 +Subject: [PATCH 66/92] codespell: Use specific version instead of master + +Let's not blindly use the master ref, use a specific version instead. +--- + .github/workflows/codespell.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml +index 002d3774..c2960928 100644 +--- a/.github/workflows/codespell.yml ++++ b/.github/workflows/codespell.yml +@@ -15,7 +15,7 @@ jobs: + + steps: + - uses: actions/checkout@v4 +- - uses: codespell-project/actions-codespell@master ++ - uses: codespell-project/actions-codespell@v2 + with: + ignore_words_list: ro,fo,couldn,repositor,zeor + skip: "./repos/system_upgrade/common/actors/storagescanner/tests/files/mounts,\ +-- +2.42.0 + diff --git a/0067-Demote-Attempted-to-both-enable-and-disable-message-.patch b/0067-Demote-Attempted-to-both-enable-and-disable-message-.patch new file mode 100644 index 0000000..be5bc23 --- /dev/null +++ b/0067-Demote-Attempted-to-both-enable-and-disable-message-.patch @@ -0,0 +1,37 @@ +From 3d1ee5a63c40628cdd78617f429e036e0b8014ad Mon Sep 17 00:00:00 2001 +From: Evgeni Golov +Date: Fri, 26 Apr 2024 09:32:18 +0200 +Subject: [PATCH 67/92] Demote "Attempted to both enable and disable" message + to warning + +--- + .../libraries/setsystemdservicesstate.py | 2 +- + .../tests/test_setsystemdservicesstate.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/libraries/setsystemdservicesstate.py b/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/libraries/setsystemdservicesstate.py +index 641605db..3f84f59f 100644 +--- a/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/libraries/setsystemdservicesstate.py ++++ b/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/libraries/setsystemdservicesstate.py +@@ -13,7 +13,7 @@ def process(): + intersection = services_to_enable.intersection(services_to_disable) + for service in intersection: + msg = 'Attempted to both enable and disable systemd service "{}", service will be disabled.'.format(service) +- api.current_logger().error(msg) ++ api.current_logger().warning(msg) + + for service in services_to_enable: + try: +diff --git a/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/tests/test_setsystemdservicesstate.py b/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/tests/test_setsystemdservicesstate.py +index 14d07537..fa17a94c 100644 +--- a/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/tests/test_setsystemdservicesstate.py ++++ b/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/tests/test_setsystemdservicesstate.py +@@ -94,4 +94,4 @@ def test_enable_disable_conflict_logged(monkeypatch): + + expect_msg = ('Attempted to both enable and disable systemd service "hello.service",' + ' service will be disabled.') +- assert expect_msg in api.current_logger.errmsg ++ assert expect_msg in api.current_logger.warnmsg +-- +2.42.0 + diff --git a/0068-Don-t-enable-services-that-will-be-afterwards-disabl.patch b/0068-Don-t-enable-services-that-will-be-afterwards-disabl.patch new file mode 100644 index 0000000..38384d5 --- /dev/null +++ b/0068-Don-t-enable-services-that-will-be-afterwards-disabl.patch @@ -0,0 +1,25 @@ +From 5feeba7b216ec34f9a201f034d2c8f8db1462e6a Mon Sep 17 00:00:00 2001 +From: Evgeni Golov +Date: Fri, 26 Apr 2024 09:33:48 +0200 +Subject: [PATCH 68/92] Don't enable services that will be afterwards disabled + +--- + .../libraries/setsystemdservicesstate.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/libraries/setsystemdservicesstate.py b/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/libraries/setsystemdservicesstate.py +index 3f84f59f..8aeb5c2c 100644 +--- a/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/libraries/setsystemdservicesstate.py ++++ b/repos/system_upgrade/common/actors/systemd/setsystemdservicesstates/libraries/setsystemdservicesstate.py +@@ -15,7 +15,7 @@ def process(): + msg = 'Attempted to both enable and disable systemd service "{}", service will be disabled.'.format(service) + api.current_logger().warning(msg) + +- for service in services_to_enable: ++ for service in services_to_enable - intersection: + try: + systemd.enable_unit(service) + except CalledProcessError: +-- +2.42.0 + diff --git a/0069-Use-frozen-branch-for-rhel7-downstream-testing-1263.patch b/0069-Use-frozen-branch-for-rhel7-downstream-testing-1263.patch new file mode 100644 index 0000000..759ed02 --- /dev/null +++ b/0069-Use-frozen-branch-for-rhel7-downstream-testing-1263.patch @@ -0,0 +1,96 @@ +From 9ec92806e5e4dde455b303dc86269998971b9b19 Mon Sep 17 00:00:00 2001 +From: Anna Dupliak +Date: Fri, 12 Jul 2024 16:43:57 +0200 +Subject: [PATCH 69/92] Use frozen branch for rhel7 downstream testing (#1263) + +RHEL 7 is EOM and based on that another testing of IPU 7 -> 8 is used only to be able to discover a possible regression. As such, all integration tests for IPU 7 -> 8 should be executed from a frozen rhel7 branch. Updating packig configuration to address that. +--- + .packit.yaml | 23 +++++++++++++++-------- + 1 file changed, 15 insertions(+), 8 deletions(-) + +diff --git a/.packit.yaml b/.packit.yaml +index a27806f2..7c3799cf 100644 +--- a/.packit.yaml ++++ b/.packit.yaml +@@ -88,7 +88,8 @@ jobs: + + # NOTE: to see what envars, targets, .. can be set in tests, see + # the configuration of tests here: +-# https://gitlab.cee.redhat.com/oamg/leapp-tests/-/blob/main/config.yaml ++# 7toX path https://gitlab.cee.redhat.com/oamg/leapp-tests/-/blob/rhel7/config.yaml ++# >7tox path https://gitlab.cee.redhat.com/oamg/leapp-tests/-/blob/main/config.yaml + # Available only to RH Employees. + + # ###################################################################### # +@@ -102,7 +103,7 @@ jobs: + job: tests + trigger: ignore + fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests" +- fmf_ref: "main" ++ fmf_ref: "rhel7" + use_internal_tf: True + labels: + - sanity +@@ -149,7 +150,7 @@ jobs: + tf_extra_params: + test: + tmt: +- plan_filter: 'tag:7to8 & tag:rhui-tier[0] & enabled:true' ++ plan_filter: 'tag:7to8 & tag:upgrade_happy_path & enabled:true' + environments: + - tmt: + context: +@@ -163,7 +164,10 @@ jobs: + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.8" +- RHUI_HYPERSCALER: aws ++ RHUI: "aws" ++ LEAPPDATA_BRANCH: "upstream" ++ LEAPP_NO_RHSM: "1" ++ USE_CUSTOM_REPOS: rhui + + - &sanity-79to88 + <<: *sanity-abstract-7to8 +@@ -172,7 +176,7 @@ jobs: + tf_extra_params: + test: + tmt: +- plan_filter: 'tag:7to8 & tag:tier0 & enabled:true' ++ plan_filter: 'tag:7to8 & tag:sanity & enabled:true' + environments: + - tmt: + context: +@@ -244,7 +248,7 @@ jobs: + tf_extra_params: + test: + tmt: +- plan_filter: 'tag:7to8 & tag:tier0 & enabled:true' ++ plan_filter: 'tag:7to8 & tag:sanity & enabled:true' + environments: + - tmt: + context: +@@ -265,7 +269,7 @@ jobs: + tf_extra_params: + test: + tmt: +- plan_filter: 'tag:7to8 & tag:rhui-tier[0] & enabled:true' ++ plan_filter: 'tag:7to8 & tag:upgrade_happy_path & enabled:true' + environments: + - tmt: + context: +@@ -279,7 +283,10 @@ jobs: + env: + SOURCE_RELEASE: "7.9" + TARGET_RELEASE: "8.10" +- RHUI_HYPERSCALER: aws ++ RHUI: "aws" ++ LEAPPDATA_BRANCH: "upstream" ++ LEAPP_NO_RHSM: "1" ++ USE_CUSTOM_REPOS: rhui + + - &beaker-minimal-79to810 + <<: *beaker-minimal-7to8-abstract-ondemand +-- +2.42.0 + diff --git a/0070-load-obsoleted-gpg-keys-from-gpg-signatures.json.patch b/0070-load-obsoleted-gpg-keys-from-gpg-signatures.json.patch new file mode 100644 index 0000000..53bb516 --- /dev/null +++ b/0070-load-obsoleted-gpg-keys-from-gpg-signatures.json.patch @@ -0,0 +1,129 @@ +From 7e5a5e7088695bcdd4b822b9a057de8cd221d19c Mon Sep 17 00:00:00 2001 +From: Evgeni Golov +Date: Mon, 27 May 2024 09:25:20 +0200 +Subject: [PATCH 70/92] load obsoleted gpg keys from gpg-signatures.json + +--- + .../libraries/removeobsoleterpmgpgkeys.py | 16 ++++------------ + .../tests/test_removeobsoleterpmgpgkeys.py | 5 +++++ + .../files/distro/centos/gpg-signatures.json | 3 ++- + .../files/distro/rhel/gpg-signatures.json | 11 ++++++++++- + .../system_upgrade/common/libraries/distro.py | 18 ++++++++++++++++++ + 5 files changed, 39 insertions(+), 14 deletions(-) + create mode 100644 repos/system_upgrade/common/libraries/distro.py + +diff --git a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py +index 1cc5d64f..6e84c2e9 100644 +--- a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py ++++ b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py +@@ -1,27 +1,19 @@ + from leapp.libraries.common.config.version import get_target_major_version ++from leapp.libraries.common.distro import get_distribution_data + from leapp.libraries.common.rpms import has_package + from leapp.libraries.stdlib import api + from leapp.models import DNFWorkaround, InstalledRPM + +-# maps target version to keys obsoleted in that version +-OBSOLETED_KEYS_MAP = { +- 7: [], +- 8: [ +- "gpg-pubkey-2fa658e0-45700c69", +- "gpg-pubkey-37017186-45761324", +- "gpg-pubkey-db42a60e-37ea5438", +- ], +- 9: ["gpg-pubkey-d4082792-5b32db75"], +-} +- + + def _get_obsolete_keys(): + """ + Return keys obsoleted in target and previous versions + """ ++ distribution = api.current_actor().configuration.os_release.release_id ++ obsoleted_keys_map = get_distribution_data(distribution).get('obsoleted-keys', {}) + keys = [] + for version in range(7, int(get_target_major_version()) + 1): +- for key in OBSOLETED_KEYS_MAP[version]: ++ for key in obsoleted_keys_map[str(version)]: + name, version, release = key.rsplit("-", 2) + if has_package(InstalledRPM, name, version=version, release=release): + keys.append(key) +diff --git a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py +index 1d487815..4d9a0e84 100644 +--- a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py ++++ b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py +@@ -1,3 +1,5 @@ ++import os ++ + import pytest + + from leapp.libraries.actor import removeobsoleterpmgpgkeys +@@ -67,6 +69,9 @@ def test_get_obsolete_keys(monkeypatch, version, expected): + ), + ) + ++ cur_dir = os.path.dirname(os.path.abspath(__file__)) ++ monkeypatch.setattr(api, 'get_common_folder_path', lambda folder: os.path.join(cur_dir, '../../../files/', folder)) ++ + keys = removeobsoleterpmgpgkeys._get_obsolete_keys() + assert set(keys) == set(expected) + +diff --git a/repos/system_upgrade/common/files/distro/centos/gpg-signatures.json b/repos/system_upgrade/common/files/distro/centos/gpg-signatures.json +index cf7f819d..547b13e7 100644 +--- a/repos/system_upgrade/common/files/distro/centos/gpg-signatures.json ++++ b/repos/system_upgrade/common/files/distro/centos/gpg-signatures.json +@@ -3,5 +3,6 @@ + "24c6a8a7f4a80eb5", + "05b555b38483c65d", + "4eb84e71f2ee9d55" +- ] ++ ], ++ "obsoleted-keys": {} + } +diff --git a/repos/system_upgrade/common/files/distro/rhel/gpg-signatures.json b/repos/system_upgrade/common/files/distro/rhel/gpg-signatures.json +index 64d9ed12..0d40e001 100644 +--- a/repos/system_upgrade/common/files/distro/rhel/gpg-signatures.json ++++ b/repos/system_upgrade/common/files/distro/rhel/gpg-signatures.json +@@ -5,5 +5,14 @@ + "938a80caf21541eb", + "fd372689897da07a", + "45689c882fa658e0" +- ] ++ ], ++ "obsoleted-keys": { ++ "7": [], ++ "8": [ ++ "gpg-pubkey-2fa658e0-45700c69", ++ "gpg-pubkey-37017186-45761324", ++ "gpg-pubkey-db42a60e-37ea5438" ++ ], ++ "9": ["gpg-pubkey-d4082792-5b32db75"] ++ } + } +diff --git a/repos/system_upgrade/common/libraries/distro.py b/repos/system_upgrade/common/libraries/distro.py +new file mode 100644 +index 00000000..2ed5eacd +--- /dev/null ++++ b/repos/system_upgrade/common/libraries/distro.py +@@ -0,0 +1,18 @@ ++import json ++import os ++ ++from leapp.exceptions import StopActorExecutionError ++from leapp.libraries.stdlib import api ++ ++ ++def get_distribution_data(distribution): ++ distributions_path = api.get_common_folder_path('distro') ++ ++ distribution_config = os.path.join(distributions_path, distribution, 'gpg-signatures.json') ++ if os.path.exists(distribution_config): ++ with open(distribution_config) as distro_config_file: ++ return json.load(distro_config_file) ++ else: ++ raise StopActorExecutionError( ++ 'Cannot find distribution signature configuration.', ++ details={'Problem': 'Distribution {} was not found in {}.'.format(distribution, distributions_path)}) +-- +2.42.0 + diff --git a/0071-refactor-distributionsignedrpmscanner-to-use-common-.patch b/0071-refactor-distributionsignedrpmscanner-to-use-common-.patch new file mode 100644 index 0000000..4b46418 --- /dev/null +++ b/0071-refactor-distributionsignedrpmscanner-to-use-common-.patch @@ -0,0 +1,56 @@ +From f822cb805ed9efd101fd212eb162544ab29c8fe9 Mon Sep 17 00:00:00 2001 +From: Evgeni Golov +Date: Mon, 27 May 2024 11:58:46 +0200 +Subject: [PATCH 71/92] refactor distributionsignedrpmscanner to use common + distro helper + +--- + .../libraries/distributionsignedrpmscanner.py | 22 ++----------------- + 1 file changed, 2 insertions(+), 20 deletions(-) + +diff --git a/repos/system_upgrade/common/actors/distributionsignedrpmscanner/libraries/distributionsignedrpmscanner.py b/repos/system_upgrade/common/actors/distributionsignedrpmscanner/libraries/distributionsignedrpmscanner.py +index 7898453b..51d6eeb5 100644 +--- a/repos/system_upgrade/common/actors/distributionsignedrpmscanner/libraries/distributionsignedrpmscanner.py ++++ b/repos/system_upgrade/common/actors/distributionsignedrpmscanner/libraries/distributionsignedrpmscanner.py +@@ -1,28 +1,10 @@ +-import json +-import os +- +-from leapp.exceptions import StopActorExecutionError + from leapp.libraries.common import rhui + from leapp.libraries.common.config import get_env ++from leapp.libraries.common.distro import get_distribution_data + from leapp.libraries.stdlib import api + from leapp.models import DistributionSignedRPM, InstalledRedHatSignedRPM, InstalledRPM, InstalledUnsignedRPM + + +-def get_distribution_data(distribution): +- distributions_path = api.get_common_folder_path('distro') +- +- distribution_config = os.path.join(distributions_path, distribution, 'gpg-signatures.json') +- if os.path.exists(distribution_config): +- with open(distribution_config) as distro_config_file: +- distro_config_json = json.load(distro_config_file) +- distro_keys = distro_config_json.get('keys', []) +- else: +- raise StopActorExecutionError( +- 'Cannot find distribution signature configuration.', +- details={'Problem': 'Distribution {} was not found in {}.'.format(distribution, distributions_path)}) +- return distro_keys +- +- + def is_distro_signed(pkg, distro_keys): + return any(key in pkg.pgpsig for key in distro_keys) + +@@ -49,7 +31,7 @@ def is_exceptional(pkg, allowlist): + + def process(): + distribution = api.current_actor().configuration.os_release.release_id +- distro_keys = get_distribution_data(distribution) ++ distro_keys = get_distribution_data(distribution).get('keys', []) + all_signed = get_env('LEAPP_DEVEL_RPMS_ALL_SIGNED', '0') == '1' + rhui_pkgs = rhui.get_all_known_rhui_pkgs_for_current_upg() + +-- +2.42.0 + diff --git a/0072-IPU-9-10-Initial-preparation-upgrade-paths-and-leapp.patch b/0072-IPU-9-10-Initial-preparation-upgrade-paths-and-leapp.patch new file mode 100644 index 0000000..4c21f4f --- /dev/null +++ b/0072-IPU-9-10-Initial-preparation-upgrade-paths-and-leapp.patch @@ -0,0 +1,167 @@ +From dafa6172d046dead08a497bd84283edf6206518f Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Tue, 23 Jan 2024 10:37:56 +0100 +Subject: [PATCH 72/92] IPU 9 -> 10: Initial preparation: upgrade paths and + leapp packages def + +Introducing initial changes needed for IPU 9 -> 10 to prevent abouvious +crashes and inhibitors: +* Extend the list of supported source versions for the upgrade by el9 +* Define upgrade paths for IPU 9 -> 10 +* Add Python path for el 10 (py 3.12) +* Introducing el9toel10 repository + created .gitkeep files inside empty dirs + +NOTE: + Enable upgrade from RHEL 9.4 & 9.5 to RHEL 10.0 for now. For the + experiment purposes. These will not be supported for the upgrade at all, + but to make testing and experimentations easier, allow it for now. + +TODO: +* add RHEL 10 product certificates +* add RHEL 10 GPG keys +--- + repos/system_upgrade/common/files/upgrade_paths.json | 8 ++++++-- + .../common/libraries/config/version.py | 3 +++ + repos/system_upgrade/common/libraries/dnfplugin.py | 1 + + repos/system_upgrade/common/libraries/rpms.py | 12 +++++++++--- + repos/system_upgrade/el9toel10/.leapp/info | 1 + + repos/system_upgrade/el9toel10/.leapp/leapp.conf | 6 ++++++ + repos/system_upgrade/el9toel10/actors/.gitkeep | 0 + .../el9toel10/files/bundled-rpms/.gitkeep | 0 + repos/system_upgrade/el9toel10/libraries/.gitkeep | 0 + repos/system_upgrade/el9toel10/models/.gitkeep | 0 + repos/system_upgrade/el9toel10/tools/.gitkeep | 0 + 11 files changed, 26 insertions(+), 5 deletions(-) + create mode 100644 repos/system_upgrade/el9toel10/.leapp/info + create mode 100644 repos/system_upgrade/el9toel10/.leapp/leapp.conf + create mode 100644 repos/system_upgrade/el9toel10/actors/.gitkeep + create mode 100644 repos/system_upgrade/el9toel10/files/bundled-rpms/.gitkeep + create mode 100644 repos/system_upgrade/el9toel10/libraries/.gitkeep + create mode 100644 repos/system_upgrade/el9toel10/models/.gitkeep + create mode 100644 repos/system_upgrade/el9toel10/tools/.gitkeep + +diff --git a/repos/system_upgrade/common/files/upgrade_paths.json b/repos/system_upgrade/common/files/upgrade_paths.json +index 43bd049a..5399f148 100644 +--- a/repos/system_upgrade/common/files/upgrade_paths.json ++++ b/repos/system_upgrade/common/files/upgrade_paths.json +@@ -3,14 +3,18 @@ + "7.9": ["8.8", "8.10"], + "8.8": ["9.2"], + "8.10": ["9.4", "9.5"], ++ "9.6": ["10.0"], + "7": ["8.8", "8.10"], +- "8": ["9.2", "9.4", "9.5"] ++ "8": ["9.2", "9.4", "9.5"], ++ "9": ["10.0"] + }, + "saphana": { + "7.9": ["8.10", "8.8"], + "7": ["8.10", "8.8"], + "8.8": ["9.2"], + "8.10": ["9.4"], +- "8": ["9.4", "9.2"] ++ "8": ["9.4", "9.2"], ++ "9.6": ["10.0"], ++ "9": ["10.0"] + } + } +diff --git a/repos/system_upgrade/common/libraries/config/version.py b/repos/system_upgrade/common/libraries/config/version.py +index fdfeface..152d9112 100644 +--- a/repos/system_upgrade/common/libraries/config/version.py ++++ b/repos/system_upgrade/common/libraries/config/version.py +@@ -13,10 +13,13 @@ OP_MAP = { + '<=': operator.le + } + ++# TODO(pstodulk): drop 9.4 & 9.5 before May 2025 release ++# These will not be supported fo IPU 9 -> 10 + _SUPPORTED_VERSIONS = { + # Note: 'rhel-alt' is detected when on 'rhel' with kernel 4.x + '7': {'rhel': ['7.9'], 'rhel-alt': [], 'rhel-saphana': ['7.9']}, + '8': {'rhel': ['8.8', '8.10'], 'rhel-saphana': ['8.8', '8.10']}, ++ '9': {'rhel': ['9.4', '9.5', '9.6'], 'rhel-saphana': ['9.4', '9.6']}, + } + + +diff --git a/repos/system_upgrade/common/libraries/dnfplugin.py b/repos/system_upgrade/common/libraries/dnfplugin.py +index 6f056a33..d09cb90a 100644 +--- a/repos/system_upgrade/common/libraries/dnfplugin.py ++++ b/repos/system_upgrade/common/libraries/dnfplugin.py +@@ -21,6 +21,7 @@ class _DnfPluginPathStr(str): + _PATHS = { + "8": os.path.join('/lib/python3.6/site-packages/dnf-plugins', DNF_PLUGIN_NAME), + "9": os.path.join('/lib/python3.9/site-packages/dnf-plugins', DNF_PLUGIN_NAME), ++ "10": os.path.join('/lib/python3.12/site-packages/dnf-plugins', DNF_PLUGIN_NAME), + } + + def __init__(self): # noqa: W0231; pylint: disable=super-init-not-called +diff --git a/repos/system_upgrade/common/libraries/rpms.py b/repos/system_upgrade/common/libraries/rpms.py +index 2890240f..dde4d2b6 100644 +--- a/repos/system_upgrade/common/libraries/rpms.py ++++ b/repos/system_upgrade/common/libraries/rpms.py +@@ -22,18 +22,24 @@ _LEAPP_PACKAGES_MAP = { + LeappComponents.FRAMEWORK: {'7': {'pkgs': ['leapp', 'python2-leapp'], + 'deps': ['leapp-deps']}, + '8': {'pkgs': ['leapp', 'python3-leapp'], ++ 'deps': ['leapp-deps']}, ++ '9': {'pkgs': ['leapp', 'python3-leapp'], + 'deps': ['leapp-deps']} + }, + LeappComponents.REPOSITORY: {'7': {'pkgs': ['leapp-upgrade-el7toel8'], + 'deps': ['leapp-upgrade-el7toel8-deps']}, + '8': {'pkgs': ['leapp-upgrade-el8toel9'], +- 'deps': ['leapp-upgrade-el8toel9-deps']} ++ 'deps': ['leapp-upgrade-el8toel9-deps']}, ++ '9': {'pkgs': ['leapp-upgrade-el9toel10'], ++ 'deps': ['leapp-upgrade-el9toel10-deps']} + }, + LeappComponents.COCKPIT: {'7': {'pkgs': ['cockpit-leapp']}, +- '8': {'pkgs': ['cockpit-leapp']} ++ '8': {'pkgs': ['cockpit-leapp']}, ++ '9': {'pkgs': ['cockpit-leapp']}, + }, + LeappComponents.TOOLS: {'7': {'pkgs': ['snactor']}, +- '8': {'pkgs': ['snactor']} ++ '8': {'pkgs': ['snactor']}, ++ '9': {'pkgs': ['snactor']} + } + } + +diff --git a/repos/system_upgrade/el9toel10/.leapp/info b/repos/system_upgrade/el9toel10/.leapp/info +new file mode 100644 +index 00000000..500087a8 +--- /dev/null ++++ b/repos/system_upgrade/el9toel10/.leapp/info +@@ -0,0 +1 @@ ++{"name": "system_upgrade_el9toel10", "id": "ba7ab214-d579-4e70-811e-7c30966d8d28", "messages": {}, "repos": ["efcf9016-f2d1-4609-9329-a298e6587b3c", "644900a5-c347-43a3-bfab-f448f46d9647"]} +diff --git a/repos/system_upgrade/el9toel10/.leapp/leapp.conf b/repos/system_upgrade/el9toel10/.leapp/leapp.conf +new file mode 100644 +index 00000000..b4591347 +--- /dev/null ++++ b/repos/system_upgrade/el9toel10/.leapp/leapp.conf +@@ -0,0 +1,6 @@ ++ ++[repositories] ++repo_path=${repository:root_dir} ++ ++[database] ++path=${repository:state_dir}/leapp.db +diff --git a/repos/system_upgrade/el9toel10/actors/.gitkeep b/repos/system_upgrade/el9toel10/actors/.gitkeep +new file mode 100644 +index 00000000..e69de29b +diff --git a/repos/system_upgrade/el9toel10/files/bundled-rpms/.gitkeep b/repos/system_upgrade/el9toel10/files/bundled-rpms/.gitkeep +new file mode 100644 +index 00000000..e69de29b +diff --git a/repos/system_upgrade/el9toel10/libraries/.gitkeep b/repos/system_upgrade/el9toel10/libraries/.gitkeep +new file mode 100644 +index 00000000..e69de29b +diff --git a/repos/system_upgrade/el9toel10/models/.gitkeep b/repos/system_upgrade/el9toel10/models/.gitkeep +new file mode 100644 +index 00000000..e69de29b +diff --git a/repos/system_upgrade/el9toel10/tools/.gitkeep b/repos/system_upgrade/el9toel10/tools/.gitkeep +new file mode 100644 +index 00000000..e69de29b +-- +2.42.0 + diff --git a/0073-Packaging-Introduce-EL-9-builds-for-IPU-9-10.patch b/0073-Packaging-Introduce-EL-9-builds-for-IPU-9-10.patch new file mode 100644 index 0000000..5e1b990 --- /dev/null +++ b/0073-Packaging-Introduce-EL-9-builds-for-IPU-9-10.patch @@ -0,0 +1,199 @@ +From 87012437ad29350c993deb110283702ca2959c30 Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Tue, 2 Apr 2024 19:33:04 +0200 +Subject: [PATCH 73/92] Packaging: Introduce EL 9 builds for IPU 9 -> 10 + +SPEC files has been updated and polished to be more friendly when +keeping suppoer for building in EL 7, 8, and 9. Also Makefile +contains some initial changes But keeping the full solution for a +separate commit. + +Packit configuration has been updated to start building for +epel-9-x86_64 buildroot. +--- + .packit.yaml | 3 ++ + Makefile | 14 +++++-- + packaging/leapp-repository.spec | 42 +++++++++++++------ + .../other_specs/leapp-el7toel8-deps.spec | 6 ++- + 4 files changed, 48 insertions(+), 17 deletions(-) + +diff --git a/.packit.yaml b/.packit.yaml +index 7c3799cf..d91a47e5 100644 +--- a/.packit.yaml ++++ b/.packit.yaml +@@ -34,6 +34,7 @@ jobs: + targets: + - epel-7-x86_64 + - epel-8-x86_64 ++ - epel-9-x86_64 + actions: + create-archive: + - bash -c "rm -f packaging/deps-pkgs.tar.gz" +@@ -54,6 +55,7 @@ jobs: + targets: + - epel-7-x86_64 + - epel-8-x86_64 ++ - epel-9-x86_64 + actions: + create-archive: + - bash -c "rm -f packaging/deps-pkgs.tar.gz" +@@ -73,6 +75,7 @@ jobs: + targets: + - epel-7-x86_64 + - epel-8-x86_64 ++ - epel-9-x86_64 + actions: + create-archive: + - bash -c "rm -f packaging/deps-pkgs.tar.gz" +diff --git a/Makefile b/Makefile +index 0de2a86a..a62d0ccc 100644 +--- a/Makefile ++++ b/Makefile +@@ -189,8 +189,9 @@ source: prepare + @git archive --prefix "$(PKGNAME)-$(VERSION)/" -o "packaging/sources/$(PKGNAME)-$(VERSION).tar.gz" HEAD + @echo "--- PREPARE DEPS PKGS ---" + mkdir -p packaging/tmp/ +- @__TIMESTAMP=$(TIMESTAMP) $(MAKE) _build_subpkg +- @__TIMESTAMP=$(TIMESTAMP) $(MAKE) DIST_VERSION=$$(($(DIST_VERSION) + 1)) _build_subpkg ++ @__TIMESTAMP=$(TIMESTAMP) $(MAKE) DIST_VERSION=7 _build_subpkg ++ @__TIMESTAMP=$(TIMESTAMP) $(MAKE) DIST_VERSION=8 _build_subpkg ++ @__TIMESTAMP=$(TIMESTAMP) $(MAKE) DIST_VERSION=9 _build_subpkg + @tar -czf packaging/sources/deps-pkgs.tar.gz -C packaging/RPMS/noarch `ls -1 packaging/RPMS/noarch | grep -o "[^/]*rpm$$"` + @rm -f packaging/RPMS/noarch/*.rpm + +@@ -389,11 +390,14 @@ _test_container_ipu: + el8toel9) \ + export REPOSITORIES="common,el8toel9"; \ + ;; \ ++ el9toel10) \ ++ export REPOSITORIES="common,el9toel10"; \ ++ ;; \ + "") \ + echo "TEST_CONT_IPU must be set"; exit 1; \ + ;; \ + *) \ +- echo "Only supported TEST_CONT_IPUs are el7toel8, el8toel9"; exit 1; \ ++ echo "Only supported TEST_CONT_IPUs are el7toel8, el8toel9, el9toel10"; exit 1; \ + ;; \ + esac && \ + $(_CONTAINER_TOOL) exec -w /repocopy $$_CONT_NAME make clean && \ +@@ -449,6 +453,10 @@ test_container: + ;; \ + python3.9) \ + TEST_CONT_IPU=el8toel9 $(MAKE) _test_container_ipu; \ ++ TEST_CONT_IPU=el9toel10 $(MAKE) _test_container_ipu; \ ++ ;; \ ++ python3.12) \ ++ TEST_CONT_IPU=el9toel10 $(MAKE) _test_container_ipu; \ + ;; \ + *) \ + TEST_CONT_IPU=el8toel9 $(MAKE) _test_container_ipu; \ +diff --git a/packaging/leapp-repository.spec b/packaging/leapp-repository.spec +index 7c3fe5c6..e813cf14 100644 +--- a/packaging/leapp-repository.spec ++++ b/packaging/leapp-repository.spec +@@ -7,9 +7,19 @@ + %if 0%{?rhel} == 7 + %define leapp_python_sitelib %{python2_sitelib} + %define lpr_name leapp-upgrade-el7toel8 ++ %define repo_shortname el7toel8 ++ %define next_major_ver 8 + %else + %define leapp_python_sitelib %{python3_sitelib} +- %define lpr_name leapp-upgrade-el8toel9 ++ %if 0%{?rhel} == 8 ++ %define lpr_name leapp-upgrade-el8toel9 ++ %define repo_shortname el8toel9 ++ %define next_major_ver 9 ++ %else ++ %define lpr_name leapp-upgrade-el9toel10 ++ %define repo_shortname el9toel10 ++ %define next_major_ver 10 ++ %endif + + # This drops autogenerated deps on + # - /usr/libexec/platform-python (rhel-8 buildroot) +@@ -84,14 +94,24 @@ Obsoletes: leapp-repository-sos-plugin <= 0.9.0 + Conflicts: leapp-upgrade-el8toel9 + + %else +-######### RHEL 8 ############ ++######### RHEL 8+ (and newer) ############ + BuildRequires: python3-devel + Requires: python3-leapp + ++# NOTE(pstodulk): else if / elif has been implemented quite late. as we still ++# want to build on RHEL 7 too, go in the old way. Ref: ++# https://github.com/rpm-software-management/rpm/issues/311 ++%if 0%{?rhel} == 8 ++######### RHEL 8 ############ ++ + # Same as the conflict above - we want to be sure our packages are untouched + # during the whole IPU process + Conflicts: leapp-upgrade-el7toel8 +- ++Conflicts: leapp-upgrade-el9toel10 ++%else ++######### RHEL 9 ############ ++Conflicts: leapp-upgrade-el8toel9 ++%endif + %endif + + # IMPORTANT: every time the requirements are changed, increment number by one +@@ -210,11 +230,7 @@ Requires: python3-gobject-base + + + %build +-%if 0%{?rhel} == 7 +-cp -a leapp*deps*el8.noarch.rpm repos/system_upgrade/el7toel8/files/bundled-rpms/ +-%else +-cp -a leapp*deps*el9.noarch.rpm repos/system_upgrade/el8toel9/files/bundled-rpms/ +-%endif ++cp -a leapp*deps*el%{next_major_ver}.noarch.rpm repos/system_upgrade/%{repo_shortname}/files/bundled-rpms/ + + + %install +@@ -222,6 +238,7 @@ install -m 0755 -d %{buildroot}%{custom_repositorydir} + install -m 0755 -d %{buildroot}%{repositorydir} + cp -r repos/* %{buildroot}%{repositorydir}/ + install -m 0755 -d %{buildroot}%{_sysconfdir}/leapp/repos.d/ ++# NOTE(pstodulk): drop transaction dir and its content if replaced by config files before RHEL 10 + install -m 0755 -d %{buildroot}%{_sysconfdir}/leapp/transaction/ + install -m 0755 -d %{buildroot}%{_sysconfdir}/leapp/files/ + install -m 0644 etc/leapp/transaction/* %{buildroot}%{_sysconfdir}/leapp/transaction +@@ -234,11 +251,10 @@ rm -rf %{buildroot}%{leapp_python_sitelib}/leapp/cli/commands/tests + + # Remove irrelevant repositories - We don't want to ship them for the particular + # RHEL version +-%if 0%{?rhel} == 7 +-rm -rf %{buildroot}%{repositorydir}/system_upgrade/el8toel9 +-%else +-rm -rf %{buildroot}%{repositorydir}/system_upgrade/el7toel8 +-%endif ++for i in el7toel8 el8toel9 el9toel10; ++do ++ [ "$i" != "%{repo_shortname}" ] && rm -rf %{buildroot}%{repositorydir}/system_upgrade/$i ++done + + # remove component/unit tests, Makefiles, ... stuff that related to testing only + rm -rf %{buildroot}%{repositorydir}/common/actors/testactor +diff --git a/packaging/other_specs/leapp-el7toel8-deps.spec b/packaging/other_specs/leapp-el7toel8-deps.spec +index c4e0dd90..d9e94faa 100644 +--- a/packaging/other_specs/leapp-el7toel8-deps.spec ++++ b/packaging/other_specs/leapp-el7toel8-deps.spec +@@ -5,7 +5,11 @@ + %if 0%{?rhel} == 8 + %define lpr_name_src leapp-upgrade-el7toel8-deps + %else +- %define lpr_name_src leapp-upgrade-el8toel9-deps ++ %if 0%{?rhel} == 9 ++ %define lpr_name_src leapp-upgrade-el8toel9-deps ++ %else ++ %define lpr_name_src leapp-upgrade-el9toel10-deps ++ %endif + %endif + + +-- +2.42.0 + diff --git a/0074-Add-RHEL9-container-for-building-and-testing.patch b/0074-Add-RHEL9-container-for-building-and-testing.patch new file mode 100644 index 0000000..5819874 --- /dev/null +++ b/0074-Add-RHEL9-container-for-building-and-testing.patch @@ -0,0 +1,159 @@ +From 953bfb1868595a6100522bfd92f4ea4c47e6be1b Mon Sep 17 00:00:00 2001 +From: Matej Matuska +Date: Mon, 24 Jun 2024 17:00:09 +0200 +Subject: [PATCH 74/92] Add RHEL9 container for building and testing + +Adding RHEL 9 containers so we can start to test & build packages +in RHEL 9 environemnt. + +Since `python3-virtualenv` package is not available in the RHEL 9 UBI, +a workaround is introduced `make install-deps-fedora`, which is used by +the testing containers. If not able to install the package, `pip install +virtualenv` is used as a fallback as this is working in the image. + +The relatively recent Python version used in the container means there +is also a relative recent Pylint verision, which introduces 2+ new +checks. +--- + Makefile | 31 +++++++++++++++++------ + utils/container-builds/Containerfile.ubi9 | 10 ++++++++ + utils/container-tests/Containerfile.rhel9 | 18 +++++++++++++ + 3 files changed, 51 insertions(+), 8 deletions(-) + create mode 100644 utils/container-builds/Containerfile.ubi9 + create mode 100644 utils/container-tests/Containerfile.rhel9 + +diff --git a/Makefile b/Makefile +index a62d0ccc..5b2bc4d2 100644 +--- a/Makefile ++++ b/Makefile +@@ -111,7 +111,7 @@ help: + @echo " packaging" + @echo " srpm create the SRPM" + @echo " build_container create the RPM in container" +- @echo " - set BUILD_CONTAINER to el7 or el8" ++ @echo " - set BUILD_CONTAINER to el7, el8 or el9" + @echo " - don't run more than one build at the same time" + @echo " since containers operate on the same files!" + @echo " copr_build create the COPR build using the COPR TOKEN" +@@ -164,7 +164,7 @@ help: + @echo " PR=7 SUFFIX='my_additional_suffix' make " + @echo " MR=6 COPR_CONFIG='path/to/the/config/copr/file' make " + @echo " ACTOR= TEST_LIBS=y make test" +- @echo " BUILD_CONTAINER=rhel7 make build_container" ++ @echo " BUILD_CONTAINER=el7 make build_container" + @echo " TEST_CONTAINER=f34 make test_container" + @echo " CONTAINER_TOOL=docker TEST_CONTAINER=rhel7 make test_container_no_lint" + @echo "" +@@ -258,12 +258,15 @@ build_container: + el8) \ + CONT_FILE="utils/container-builds/Containerfile.ubi8"; \ + ;; \ ++ el9) \ ++ CONT_FILE="utils/container-builds/Containerfile.ubi9"; \ ++ ;; \ + "") \ + echo "BUILD_CONTAINER must be set"; \ + exit 1; \ + ;; \ + *) \ +- echo "Available containers are el7, el8"; \ ++ echo "Available containers are el7, el8, el9"; \ + exit 1; \ + ;; \ + esac && \ +@@ -305,12 +308,20 @@ install-deps: + $(VENVNAME)/bin/pip install -I "git+https://github.com/oamg/leapp.git@refs/pull/$(REQ_LEAPP_PR)/head"; \ + fi + $(_PYTHON_VENV) utils/install_actor_deps.py --actor=$(ACTOR) --repos="$(TEST_PATHS)" ++ + install-deps-fedora: + @# Check the necessary rpms are installed for py3 (and py2 below) +- if ! rpm -q git findutils python3-virtualenv gcc; then \ +- if ! dnf install -y git findutils python3-virtualenv gcc; then \ ++ if ! rpm -q git findutils gcc; then \ ++ if ! dnf install -y git findutils gcc; then \ + echo 'Please install the following rpms via the command: ' \ +- 'sudo dnf install -y git findutils python3-virtualenv gcc'; \ ++ 'sudo dnf install -y git findutils gcc'; \ ++ exit 1; \ ++ fi; \ ++ fi ++ if ! command -v virtualenv; then \ ++ if ! (dnf install -y python3-virtualenv || pip install virtualenv); then \ ++ echo 'Please install the following packages via the command: ' \ ++ 'sudo dnf install -y python3-virtualenv or pip install virtualenv'; \ + exit 1; \ + fi; \ + fi +@@ -432,6 +443,10 @@ test_container: + export CONT_FILE="utils/container-tests/Containerfile.rhel8"; \ + export _VENV="python3.6"; \ + ;; \ ++ rhel9) \ ++ export CONT_FILE="utils/container-tests/Containerfile.rhel9"; \ ++ export _VENV="python3.9"; \ ++ ;; \ + *) \ + echo "Error: Available containers are: f34, rhel7, rhel8"; exit 1; \ + ;; \ +@@ -481,7 +496,7 @@ test_container_all_no_lint: + # clean all testing and building containers and their images + clean_containers: + @for i in "leapp-repo-tests-f34" "leapp-repo-tests-rhel7" "leapp-repo-tests-rhel8" \ +- "leapp-repo-build-el7" "leapp-repo-build-el8"; do \ ++ "leapp-repo-tests-rhel9" "leapp-repo-build-el7" "leapp-repo-build-el8"; do \ + $(_CONTAINER_TOOL) kill "$$i-cont" || :; \ + $(_CONTAINER_TOOL) rm "$$i-cont" || :; \ + $(_CONTAINER_TOOL) rmi "$$i" || :; \ +@@ -492,7 +507,7 @@ fast_lint: + FILES_TO_LINT="$$(git diff --name-only $(MASTER_BRANCH) --diff-filter AMR | grep '\.py$$')"; \ + if [[ -n "$$FILES_TO_LINT" ]]; then \ + pylint -j 0 $$FILES_TO_LINT $(PYLINT_ARGS) && \ +- flake8 $$FILES_TO_LINT $(FLAKE8_ARG); \ ++ flake8 $$FILES_TO_LINT $(FLAKE8_ARGS); \ + LINT_EXIT_CODE="$$?"; \ + if [[ "$$LINT_EXIT_CODE" != "0" ]]; then \ + exit $$LINT_EXIT_CODE; \ +diff --git a/utils/container-builds/Containerfile.ubi9 b/utils/container-builds/Containerfile.ubi9 +new file mode 100644 +index 00000000..53567c08 +--- /dev/null ++++ b/utils/container-builds/Containerfile.ubi9 +@@ -0,0 +1,10 @@ ++FROM registry.access.redhat.com/ubi9/ubi:latest ++ ++VOLUME /repo ++ ++RUN dnf update -y && \ ++ dnf install -y python3-devel rpm-build make git ++ ++WORKDIR /repo ++ENV DIST_VERSION 9 ++ENTRYPOINT make _build_local +diff --git a/utils/container-tests/Containerfile.rhel9 b/utils/container-tests/Containerfile.rhel9 +new file mode 100644 +index 00000000..2261b2ad +--- /dev/null ++++ b/utils/container-tests/Containerfile.rhel9 +@@ -0,0 +1,18 @@ ++FROM registry.access.redhat.com/ubi9/ubi:latest ++ ++VOLUME /repo ++ ++RUN dnf update -y && \ ++ dnf install -y python3-setuptools python3-pip make git rsync ++ ++ENV PYTHON_VENV python3.9 ++ ++COPY . /repocopy ++ ++WORKDIR /repocopy ++ ++RUN rm -rf tut* ++ ++RUN make clean && make install-deps-fedora ++ ++WORKDIR / +-- +2.42.0 + diff --git a/0075-tests-update-pytest-requirements-to-Py3.6-compat.patch b/0075-tests-update-pytest-requirements-to-Py3.6-compat.patch new file mode 100644 index 0000000..7131407 --- /dev/null +++ b/0075-tests-update-pytest-requirements-to-Py3.6-compat.patch @@ -0,0 +1,38 @@ +From 14937bc95928fe72aae7b0735d455f82db5a4320 Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Wed, 17 Jul 2024 23:49:32 +0200 +Subject: [PATCH 75/92] tests: update pytest requirements to Py3.6+ compat + +Currently we use frozen python modules due to compatibility with +python2. As we want to keep now still Py2 support due to RHEL 7 +for a while, we do not want to simply use the newest versions of +current modules. However, with Python 3.12 we see it's really old +and some of old versions (like pytest) does not work as expected. + +For that reason, adding conditional requirements for pytest. I chose +now to stick with pytest 6.2.5 which is compatible with Python3.6+ +(due to RHEL 8). + +Most likely we will need to revise other requirements too, but I focused +now just on obvious issues. +--- + requirements.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/requirements.txt b/requirements.txt +index ac6bf9b8..a1bb4725 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -5,7 +5,8 @@ isort + funcsigs==1.0.2 + mock==2.0.0 + pylint +-pytest==4.6.11 ++pytest==4.6.11; python_version < '3.0' ++pytest==6.2.5; python_version >= '3.6' + pyudev==0.22.0 + distro==1.5.0 + ipaddress==1.0.23 +-- +2.42.0 + diff --git a/0076-IPU-9-10-Add-FAKE-RHEL-10-certs-and-GPG-keys.patch b/0076-IPU-9-10-Add-FAKE-RHEL-10-certs-and-GPG-keys.patch new file mode 100644 index 0000000..2718dc3 --- /dev/null +++ b/0076-IPU-9-10-Add-FAKE-RHEL-10-certs-and-GPG-keys.patch @@ -0,0 +1,364 @@ +From 3ab53e7698ee889c7ace8a034419b745aeeafa51 Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Fri, 19 Apr 2024 15:08:48 +0200 +Subject: [PATCH 76/92] IPU 9 -> 10: Add (FAKE) RHEL 10 certs and GPG keys + +* Add RHEL 10.0 Beta product certificates +* Add FAKE RHEL 10.0 product certificates + * productions certificates for RHEL 10 has not been generated yet, + so adding faked certificates for now. In this part development + it's expected to test upgrades using internal custom repositories + only. Until the testing with RHSM certs are not needed yet. + But they will have to be updated for sure before the release. +* Add RHEL 10 (+Beta) RPM-GPG-KEY-redhat-release + * updated key from RHELBLD-15138 attached + +* TODO: replace faked RHEL 10 product certificates by real ones when + available + +Co-authored-by: Michal Reznik (mreznik) +Co-authored-by: Matej Matuska +--- + .../common/files/prod-certs/10.0/362.pem | 37 ++++++++++ + .../common/files/prod-certs/10.0/363.pem | 37 ++++++++++ + .../common/files/prod-certs/10.0/433.pem | 37 ++++++++++ + .../common/files/prod-certs/10.0/479.pem | 35 ++++++++++ + .../common/files/prod-certs/10.0/486.pem | 37 ++++++++++ + .../rpm-gpg/10/RPM-GPG-KEY-redhat-release | 69 +++++++++++++++++++ + .../rpm-gpg/10beta/RPM-GPG-KEY-redhat-release | 30 ++++++++ + 7 files changed, 282 insertions(+) + create mode 100644 repos/system_upgrade/common/files/prod-certs/10.0/362.pem + create mode 100644 repos/system_upgrade/common/files/prod-certs/10.0/363.pem + create mode 100644 repos/system_upgrade/common/files/prod-certs/10.0/433.pem + create mode 100644 repos/system_upgrade/common/files/prod-certs/10.0/479.pem + create mode 100644 repos/system_upgrade/common/files/prod-certs/10.0/486.pem + create mode 100644 repos/system_upgrade/common/files/rpm-gpg/10/RPM-GPG-KEY-redhat-release + create mode 100644 repos/system_upgrade/common/files/rpm-gpg/10beta/RPM-GPG-KEY-redhat-release + +diff --git a/repos/system_upgrade/common/files/prod-certs/10.0/362.pem b/repos/system_upgrade/common/files/prod-certs/10.0/362.pem +new file mode 100644 +index 00000000..1a794eff +--- /dev/null ++++ b/repos/system_upgrade/common/files/prod-certs/10.0/362.pem +@@ -0,0 +1,37 @@ ++-----BEGIN CERTIFICATE----- ++MIIGeDCCBGCgAwIBAgIJALDxRLt/tVHqMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD ++VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI ++YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk ++IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ ++ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDcxODA4MTkxNloXDTQzMDcx ++ODA4MTkxNlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFsxYzVmYTgy ++Zi0wMTAwLTQ3OTQtODZkNC1iZDA2NmY3NDMzYzldMIICIjANBgkqhkiG9w0BAQEF ++AAOCAg8AMIICCgKCAgEAxj9J04z+Ezdyx1U33kFftLv0ntNS1BSeuhoZLDhs18yk ++sepG7hXXtHh2CMFfLZmTjAyL9i1XsxykQpVQdXTGpUF33C2qBQHB5glYs9+d781x ++8p8m8zFxbPcW82TIJXbgW3ErVh8vk5qCbG1cCAAHb+DWMq0EAyy1bl/JgAghYNGB ++RvKJObTdCrdpYh02KUqBLkSPZHvo6DUJFN37MXDpVeQq9VtqRjpKLLwuEfXb0Y7I ++5xEOrR3kYbOaBAWVt3mYZ1t0L/KfY2jVOdU5WFyyB9PhbMdLi1xE801j+GJrwcLa ++xmqvj4UaICRzcPATP86zVM1BBQa+lilkRQes5HyjZzZDiGYudnXhbqmLo/n0cuXo ++QBVVjhzRTMx71Eiiahmiw+U1vGqkHhQNxb13HtN1lcAhUCDrxxeMvrAjYdWpYlpI ++yW3NssPWt1YUHidMBSAJ4KctIf91dyE93aStlxwC/QnyFsZOmcEsBzVCnz9GmWMl ++1/6XzBS1yDUqByklx0TLH+z/sK9A+O2rZAy1mByCYwVxvbOZhnqGxAuToIS+A81v ++5hCjsCiOScVB+cil30YBu0cH85RZ0ILNkHdKdrLLWW4wjphK2nBn2g2i3+ztf+nQ ++ED2pQqZ/rhuW79jcyCZl9kXqe1wOdF0Cwah4N6/3LzIXEEKyEJxNqQwtNc2IVE8C ++AwEAAaOCAQAwgf0wCQYDVR0TBAIwADBIBgwrBgEEAZIICQGCagEEOAw2UmVkIEhh ++dCBFbnRlcnByaXNlIExpbnV4IGZvciBQb3dlciwgbGl0dGxlIGVuZGlhbiBCZXRh ++MBsGDCsGAQQBkggJAYJqAgQLDAkxMC4wIEJldGEwGQYMKwYBBAGSCAkBgmoDBAkM ++B3BwYzY0bGUwLgYMKwYBBAGSCAkBgmoEBB4MHHJoZWwtMTAscmhlbC0xMC1iZXRh ++LXBwYzY0bGUwHQYDVR0OBBYEFGHqILU1fK9nZDr/awjmEHjQzR+VMB8GA1UdIwQY ++MBaAFJb9uxxAQP9AhK2yHwsmwcNqb9Z8MA0GCSqGSIb3DQEBCwUAA4ICAQCOCuh5 ++ogCBWizsby3kZwYvS5QvH2Ciz/NRxgpXcv5aP2YlQyGfwh7xRc/YvlRTKz70Wdor ++3xxo0A3ZbVBepQfKLwEKAO3vpMrDciKfwZI0pdbcny3+Nd56qm1Nq7gVO5H1m/cK ++r9Oa6YdSwWDEGhiyyEvpoHvcZMkR5KlV8rDnCoq7dIkp3Wcj6E6EFzyytlrWR9MT ++Q+4OVfMSjdyMNL7hTLECGqq+mICvtqX22yTL/gt1fcb4zLp41mjLT+Wza43LCRpx ++SJQbJiruUhkkqEyEloqFKtXLlBbELfzg/KYu0SK8OnGnqdTmp0pxBBM6lAlOzh++ ++OjFCec0N5irdHltxdZ/KjLfcePPRn2Z0yPuyGKEBgbgYMDvCHskw3XoUiQ2TkoHO ++I76vz3szxQtjrvKhHXSTNoiUqwNEdZQBqAlTnr9vH0IeofM2Vopff6yzHRwNF/5w ++DFcCZ2k7ymV04GbRXyd8xi+Cg/Q6YjFiXE+X0e6kOAn1llwaQVh8fiphmU0D+N1S ++utZ3TIgA4IE4VL4+ezFBc81m+UtsO0tc6WbitdQn+Dsi0vnTPTvfHlCnhQcz8SiU ++VyBrnrItLTy8aIvlc69kap1KLdxetqn2qZZagKZphylT4YHGgfYTTkxZD5cCkxnh ++3y2cfONuGFHU6t2D90ccds2fgi0B1tz9jv74kw== ++-----END CERTIFICATE----- +diff --git a/repos/system_upgrade/common/files/prod-certs/10.0/363.pem b/repos/system_upgrade/common/files/prod-certs/10.0/363.pem +new file mode 100644 +index 00000000..0d8b10fc +--- /dev/null ++++ b/repos/system_upgrade/common/files/prod-certs/10.0/363.pem +@@ -0,0 +1,37 @@ ++-----BEGIN CERTIFICATE----- ++MIIGaTCCBFGgAwIBAgIJALDxRLt/tVHpMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD ++VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI ++YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk ++IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ ++ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDcxODA4MTkxNloXDTQzMDcx ++ODA4MTkxNlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFsyZjVjZTZi ++MC0wM2MxLTQ3OWYtYTlhNC00NjQzYmFkNmU4NmZdMIICIjANBgkqhkiG9w0BAQEF ++AAOCAg8AMIICCgKCAgEAxj9J04z+Ezdyx1U33kFftLv0ntNS1BSeuhoZLDhs18yk ++sepG7hXXtHh2CMFfLZmTjAyL9i1XsxykQpVQdXTGpUF33C2qBQHB5glYs9+d781x ++8p8m8zFxbPcW82TIJXbgW3ErVh8vk5qCbG1cCAAHb+DWMq0EAyy1bl/JgAghYNGB ++RvKJObTdCrdpYh02KUqBLkSPZHvo6DUJFN37MXDpVeQq9VtqRjpKLLwuEfXb0Y7I ++5xEOrR3kYbOaBAWVt3mYZ1t0L/KfY2jVOdU5WFyyB9PhbMdLi1xE801j+GJrwcLa ++xmqvj4UaICRzcPATP86zVM1BBQa+lilkRQes5HyjZzZDiGYudnXhbqmLo/n0cuXo ++QBVVjhzRTMx71Eiiahmiw+U1vGqkHhQNxb13HtN1lcAhUCDrxxeMvrAjYdWpYlpI ++yW3NssPWt1YUHidMBSAJ4KctIf91dyE93aStlxwC/QnyFsZOmcEsBzVCnz9GmWMl ++1/6XzBS1yDUqByklx0TLH+z/sK9A+O2rZAy1mByCYwVxvbOZhnqGxAuToIS+A81v ++5hCjsCiOScVB+cil30YBu0cH85RZ0ILNkHdKdrLLWW4wjphK2nBn2g2i3+ztf+nQ ++ED2pQqZ/rhuW79jcyCZl9kXqe1wOdF0Cwah4N6/3LzIXEEKyEJxNqQwtNc2IVE8C ++AwEAAaOB8jCB7zAJBgNVHRMEAjAAMDoGDCsGAQQBkggJAYJrAQQqDChSZWQgSGF0 ++IEVudGVycHJpc2UgTGludXggZm9yIEFSTSA2NCBCZXRhMBsGDCsGAQQBkggJAYJr ++AgQLDAkxMC4wIEJldGEwGQYMKwYBBAGSCAkBgmsDBAkMB2FhcmNoNjQwLgYMKwYB ++BAGSCAkBgmsEBB4MHHJoZWwtMTAscmhlbC0xMC1iZXRhLWFhcmNoNjQwHQYDVR0O ++BBYEFGHqILU1fK9nZDr/awjmEHjQzR+VMB8GA1UdIwQYMBaAFJb9uxxAQP9AhK2y ++HwsmwcNqb9Z8MA0GCSqGSIb3DQEBCwUAA4ICAQCuV3lD4fHTaXiG1BF1vfjKm1w1 ++Yv3LljlB3+F62liLEh8dZjTg4cahJ7YpkC3fGpqbHGs5u5to7SoW3MCfvEqmhAah ++QOTvMYGHwgeqLAG8mTYTnOScDsah8UkPzRl3BvZXgF6c3kIcFz6HGjVdzIvKF1A4 ++di8EsWUlV5zf0muE7gEmG1AFq2j2IHXXGjBLhDlpRBlt9miJF6t0QNEd8C06x/yD ++t/dIUKDHgP2oLLW+nBWzzG3GtTjCeGJG/xHLkeVisRGUOUVP2infL+F6rQ3kk3/V ++xOCWzBwnLycKuRgaAcP4WZZnmgLkKcH/JQRqXCFHSP+lLpI3X8vHvlGe5KidwB4g ++xqRhWQwF4kOHC0eOJ96z7bZZyt5CcmUUBsDylt3/L2BFhbTackJCv6Axb+VhFYFg ++HKSixMzBpcSh3ZV+P8STvTBuQnVWIZwQrqWS9qRHS1JVEHa3BPPm1BsMnFKSFDwB ++ss20H+5D9FaJxx/kwmDxB37JhD5cw+La7ZVbQQzXNaJH2R/eBqxahdMFysNW0cXz ++yPCO5YKds/KYM+j6lzWMR2EKtsAhSAY5mqAPWPOQnZUJHO12pwP3WZ0K49KlWW4g ++6hMQvnqXgU2NtldmBwmlAAzscHOK5VA5RTzIGxW3hjY9jM5YhpKPssY2d84qdR/V ++3vL/tIdx1BihElHAQA== ++-----END CERTIFICATE----- +diff --git a/repos/system_upgrade/common/files/prod-certs/10.0/433.pem b/repos/system_upgrade/common/files/prod-certs/10.0/433.pem +new file mode 100644 +index 00000000..b75e22c5 +--- /dev/null ++++ b/repos/system_upgrade/common/files/prod-certs/10.0/433.pem +@@ -0,0 +1,37 @@ ++-----BEGIN CERTIFICATE----- ++MIIGbDCCBFSgAwIBAgIJALDxRLt/tVHrMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD ++VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI ++YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk ++IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ ++ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDcxODA4MTkxNloXDTQzMDcx ++ODA4MTkxNlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFtlMjM1MjJj ++NC1lZjI0LTQ3YjgtYWQzNC1hNDhkYmVmNmIzMWZdMIICIjANBgkqhkiG9w0BAQEF ++AAOCAg8AMIICCgKCAgEAxj9J04z+Ezdyx1U33kFftLv0ntNS1BSeuhoZLDhs18yk ++sepG7hXXtHh2CMFfLZmTjAyL9i1XsxykQpVQdXTGpUF33C2qBQHB5glYs9+d781x ++8p8m8zFxbPcW82TIJXbgW3ErVh8vk5qCbG1cCAAHb+DWMq0EAyy1bl/JgAghYNGB ++RvKJObTdCrdpYh02KUqBLkSPZHvo6DUJFN37MXDpVeQq9VtqRjpKLLwuEfXb0Y7I ++5xEOrR3kYbOaBAWVt3mYZ1t0L/KfY2jVOdU5WFyyB9PhbMdLi1xE801j+GJrwcLa ++xmqvj4UaICRzcPATP86zVM1BBQa+lilkRQes5HyjZzZDiGYudnXhbqmLo/n0cuXo ++QBVVjhzRTMx71Eiiahmiw+U1vGqkHhQNxb13HtN1lcAhUCDrxxeMvrAjYdWpYlpI ++yW3NssPWt1YUHidMBSAJ4KctIf91dyE93aStlxwC/QnyFsZOmcEsBzVCnz9GmWMl ++1/6XzBS1yDUqByklx0TLH+z/sK9A+O2rZAy1mByCYwVxvbOZhnqGxAuToIS+A81v ++5hCjsCiOScVB+cil30YBu0cH85RZ0ILNkHdKdrLLWW4wjphK2nBn2g2i3+ztf+nQ ++ED2pQqZ/rhuW79jcyCZl9kXqe1wOdF0Cwah4N6/3LzIXEEKyEJxNqQwtNc2IVE8C ++AwEAAaOB9TCB8jAJBgNVHRMEAjAAMEEGDCsGAQQBkggJAYMxAQQxDC9SZWQgSGF0 ++IEVudGVycHJpc2UgTGludXggZm9yIElCTSB6IFN5c3RlbXMgQmV0YTAbBgwrBgEE ++AZIICQGDMQIECwwJMTAuMCBCZXRhMBcGDCsGAQQBkggJAYMxAwQHDAVzMzkweDAs ++BgwrBgEEAZIICQGDMQQEHAwacmhlbC0xMCxyaGVsLTEwLWJldGEtczM5MHgwHQYD ++VR0OBBYEFGHqILU1fK9nZDr/awjmEHjQzR+VMB8GA1UdIwQYMBaAFJb9uxxAQP9A ++hK2yHwsmwcNqb9Z8MA0GCSqGSIb3DQEBCwUAA4ICAQAkusR2vZMDVNZ1RpiYgwFI ++/eweuntSHLYU3Lp2XtaoBgv4Nkoj9GrX5tMYCHSOr3ZgSQz7J9CByewXqOFvWZe+ ++9ZbboJ0p+9OYRgP0S2F2QX3vaCyYZP9qkGSY49dKKmF+cpL5TkW+8lRRzEjjInQm ++gbv4Us4FR53WSOhqgsuxh8DPyIiJUQhy0KVQMQFkkaLA5v7jPv0BbHCprSfHjFXL ++8IyDwE5+OBWsdiIE+9NMHbFRjbi3O7NrZeglKis/OAk9gWvDWT4MnwLNBpFbaV9y ++99Likzu80buFRZoNahUtQNVSbOaygT3pNtRBFx7V9k0uwoqirWy+uXDWGOvtImhA ++zDPRoKsWqaTK0+ra6f7wk4Q5S5XrfBJWNjvHi0RScVLwdW8hhXp8LAkrQIPuUMky ++NHRl+PeS9d6Z/r217+87HIKZBez1GrnK3DQOb2niLX2o4K1T32KiHTY/1kvRdA5Z ++itPT50BTNEzVQsMEDDlQwOcCqAjhNvJEYhkKM705lfytFiN5Twp/5hAUj+tGx5z7 ++KRPqnKwts/pGav2wRUpcSRtfQNIsn7XIB7qAEqnG9trG8MZN+iVggWJsu2IscJw+ ++dgDcYo7kV0d6fqN8LE0RaLxg6/NfyvrI3nXSvE4E+fbvDVvNZTmpAmWFOgOYjOyw ++j5GU66xmQPJ//rMJZXW/Ug== ++-----END CERTIFICATE----- +diff --git a/repos/system_upgrade/common/files/prod-certs/10.0/479.pem b/repos/system_upgrade/common/files/prod-certs/10.0/479.pem +new file mode 100644 +index 00000000..1ea1cd3d +--- /dev/null ++++ b/repos/system_upgrade/common/files/prod-certs/10.0/479.pem +@@ -0,0 +1,35 @@ ++-----BEGIN CERTIFICATE----- ++MIIGFTCCA/2gAwIBAgIJALDxRLt/tVDQMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD ++VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI ++YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk ++IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ ++ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDcxOTE2MzQwOFoXDTQzMDcx ++OTE2MzQwOFowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFsxZDg0ZDQ5 ++Ny1jZmNmLTQxNjEtOTM0YS0zNzk2MDU4M2ZmZGZdMIICIjANBgkqhkiG9w0BAQEF ++AAOCAg8AMIICCgKCAgEAxj9J04z+Ezdyx1U33kFftLv0ntNS1BSeuhoZLDhs18yk ++sepG7hXXtHh2CMFfLZmTjAyL9i1XsxykQpVQdXTGpUF33C2qBQHB5glYs9+d781x ++8p8m8zFxbPcW82TIJXbgW3ErVh8vk5qCbG1cCAAHb+DWMq0EAyy1bl/JgAghYNGB ++RvKJObTdCrdpYh02KUqBLkSPZHvo6DUJFN37MXDpVeQq9VtqRjpKLLwuEfXb0Y7I ++5xEOrR3kYbOaBAWVt3mYZ1t0L/KfY2jVOdU5WFyyB9PhbMdLi1xE801j+GJrwcLa ++xmqvj4UaICRzcPATP86zVM1BBQa+lilkRQes5HyjZzZDiGYudnXhbqmLo/n0cuXo ++QBVVjhzRTMx71Eiiahmiw+U1vGqkHhQNxb13HtN1lcAhUCDrxxeMvrAjYdWpYlpI ++yW3NssPWt1YUHidMBSAJ4KctIf91dyE93aStlxwC/QnyFsZOmcEsBzVCnz9GmWMl ++1/6XzBS1yDUqByklx0TLH+z/sK9A+O2rZAy1mByCYwVxvbOZhnqGxAuToIS+A81v ++5hCjsCiOScVB+cil30YBu0cH85RZ0ILNkHdKdrLLWW4wjphK2nBn2g2i3+ztf+nQ ++ED2pQqZ/rhuW79jcyCZl9kXqe1wOdF0Cwah4N6/3LzIXEEKyEJxNqQwtNc2IVE8C ++AwEAAaOBnjCBmzAJBgNVHRMEAjAAMDUGDCsGAQQBkggJAYNfAQQlDCNSZWQgSGF0 ++IEVudGVycHJpc2UgTGludXggZm9yIHg4Nl82NDAVBgwrBgEEAZIICQGDXwIEBQwD ++OS40MBgGDCsGAQQBkggJAYNfAwQIDAZ4ODZfNjQwJgYMKwYBBAGSCAkBg18EBBYM ++FHJoZWwtOSxyaGVsLTkteDg2XzY0MA0GCSqGSIb3DQEBCwUAA4ICAQCGUDPFBrLs ++sK/RITJothRhKhKNX3zu9TWRG0WKxszCx/y7c4yEfH1TV/yd7BNB2RubaoayWz8E ++TQjcRW8BnVu9JrlbdpWJm4eN+dOOpcESPilLnkz4Tr0WYDsT1/jk/uiorK4h21S0 ++EwMicuSuEmm0OUEX0zj2X/IyveFRtpJpH/JktznCkvexysc1JRzqMCbal8GipRX9 ++Xf7Oko6QiaUpu5GDLN2OXhizYHdR2f3l+Sn2cScsbi3fSVv+DLsnaz6J0kZ4U8q3 ++lYk/ZYifJjG+/7cv3e+usixpmK/qYlpOvunUDnqOkDfUs4/4bZjH8e8CdqJk4YvU ++RRtLr7muXEJsaqF7lxAViXnKxT/z/+1kOgN/+Oyzjs4QDsk2HQpWHFgNYSSG9Mmz ++PUS8tk2T0j5sN55X7QRRl5c0oqrBU5XaWyL26QcfONYcR8dBaKawjxg8CI9KzsYY ++sb2jjS+fBkB1OI2c6z4OZRd+0N6FQ6gq++KiXOLFvi/QSFNi9Veb56c5tR2l6fBk ++0pSH06Gg2s0aQg20NdMIr+HaYsVdJRsE1FgQ2tlfFx9rGkcqhgwV3Za/abgtRb2o ++YVwps28DLm41DXf5DnXK+BXFHrtR/3YAZtga+R7OL/RvcF0kc2kudlxqd/8Y33uL ++nqnoATy31FTW4J4rEfanJTQgTpatZmbaLQ== ++-----END CERTIFICATE----- +diff --git a/repos/system_upgrade/common/files/prod-certs/10.0/486.pem b/repos/system_upgrade/common/files/prod-certs/10.0/486.pem +new file mode 100644 +index 00000000..2be739ff +--- /dev/null ++++ b/repos/system_upgrade/common/files/prod-certs/10.0/486.pem +@@ -0,0 +1,37 @@ ++-----BEGIN CERTIFICATE----- ++MIIGZzCCBE+gAwIBAgIJALDxRLt/tVHsMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD ++VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI ++YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk ++IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ ++ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDcxODA4MTkxNloXDTQzMDcx ++ODA4MTkxNlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFtjZDA5Nzdl ++Ni0xOWY4LTQ5YTUtODc0My0yODgyNjNhNjA0ZDVdMIICIjANBgkqhkiG9w0BAQEF ++AAOCAg8AMIICCgKCAgEAxj9J04z+Ezdyx1U33kFftLv0ntNS1BSeuhoZLDhs18yk ++sepG7hXXtHh2CMFfLZmTjAyL9i1XsxykQpVQdXTGpUF33C2qBQHB5glYs9+d781x ++8p8m8zFxbPcW82TIJXbgW3ErVh8vk5qCbG1cCAAHb+DWMq0EAyy1bl/JgAghYNGB ++RvKJObTdCrdpYh02KUqBLkSPZHvo6DUJFN37MXDpVeQq9VtqRjpKLLwuEfXb0Y7I ++5xEOrR3kYbOaBAWVt3mYZ1t0L/KfY2jVOdU5WFyyB9PhbMdLi1xE801j+GJrwcLa ++xmqvj4UaICRzcPATP86zVM1BBQa+lilkRQes5HyjZzZDiGYudnXhbqmLo/n0cuXo ++QBVVjhzRTMx71Eiiahmiw+U1vGqkHhQNxb13HtN1lcAhUCDrxxeMvrAjYdWpYlpI ++yW3NssPWt1YUHidMBSAJ4KctIf91dyE93aStlxwC/QnyFsZOmcEsBzVCnz9GmWMl ++1/6XzBS1yDUqByklx0TLH+z/sK9A+O2rZAy1mByCYwVxvbOZhnqGxAuToIS+A81v ++5hCjsCiOScVB+cil30YBu0cH85RZ0ILNkHdKdrLLWW4wjphK2nBn2g2i3+ztf+nQ ++ED2pQqZ/rhuW79jcyCZl9kXqe1wOdF0Cwah4N6/3LzIXEEKyEJxNqQwtNc2IVE8C ++AwEAAaOB8DCB7TAJBgNVHRMEAjAAMDoGDCsGAQQBkggJAYNmAQQqDChSZWQgSGF0 ++IEVudGVycHJpc2UgTGludXggZm9yIHg4Nl82NCBCZXRhMBsGDCsGAQQBkggJAYNm ++AgQLDAkxMC4wIEJldGEwGAYMKwYBBAGSCAkBg2YDBAgMBng4Nl82NDAtBgwrBgEE ++AZIICQGDZgQEHQwbcmhlbC0xMCxyaGVsLTEwLWJldGEteDg2XzY0MB0GA1UdDgQW ++BBRh6iC1NXyvZ2Q6/2sI5hB40M0flTAfBgNVHSMEGDAWgBSW/bscQED/QIStsh8L ++JsHDam/WfDANBgkqhkiG9w0BAQsFAAOCAgEAHFD1uIi2AXILNB5JKwSJ5boz6/K7 ++MpIqP5mSXPw9Cr4Ie9FiwlZuQIGPp6AUOb7RcDpLxZt9eNYrsQMmrXzo4qagIax/ ++NGEYKOrqDxeH4T0r9wLnARxQg1mntXzGkO6kSKIRpiGJlsBXEPAX9k4WaqNlQScu ++QWjtTp6E3U3xZLb74TPS708ok+xSm1ZehPJZp53N8JQigtLxfOnv+7xQdBD78YOE ++ldPzznhoHP5iJeACRFC+b83asWDwQAEbPv7d4ZoLCfacOvkt28Hm+kXa9zBDqgBD ++nUv1wsZS2aPhWMDwnV9qC0UPCdIMbVNH9TjkBe2yoTsz/cmgCe/D85DZyBrZabV7 ++U36dg0rdKqoR8hRnlfbuzdiNZmmdMAinI56t/U++yGiGYobxmftPOKt46zFpcA3W ++Zqdl1Qg2zPcWxyjHV4xF0vtiEIkj1xlm0u2fsp8xfdA1wzj3Cqyn4l8R08eGLUBQ ++G4GoKaaxTOjfETU4ASRr+32UJCfervM0PK8GqMgxvOc9Yw3snhJVbG4mMWrR+NVp ++7r6DpzfVO9Kfbrc1yLnCK56MxBQCIwh96RDPhHkaO/xPrD2xX6/A5+oMDWVzJW4N ++VIhz/i0eBqFX4QINkPLrmo/AHMBpfTBqaIV88pBFHhT5ZWws9kaad0axpBXV4BrT ++2LyAgMKD4NjUsM0= ++-----END CERTIFICATE----- +diff --git a/repos/system_upgrade/common/files/rpm-gpg/10/RPM-GPG-KEY-redhat-release b/repos/system_upgrade/common/files/rpm-gpg/10/RPM-GPG-KEY-redhat-release +new file mode 100644 +index 00000000..a59198ea +--- /dev/null ++++ b/repos/system_upgrade/common/files/rpm-gpg/10/RPM-GPG-KEY-redhat-release +@@ -0,0 +1,69 @@ ++The following public key can be used to verify RPM packages built and ++signed by Red Hat, Inc. This key is used for packages in Red Hat ++products shipped after November 2009, and for all updates to those ++products. ++ ++Questions about this key should be sent to security@redhat.com. ++ ++pub 4096R/FD431D51 2009-10-22 ++ Key fingerprint = 567E 347A D004 4ADE 55BA 8A5F 199E 2F91 FD43 1D51 ++uid Red Hat, Inc. (release key 2) ++ ++-----BEGIN PGP PUBLIC KEY BLOCK----- ++Version: GnuPG v2.0.22 (GNU/Linux) ++ ++mQINBErgSTsBEACh2A4b0O9t+vzC9VrVtL1AKvUWi9OPCjkvR7Xd8DtJxeeMZ5eF ++0HtzIG58qDRybwUe89FZprB1ffuUKzdE+HcL3FbNWSSOXVjZIersdXyH3NvnLLLF ++0DNRB2ix3bXG9Rh/RXpFsNxDp2CEMdUvbYCzE79K1EnUTVh1L0Of023FtPSZXX0c ++u7Pb5DI5lX5YeoXO6RoodrIGYJsVBQWnrWw4xNTconUfNPk0EGZtEnzvH2zyPoJh ++XGF+Ncu9XwbalnYde10OCvSWAZ5zTCpoLMTvQjWpbCdWXJzCm6G+/hx9upke546H ++5IjtYm4dTIVTnc3wvDiODgBKRzOl9rEOCIgOuGtDxRxcQkjrC+xvg5Vkqn7vBUyW ++9pHedOU+PoF3DGOM+dqv+eNKBvh9YF9ugFAQBkcG7viZgvGEMGGUpzNgN7XnS1gj ++/DPo9mZESOYnKceve2tIC87p2hqjrxOHuI7fkZYeNIcAoa83rBltFXaBDYhWAKS1 ++PcXS1/7JzP0ky7d0L6Xbu/If5kqWQpKwUInXtySRkuraVfuK3Bpa+X1XecWi24JY ++HVtlNX025xx1ewVzGNCTlWn1skQN2OOoQTV4C8/qFpTW6DTWYurd4+fE0OJFJZQF ++buhfXYwmRlVOgN5i77NTIJZJQfYFj38c/Iv5vZBPokO6mffrOTv3MHWVgQARAQAB ++tDNSZWQgSGF0LCBJbmMuIChyZWxlYXNlIGtleSAyKSA8c2VjdXJpdHlAcmVkaGF0 ++LmNvbT6JAjYEEwEIACACGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCSuBJPAAK ++CRAZni+R/UMdUfIkD/9m3HWv07uJG26R3KBexTo2FFu3rmZs+m2nfW8R3dBX+k0o ++AOFpgJCsNgKwU81LOPrkMN19G0+Yn/ZTCDD7cIQ7dhYuDyEX97xh4une/EhnnRuh ++ASzR+1xYbj/HcYZIL9kbslgpebMn+AhxbUTQF/mziug3hLidR9Bzvygq0Q09E11c ++OZL4BU6J2HqxL+9m2F+tnLdfhL7MsAq9nbmWAOpkbGefc5SXBSq0sWfwoes3X3yD ++Q8B5Xqr9AxABU7oUB+wRqvY69ZCxi/BhuuJCUxY89ZmwXfkVxeHl1tYfROUwOnJO ++GYSbI/o41KBK4DkIiDcT7QqvqvCyudnxZdBjL2QU6OrIJvWmKs319qSF9m3mXRSt ++ZzWtB89Pj5LZ6cdtuHvW9GO4qSoBLmAfB313pGkbgi1DE6tqCLHlA0yQ8zv99OWV ++cMDGmS7tVTZqfX1xQJ0N3bNORQNtikJC3G+zBCJzIeZleeDlMDQcww00yWU1oE7/ ++To2UmykMGc7o9iggFWR2g0PIcKsA/SXdRKWPqCHG2uKHBvdRTQGupdXQ1sbV+AHw ++ycyA/9H/mp/NUSNM2cqnBDcZ6GhlHt59zWtEveiuU5fpTbp4GVcFXbW8jStj8j8z ++1HI3cywZO8+YNPzqyx0JWsidXGkfzkPHyS4jTG84lfu2JG8m/nqLnRSeKpl20Q== ++=79bX ++-----END PGP PUBLIC KEY BLOCK----- ++-----BEGIN PGP PUBLIC KEY BLOCK----- ++ ++mQINBGIpIp4BEAC/o5e1WzLIsS6/JOQCs4XYATYTcf6B6ALzcP05G0W3uRpUQSrL ++FRKNrU8ZCelm/B+XSh2ljJNeklp2WLxYENDOsftDXGoyLr2hEkI5OyK267IHhFNJ ++g+BN+T5Cjh4ZiiWij6o9F7x2ZpxISE9M4iI80rwSv1KOnGSw5j2zD2EwoMjTVyVE ++/t3s5XJxnDclB7ZqL+cgjv0mWUY/4+b/OoRTkhq7b8QILuZp75Y64pkrndgakm1T ++8mAGXV02mEzpNj9DyAJdUqa11PIhMJMxxHOGHJ8CcHZ2NJL2e7yJf4orTj+cMhP5 ++LzJcVlaXnQYu8Zkqa0V6J1Qdj8ZXL72QsmyicRYXAtK9Jm5pvBHuYU2m6Ja7dBEB ++Vkhe7lTKhAjkZC5ErPmANNS9kPdtXCOpwN1lOnmD2m04hks3kpH9OTX7RkTFUSws ++eARAfRID6RLfi59B9lmAbekecnsMIFMx7qR7ZKyQb3GOuZwNYOaYFevuxusSwCHv ++4FtLDIhk+Fge+EbPdEva+VLJeMOb02gC4V/cX/oFoPkxM1A5LHjkuAM+aFLAiIRd ++Np/tAPWk1k6yc+FqkcDqOttbP4ciiXb9JPtmzTCbJD8lgH0rGp8ufyMXC9x7/dqX ++TjsiGzyvlMnrkKB4GL4DqRFl8LAR02A3846DD8CAcaxoXggL2bJCU2rgUQARAQAB ++tDVSZWQgSGF0LCBJbmMuIChhdXhpbGlhcnkga2V5IDMpIDxzZWN1cml0eUByZWRo ++YXQuY29tPokCUgQTAQgAPBYhBH5GJCWMQGU11W1vE1BU5KRaY0CzBQJiKSKeAhsD ++BQsJCAcCAyICAQYVCgkICwIEFgIDAQIeBwIXgAAKCRBQVOSkWmNAsyBfEACuTN/X ++YR+QyzeRw0pXcTvMqzNE4DKKr97hSQEwZH1/v1PEPs5O3psuVUm2iam7bqYwG+ry ++EskAgMHi8AJmY0lioQD5/LTSLTrM8UyQnU3g17DHau1NHIFTGyaW4a7xviU4C2+k ++c6X0u1CPHI1U4Q8prpNcfLsldaNYlsVZtUtYSHKPAUcswXWliW7QYjZ5tMSbu8jR ++OMOc3mZuf0fcVFNu8+XSpN7qLhRNcPv+FCNmk/wkaQfH4Pv+jVsOgHqkV3aLqJeN ++kNUnpyEKYkNqo7mNfNVWOcl+Z1KKKwSkIi3vg8maC7rODsy6IX+Y96M93sqYDQom ++aaWue2gvw6thEoH4SaCrCL78mj2YFpeg1Oew4QwVcBnt68KOPfL9YyoOicNs4Vuu ++fb/vjU2ONPZAeepIKA8QxCETiryCcP43daqThvIgdbUIiWne3gae6eSj0EuUPoYe ++H5g2Lw0qdwbHIOxqp2kvN96Ii7s1DK3VyhMt/GSPCxRnDRJ8oQKJ2W/I1IT5VtiU ++zMjjq5JcYzRPzHDxfVzT9CLeU/0XQ+2OOUAiZKZ0dzSyyVn8xbpviT7iadvjlQX3 ++CINaPB+d2Kxa6uFWh+ZYOLLAgZ9B8NKutUHpXN66YSfe79xFBSFWKkJ8cSIMk13/ ++Ifs7ApKlKCCRDpwoDqx/sjIaj1cpOfLHYjnefg== ++=UZd/ ++-----END PGP PUBLIC KEY BLOCK----- +diff --git a/repos/system_upgrade/common/files/rpm-gpg/10beta/RPM-GPG-KEY-redhat-release b/repos/system_upgrade/common/files/rpm-gpg/10beta/RPM-GPG-KEY-redhat-release +new file mode 100644 +index 00000000..1f46baa1 +--- /dev/null ++++ b/repos/system_upgrade/common/files/rpm-gpg/10beta/RPM-GPG-KEY-redhat-release +@@ -0,0 +1,30 @@ ++-----BEGIN PGP PUBLIC KEY BLOCK----- ++Version: GnuPG v1.2.6 (GNU/Linux) ++ ++mQINBEmkAzABEAC2/c7bP1lHQ3XScxbIk0LQWe1YOiibQBRLwf8Si5PktgtuPibT ++kKpZjw8p4D+fM7jD1WUzUE0X7tXg2l/eUlMM4dw6XJAQ1AmEOtlwSg7rrMtTvM0A ++BEtI7Km6fC6sU6RtBMdcqD1cH/6dbsfh8muznVA7UlX+PRBHVzdWzj6y8h84dBjo ++gzcbYu9Hezqgj/lLzicqsSZPz9UdXiRTRAIhp8V30BD8uRaaa0KDDnD6IzJv3D9P ++xQWbFM4Z12GN9LyeZqmD7bpKzZmXG/3drvfXVisXaXp3M07t3NlBa3Dt8NFIKZ0D ++FRXBz5bvzxRVmdH6DtkDWXDPOt+Wdm1rZrCOrySFpBZQRpHw12eo1M1lirANIov7 ++Z+V1Qh/aBxj5EUu32u9ZpjAPPNtQF6F/KjaoHHHmEQAuj4DLex4LY646Hv1rcv2i ++QFuCdvLKQGSiFBrfZH0j/IX3/0JXQlZzb3MuMFPxLXGAoAV9UP/Sw/WTmAuTzFVm ++G13UYFeMwrToOiqcX2VcK0aC1FCcTP2z4JW3PsWvU8rUDRUYfoXovc7eg4Vn5wHt ++0NBYsNhYiAAf320AUIHzQZYi38JgVwuJfFu43tJZE4Vig++RQq6tsEx9Ftz3EwRR ++fJ9z9mEvEiieZm+vbOvMvIuimFVPSCmLH+bI649K8eZlVRWsx3EXCVb0nQARAQAB ++tDBSZWQgSGF0LCBJbmMuIChiZXRhIGtleSAyKSA8c2VjdXJpdHlAcmVkaGF0LmNv ++bT6JAjYEEwECACAFAkpSM+cCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCT ++ioDK8hVB6/9tEAC0+KmzeKceXQ/GTUoU6jy9vtkFCFrmv+c7ol4XpdTt0QhqBOwy ++6m2mKWwmm8KfYfy0cADQ4y/EcoXl7FtFBwYmkCuEQGXhTDn9DvVjhooIq59LEMBQ ++OW879RwwzRIZ8ebbjMUjDPF5MfPQqP2LBu9N4KvXlZp4voykwuuaJ+cbsKZR6pZ6 ++0RQKPHKP+NgUFC0fff7XY9cuOZZWFAeKRhLN2K7bnRHKxp+kELWb6R9ZfrYwZjWc ++MIPbTd1khE53L4NTfpWfAnJRtkPSDOKEGVlVLtLq4HEAxQt07kbslqISRWyXER3u ++QOJj64D1ZiIMz6t6uZ424VE4ry9rBR0Jz55cMMx5O/ni9x3xzFUgH8Su2yM0r3jE ++Rf24+tbOaPf7tebyx4OKe+JW95hNVstWUDyGbs6K9qGfI/pICuO1nMMFTo6GqzQ6 ++DwLZvJ9QdXo7ujEtySZnfu42aycaQ9ZLC2DOCQCUBY350Hx6FLW3O546TAvpTfk0 ++B6x+DV7mJQH7MGmRXQsE7TLBJKjq28Cn4tVp04PmybQyTxZdGA/8zY6pPl6xyVMH ++V68hSBKEVT/rlouOHuxfdmZva1DhVvUC6Xj7+iTMTVJUAq/4Uyn31P1OJmA2a0PT ++CAqWkbJSgKFccsjPoTbLyxhuMSNkEZFHvlZrSK9vnPzmfiRH0Orx3wYpMQ== ++=21pb ++-----END PGP PUBLIC KEY BLOCK----- ++ +-- +2.42.0 + diff --git a/0077-Install-util-linux-into-the-target-container.patch b/0077-Install-util-linux-into-the-target-container.patch new file mode 100644 index 0000000..8776323 --- /dev/null +++ b/0077-Install-util-linux-into-the-target-container.patch @@ -0,0 +1,68 @@ +From da6f0248c97aed46d519d97d0f334fd7bd44f86e Mon Sep 17 00:00:00 2001 +From: Michal Reznik +Date: Fri, 7 Jun 2024 10:20:35 +0200 +Subject: [PATCH 77/92] Install util-linux into the target container + +The util-linug RPM is not installed automatically as a dependency +when: + * upgrading 9 -> 10 + * or when dnf is configured to: install_weak_deps=False + (affecting all upgrade paths) + +Missing util-linux package leads to error due to missing `su` command +inside the container. + +jira: https://issues.redhat.com/browse/RHEL-43978 +--- + .../actors/targetuserspacecreator/libraries/userspacegen.py | 2 +- + .../tests/unit_test_targetuserspacecreator.py | 2 +- + repos/system_upgrade/common/libraries/tests/test_rpms.py | 2 +- + repos/system_upgrade/el9toel10/actors/.gitkeep | 0 + 4 files changed, 3 insertions(+), 3 deletions(-) + delete mode 100644 repos/system_upgrade/el9toel10/actors/.gitkeep + +diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py +index 6e8214dd..4a61ccb4 100644 +--- a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py ++++ b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py +@@ -89,7 +89,7 @@ class _InputData(object): + It doesn't consume TargetRepositories, which are consumed in the + own function. + """ +- self.packages = {'dnf', 'dnf-command(config-manager)'} ++ self.packages = {'dnf', 'dnf-command(config-manager)', 'util-linux'} + self.files = [] + _cftuples = set() + +diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py +index 19b760a1..826ae06d 100644 +--- a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py ++++ b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py +@@ -1001,7 +1001,7 @@ def test_consume_data(monkeypatch, raised, no_rhsm, testdata): + # do not write never into testdata inside the test !! + xfs = testdata.xfs + custom_repofiles = testdata.custom_repofiles +- _exp_pkgs = {'dnf', 'dnf-command(config-manager)'} ++ _exp_pkgs = {'dnf', 'dnf-command(config-manager)', 'util-linux'} + _exp_files = [] + + def _get_pkgs(msg): +diff --git a/repos/system_upgrade/common/libraries/tests/test_rpms.py b/repos/system_upgrade/common/libraries/tests/test_rpms.py +index 955ab05c..a527407d 100644 +--- a/repos/system_upgrade/common/libraries/tests/test_rpms.py ++++ b/repos/system_upgrade/common/libraries/tests/test_rpms.py +@@ -61,7 +61,7 @@ def test_get_leapp_packages(major_version, component, result, monkeypatch): + r"component nosuchcomponent is unknown, available choices are \['cockpit', 'framework', 'repository', 'tools']") + ), + ('nosuchversion', "framework", +- (ValueError, r"major_version nosuchversion is unknown, available choices are \['7', '8']")), ++ (ValueError, r"major_version nosuchversion is unknown, available choices are \['7', '8', '9']")), + ('nosuchversion', False, + (ValueError, r"At least one component must be specified when calling this function," + r" available choices are \['cockpit', 'framework', 'repository', 'tools']")), +diff --git a/repos/system_upgrade/el9toel10/actors/.gitkeep b/repos/system_upgrade/el9toel10/actors/.gitkeep +deleted file mode 100644 +index e69de29b..00000000 +-- +2.42.0 + diff --git a/0078-Fix-LEAPP_IPU_IN_PROGRESS-9to1-9to10.patch b/0078-Fix-LEAPP_IPU_IN_PROGRESS-9to1-9to10.patch new file mode 100644 index 0000000..d459632 --- /dev/null +++ b/0078-Fix-LEAPP_IPU_IN_PROGRESS-9to1-9to10.patch @@ -0,0 +1,38 @@ +From b6e4f2b8b793b07b49b13d7d291dd03a27b049f7 Mon Sep 17 00:00:00 2001 +From: Matej Matuska +Date: Fri, 28 Jun 2024 20:33:22 +0200 +Subject: [PATCH 78/92] Fix LEAPP_IPU_IN_PROGRESS (9to1 -> 9to10) + +Implementation of processing versions inside commands/command_utils.py +has been bugy. One of function returned string instread of list +which led to the situation that only the first character has been +returned instead of the first chunk. This has been ok for releases +where major version is just one decimal. However since el 10 it has +been buggy and generated set envar: + LEAPP_IPU_IN_PROGRESS=9to1 +instead of + LEAPP_IPU_IN_PROGRESS=9to10 + +Now it should be working correctly again. + +jira: OAMG-11260 +--- + commands/command_utils.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/commands/command_utils.py b/commands/command_utils.py +index 338978dd..4f6f99eb 100644 +--- a/commands/command_utils.py ++++ b/commands/command_utils.py +@@ -26,7 +26,7 @@ def check_version(version): + """ + if not re.match(VERSION_REGEX, version): + raise CommandError('Unexpected format of target version: {}'.format(version)) +- return version.split('.')[0] ++ return version.split('.') + + + def get_major_version(version): +-- +2.42.0 + diff --git a/0079-Add-unit-tests-for-config.version.get_major_version.patch b/0079-Add-unit-tests-for-config.version.get_major_version.patch new file mode 100644 index 0000000..b342642 --- /dev/null +++ b/0079-Add-unit-tests-for-config.version.get_major_version.patch @@ -0,0 +1,37 @@ +From 79775dac818a4a2328e19d861d549815c34d9210 Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Mon, 15 Jul 2024 06:01:21 +0200 +Subject: [PATCH 79/92] Add unit tests for config.version.get_major_version() + +Based on the bug fixed in the previuos commit, we are rather adding +unit-tests for get_major_version() function in common libraries, +to prevent possible issues in future there too. +--- + .../common/libraries/config/tests/test_version.py | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/repos/system_upgrade/common/libraries/config/tests/test_version.py b/repos/system_upgrade/common/libraries/config/tests/test_version.py +index 4ef7e506..303e4de5 100644 +--- a/repos/system_upgrade/common/libraries/config/tests/test_version.py ++++ b/repos/system_upgrade/common/libraries/config/tests/test_version.py +@@ -121,3 +121,17 @@ def test_is_rhel_realtime(monkeypatch, result, kernel, release_id): + monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(src_ver='7.9', kernel=kernel, + release_id=release_id)) + assert version.is_rhel_realtime() == result ++ ++ ++@pytest.mark.parametrize('result,sys_version', [ ++ ('7', '7.1.0'), ++ ('7', '7.9'), ++ ('7', '7'), ++ ('8', '8.10'), ++ ('10', '10.0'), ++ ('10', '10.10.0'), ++ ('10', '10.0'), ++ ('10', '10'), ++]) ++def test_get_major_version(result, sys_version): ++ assert version.get_major_version(sys_version) == result +-- +2.42.0 + diff --git a/0080-Add-artificial-9-10-repomaping-data.patch b/0080-Add-artificial-9-10-repomaping-data.patch new file mode 100644 index 0000000..c4c9db9 --- /dev/null +++ b/0080-Add-artificial-9-10-repomaping-data.patch @@ -0,0 +1,504 @@ +From a1f60899ea72f55ed878b6a5e307dda325d30e28 Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Fri, 19 Apr 2024 15:22:18 +0200 +Subject: [PATCH 80/92] Add artificial 9->10 repomaping data + +Note that the data is artificial, meaning it's not generated through +repomapping generator and therefore not verified by it against the +source of truth. The assumption is that the repos will be similar to how +they are on RHEL 9 and are basically copied (redundant channels and rhui +repos are dropped). +--- + etc/leapp/files/repomap.json | 469 +++++++++++++++++++++++++++++++++++ + 1 file changed, 469 insertions(+) + +diff --git a/etc/leapp/files/repomap.json b/etc/leapp/files/repomap.json +index 8a490b84..58e6a023 100644 +--- a/etc/leapp/files/repomap.json ++++ b/etc/leapp/files/repomap.json +@@ -233,6 +233,66 @@ + ] + } + ] ++ }, ++ { ++ "source_major_version": "9", ++ "target_major_version": "10", ++ "entries": [ ++ { ++ "source": "rhel9-BaseOS", ++ "target": [ ++ "rhel10-BaseOS" ++ ] ++ }, ++ { ++ "source": "rhel9-AppStream", ++ "target": [ ++ "rhel10-AppStream" ++ ] ++ }, ++ { ++ "source": "rhel9-CRB", ++ "target": [ ++ "rhel10-CRB" ++ ] ++ }, ++ { ++ "source": "rhel9-Supplementary", ++ "target": [ ++ "rhel10-Supplementary" ++ ] ++ }, ++ { ++ "source": "rhel9-RT", ++ "target": [ ++ "rhel10-RT" ++ ] ++ }, ++ { ++ "source": "rhel9-NFV", ++ "target": [ ++ "rhel10-NFV" ++ ] ++ }, ++ { ++ "source": "rhel9-SAP-NetWeaver", ++ "target": [ ++ "rhel10-SAP-NetWeaver" ++ ] ++ }, ++ { ++ "source": "rhel9-SAP-Solutions", ++ "target": [ ++ "rhel10-SAP-Solutions" ++ ] ++ }, ++ { ++ "source": "rhel9-HighAvailability", ++ "target": [ ++ "rhel10-HighAvailability" ++ ] ++ } ++ ] + } + ], + "repositories": [ +@@ -3999,6 +4059,415 @@ + "rhui": "alibaba" + } + ] ++ }, ++ { ++ "pesid": "rhel10-BaseOS", ++ "entries": [ ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-aarch64-baseos-beta-rpms", ++ "arch": "aarch64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-aarch64-baseos-rpms", ++ "arch": "aarch64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-baseos-beta-rpms", ++ "arch": "ppc64le", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-baseos-rpms", ++ "arch": "ppc64le", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-baseos-beta-rpms", ++ "arch": "s390x", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-baseos-rpms", ++ "arch": "s390x", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-baseos-beta-rpms", ++ "arch": "x86_64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-baseos-rpms", ++ "arch": "x86_64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ } ++ ] ++ }, ++ { ++ "pesid": "rhel10-AppStream", ++ "entries": [ ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-aarch64-appstream-beta-rpms", ++ "arch": "aarch64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-aarch64-appstream-rpms", ++ "arch": "aarch64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-appstream-beta-rpms", ++ "arch": "ppc64le", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-appstream-rpms", ++ "arch": "ppc64le", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-appstream-beta-rpms", ++ "arch": "s390x", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-appstream-rpms", ++ "arch": "s390x", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-appstream-beta-rpms", ++ "arch": "x86_64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-appstream-rpms", ++ "arch": "x86_64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ } ++ ] ++ }, ++ { ++ "pesid": "rhel10-CRB", ++ "entries": [ ++ { ++ "major_version": "10", ++ "repoid": "codeready-builder-beta-for-rhel-10-aarch64-rpms", ++ "arch": "aarch64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "codeready-builder-beta-for-rhel-10-ppc64le-rpms", ++ "arch": "ppc64le", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "codeready-builder-beta-for-rhel-10-s390x-rpms", ++ "arch": "s390x", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "codeready-builder-beta-for-rhel-10-x86_64-rpms", ++ "arch": "x86_64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "codeready-builder-for-rhel-10-aarch64-rpms", ++ "arch": "aarch64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "codeready-builder-for-rhel-10-ppc64le-rpms", ++ "arch": "ppc64le", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "codeready-builder-for-rhel-10-s390x-rpms", ++ "arch": "s390x", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "codeready-builder-for-rhel-10-x86_64-rpms", ++ "arch": "x86_64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ } ++ ] ++ }, ++ { ++ "pesid": "rhel10-Supplementary", ++ "entries": [ ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-aarch64-supplementary-beta-rpms", ++ "arch": "aarch64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-aarch64-supplementary-rpms", ++ "arch": "aarch64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-supplementary-beta-rpms", ++ "arch": "ppc64le", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-supplementary-rpms", ++ "arch": "ppc64le", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-supplementary-beta-rpms", ++ "arch": "s390x", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-supplementary-rpms", ++ "arch": "s390x", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-supplementary-beta-rpms", ++ "arch": "x86_64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-supplementary-rpms", ++ "arch": "x86_64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ } ++ ] ++ }, ++ { ++ "pesid": "rhel10-RT", ++ "entries": [ ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-rt-beta-rpms", ++ "arch": "x86_64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-rt-rpms", ++ "arch": "x86_64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ } ++ ] ++ }, ++ { ++ "pesid": "rhel10-NFV", ++ "entries": [ ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-nfv-beta-rpms", ++ "arch": "x86_64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-nfv-rpms", ++ "arch": "x86_64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ } ++ ] ++ }, ++ { ++ "pesid": "rhel10-SAP-NetWeaver", ++ "entries": [ ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-sap-netweaver-beta-rpms", ++ "arch": "ppc64le", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-sap-netweaver-rpms", ++ "arch": "ppc64le", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-sap-netweaver-beta-rpms", ++ "arch": "s390x", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-sap-netweaver-rpms", ++ "arch": "s390x", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-sap-netweaver-beta-rpms", ++ "arch": "x86_64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-sap-netweaver-rpms", ++ "arch": "x86_64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ } ++ ] ++ }, ++ { ++ "pesid": "rhel10-SAP-Solutions", ++ "entries": [ ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-sap-solutions-rpms", ++ "arch": "ppc64le", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-sap-solutions-rpms", ++ "arch": "x86_64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ } ++ ] ++ }, ++ { ++ "pesid": "rhel10-HighAvailability", ++ "entries": [ ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-aarch64-highavailability-beta-rpms", ++ "arch": "aarch64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-aarch64-highavailability-rpms", ++ "arch": "aarch64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-highavailability-beta-rpms", ++ "arch": "ppc64le", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-ppc64le-highavailability-rpms", ++ "arch": "ppc64le", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-highavailability-beta-rpms", ++ "arch": "s390x", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-s390x-highavailability-rpms", ++ "arch": "s390x", ++ "channel": "ga", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-highavailability-beta-rpms", ++ "arch": "x86_64", ++ "channel": "beta", ++ "repo_type": "rpm" ++ }, ++ { ++ "major_version": "10", ++ "repoid": "rhel-10-for-x86_64-highavailability-rpms", ++ "arch": "x86_64", ++ "channel": "ga", ++ "repo_type": "rpm" ++ } ++ ] + } + ], + "provided_data_streams": [ +-- +2.42.0 + diff --git a/0081-Update-PES-data.patch b/0081-Update-PES-data.patch new file mode 100644 index 0000000..0450906 --- /dev/null +++ b/0081-Update-PES-data.patch @@ -0,0 +1,10254 @@ +From f871cb8634ac238360adb12894aa0b7421779f38 Mon Sep 17 00:00:00 2001 +From: Michal Reznik +Date: Thu, 30 May 2024 09:33:22 +0200 +Subject: [PATCH 81/92] Update PES data + +--- + etc/leapp/files/pes-events.json | 9029 +++++++++++++++++++++++++++++-- + 1 file changed, 8634 insertions(+), 395 deletions(-) + +diff --git a/etc/leapp/files/pes-events.json b/etc/leapp/files/pes-events.json +index ac9a1c4d..ac36bfed 100644 +--- a/etc/leapp/files/pes-events.json ++++ b/etc/leapp/files/pes-events.json +@@ -1,5 +1,5 @@ + { +-"timestamp": "202404261104Z", ++"timestamp": "202405292304Z", + "provided_data_streams": [ + "2.0", + "3.0" +@@ -12973,7 +12973,10 @@ null + "package": [ + { + "modulestreams": [ +-null ++{ ++"name": "python36", ++"stream": "3.6" ++} + ], + "name": "python3-bson", + "repository": "rhel8-AppStream" +@@ -12981,7 +12984,11 @@ null + ], + "set_id": 509 + }, +-"initial_release": null, ++"initial_release": { ++"major_version": 7, ++"minor_version": 9, ++"os_name": "RHEL" ++}, + "modulestream_maps": [], + "out_packageset": null, + "release": { +@@ -118854,7 +118861,11 @@ null + ], + "set_id": 5564 + }, +-"initial_release": null, ++"initial_release": { ++"major_version": 7, ++"minor_version": 9, ++"os_name": "RHEL" ++}, + "modulestream_maps": [], + "out_packageset": null, + "release": { +@@ -510914,18 +510925,8112 @@ null + "s390x", + "x86_64" + ], +-"id": 14149, ++"id": 14149, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "nscd", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 19968 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14150, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "nscd", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 19969 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14151, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "tbb-bind", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 19970 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 5, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14152, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "flex", ++"repository": "rhel9-AppStream" ++}, ++{ ++"modulestreams": [ ++null ++], ++"name": "flex-doc", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19971 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "flex", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 19972 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14153, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-lark-parser", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19973 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-lark", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 19974 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14154, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-typing-extensions", ++"repository": "rhel10-BaseOS" ++} ++], ++"set_id": 19975 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14155, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "llhttp", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 19976 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14156, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "keylime", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19977 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14157, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "keylime-base", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19978 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14158, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "keylime-registrar", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19979 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14159, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "keylime-selinux", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19980 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14160, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "keylime-tenant", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19981 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14161, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "keylime-verifier", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19982 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14162, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-keylime", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19983 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14163, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "keylime-agent-rust", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19984 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14164, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-alembic", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19985 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14165, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-greenlet", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19986 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14166, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-lark-parser", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19987 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14167, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-sqlalchemy", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19988 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 6, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14168, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-audit", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19989 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-audit", ++"repository": "rhel10-BaseOS" ++} ++], ++"set_id": 19990 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"x86_64" ++], ++"id": 14169, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "clevis-pin-tpm2", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19991 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14170, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "keylime-tools", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 19992 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14171, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "compat-openssl11", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19993 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14172, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "compat-openssl11", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19994 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14173, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libxcrypt-compat", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19995 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14174, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libxcrypt-compat", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 19996 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14175, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "rpm-sequoia", ++"repository": "rhel10-BaseOS" ++} ++], ++"set_id": 19997 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14176, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "freeradius-mysql", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 19998 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 2, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14177, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "freeradius-perl", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 19999 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 2, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14178, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "freeradius-postgresql", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20000 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 2, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14179, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "freeradius-rest", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20001 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 2, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14180, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "freeradius-sqlite", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20002 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 2, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14181, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "freeradius-unixODBC", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20003 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 1, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 2, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14182, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "freeradius", ++"stream": "3.0" ++} ++], ++"name": "freeradius-rest", ++"repository": "rhel8-AppStream" ++} ++], ++"set_id": 20004 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14183, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "freeradius", ++"stream": "3.0" ++} ++], ++"name": "freeradius-rest", ++"repository": "rhel8-AppStream" ++} ++], ++"set_id": 20005 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 9, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14184, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "http-parser", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20006 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14185, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "http-parser", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20007 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14186, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "http-parser-devel", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20008 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"x86_64" ++], ++"id": 14187, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "shim-ia32", ++"repository": "rhel8-BaseOS" ++} ++], ++"set_id": 20009 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"x86_64" ++], ++"id": 14188, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "shim-ia32", ++"repository": "rhel8-BaseOS" ++} ++], ++"set_id": 20010 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 9, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 4, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14189, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libpaper", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20011 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libpaper", ++"repository": "rhel10-AppStream" ++}, ++{ ++"modulestreams": [ ++null ++], ++"name": "paper", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20012 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"s390x" ++], ++"id": 14190, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "liblsan", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20013 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14191, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "tigervnc", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20014 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14192, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "tigervnc-icons", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20015 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14193, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "tigervnc-license", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20016 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14194, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "tigervnc-selinux", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20017 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14195, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "tigervnc-server", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20018 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14196, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "tigervnc-server-minimal", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20019 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14197, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "tigervnc-server-module", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20020 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14198, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libmemcached-awesome", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20021 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14199, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libmemcached-awesome-devel", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20022 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14200, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libmemcached-awesome-tools", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20023 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14201, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "sendmail", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20024 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14202, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "sendmail", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20025 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14203, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "sendmail-cf", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20026 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14204, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "sendmail-cf", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20027 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14205, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "sendmail-doc", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20028 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14206, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "sendmail-doc", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20029 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14207, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "sendmail-milter", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20030 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14208, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "sendmail-milter-devel", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20031 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14209, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libotr", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20032 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14210, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libotr", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20033 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14211, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libotr-devel", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20034 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 7, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14212, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gpsd-minimal", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20035 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gpsd", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20036 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 7, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14213, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gpsd-minimal-clients", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20037 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gpsd-clients", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20038 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14214, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "scap-workbench", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20039 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14215, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "scap-workbench", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20040 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14216, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-ethtool", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20041 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14217, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "mod_security", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20042 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14218, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "mod_security", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20043 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14219, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "mod_security-mlogc", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20044 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14220, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "mod_security-mlogc", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20045 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14221, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "mod_security_crs", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20046 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14222, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "mod_security_crs", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20047 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14223, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "spamassassin", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20048 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14224, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "spamassassin", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20049 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14225, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "lohit-assamese-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20051 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "google-noto-sans-bengali-vf-fonts", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20052 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14226, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "lohit-bengali-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20053 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "google-noto-sans-bengali-vf-fonts", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20054 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14227, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "lohit-devanagari-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20055 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "google-noto-sans-devanagari-vf-fonts", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20056 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14228, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "lohit-gujarati-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20057 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "google-noto-sans-gujarati-vf-fonts", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20058 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14229, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "lohit-kannada-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20059 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "google-noto-sans-kannada-vf-fonts", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20060 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14230, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "lohit-marathi-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20061 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "google-noto-sans-devanagari-vf-fonts", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20062 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14231, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "lohit-odia-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20063 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "google-noto-sans-oriya-vf-fonts", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20064 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14232, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "lohit-tamil-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20065 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "google-noto-sans-tamil-vf-fonts", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20066 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14233, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "lohit-telugu-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20067 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "google-noto-sans-telugu-vf-fonts", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20068 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14234, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "abattis-cantarell-fonts", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20071 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "redhat-text-vf-fonts", ++"repository": "rhel10-BaseOS" ++} ++], ++"set_id": 20072 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14235, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "adobe-source-code-pro-fonts", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20073 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "redhat-mono-vf-fonts", ++"repository": "rhel10-BaseOS" ++} ++], ++"set_id": 20074 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14238, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "man-pages-overrides", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20077 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14239, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "man-pages-overrides", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20078 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14240, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python-awscrt", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20079 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 4, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14241, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "kexec-tools", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20080 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "kdump-utils", ++"repository": "rhel10-BaseOS" ++}, ++{ ++"modulestreams": [ ++null ++], ++"name": "kexec-tools", ++"repository": "rhel10-BaseOS" ++}, ++{ ++"modulestreams": [ ++null ++], ++"name": "makedumpfile", ++"repository": "rhel10-BaseOS" ++} ++], ++"set_id": 20081 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"x86_64" ++], ++"id": 14242, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-dmidecode", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20082 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14243, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "pcre", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20083 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14244, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "pcre-cpp", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20084 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14245, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "pcre-devel", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20085 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14246, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "pcre-static", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20086 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14247, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "pcre-utf16", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20087 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14248, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "pcre-utf32", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20088 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14249, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "zlib", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20089 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "zlib-ng-compat", ++"repository": "rhel10-BaseOS" ++} ++], ++"set_id": 20090 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14250, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libteam", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20091 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14251, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libteam", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20092 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"s390x" ++], ++"id": 14252, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libtsan", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20093 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"x86_64" ++], ++"id": 14253, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libhwasan", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20094 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"x86_64" ++], ++"id": 14254, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gcc-offload-amdgcn", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20095 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"x86_64" ++], ++"id": 14255, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libgomp-offload-amdgcn", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20096 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14256, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "pgaudit", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20097 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14257, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "pg_repack", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20098 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14258, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgres-decoderbufs", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20099 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14259, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20100 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14260, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-contrib", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20101 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14261, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-docs", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20102 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14262, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-plperl", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20103 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14263, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-plpython3", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20104 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14264, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-pltcl", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20105 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14265, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-private-devel", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20106 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14266, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-private-libs", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20107 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14267, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-server", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20108 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14268, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-server-devel", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20109 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14269, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-static", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20110 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14270, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-test", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20111 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14271, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-test-rpm-macros", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20112 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14272, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-upgrade", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20113 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14273, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "postgresql", ++"stream": "16" ++} ++], ++"name": "postgresql-upgrade-devel", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20114 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14274, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "ktls-utils", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20115 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14275, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "kmod-kvdo", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20116 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14276, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "kmod-kvdo", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20117 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14277, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "duktape", ++"repository": "rhel10-BaseOS" ++} ++], ++"set_id": 20118 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14278, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "pinfo", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20119 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14279, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "pinfo", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20120 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 5, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14280, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "util-linux", ++"repository": "rhel9-BaseOS" ++}, ++{ ++"modulestreams": [ ++null ++], ++"name": "util-linux-user", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20121 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "util-linux", ++"repository": "rhel10-BaseOS" ++} ++], ++"set_id": 20122 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14281, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-glib-devel", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20123 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 2, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 3, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14282, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-autoipd", ++"repository": "rhel8-BaseOS" ++} ++], ++"set_id": 20124 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14283, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-autoipd", ++"repository": "rhel8-BaseOS" ++} ++], ++"set_id": 20125 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 9, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14284, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-gobject", ++"repository": "rhel8-BaseOS" ++} ++], ++"set_id": 20126 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14285, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-gobject", ++"repository": "rhel8-BaseOS" ++} ++], ++"set_id": 20127 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 9, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14286, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-avahi", ++"repository": "rhel8-BaseOS" ++} ++], ++"set_id": 20128 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14287, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-avahi", ++"repository": "rhel8-BaseOS" ++} ++], ++"set_id": 20129 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 9, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14288, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-glib-devel", ++"repository": "rhel8-CRB" ++} ++], ++"set_id": 20130 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14289, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-gobject-devel", ++"repository": "rhel8-CRB" ++} ++], ++"set_id": 20131 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14290, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-ui", ++"repository": "rhel8-CRB" ++} ++], ++"set_id": 20132 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14291, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-ui-devel", ++"repository": "rhel8-CRB" ++} ++], ++"set_id": 20133 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14292, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-tools", ++"repository": "rhel8-AppStream" ++} ++], ++"set_id": 20134 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14293, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-tools", ++"repository": "rhel8-AppStream" ++} ++], ++"set_id": 20135 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 9, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14294, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-ui-gtk3", ++"repository": "rhel8-AppStream" ++} ++], ++"set_id": 20136 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14295, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "avahi-ui-gtk3", ++"repository": "rhel8-AppStream" ++} ++], ++"set_id": 20137 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 9, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14296, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "zenity", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20138 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 7, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14297, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "python39-devel", ++"stream": "3.9" ++} ++], ++"name": "python39-pybind11", ++"repository": "rhel8-AppStream" ++} ++], ++"set_id": 20139 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": { ++"name": "python39-devel", ++"stream": "3.9" ++}, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "python3-pybind11", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20140 ++}, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 7, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14298, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "python39-devel", ++"stream": "3.9" ++} ++], ++"name": "python39-pybind11-devel", ++"repository": "rhel8-AppStream" ++} ++], ++"set_id": 20141 ++}, ++"initial_release": { ++"major_version": 8, ++"minor_version": 10, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": { ++"name": "python39-devel", ++"stream": "3.9" ++}, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "pybind11-devel", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20142 ++}, ++"release": { ++"major_version": 9, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14301, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "suitesparse", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20145 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14302, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "suitesparse", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20146 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14303, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "suitesparse-devel", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20147 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14304, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "ongres-stringprep", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20148 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14305, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "aspnetcore-runtime-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20149 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14306, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "aspnetcore-targeting-pack-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20150 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14307, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "aspnetcore-targeting-pack-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20151 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14308, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-apphost-pack-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20152 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14309, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-apphost-pack-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20153 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14310, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-hostfxr-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20154 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14311, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-hostfxr-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20155 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14312, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-runtime-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20156 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14313, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-runtime-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20157 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14314, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-sdk-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20158 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14315, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-sdk-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20159 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14316, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-sdk-6.0-source-built-artifacts", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20160 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14317, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-targeting-pack-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20161 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14318, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-targeting-pack-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20162 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14319, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-templates-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20163 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"s390x", ++"x86_64" ++], ++"id": 14320, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-templates-6.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20164 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14321, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "aspnetcore-runtime-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20165 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14322, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "aspnetcore-runtime-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20166 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14323, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "aspnetcore-targeting-pack-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20167 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14324, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "aspnetcore-targeting-pack-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20168 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14325, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-apphost-pack-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20169 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14326, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-apphost-pack-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20170 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14327, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-hostfxr-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20171 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14328, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-hostfxr-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20172 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14329, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-runtime-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20173 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14330, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-runtime-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20174 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14331, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-sdk-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20175 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14332, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-sdk-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20176 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14333, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-targeting-pack-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20177 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14334, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-targeting-pack-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20178 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14335, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-templates-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20179 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14336, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-templates-7.0", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20180 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14337, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "dotnet-sdk-7.0-source-built-artifacts", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20181 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 0, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14338, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libtree-sitter", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20182 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14339, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libsigsegv", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20241 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14341, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libsigsegv-devel", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20242 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"x86_64" ++], ++"id": 14342, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libsmbios", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20186 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"x86_64" ++], ++"id": 14343, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libsmbios", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20187 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 7, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14344, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "emacs-nox", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20265 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "emacs-nw", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20266 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14345, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "nodejs", ++"stream": "18" ++} ++], ++"name": "nodejs", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20190 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 6, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14346, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++{ ++"name": "nodejs", ++"stream": "20" ++} ++], ++"name": "nodejs", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20191 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": { ++"name": "nodejs", ++"stream": "20" ++}, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "nodejs", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20192 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14347, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "atlas", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20193 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14348, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "atlas", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20194 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14349, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "atlas-devel", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20195 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14350, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "atlas-devel", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20196 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"s390x" ++], ++"id": 14351, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "atlas-z14", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20197 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"s390x" ++], ++"id": 14352, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "atlas-z14", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20198 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"s390x" ++], ++"id": 14353, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "atlas-z15", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20199 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"s390x" ++], ++"id": 14354, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "atlas-z15", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20200 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14355, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libqhull", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20201 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14356, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libqhull_p", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20202 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14357, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "libqhull_r", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20203 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14358, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "qhull-devel", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20204 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14359, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "iputils-ninfod", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20205 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14360, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "iputils-ninfod", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20206 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14361, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "efs-utils", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20207 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14362, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "efs-utils", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20208 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14363, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gcc-toolset-12-gdb", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20209 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gdb", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20210 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 3, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14364, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gcc-toolset-13-gdb", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20211 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gdb", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20212 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14365, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "containers-common-extra", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20213 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14366, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "containers-common-extra", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20214 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14367, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "gvisor-tap-vsock-gvforwarder", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20215 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14368, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "containernetworking-plugins", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20216 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14369, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "containernetworking-plugins", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20217 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14370, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "runc", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20218 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14371, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "runc", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20219 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 6, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14372, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "catatonit", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20220 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "catatonit", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20221 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14373, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "podman-plugins", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20222 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 2, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14374, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "podman-plugins", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20223 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 5, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14375, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "rsyslog", ++"repository": "rhel9-AppStream" ++}, ++{ ++"modulestreams": [ ++null ++], ++"name": "rsyslog-logrotate", ++"repository": "rhel9-AppStream" ++} ++], ++"set_id": 20224 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "rsyslog", ++"repository": "rhel10-AppStream" ++} ++], ++"set_id": 20225 ++}, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14376, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "liblockfile", ++"repository": "rhel9-BaseOS" ++} ++], ++"set_id": 20226 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14377, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "nscd", +-"repository": "rhel9-BaseOS" ++"name": "liblockfile-devel", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 19968 ++"set_id": 20227 + }, + "initial_release": { + "major_version": 9, +@@ -510941,36 +519046,36 @@ null + } + }, + { +-"action": 2, ++"action": 0, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14150, ++"id": 14378, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "nscd", +-"repository": "rhel9-BaseOS" ++"name": "blas64", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 19969 ++"set_id": 20228 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 4, ++"minor_version": 2, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { + "major_version": 9, +-"minor_version": 5, ++"minor_version": 3, + "os_name": "RHEL" + } + }, +@@ -510982,68 +519087,67 @@ null + "s390x", + "x86_64" + ], +-"id": 14151, ++"id": 14379, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "tbb-bind", +-"repository": "rhel10-AppStream" ++"name": "lapack64", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 19970 ++"set_id": 20229 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 5, ++"minor_version": 2, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 10, +-"minor_version": 0, ++"major_version": 9, ++"minor_version": 3, + "os_name": "RHEL" + } + }, + { +-"action": 5, ++"action": 6, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14152, ++"id": 14380, + "in_packageset": { + "package": [ + { + "modulestreams": [ +-null +-], +-"name": "flex", +-"repository": "rhel9-AppStream" +-}, + { +-"modulestreams": [ +-null ++"name": "python36", ++"stream": "3.6" ++} + ], +-"name": "flex-doc", +-"repository": "rhel9-AppStream" ++"name": "python3-scipy", ++"repository": "rhel8-AppStream" + } + ], +-"set_id": 19971 ++"set_id": 20232 + }, + "initial_release": { +-"major_version": 9, +-"minor_version": 5, ++"major_version": 8, ++"minor_version": 10, + "os_name": "RHEL" + }, + "modulestream_maps": [ + { +-"in_modulestream": null, ++"in_modulestream": { ++"name": "python36", ++"stream": "3.6" ++}, + "out_modulestream": null + } + ], +@@ -511053,38 +519157,38 @@ null + "modulestreams": [ + null + ], +-"name": "flex", +-"repository": "rhel10-AppStream" ++"name": "python3-scipy", ++"repository": "rhel9-AppStream" + } + ], +-"set_id": 19972 ++"set_id": 20233 + }, + "release": { +-"major_version": 10, ++"major_version": 9, + "minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 3, ++"action": 7, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14153, ++"id": 14382, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "python3-lark-parser", +-"repository": "rhel9-AppStream" ++"name": "maven-plugin-bundle", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 19973 ++"set_id": 20235 + }, + "initial_release": { + "major_version": 9, +@@ -511103,11 +519207,11 @@ null + "modulestreams": [ + null + ], +-"name": "python3-lark", +-"repository": "rhel10-AppStream" ++"name": "maven-bundle-plugin", ++"repository": "rhel10-CRB" + } + ], +-"set_id": 19974 ++"set_id": 20236 + }, + "release": { + "major_version": 10, +@@ -511123,18 +519227,18 @@ null + "s390x", + "x86_64" + ], +-"id": 14154, ++"id": 14383, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "python3-typing-extensions", ++"name": "ktls-utils", + "repository": "rhel10-BaseOS" + } + ], +-"set_id": 19975 ++"set_id": 20237 + }, + "initial_release": { + "major_version": 9, +@@ -511150,376 +519254,376 @@ null + } + }, + { +-"action": 0, ++"action": 2, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14155, ++"id": 14384, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "llhttp", +-"repository": "rhel10-AppStream" ++"name": "libsigsegv", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19976 ++"set_id": 20239 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 5, ++"minor_version": 4, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 10, +-"minor_version": 0, ++"major_version": 9, ++"minor_version": 5, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14156, ++"id": 14385, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "keylime", +-"repository": "rhel9-AppStream" ++"name": "dhcp-client", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19977 ++"set_id": 20243 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14157, ++"id": 14386, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "keylime-base", +-"repository": "rhel9-AppStream" ++"name": "dhcp-common", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19978 ++"set_id": 20244 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14158, ++"id": 14387, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "keylime-registrar", +-"repository": "rhel9-AppStream" ++"name": "dhcp-relay", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19979 ++"set_id": 20245 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14159, ++"id": 14388, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "keylime-selinux", +-"repository": "rhel9-AppStream" ++"name": "dhcp-server", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19980 ++"set_id": 20246 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14160, ++"id": 14389, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "keylime-tenant", ++"name": "oscap-anaconda-addon", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 19981 ++"set_id": 20249 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14161, ++"id": 14390, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "keylime-verifier", +-"repository": "rhel9-AppStream" ++"name": "maven-plugin-build-helper", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 19982 ++"set_id": 20251 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14162, ++"id": 14391, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "python3-keylime", ++"name": "jakarta-activation2", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 19983 ++"set_id": 20252 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 2, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14163, ++"id": 14392, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "keylime-agent-rust", ++"name": "jakarta-activation2", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 19984 ++"set_id": 20253 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 4, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { + "major_version": 9, +-"minor_version": 1, ++"minor_version": 5, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14164, ++"id": 14393, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "python3-alembic", ++"name": "jaxb-api4", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 19985 ++"set_id": 20254 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 2, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14165, ++"id": 14394, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "python3-greenlet", ++"name": "jaxb-api4", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 19986 ++"set_id": 20255 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 4, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { + "major_version": 9, +-"minor_version": 1, ++"minor_version": 5, + "os_name": "RHEL" + } + }, +@@ -511531,110 +519635,178 @@ null + "s390x", + "x86_64" + ], +-"id": 14166, ++"id": 14395, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "python3-lark-parser", +-"repository": "rhel9-AppStream" ++"name": "lujavrite", ++"repository": "rhel10-CRB" + } + ], +-"set_id": 19987 ++"set_id": 20256 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 0, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 7, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14167, ++"id": 14396, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "python3-sqlalchemy", +-"repository": "rhel9-AppStream" ++"name": "plexus-build-api", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 19988 ++"set_id": 20257 + }, + "initial_release": { + "major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [ ++{ ++"in_modulestream": null, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "plexus-build-api0", ++"repository": "rhel10-CRB" ++} ++], ++"set_id": 20258 ++}, ++"release": { ++"major_version": 10, + "minor_version": 0, + "os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" ++], ++"id": 14398, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "transfig", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20261 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 1, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 6, ++"action": 0, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14168, ++"id": 14399, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "python3-audit", +-"repository": "rhel9-AppStream" ++"name": "plexus-xml", ++"repository": "rhel10-CRB" + } + ], +-"set_id": 19989 ++"set_id": 20262 + }, + "initial_release": { + "major_version": 9, + "minor_version": 5, + "os_name": "RHEL" + }, +-"modulestream_maps": [ +-{ +-"in_modulestream": null, +-"out_modulestream": null ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 10, ++"minor_version": 0, ++"os_name": "RHEL" + } ++}, ++{ ++"action": 1, ++"architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", ++"x86_64" + ], +-"out_packageset": { ++"id": 14400, ++"in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "python3-audit", +-"repository": "rhel10-BaseOS" ++"name": "xbean", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 19990 ++"set_id": 20263 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" + }, ++"modulestream_maps": [], ++"out_packageset": null, + "release": { + "major_version": 10, + "minor_version": 0, +@@ -511645,30 +519817,32 @@ null + "action": 0, + "architectures": [ + "aarch64", ++"ppc64le", ++"s390x", + "x86_64" + ], +-"id": 14169, ++"id": 14401, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "clevis-pin-tpm2", +-"repository": "rhel9-AppStream" ++"name": "xmvn-generator", ++"repository": "rhel10-CRB" + } + ], +-"set_id": 19991 ++"set_id": 20264 + }, + "initial_release": { +-"major_version": 8, +-"minor_version": 10, ++"major_version": 9, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, ++"major_version": 10, + "minor_version": 0, + "os_name": "RHEL" + } +@@ -511681,18 +519855,18 @@ null + "s390x", + "x86_64" + ], +-"id": 14170, ++"id": 14402, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "keylime-tools", ++"name": "aopalliance", + "repository": "rhel10-AppStream" + } + ], +-"set_id": 19992 ++"set_id": 20267 + }, + "initial_release": { + "major_version": 9, +@@ -511715,18 +519889,18 @@ null + "s390x", + "x86_64" + ], +-"id": 14171, ++"id": 14403, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "compat-openssl11", ++"name": "python3-pycurl", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 19993 ++"set_id": 20268 + }, + "initial_release": { + "major_version": 9, +@@ -511749,18 +519923,18 @@ null + "s390x", + "x86_64" + ], +-"id": 14172, ++"id": 14404, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "compat-openssl11", ++"name": "python3-pycurl", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 19994 ++"set_id": 20269 + }, + "initial_release": { + "major_version": 9, +@@ -511783,18 +519957,18 @@ null + "s390x", + "x86_64" + ], +-"id": 14173, ++"id": 14405, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "libxcrypt-compat", +-"repository": "rhel9-AppStream" ++"name": "python-gflags", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19995 ++"set_id": 20270 + }, + "initial_release": { + "major_version": 9, +@@ -511817,18 +519991,18 @@ null + "s390x", + "x86_64" + ], +-"id": 14174, ++"id": 14406, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "libxcrypt-compat", +-"repository": "rhel9-AppStream" ++"name": "python-gflags", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19996 ++"set_id": 20271 + }, + "initial_release": { + "major_version": 9, +@@ -511844,25 +520018,25 @@ null + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14175, ++"id": 14407, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "rpm-sequoia", +-"repository": "rhel10-BaseOS" ++"name": "python-pyroute2", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19997 ++"set_id": 20272 + }, + "initial_release": { + "major_version": 9, +@@ -511878,104 +520052,104 @@ null + } + }, + { +-"action": 0, ++"action": 2, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14176, ++"id": 14408, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "freeradius-mysql", +-"repository": "rhel9-CRB" ++"name": "python-pyroute2", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19998 ++"set_id": 20273 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 1, ++"minor_version": 4, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { + "major_version": 9, +-"minor_version": 2, ++"minor_version": 5, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14177, ++"id": 14409, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "freeradius-perl", +-"repository": "rhel9-CRB" ++"name": "python-botocore", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 19999 ++"set_id": 20274 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 1, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 2, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 2, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14178, ++"id": 14410, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "freeradius-postgresql", +-"repository": "rhel9-CRB" ++"name": "python-botocore", ++"repository": "rhel9-BaseOS" + } + ], +-"set_id": 20000 ++"set_id": 20275 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 1, ++"minor_version": 4, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { + "major_version": 9, +-"minor_version": 2, ++"minor_version": 5, + "os_name": "RHEL" + } + }, +@@ -511987,270 +520161,318 @@ null + "s390x", + "x86_64" + ], +-"id": 14179, ++"id": 14411, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "freeradius-rest", +-"repository": "rhel9-CRB" ++"name": "python3-colorama", ++"repository": "rhel9-AppStream" + } + ], +-"set_id": 20001 ++"set_id": 20276 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 1, ++"minor_version": 4, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { + "major_version": 9, +-"minor_version": 2, ++"minor_version": 5, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 6, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14180, ++"id": 14412, + "in_packageset": { + "package": [ + { + "modulestreams": [ +-null ++{ ++"name": "swig", ++"stream": "4.1" ++} + ], +-"name": "freeradius-sqlite", ++"name": "swig", + "repository": "rhel9-CRB" + } + ], +-"set_id": 20002 ++"set_id": 20277 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 1, ++"minor_version": 5, + "os_name": "RHEL" + }, +-"modulestream_maps": [], +-"out_packageset": null, ++"modulestream_maps": [ ++{ ++"in_modulestream": { ++"name": "swig", ++"stream": "4.1" ++}, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "swig", ++"repository": "rhel10-CRB" ++} ++], ++"set_id": 20278 ++}, + "release": { +-"major_version": 9, +-"minor_version": 2, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 0, ++"action": 6, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14181, ++"id": 14413, + "in_packageset": { + "package": [ + { + "modulestreams": [ +-null ++{ ++"name": "swig", ++"stream": "4.1" ++} + ], +-"name": "freeradius-unixODBC", ++"name": "swig-gdb", + "repository": "rhel9-CRB" + } + ], +-"set_id": 20003 ++"set_id": 20279 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 1, ++"minor_version": 5, + "os_name": "RHEL" + }, +-"modulestream_maps": [], +-"out_packageset": null, ++"modulestream_maps": [ ++{ ++"in_modulestream": { ++"name": "swig", ++"stream": "4.1" ++}, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "swig-gdb", ++"repository": "rhel10-CRB" ++} ++], ++"set_id": 20280 ++}, + "release": { +-"major_version": 9, +-"minor_version": 2, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 1, ++"action": 6, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14182, ++"id": 14414, + "in_packageset": { + "package": [ + { + "modulestreams": [ + { +-"name": "freeradius", +-"stream": "3.0" ++"name": "swig", ++"stream": "4.1" + } + ], +-"name": "freeradius-rest", +-"repository": "rhel8-AppStream" ++"name": "swig-doc", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 20004 ++"set_id": 20281 + }, + "initial_release": { +-"major_version": 8, +-"minor_version": 10, ++"major_version": 9, ++"minor_version": 5, + "os_name": "RHEL" + }, +-"modulestream_maps": [], +-"out_packageset": null, ++"modulestream_maps": [ ++{ ++"in_modulestream": { ++"name": "swig", ++"stream": "4.1" ++}, ++"out_modulestream": null ++} ++], ++"out_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "swig-doc", ++"repository": "rhel10-CRB" ++} ++], ++"set_id": 20282 ++}, + "release": { +-"major_version": 9, ++"major_version": 10, + "minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 2, ++"action": 0, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14183, ++"id": 14415, + "in_packageset": { + "package": [ + { + "modulestreams": [ + { +-"name": "freeradius", +-"stream": "3.0" ++"name": "python39-devel", ++"stream": "3.9" + } + ], +-"name": "freeradius-rest", +-"repository": "rhel8-AppStream" ++"name": "python39-pybind11", ++"repository": "rhel8-CRB" + } + ], +-"set_id": 20005 ++"set_id": 20283 + }, + "initial_release": { + "major_version": 8, +-"minor_version": 9, ++"minor_version": 3, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { + "major_version": 8, +-"minor_version": 10, ++"minor_version": 4, + "os_name": "RHEL" + } + }, + { +-"action": 1, ++"action": 0, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14184, ++"id": 14416, + "in_packageset": { + "package": [ + { + "modulestreams": [ +-null ++{ ++"name": "python39-devel", ++"stream": "3.9" ++} + ], +-"name": "http-parser", +-"repository": "rhel9-AppStream" ++"name": "python39-pybind11-devel", ++"repository": "rhel8-CRB" + } + ], +-"set_id": 20006 ++"set_id": 20284 + }, + "initial_release": { +-"major_version": 9, +-"minor_version": 5, ++"major_version": 8, ++"minor_version": 3, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 10, +-"minor_version": 0, ++"major_version": 8, ++"minor_version": 4, + "os_name": "RHEL" + } + }, + { +-"action": 2, ++"action": 3, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14185, ++"id": 14417, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "http-parser", ++"name": "libasan8", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 20007 ++"set_id": 20285 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 4, +-"os_name": "RHEL" +-}, +-"modulestream_maps": [], +-"out_packageset": null, +-"release": { +-"major_version": 9, + "minor_version": 5, + "os_name": "RHEL" +-} + }, ++"modulestream_maps": [ + { +-"action": 1, +-"architectures": [ +-"aarch64", +-"ppc64le", +-"s390x", +-"x86_64" ++"in_modulestream": null, ++"out_modulestream": null ++} + ], +-"id": 14186, +-"in_packageset": { ++"out_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "http-parser-devel", +-"repository": "rhel9-CRB" ++"name": "libasan", ++"repository": "rhel10-AppStream" + } + ], +-"set_id": 20008 +-}, +-"initial_release": { +-"major_version": 9, +-"minor_version": 5, +-"os_name": "RHEL" ++"set_id": 20286 + }, +-"modulestream_maps": [], +-"out_packageset": null, + "release": { + "major_version": 10, + "minor_version": 0, +@@ -512258,87 +520480,92 @@ null + } + }, + { +-"action": 1, ++"action": 0, + "architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", + "x86_64" + ], +-"id": 14187, ++"id": 14418, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "shim-ia32", +-"repository": "rhel8-BaseOS" ++"name": "ledmon-devel", ++"repository": "rhel10-CRB" + } + ], +-"set_id": 20009 ++"set_id": 20289 + }, + "initial_release": { +-"major_version": 8, +-"minor_version": 10, ++"major_version": 9, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, ++"major_version": 10, + "minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 2, ++"action": 0, + "architectures": [ ++"aarch64", ++"ppc64le", ++"s390x", + "x86_64" + ], +-"id": 14188, ++"id": 14419, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "shim-ia32", +-"repository": "rhel8-BaseOS" ++"name": "ledmon-libs", ++"repository": "rhel10-CRB" + } + ], +-"set_id": 20010 ++"set_id": 20290 + }, + "initial_release": { +-"major_version": 8, +-"minor_version": 9, ++"major_version": 9, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 8, +-"minor_version": 10, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 4, ++"action": 3, + "architectures": [ + "aarch64", + "ppc64le", +-"s390x", + "x86_64" + ], +-"id": 14189, ++"id": 14420, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "libpaper", ++"name": "libtsan2", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 20011 ++"set_id": 20293 + }, + "initial_release": { + "major_version": 9, +@@ -512357,18 +520584,11 @@ null + "modulestreams": [ + null + ], +-"name": "libpaper", +-"repository": "rhel10-AppStream" +-}, +-{ +-"modulestreams": [ +-null +-], +-"name": "paper", ++"name": "libtsan", + "repository": "rhel10-AppStream" + } + ], +-"set_id": 20012 ++"set_id": 20294 + }, + "release": { + "major_version": 10, +@@ -512384,18 +520604,49 @@ null + "s390x", + "x86_64" + ], +-"id": 14190, ++"id": 14421, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "liblsan", +-"repository": "rhel10-AppStream" ++"name": "ocaml-augeas", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 20013 ++"set_id": 20295 ++}, ++"initial_release": { ++"major_version": 9, ++"minor_version": 4, ++"os_name": "RHEL" ++}, ++"modulestream_maps": [], ++"out_packageset": null, ++"release": { ++"major_version": 9, ++"minor_version": 5, ++"os_name": "RHEL" ++} ++}, ++{ ++"action": 1, ++"architectures": [ ++"x86_64" ++], ++"id": 14422, ++"in_packageset": { ++"package": [ ++{ ++"modulestreams": [ ++null ++], ++"name": "owasp-java-encoder", ++"repository": "rhel9-CRB" ++} ++], ++"set_id": 20296 + }, + "initial_release": { + "major_version": 9, +@@ -512411,104 +520662,98 @@ null + } + }, + { +-"action": 2, ++"action": 1, + "architectures": [ +-"aarch64", +-"ppc64le", +-"s390x", + "x86_64" + ], +-"id": 14191, ++"id": 14423, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "tigervnc", +-"repository": "rhel9-AppStream" ++"name": "jmc-core", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 20014 ++"set_id": 20297 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 3, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 4, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 2, ++"action": 1, + "architectures": [ +-"aarch64", +-"ppc64le", +-"s390x", + "x86_64" + ], +-"id": 14192, ++"id": 14424, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "tigervnc-icons", +-"repository": "rhel9-AppStream" ++"name": "jmc", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 20015 ++"set_id": 20298 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 3, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 4, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 2, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14193, ++"id": 14425, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "tigervnc-license", ++"name": "libiscsi", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 20016 ++"set_id": 20299 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 3, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 4, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, +@@ -512520,131 +520765,125 @@ null + "s390x", + "x86_64" + ], +-"id": 14194, ++"id": 14426, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "tigervnc-selinux", ++"name": "libiscsi", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 20017 ++"set_id": 20300 + }, + "initial_release": { +-"major_version": 9, +-"minor_version": 3, ++"major_version": 8, ++"minor_version": 10, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { + "major_version": 9, +-"minor_version": 4, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 2, ++"action": 1, + "architectures": [ + "aarch64", + "ppc64le", + "s390x", + "x86_64" + ], +-"id": 14195, ++"id": 14427, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "tigervnc-server", +-"repository": "rhel9-AppStream" ++"name": "python-sphinx-copybutton", ++"repository": "rhel9-CRB" + } + ], +-"set_id": 20018 ++"set_id": 20301 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 3, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 4, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { +-"action": 2, ++"action": 1, + "architectures": [ +-"aarch64", +-"ppc64le", +-"s390x", + "x86_64" + ], +-"id": 14196, ++"id": 14428, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "tigervnc-server-minimal", ++"name": "sgabios", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 20019 ++"set_id": 20302 + }, + "initial_release": { + "major_version": 9, +-"minor_version": 3, ++"minor_version": 5, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { +-"major_version": 9, +-"minor_version": 4, ++"major_version": 10, ++"minor_version": 0, + "os_name": "RHEL" + } + }, + { + "action": 2, + "architectures": [ +-"aarch64", +-"ppc64le", +-"s390x", + "x86_64" + ], +-"id": 14197, ++"id": 14429, + "in_packageset": { + "package": [ + { + "modulestreams": [ + null + ], +-"name": "tigervnc-server-module", ++"name": "sgabios", + "repository": "rhel9-AppStream" + } + ], +-"set_id": 20020 ++"set_id": 20303 + }, + "initial_release": { +-"major_version": 9, +-"minor_version": 3, ++"major_version": 8, ++"minor_version": 10, + "os_name": "RHEL" + }, + "modulestream_maps": [], + "out_packageset": null, + "release": { + "major_version": 9, +-"minor_version": 4, ++"minor_version": 0, + "os_name": "RHEL" + } + } +-- +2.42.0 + diff --git a/0082-IPU-9-10-Specify-default-PESIDS-for-el10.patch b/0082-IPU-9-10-Specify-default-PESIDS-for-el10.patch new file mode 100644 index 0000000..0d09686 --- /dev/null +++ b/0082-IPU-9-10-Specify-default-PESIDS-for-el10.patch @@ -0,0 +1,56 @@ +From 37388072ea221d9dd9dabc5504140c9a1caeed82 Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Fri, 19 Apr 2024 15:31:26 +0200 +Subject: [PATCH 82/92] IPU 9 -> 10: Specify default PESIDS for el10 + +--- + .../peseventsscanner/libraries/peseventsscanner_repomap.py | 3 ++- + .../repositoriesblacklist/libraries/repositoriesblacklist.py | 3 ++- + .../setuptargetrepos/libraries/setuptargetrepos_repomap.py | 3 ++- + 3 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner_repomap.py b/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner_repomap.py +index 64e1346b..c2976ddf 100644 +--- a/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner_repomap.py ++++ b/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner_repomap.py +@@ -5,7 +5,8 @@ from leapp.libraries.stdlib import api + DEFAULT_PESID = { + '7': 'rhel7-base', + '8': 'rhel8-BaseOS', +- '9': 'rhel9-BaseOS' ++ '9': 'rhel9-BaseOS', ++ '10': 'rhel10-BaseOS' + } + + +diff --git a/repos/system_upgrade/common/actors/repositoriesblacklist/libraries/repositoriesblacklist.py b/repos/system_upgrade/common/actors/repositoriesblacklist/libraries/repositoriesblacklist.py +index b5275610..e22fbee0 100644 +--- a/repos/system_upgrade/common/actors/repositoriesblacklist/libraries/repositoriesblacklist.py ++++ b/repos/system_upgrade/common/actors/repositoriesblacklist/libraries/repositoriesblacklist.py +@@ -8,7 +8,8 @@ from leapp.models import CustomTargetRepository, RepositoriesBlacklisted, Reposi + UNSUPPORTED_PESIDS = { + "7": "rhel7-optional", + "8": "rhel8-CRB", +- "9": "rhel9-CRB" ++ "9": "rhel9-CRB", ++ "10": "rhel10-CRB" + } + + +diff --git a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos_repomap.py b/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos_repomap.py +index 64e1346b..c2976ddf 100644 +--- a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos_repomap.py ++++ b/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos_repomap.py +@@ -5,7 +5,8 @@ from leapp.libraries.stdlib import api + DEFAULT_PESID = { + '7': 'rhel7-base', + '8': 'rhel8-BaseOS', +- '9': 'rhel9-BaseOS' ++ '9': 'rhel9-BaseOS', ++ '10': 'rhel10-BaseOS' + } + + +-- +2.42.0 + diff --git a/0083-Skip-directory-hash-files.patch b/0083-Skip-directory-hash-files.patch new file mode 100644 index 0000000..f6b0949 --- /dev/null +++ b/0083-Skip-directory-hash-files.patch @@ -0,0 +1,29 @@ +From 60f500e59bb92fa80a032f663ee889624fa4a95d Mon Sep 17 00:00:00 2001 +From: Michal Reznik +Date: Thu, 6 Jun 2024 18:17:29 +0200 +Subject: [PATCH 83/92] Skip "directory-hash" files + +They are not owned by any package and can dynamically grow to +a huge amount of files causing hitting open files limit +--- + .../actors/targetuserspacecreator/libraries/userspacegen.py | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py +index 4a61ccb4..7d9c4d64 100644 +--- a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py ++++ b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py +@@ -313,6 +313,10 @@ def _get_files_owned_by_rpms(context, dirpath, pkgs=None, recursive=False): + for root, _, files in os.walk(searchdir): + for filename in files: + relpath = os.path.relpath(os.path.join(root, filename), searchdir) ++ # "directory-hash" files are not owned by any package and can dynamically ++ # grow to a huge amount of files causing hitting open files limit ++ if 'directory-hash' in relpath: ++ continue + file_list.append(relpath) + else: + file_list = os.listdir(searchdir) +-- +2.42.0 + diff --git a/0084-IPU-9-10-Migrate-rebuild-RPM-DB.patch b/0084-IPU-9-10-Migrate-rebuild-RPM-DB.patch new file mode 100644 index 0000000..8f6dea5 --- /dev/null +++ b/0084-IPU-9-10-Migrate-rebuild-RPM-DB.patch @@ -0,0 +1,120 @@ +From 10bda0186b680b56fc6b32ac8fcd099c37f4189c Mon Sep 17 00:00:00 2001 +From: Michal Reznik +Date: Sat, 20 Apr 2024 10:46:43 +0200 +Subject: [PATCH 84/92] IPU 9 -> 10: Migrate & rebuild RPM DB + +The RPM DB has been moved from /var/lib/rpm to /usr/lib/sysimage/rpm +in RHEL 10. Apply the change and create symlink in the original +path to the new one as expected. + +Also rebuild the RPM DB to ensure it's compatible with the new RPM +version. Previously the RPM DB was being rebuilt during IPU 8 -> 9. +However after discussion with RPM SMEs it has been decided that this +is actually very reasonable to do always. So applying for any upgrade +path but IPU 7 -> 8 (let's do not change this one so much when it's +kind of finished). + +Co-authored-by: Matej Matuska +--- + .../common/libraries/dnfplugin.py | 4 +-- + .../el9toel10/actors/migraterpmdb/actor.py | 30 +++++++++++++++++++ + .../migraterpmdb/tests/test_migraterpmdb.py | 11 +++++++ + repos/system_upgrade/el9toel10/tools/.gitkeep | 0 + .../el9toel10/tools/migraterpmdb | 4 +++ + 5 files changed, 47 insertions(+), 2 deletions(-) + create mode 100644 repos/system_upgrade/el9toel10/actors/migraterpmdb/actor.py + create mode 100644 repos/system_upgrade/el9toel10/actors/migraterpmdb/tests/test_migraterpmdb.py + delete mode 100644 repos/system_upgrade/el9toel10/tools/.gitkeep + create mode 100755 repos/system_upgrade/el9toel10/tools/migraterpmdb + +diff --git a/repos/system_upgrade/common/libraries/dnfplugin.py b/repos/system_upgrade/common/libraries/dnfplugin.py +index d09cb90a..4f0c3a99 100644 +--- a/repos/system_upgrade/common/libraries/dnfplugin.py ++++ b/repos/system_upgrade/common/libraries/dnfplugin.py +@@ -357,7 +357,7 @@ def install_initramdisk_requirements(packages, target_userspace_info, used_repos + mount_binds = ['/:/installroot'] + with _prepare_transaction(used_repos=used_repos, target_userspace_info=target_userspace_info, + binds=mount_binds) as (context, target_repoids, _unused): +- if get_target_major_version() == '9': ++ if int(get_target_major_version()) >= 9: + _rebuild_rpm_db(context) + repos_opt = [['--enablerepo', repo] for repo in target_repoids] + repos_opt = list(itertools.chain(*repos_opt)) +@@ -446,7 +446,7 @@ def perform_transaction_install(target_userspace_info, storage_info, used_repos, + # set like that, however seatbelt is a good thing. + dnfconfig.exclude_leapp_rpms(context, disable_plugins) + +- if get_target_major_version() == '9': ++ if int(get_target_major_version()) >= 9: + _rebuild_rpm_db(context, root='/installroot') + _transaction( + context=context, stage='upgrade', target_repoids=target_repoids, plugin_info=plugin_info, +diff --git a/repos/system_upgrade/el9toel10/actors/migraterpmdb/actor.py b/repos/system_upgrade/el9toel10/actors/migraterpmdb/actor.py +new file mode 100644 +index 00000000..80adbeb3 +--- /dev/null ++++ b/repos/system_upgrade/el9toel10/actors/migraterpmdb/actor.py +@@ -0,0 +1,30 @@ ++from leapp.actors import Actor ++from leapp.models import DNFWorkaround ++from leapp.tags import FactsPhaseTag, IPUWorkflowTag ++ ++ ++class MigrateRPMDB(Actor): ++ """ ++ Register a workaround to migrate RPM DB during the upgrade. ++ ++ The RPM DB has been moved from /var/lib/rpm to /usr/lib/sysimage/rpm ++ in RHEL 10. So register "migraterpmdb" script to handle it during various ++ parts of the upgrade process. The script moves the dir and create symlink ++ /var/lib/rpm -> /usr/lib/sysimage/rpm. ++ ++ Note that we realized we should also rebuild the RPM DB, however this is ++ handled already in common upgrade repository. So deal here just with paths. ++ """ ++ ++ name = 'migrate_rpm_db' ++ consumes = () ++ produces = (DNFWorkaround,) ++ tags = (IPUWorkflowTag, FactsPhaseTag) ++ ++ def process(self): ++ self.produce( ++ DNFWorkaround( ++ display_name="Migrate RPM DB", ++ script_path=self.get_tool_path("migraterpmdb"), ++ ) ++ ) +diff --git a/repos/system_upgrade/el9toel10/actors/migraterpmdb/tests/test_migraterpmdb.py b/repos/system_upgrade/el9toel10/actors/migraterpmdb/tests/test_migraterpmdb.py +new file mode 100644 +index 00000000..c66ad68e +--- /dev/null ++++ b/repos/system_upgrade/el9toel10/actors/migraterpmdb/tests/test_migraterpmdb.py +@@ -0,0 +1,11 @@ ++import os.path ++ ++from leapp.models import DNFWorkaround ++ ++ ++def test_migraterpmdb(current_actor_context): ++ current_actor_context.run() ++ assert len(current_actor_context.consume(DNFWorkaround)) == 1 ++ assert current_actor_context.consume(DNFWorkaround)[0].display_name == 'Migrate RPM DB' ++ assert os.path.basename(current_actor_context.consume(DNFWorkaround)[0].script_path) == 'migraterpmdb' ++ assert os.path.exists(current_actor_context.consume(DNFWorkaround)[0].script_path) +diff --git a/repos/system_upgrade/el9toel10/tools/.gitkeep b/repos/system_upgrade/el9toel10/tools/.gitkeep +deleted file mode 100644 +index e69de29b..00000000 +diff --git a/repos/system_upgrade/el9toel10/tools/migraterpmdb b/repos/system_upgrade/el9toel10/tools/migraterpmdb +new file mode 100755 +index 00000000..16700645 +--- /dev/null ++++ b/repos/system_upgrade/el9toel10/tools/migraterpmdb +@@ -0,0 +1,4 @@ ++#!/usr/bin/bash ++ ++mv /var/lib/rpm /usr/lib/sysimage/rpm ++ln -sfr /usr/lib/sysimage/rpm /var/lib/rpm +-- +2.42.0 + diff --git a/0085-Define-empty-obsoleted-RPM-GPG-keys-for-RHEL-10.patch b/0085-Define-empty-obsoleted-RPM-GPG-keys-for-RHEL-10.patch new file mode 100644 index 0000000..50b868c --- /dev/null +++ b/0085-Define-empty-obsoleted-RPM-GPG-keys-for-RHEL-10.patch @@ -0,0 +1,26 @@ +From ba58aa90fa500fcbf2d1ca362074192324201ff6 Mon Sep 17 00:00:00 2001 +From: Matej Matuska +Date: Thu, 27 Jun 2024 15:42:53 +0200 +Subject: [PATCH 85/92] Define empty obsoleted RPM GPG keys for RHEL 10 + +No keys will be obosoleted, however it's expected to define the list. +--- + .../common/files/distro/rhel/gpg-signatures.json | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/repos/system_upgrade/common/files/distro/rhel/gpg-signatures.json b/repos/system_upgrade/common/files/distro/rhel/gpg-signatures.json +index 0d40e001..8a5471a8 100644 +--- a/repos/system_upgrade/common/files/distro/rhel/gpg-signatures.json ++++ b/repos/system_upgrade/common/files/distro/rhel/gpg-signatures.json +@@ -13,6 +13,7 @@ + "gpg-pubkey-37017186-45761324", + "gpg-pubkey-db42a60e-37ea5438" + ], +- "9": ["gpg-pubkey-d4082792-5b32db75"] ++ "9": ["gpg-pubkey-d4082792-5b32db75"], ++ "10": [] + } + } +-- +2.42.0 + diff --git a/0086-Add-9to10-to-GH-unit-test-action.patch b/0086-Add-9to10-to-GH-unit-test-action.patch new file mode 100644 index 0000000..d5fd0c0 --- /dev/null +++ b/0086-Add-9to10-to-GH-unit-test-action.patch @@ -0,0 +1,66 @@ +From 4778d9646f8ef333422e772c3222aad7f8a0449c Mon Sep 17 00:00:00 2001 +From: Matej Matuska +Date: Thu, 27 Jun 2024 16:18:31 +0200 +Subject: [PATCH 86/92] Add 9to10 to GH unit test action + +--- + .github/workflows/unit-tests.yml | 19 +++++++++++++++---- + utils/container-tests/Containerfile.ubi9 | 4 +++- + 2 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml +index e4b4d173..f73a61e9 100644 +--- a/.github/workflows/unit-tests.yml ++++ b/.github/workflows/unit-tests.yml +@@ -15,18 +15,29 @@ jobs: + fail-fast: false + matrix: + scenarios: ++ # 9to10 ++ - name: Run unit tests for el9toel10 and common repositories on python 3.12 ++ python: python3.12 ++ repos: 'el9toel10,common' ++ container: ubi9 ++ - name: Run unit tests for el9toel10 and common repositories on python 3.9 ++ python: python3.9 ++ repos: 'el9toel10,common' ++ container: ubi9 ++ # 8to9 + - name: Run unit tests for el8toel9 and common repositories on python 3.9 + python: python3.9 + repos: 'el8toel9,common' ++ container: ubi9 ++ - name: Run unit tests for el8toel9 and common repositories on python 3.6 ++ python: python3.6 ++ repos: 'el8toel9,common' + container: ubi8 ++ # 7to8 + - name: Run unit tests for el7toel8 and common repositories on python 3.6 + python: python3.6 + repos: 'el7toel8,common' + container: ubi8 +- - name: Run unit tests for el8toel9 and common repositories on python 3.6 +- python: python3.6 +- repos: 'el8toel9,common' +- container: ubi8 + - name: Run unit tests for el7toel8 and common repositories on python 2.7 + python: python2.7 + repos: 'el7toel8,common' +diff --git a/utils/container-tests/Containerfile.ubi9 b/utils/container-tests/Containerfile.ubi9 +index 4460c748..1e616a99 100644 +--- a/utils/container-tests/Containerfile.ubi9 ++++ b/utils/container-tests/Containerfile.ubi9 +@@ -3,7 +3,9 @@ FROM registry.access.redhat.com/ubi9/ubi:latest + VOLUME /payload + + RUN dnf update -y && \ +- dnf install python3-virtualenv python3-setuptools python3-pip make git -y ++ dnf install python3-setuptools python3-pip make git -y ++ ++RUN pip install virtualenv + + WORKDIR /payload + ENTRYPOINT make install-deps && make test +-- +2.42.0 + diff --git a/0087-Fix-or-TODO-some-version-specific-actions-in-actors.patch b/0087-Fix-or-TODO-some-version-specific-actions-in-actors.patch new file mode 100644 index 0000000..962128b --- /dev/null +++ b/0087-Fix-or-TODO-some-version-specific-actions-in-actors.patch @@ -0,0 +1,173 @@ +From 117644119f8c48fe5183aa309ad45a8ba9a4bf53 Mon Sep 17 00:00:00 2001 +From: Matej Matuska +Date: Fri, 28 Jun 2024 18:53:07 +0200 +Subject: [PATCH 87/92] Fix or TODO some version specific actions in actors + +--- + .../common/actors/checkfips/actor.py | 5 ++++- + .../checksaphana/libraries/checksaphana.py | 11 +++++++++-- + .../opensshpermitrootlogincheck/actor.py | 5 +++-- + .../libraries/checkopensslconf.py | 9 ++++++--- + .../libraries/repairsystemdsymlinks.py | 19 ++++++------------- + repos/system_upgrade/common/libraries/rhui.py | 1 + + 6 files changed, 29 insertions(+), 21 deletions(-) + +diff --git a/repos/system_upgrade/common/actors/checkfips/actor.py b/repos/system_upgrade/common/actors/checkfips/actor.py +index bd09b1b9..73408655 100644 +--- a/repos/system_upgrade/common/actors/checkfips/actor.py ++++ b/repos/system_upgrade/common/actors/checkfips/actor.py +@@ -41,7 +41,7 @@ class CheckFips(Actor): + reporting.ExternalLink(url=fips_7to8_steps_docs_url, + title='Planning an upgrade from RHEL 7 to RHEL 8') + ]) +- else: ++ elif version.get_target_major_version() == '9': + # FIXME(mhecko): We include these files manually as they are not included automatically when the fips + # module is used due to a bug in dracut. This code should be removed, once the dracut bug is resolved. + # See https://bugzilla.redhat.com/show_bug.cgi?id=2176560 +@@ -53,3 +53,6 @@ class CheckFips(Actor): + ] + self.produce(UpgradeInitramfsTasks(include_files=fips_required_initramfs_files, + include_dracut_modules=[DracutModule(name='fips')])) ++ elif version.get_target_major_version() == '10': ++ # TODO(mmatuska): What to do with FIPS on 9to10? OAMG-11431 ++ pass +diff --git a/repos/system_upgrade/common/actors/checksaphana/libraries/checksaphana.py b/repos/system_upgrade/common/actors/checksaphana/libraries/checksaphana.py +index 7cd83de8..498fb7a8 100644 +--- a/repos/system_upgrade/common/actors/checksaphana/libraries/checksaphana.py ++++ b/repos/system_upgrade/common/actors/checksaphana/libraries/checksaphana.py +@@ -7,7 +7,8 @@ from leapp.models import SapHanaInfo + # Supported architectures for upgrades with SAP HANA to RHEL 'X' + SAP_HANA_SUPPORTER_ARCHS = { + '8': [architecture.ARCH_X86_64], +- '9': [architecture.ARCH_X86_64, architecture.ARCH_PPC64LE] ++ '9': [architecture.ARCH_X86_64, architecture.ARCH_PPC64LE], ++ '10': [architecture.ARCH_X86_64, architecture.ARCH_PPC64LE], + } + + SAP_HANA_MINIMAL_MAJOR_VERSION = 2 +@@ -186,6 +187,8 @@ def version2_check(info): + continue + if version.matches_target_version('> 8.6', '< 9.0') or version.matches_target_version('> 9.0'): + # if a target release is >=8.8 or >=9.2, the SAP HANA and RHEL versions compatibility is not checked ++ # TODO(mmatuska): We don't know whether the check will be skipped on RHEL 10 (9to10) yet, ++ # update the method accoridingly then + _report_skip_check() + return + # if a starget release is 8.6 or 9.0 we still check SAP HANA and RHEL versions compatibility +@@ -221,6 +224,7 @@ def platform_check(): + Supported architectures: + - IPU 7 -> 8: x86_64 + - IPU 8 -> 9: x86_64, ppc64le ++ - IPU 9 -> 10: x86_64, ppc64le + + In case of the upgrade to a RHEL X version that is not supported for the + IPU yet, return False and do not report anything, as the upgrade to +@@ -243,7 +247,10 @@ def platform_check(): + title='How to in-place upgrade SAP environments from RHEL 7 to RHEL 8'), + '9': reporting.ExternalLink( + url='https://red.ht/how-to-in-place-upgrade-sap-environments-from-rhel-8-to-rhel-9', +- title='How to in-place upgrade SAP environments from RHEL 8 to RHEL 9') ++ title='How to in-place upgrade SAP environments from RHEL 8 to RHEL 9'), ++ '10': reporting.ExternalLink( ++ url='https://red.ht/how-to-in-place-upgrade-sap-environments-from-rhel-9-to-rhel-10', ++ title='How to in-place upgrade SAP environments from RHEL 9 to RHEL 10'), + } + + reporting.create_report([ +diff --git a/repos/system_upgrade/common/actors/opensshpermitrootlogincheck/actor.py b/repos/system_upgrade/common/actors/opensshpermitrootlogincheck/actor.py +index 7a49622f..9c1a421c 100644 +--- a/repos/system_upgrade/common/actors/opensshpermitrootlogincheck/actor.py ++++ b/repos/system_upgrade/common/actors/opensshpermitrootlogincheck/actor.py +@@ -50,9 +50,10 @@ class OpenSshPermitRootLoginCheck(Actor): + self.process7to8(config) + elif get_source_major_version() == '8': + self.process8to9(config) ++ elif int(get_source_major_version()) >= 9: ++ pass + else: +- api.current_logger().warning('Unknown source major version: {} (expecting 7 or 8)' +- .format(get_source_major_version())) ++ api.current_logger().warning('Unknown source major version: {}'.format(get_source_major_version())) + + def process7to8(self, config): + # when the config was not modified, we can pass this check and let the +diff --git a/repos/system_upgrade/common/actors/openssl/checkopensslconf/libraries/checkopensslconf.py b/repos/system_upgrade/common/actors/openssl/checkopensslconf/libraries/checkopensslconf.py +index 06a30fa1..53e803b2 100644 +--- a/repos/system_upgrade/common/actors/openssl/checkopensslconf/libraries/checkopensslconf.py ++++ b/repos/system_upgrade/common/actors/openssl/checkopensslconf/libraries/checkopensslconf.py +@@ -5,8 +5,11 @@ from leapp.libraries.stdlib import api + from leapp.models import DistributionSignedRPM, TrackedFilesInfoSource + + DEFAULT_OPENSSL_CONF = '/etc/pki/tls/openssl.cnf' +-URL_8_CRYPTOPOLICIES = 'https://red.ht/rhel-8-system-wide-crypto-policies' +-URL_9_CRYPTOPOLICIES = 'https://red.ht/rhel-9-system-wide-crypto-policies' ++URL_CRYPTOPOLICIES = { ++ '8': 'https://red.ht/rhel-8-system-wide-crypto-policies', ++ '9': 'https://red.ht/rhel-9-system-wide-crypto-policies', ++ '10': 'https://red.ht/rhel-10-system-wide-crypto-policies', # TODO actually make the url ++} + + + def check_ibmca(): +@@ -70,7 +73,7 @@ def check_default_openssl(): + if not _is_openssl_modified(): + return + +- crypto_url = URL_8_CRYPTOPOLICIES if version.get_target_major_version == '8' else URL_9_CRYPTOPOLICIES ++ crypto_url = URL_CRYPTOPOLICIES[version.get_target_major_version()] + + # TODO(pstodulk): Needs in future some rewording, as OpenSSL engines are + # deprecated since "RHEL 8" and people should use OpenSSL providers instead. +diff --git a/repos/system_upgrade/common/actors/systemd/repairsystemdsymlinks/libraries/repairsystemdsymlinks.py b/repos/system_upgrade/common/actors/systemd/repairsystemdsymlinks/libraries/repairsystemdsymlinks.py +index 884b001e..3fcf4aa6 100644 +--- a/repos/system_upgrade/common/actors/systemd/repairsystemdsymlinks/libraries/repairsystemdsymlinks.py ++++ b/repos/system_upgrade/common/actors/systemd/repairsystemdsymlinks/libraries/repairsystemdsymlinks.py +@@ -6,18 +6,11 @@ from leapp.libraries.common.config.version import get_target_major_version + from leapp.libraries.stdlib import api, CalledProcessError, run + from leapp.models import SystemdBrokenSymlinksSource, SystemdBrokenSymlinksTarget, SystemdServicesInfoSource + +-_INSTALLATION_CHANGED_EL8 = ['rngd.service', 'sysstat.service'] +-_INSTALLATION_CHANGED_EL9 = [] +- +- +-def _get_installation_changed_units(): +- version = get_target_major_version() +- if version == '8': +- return _INSTALLATION_CHANGED_EL8 +- if version == '9': +- return _INSTALLATION_CHANGED_EL9 +- +- return [] ++_INSTALLATION_CHANGED = { ++ '8': ['rngd.service', 'sysstat.service'], ++ '9': [], ++ '10': [], ++} + + + def _service_enabled_source(service_info, name): +@@ -49,7 +42,7 @@ def _handle_newly_broken_symlinks(symlinks, service_info): + + + def _handle_bad_symlinks(service_files): +- install_changed_units = _get_installation_changed_units() ++ install_changed_units = _INSTALLATION_CHANGED[get_target_major_version()] + potentially_bad = [s for s in service_files if s.name in install_changed_units] + + for unit_file in potentially_bad: +diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py +index 86f74084..51694ac2 100644 +--- a/repos/system_upgrade/common/libraries/rhui.py ++++ b/repos/system_upgrade/common/libraries/rhui.py +@@ -553,6 +553,7 @@ RHUI_CLOUD_MAP = { + } + + ++# TODO(mmatuska) deprecate or adjust for 9to10? + def get_upg_path(): + """ + Get upgrade path in specific string format +-- +2.42.0 + diff --git a/0088-Replace-deprecated-shutil.rmtree-onerror-kwarg.patch b/0088-Replace-deprecated-shutil.rmtree-onerror-kwarg.patch new file mode 100644 index 0000000..4f17b55 --- /dev/null +++ b/0088-Replace-deprecated-shutil.rmtree-onerror-kwarg.patch @@ -0,0 +1,70 @@ +From 3f7377b3667d9416ebe4769bd25e0b81d4717ff6 Mon Sep 17 00:00:00 2001 +From: Matej Matuska +Date: Thu, 11 Jul 2024 15:31:24 +0200 +Subject: [PATCH 88/92] Replace deprecated shutil.rmtree onerror kwarg + +The `onerror` argument of shutil.rmtree is deprecated and replaced by +`onexc` since Python 3.12. It accepts callback with the same arguments +except for the last one which is now a subclass of `BaseException`. Our +callback `libraries.utils.report_and_ignore_shutil_rmtree_error` is thus +modified accordingly. +--- + .../system_upgrade/common/libraries/overlaygen.py | 8 +++++++- + repos/system_upgrade/common/libraries/utils.py | 15 +++++++++++---- + 2 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/repos/system_upgrade/common/libraries/overlaygen.py b/repos/system_upgrade/common/libraries/overlaygen.py +index 1132cde1..c1ac9ad3 100644 +--- a/repos/system_upgrade/common/libraries/overlaygen.py ++++ b/repos/system_upgrade/common/libraries/overlaygen.py +@@ -1,6 +1,7 @@ + import contextlib + import os + import shutil ++import sys + from collections import namedtuple + + from leapp.exceptions import StopActorExecutionError +@@ -343,7 +344,12 @@ def cleanup_scratch(scratch_dir, mounts_dir): + # NOTE(pstodulk): From time to time, it helps me with some experiments + return + api.current_logger().debug('Recursively removing scratch directory %s.', scratch_dir) +- shutil.rmtree(scratch_dir, onerror=utils.report_and_ignore_shutil_rmtree_error) ++ if sys.version_info >= (3, 12): ++ # NOTE(mmatuska): The pylint suppressions are required because of a bug in pylint: ++ # (https://github.com/pylint-dev/pylint/issues/9622) ++ shutil.rmtree(scratch_dir, onexc=utils.report_and_ignore_shutil_rmtree_error) # noqa: E501; pylint: disable=unexpected-keyword-arg ++ else: ++ shutil.rmtree(scratch_dir, onerror=utils.report_and_ignore_shutil_rmtree_error) # noqa: E501; pylint: disable=deprecated-argument + api.current_logger().debug('Recursively removed scratch directory %s.', scratch_dir) + + +diff --git a/repos/system_upgrade/common/libraries/utils.py b/repos/system_upgrade/common/libraries/utils.py +index 38b9bb1a..b7aa9c74 100644 +--- a/repos/system_upgrade/common/libraries/utils.py ++++ b/repos/system_upgrade/common/libraries/utils.py +@@ -105,10 +105,17 @@ def report_and_ignore_shutil_rmtree_error(func, path, exc_info): + """ + Helper function for shutil.rmtree to only report errors but don't fail. + """ +- api.current_logger().warning( +- 'While trying to remove directories: %s failed at %s with an exception %s message: %s', +- func.__name__, path, exc_info[0].__name__, exc_info[1] +- ) ++ # third parameter has changed in Python 3.12 ++ if sys.version_info >= (3, 12): ++ api.current_logger().warning( ++ 'While trying to remove directories: %s failed at %s with an exception %s message: %s', ++ func.__name__, path, exc_info[0].__name__, exc_info[1] ++ ) ++ else: ++ api.current_logger().warning( ++ 'While trying to remove directories: %s failed at %s with an exception %s message: %s', ++ func.__name__, path, type(exc_info).__name__, str(exc_info) ++ ) + + + def call_with_oserror_handled(cmd): +-- +2.42.0 + diff --git a/0089-UpgradeInitramfsGenerator-drop-distutils-dependency.patch b/0089-UpgradeInitramfsGenerator-drop-distutils-dependency.patch new file mode 100644 index 0000000..8b934f6 --- /dev/null +++ b/0089-UpgradeInitramfsGenerator-drop-distutils-dependency.patch @@ -0,0 +1,91 @@ +From 236483d5478ce845726ee05b7ca3e080105cdb80 Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Mon, 15 Jul 2024 23:01:03 +0200 +Subject: [PATCH 89/92] UpgradeInitramfsGenerator: drop distutils dependency + +Originally the actor used distutils.version.LooseVersion to detect +newest version of installed kernel package inside target userspace +container. But the distutils python module has become deprecated +and we should not use it anymore in Python 3.12+. + +However, we do not expect to see multiple versions of kernel present +inside the target userspace container as the container is created +during the IPU process from scratch (always). Considering the presence +of multiple kernels to be sign of error, which could negatively affect +also additional actions later. + +Updated the solution, raising an error if multiple kernels are detected +inside the container. As we expect one kernel only, no need to compare +versions of particular possible kernel packages. + +Note there are now just these cases when this could happen: + * a third party package is required to be installed inside the + container + * an explicit requirement to install particular version of container + is made by a custom actor +--- + .../libraries/upgradeinitramfsgenerator.py | 37 ++++++++++++------- + 1 file changed, 24 insertions(+), 13 deletions(-) + +diff --git a/repos/system_upgrade/common/actors/initramfs/upgradeinitramfsgenerator/libraries/upgradeinitramfsgenerator.py b/repos/system_upgrade/common/actors/initramfs/upgradeinitramfsgenerator/libraries/upgradeinitramfsgenerator.py +index 5a686a47..04fa061b 100644 +--- a/repos/system_upgrade/common/actors/initramfs/upgradeinitramfsgenerator/libraries/upgradeinitramfsgenerator.py ++++ b/repos/system_upgrade/common/actors/initramfs/upgradeinitramfsgenerator/libraries/upgradeinitramfsgenerator.py +@@ -1,6 +1,5 @@ + import os + import shutil +-from distutils.version import LooseVersion + + from leapp.exceptions import StopActorExecutionError + from leapp.libraries.common import dnfplugin, mounting +@@ -30,23 +29,35 @@ def _get_target_kernel_version(context): + + kernel_version = None + try: +- results = context.call(['rpm', '-qa', 'kernel-core'], split=True) +- +- versions = [ver.replace('kernel-core-', '') for ver in results['stdout']] +- api.current_logger().debug( +- 'Versions detected {versions}.' +- .format(versions=versions)) +- sorted_versions = sorted(versions, key=LooseVersion, reverse=True) +- kernel_version = next(iter(sorted_versions), None) ++ # NOTE: Currently we install/use always kernel-core in the upgrade ++ # initramfs. We do not use currently any different kernel package ++ # in the container. Note this could change in future e.g. on aarch64 ++ # for IPU 9 -> 10. ++ # TODO(pstodulk): Investigate situation on ARM systems. OAMG-11433 ++ results = context.call(['rpm', '-qa', 'kernel-core'], split=True)['stdout'] + except CalledProcessError: + raise StopActorExecutionError( +- 'Cannot get version of the installed kernel.', +- details={'Problem': 'Could not query the currently installed kernel through rmp.'}) ++ 'Cannot get version of the installed kernel inside container.', ++ details={'Problem': 'Could not query the currently installed kernel inside container using rpm.'}) ++ ++ if len(results) > 1: ++ # this is should not happen. It's hypothetic situation, which alone it's ++ # already error. So skipping more sophisticated implementation. ++ # The container is always created during the upgrade and as that we expect ++ # always one-and-only kernel installed. ++ raise StopActorExecutionError( ++ 'Cannot get version of the installed kernel inside container.', ++ details={'Problem': 'Detected unexpectedly multiple kernels inside target userspace container.'} ++ ) ++ ++ # kernel version == version-release from package ++ kernel_version = '-'.join(results[0].rsplit("-", 2)[-2:]) ++ api.current_logger().debug('Detected kernel version inside container: {}.'.format(kernel_version)) + + if not kernel_version: + raise StopActorExecutionError( +- 'Cannot get version of the installed kernel.', +- details={'Problem': 'A rpm query for the available kernels did not produce any results.'}) ++ 'Cannot get version of the installed kernel inside container.', ++ details={'Problem': 'An rpm query for the available kernels did not produce any results.'}) + + return kernel_version + +-- +2.42.0 + diff --git a/0090-Fix-detection-when-a-bootable-partition-in-on-RAID.patch b/0090-Fix-detection-when-a-bootable-partition-in-on-RAID.patch new file mode 100644 index 0000000..1d6c903 --- /dev/null +++ b/0090-Fix-detection-when-a-bootable-partition-in-on-RAID.patch @@ -0,0 +1,82 @@ +From 7cd469bab1e19f206f0f558fd89d9c4a6d9db07d Mon Sep 17 00:00:00 2001 +From: Michael Scherer +Date: Wed, 3 Jul 2024 14:32:12 +0200 +Subject: [PATCH 90/92] Fix detection when a bootable partition in on RAID + +On my server, leapp preupgrade fail with the following error: + + Traceback (most recent call last): + File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap + self.run() + File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run + self._target(*self._args, **self._kwargs) + File "/usr/lib/python2.7/site-packages/leapp/repository/actor_definition.py", line 74, in _do_run + actor_instance.run(*args, **kwargs) + File "/usr/lib/python2.7/site-packages/leapp/actors/__init__.py", line 289, in run + self.process(*args) + File "/usr/share/leapp-repository/repositories/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/actor.py", line 18, in process + scan_layout_lib.scan_grub_device_partition_layout() + File "/usr/share/leapp-repository/repositories/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/libraries/scan_layout.py", line 91, in scan_grub_device_partition_layout + dev_info = get_partition_layout(device) + File "/usr/share/leapp-repository/repositories/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/libraries/scan_layout.py", line 79, in get_partition_layout + part_start = int(part_info[2]) if len(part_info) == len(part_all_attrs) else int(part_info[1]) + ValueError: invalid literal for int() with base 10: '*' + +This is caused by the following line: + + /dev/sda1 * 2048 1026047 512000 fd Linux raid autodetect + +I have my server on EL7 with / using a Linux RAID so len(part_info) != len(part_all_attrs), hence why +it try to convert '*' to int. +--- + .../scangrubdevpartitionlayout/libraries/scan_layout.py | 3 +-- + .../tests/test_scan_partition_layout.py | 5 +++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/repos/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/libraries/scan_layout.py b/repos/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/libraries/scan_layout.py +index f51bcda4..83d02656 100644 +--- a/repos/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/libraries/scan_layout.py ++++ b/repos/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/libraries/scan_layout.py +@@ -64,7 +64,6 @@ def get_partition_layout(device): + if not line.startswith('Device'): + continue + +- part_all_attrs = split_on_space_segments(line) + break + + partitions = [] +@@ -75,7 +74,7 @@ def get_partition_layout(device): + + # If the partition is not bootable, the Boot column might be empty + part_device = part_info[0] +- part_start = int(part_info[2]) if len(part_info) == len(part_all_attrs) else int(part_info[1]) ++ part_start = int(part_info[2]) if part_info[1] == '*' else int(part_info[1]) + partitions.append(PartitionInfo(part_device=part_device, start_offset=part_start*unit)) + + return GRUBDevicePartitionLayout(device=device, partitions=partitions) +diff --git a/repos/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/tests/test_scan_partition_layout.py b/repos/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/tests/test_scan_partition_layout.py +index 54025379..743ca71f 100644 +--- a/repos/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/tests/test_scan_partition_layout.py ++++ b/repos/system_upgrade/el7toel8/actors/scangrubdevpartitionlayout/tests/test_scan_partition_layout.py +@@ -31,7 +31,8 @@ Partition = namedtuple('Partition', ['name', 'start_offset']) + ) + ] + ) +-def test_get_partition_layout(monkeypatch, devices): ++@pytest.mark.parametrize('fs', ('Linux', 'Linux raid autodetect')) ++def test_get_partition_layout(monkeypatch, devices, fs): + device_to_fdisk_output = {} + for device in devices: + fdisk_output = [ +@@ -45,7 +46,7 @@ def test_get_partition_layout(monkeypatch, devices): + ' Device Boot Start End Blocks Id System', + ] + for part in device.partitions: +- part_line = '{0} * {1} 2099199 1048576 83 Linux'.format(part.name, part.start_offset) ++ part_line = '{0} * {1} 2099199 1048576 83 {2}'.format(part.name, part.start_offset, fs) + fdisk_output.append(part_line) + + device_to_fdisk_output[device.name] = fdisk_output +-- +2.42.0 + diff --git a/0091-GPG-check-do-not-raise-an-error-when-TargetUserSpace.patch b/0091-GPG-check-do-not-raise-an-error-when-TargetUserSpace.patch new file mode 100644 index 0000000..6839a91 --- /dev/null +++ b/0091-GPG-check-do-not-raise-an-error-when-TargetUserSpace.patch @@ -0,0 +1,114 @@ +From caff3acea4f74a134a9f2f5714c08c8bf7b596f5 Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Thu, 4 Jul 2024 10:52:43 +0200 +Subject: [PATCH 91/92] GPG check: do not raise an error when + TargetUserSpaceInfo is missing + +Previously, if the upgrade has been inhibited during + TargetTransactionFactsCollectionPhase +usually because we could not create (for whatever reason) the target +userspace container, the actor checking rpm gpg keys failed with +the `Could not check for valid GPG keys` error. This has confused +many users as they couldn't know that this is impacted by the +problem described in an inhibitor that is below this error. + +As it's for sure that the upgrade cannot continue when the target user +space container has not been created (the TargetUserSpaceInfo msg +is missing), we consider it safe to stop the gpg check here silently +just with a warning msg instead of raising the error - as this check +is important only in case we could actually upgrade. + +All other possible raised errors are presereved. + +jira: https://issues.redhat.com/browse/RHEL-30573 + +Signed-off-by: Petr Stodulka +Signed-off-by: Jakub Jelen +--- + .../libraries/missinggpgkey.py | 17 ++++++++++------- + .../tests/component_test_missinggpgkey.py | 9 +++++---- + 2 files changed, 15 insertions(+), 11 deletions(-) + +diff --git a/repos/system_upgrade/common/actors/missinggpgkeysinhibitor/libraries/missinggpgkey.py b/repos/system_upgrade/common/actors/missinggpgkeysinhibitor/libraries/missinggpgkey.py +index 4b93e741..32e4527b 100644 +--- a/repos/system_upgrade/common/actors/missinggpgkeysinhibitor/libraries/missinggpgkey.py ++++ b/repos/system_upgrade/common/actors/missinggpgkeysinhibitor/libraries/missinggpgkey.py +@@ -7,7 +7,7 @@ import tempfile + from six.moves import urllib + + from leapp import reporting +-from leapp.exceptions import StopActorExecutionError ++from leapp.exceptions import StopActorExecution, StopActorExecutionError + from leapp.libraries.common.config.version import get_target_major_version + from leapp.libraries.common.gpg import get_gpg_fp_from_file, get_path_to_gpg_certs, is_nogpgcheck_set + from leapp.libraries.stdlib import api +@@ -61,6 +61,15 @@ def _get_abs_file_path(target_userspace, file_url): + + + def _consume_data(): ++ try: ++ target_userspace = next(api.consume(TargetUserSpaceInfo)) ++ except StopIteration: ++ api.current_logger().warning( ++ 'Missing TargetUserSpaceInfo data. The upgrade cannot continue' ++ ' without this data, so skipping any other actions.' ++ ) ++ raise StopActorExecution() ++ + try: + used_target_repos = next(api.consume(UsedTargetRepositories)).repos + except StopIteration: +@@ -83,12 +92,6 @@ def _consume_data(): + raise StopActorExecutionError( + 'Could not check for valid GPG keys', details={'details': 'No TrustedGpgKeys facts'} + ) +- try: +- target_userspace = next(api.consume(TargetUserSpaceInfo)) +- except StopIteration: +- raise StopActorExecutionError( +- 'Could not check for valid GPG keys', details={'details': 'No TargetUserSpaceInfo facts'} +- ) + + return used_target_repos, target_repos, trusted_gpg_keys, target_userspace + +diff --git a/repos/system_upgrade/common/actors/missinggpgkeysinhibitor/tests/component_test_missinggpgkey.py b/repos/system_upgrade/common/actors/missinggpgkeysinhibitor/tests/component_test_missinggpgkey.py +index 6d3fa0b2..2cb142a0 100644 +--- a/repos/system_upgrade/common/actors/missinggpgkeysinhibitor/tests/component_test_missinggpgkey.py ++++ b/repos/system_upgrade/common/actors/missinggpgkeysinhibitor/tests/component_test_missinggpgkey.py +@@ -2,7 +2,7 @@ import pytest + from six.moves.urllib.error import URLError + + from leapp import reporting +-from leapp.exceptions import StopActorExecutionError ++from leapp.exceptions import StopActorExecution, StopActorExecutionError + from leapp.libraries.actor.missinggpgkey import process + from leapp.libraries.common.gpg import get_pubkeys_from_rpms + from leapp.libraries.common.testutils import create_report_mocked, CurrentActorMocked, logger_mocked, produce_mocked +@@ -191,12 +191,13 @@ def test_perform_missing_facts(monkeypatch, msgs): + monkeypatch.setattr(api, 'current_logger', logger_mocked()) + # TODO: the gpg call should be mocked + +- with pytest.raises(StopActorExecutionError): ++ with pytest.raises(StopActorExecution): + process() + # nothing produced + assert api.produce.called == 0 + # not skipped by --nogpgcheck +- assert not api.current_logger.warnmsg ++ assert len(api.current_logger.warnmsg) == 1 ++ assert "Missing TargetUserSpaceInfo data" in api.current_logger.warnmsg[0] + + + @suppress_deprecation(TMPTargetRepositoriesFacts) +@@ -280,7 +281,7 @@ def test_perform_missing_some_repo_facts(monkeypatch): + monkeypatch.setattr(reporting, 'create_report', create_report_mocked()) + monkeypatch.setattr('leapp.libraries.common.gpg._gpg_show_keys', _gpg_show_keys_mocked) + +- with pytest.raises(StopActorExecutionError): ++ with pytest.raises(StopActorExecution): + process() + assert api.produce.called == 0 + assert reporting.create_report.called == 0 +-- +2.42.0 + diff --git a/0092-OpenSSHConfigScanner-Include-directive-is-supported-.patch b/0092-OpenSSHConfigScanner-Include-directive-is-supported-.patch new file mode 100644 index 0000000..458d9ce --- /dev/null +++ b/0092-OpenSSHConfigScanner-Include-directive-is-supported-.patch @@ -0,0 +1,327 @@ +From 998b774d5f0fddf6b113da8102b64680c0ece43c Mon Sep 17 00:00:00 2001 +From: Jakub Jelen +Date: Thu, 25 Apr 2024 17:16:32 +0200 +Subject: [PATCH 92/92] OpenSSHConfigScanner: Include directive is supported + since RHEL 8.6 + +This issue could cause false positive reports when the user has the +configuration options such as "Subsystem sftp" defined in included file +only. + +Resolves: RHEL-33902 + +Signed-off-by: Jakub Jelen +Co-Authored-By: Michal Hecko + +do not use filesystem during tests +--- + .../libraries/readopensshconfig.py | 61 ++++-- + ..._readopensshconfig_opensshconfigscanner.py | 180 +++++++++++++++++- + 2 files changed, 229 insertions(+), 12 deletions(-) + +diff --git a/repos/system_upgrade/common/actors/opensshconfigscanner/libraries/readopensshconfig.py b/repos/system_upgrade/common/actors/opensshconfigscanner/libraries/readopensshconfig.py +index e6cb9fcc..50e37092 100644 +--- a/repos/system_upgrade/common/actors/opensshconfigscanner/libraries/readopensshconfig.py ++++ b/repos/system_upgrade/common/actors/opensshconfigscanner/libraries/readopensshconfig.py +@@ -1,5 +1,9 @@ + import errno ++import glob ++import os ++import shlex + ++from leapp.exceptions import StopActorExecutionError + from leapp.libraries.common.rpms import check_file_modification + from leapp.libraries.stdlib import api + from leapp.models import OpenSshConfig, OpenSshPermitRootLogin +@@ -12,14 +16,31 @@ def line_empty(line): + return len(line) == 0 or line.startswith('\n') or line.startswith('#') + + +-def parse_config(config): +- """Parse OpenSSH server configuration or the output of sshd test option.""" ++def parse_config(config, base_config=None, current_cfg_depth=0): ++ """ ++ Parse OpenSSH server configuration or the output of sshd test option. + +- # RHEL7 defaults +- ret = OpenSshConfig( +- permit_root_login=[], +- deprecated_directives=[] +- ) ++ :param Optional[OpenSshConfig] base_config: Base configuration that is extended with configuration options from ++ current file. ++ ++ :param int current_cfg_depth: Internal counter for how many includes were already followed. ++ """ ++ ++ if current_cfg_depth > 16: ++ # This should really never happen as it would mean the SSH server won't ++ # start anyway on the old system. ++ error = 'Too many recursive includes while parsing sshd_config' ++ api.current_logger().error(error) ++ return None ++ ++ ret = base_config ++ if ret is None: ++ # RHEL7 defaults ++ ret = OpenSshConfig( ++ permit_root_login=[], ++ deprecated_directives=[] ++ ) ++ # TODO(Jakuje): Do we need different defaults for RHEL8? + + in_match = None + for line in config: +@@ -68,8 +89,26 @@ def parse_config(config): + # here we need to record all remaining items as command and arguments + ret.subsystem_sftp = ' '.join(el[2:]) + ++ elif el[0].lower() == 'include': ++ # recursively parse the given file or files referenced by this option ++ # the option can have several space-separated filenames with glob wildcards ++ for pattern in shlex.split(' '.join(el[1:])): ++ if pattern[0] != '/' and pattern[0] != '~': ++ pattern = os.path.join('/etc/ssh/', pattern) ++ files_matching_include_pattern = glob.glob(pattern) ++ # OpenSSH sorts the files lexicographically ++ files_matching_include_pattern.sort() ++ for included_config_file in files_matching_include_pattern: ++ output = read_sshd_config(included_config_file) ++ if parse_config(output, base_config=ret, current_cfg_depth=current_cfg_depth + 1) is None: ++ raise StopActorExecutionError( ++ 'Failed to parse sshd configuration file', ++ details={'details': 'Too many recursive includes while parsing {}.' ++ .format(included_config_file)} ++ ) ++ + elif el[0].lower() in DEPRECATED_DIRECTIVES: +- # Filter out duplicit occurrences of the same deprecated directive ++ # Filter out duplicate occurrences of the same deprecated directive + if el[0].lower() not in ret.deprecated_directives: + # Use the directive in the form as found in config for user convenience + ret.deprecated_directives.append(el[0]) +@@ -82,10 +121,10 @@ def produce_config(producer, config): + producer(config) + + +-def read_sshd_config(): ++def read_sshd_config(config): + """Read the actual sshd configuration file.""" + try: +- with open(CONFIG, 'r') as fd: ++ with open(config, 'r') as fd: + return fd.readlines() + except IOError as err: + if err.errno != errno.ENOENT: +@@ -98,7 +137,7 @@ def scan_sshd(producer): + """Parse sshd_config configuration file to create OpenSshConfig message.""" + + # direct access to configuration file +- output = read_sshd_config() ++ output = read_sshd_config(CONFIG) + config = parse_config(output) + + # find out whether the file was modified from the one shipped in rpm +diff --git a/repos/system_upgrade/common/actors/opensshconfigscanner/tests/test_readopensshconfig_opensshconfigscanner.py b/repos/system_upgrade/common/actors/opensshconfigscanner/tests/test_readopensshconfig_opensshconfigscanner.py +index 68a9ec47..64c16f7f 100644 +--- a/repos/system_upgrade/common/actors/opensshconfigscanner/tests/test_readopensshconfig_opensshconfigscanner.py ++++ b/repos/system_upgrade/common/actors/opensshconfigscanner/tests/test_readopensshconfig_opensshconfigscanner.py +@@ -1,3 +1,12 @@ ++import glob ++import os ++import shutil ++import tempfile ++ ++import pytest ++ ++from leapp.exceptions import StopActorExecutionError ++from leapp.libraries.actor import readopensshconfig + from leapp.libraries.actor.readopensshconfig import line_empty, parse_config, produce_config + from leapp.models import OpenSshConfig, OpenSshPermitRootLogin + +@@ -143,12 +152,181 @@ def test_parse_config_deprecated(): + def test_parse_config_empty(): + output = parse_config([]) + assert isinstance(output, OpenSshConfig) +- assert isinstance(output, OpenSshConfig) + assert not output.permit_root_login + assert output.use_privilege_separation is None + assert output.protocol is None + + ++def test_parse_config_include(monkeypatch): ++ """ This already require some files to touch """ ++ ++ config_contents = { ++ '/etc/ssh/sshd_config': [ ++ "Include /path/*.conf" ++ ], ++ '/path/my.conf': [ ++ 'Subsystem sftp internal-sftp' ++ ], ++ '/path/another.conf': [ ++ 'permitrootlogin no' ++ ] ++ } ++ ++ primary_config_path = '/etc/ssh/sshd_config' ++ primary_config_contents = config_contents[primary_config_path] ++ ++ def glob_mocked(pattern): ++ assert pattern == '/path/*.conf' ++ return ['/path/my.conf', '/path/another.conf'] ++ ++ def read_config_mocked(path): ++ return config_contents[path] ++ ++ monkeypatch.setattr(glob, 'glob', glob_mocked) ++ monkeypatch.setattr(readopensshconfig, 'read_sshd_config', read_config_mocked) ++ ++ output = parse_config(primary_config_contents) ++ ++ assert isinstance(output, OpenSshConfig) ++ assert len(output.permit_root_login) == 1 ++ assert output.permit_root_login[0].value == 'no' ++ assert output.permit_root_login[0].in_match is None ++ assert output.use_privilege_separation is None ++ assert output.protocol is None ++ assert output.subsystem_sftp == 'internal-sftp' ++ ++ ++def test_parse_config_include_recursive(monkeypatch): ++ """ The recursive include should gracefully fail """ ++ ++ config_contents = { ++ '/etc/ssh/sshd_config': [ ++ "Include /path/*.conf" ++ ], ++ '/path/recursive.conf': [ ++ "Include /path/*.conf" ++ ], ++ } ++ ++ primary_config_path = '/etc/ssh/sshd_config' ++ primary_config_contents = config_contents[primary_config_path] ++ ++ def glob_mocked(pattern): ++ assert pattern == '/path/*.conf' ++ return ['/path/recursive.conf'] ++ ++ def read_config_mocked(path): ++ return config_contents[path] ++ ++ monkeypatch.setattr(glob, 'glob', glob_mocked) ++ monkeypatch.setattr(readopensshconfig, 'read_sshd_config', read_config_mocked) ++ ++ with pytest.raises(StopActorExecutionError) as recursive_error: ++ parse_config(primary_config_contents) ++ assert 'Failed to parse sshd configuration file' in str(recursive_error) ++ ++ ++def test_parse_config_include_relative(monkeypatch): ++ """ When the include argument is relative path, it should point into the /etc/ssh/ """ ++ ++ config_contents = { ++ '/etc/ssh/sshd_config': [ ++ "Include relative/*.conf" ++ ], ++ '/etc/ssh/relative/default.conf': [ ++ 'Match address 192.168.1.42', ++ 'PermitRootLogin yes' ++ ], ++ '/etc/ssh/relative/other.conf': [ ++ 'Match all', ++ 'PermitRootLogin prohibit-password' ++ ], ++ '/etc/ssh/relative/wrong.extension': [ ++ "macs hmac-md5", ++ ], ++ } ++ ++ primary_config_path = '/etc/ssh/sshd_config' ++ primary_config_contents = config_contents[primary_config_path] ++ ++ def glob_mocked(pattern): ++ assert pattern == '/etc/ssh/relative/*.conf' ++ return ['/etc/ssh/relative/other.conf', '/etc/ssh/relative/default.conf'] ++ ++ def read_config_mocked(path): ++ return config_contents[path] ++ ++ monkeypatch.setattr(glob, 'glob', glob_mocked) ++ monkeypatch.setattr(readopensshconfig, 'read_sshd_config', read_config_mocked) ++ ++ output = parse_config(primary_config_contents) ++ ++ assert isinstance(output, OpenSshConfig) ++ assert len(output.permit_root_login) == 2 ++ assert output.permit_root_login[0].value == 'yes' ++ assert output.permit_root_login[0].in_match == ['address', '192.168.1.42'] ++ assert output.permit_root_login[1].value == 'prohibit-password' ++ assert output.permit_root_login[1].in_match == ['all'] ++ assert output.use_privilege_separation is None ++ assert output.ciphers is None ++ assert output.macs is None ++ assert output.protocol is None ++ assert output.subsystem_sftp is None ++ ++ ++def test_parse_config_include_complex(monkeypatch): ++ """ This already require some files to touch """ ++ ++ config_contents = { ++ '/etc/ssh/sshd_config': [ ++ "Include /path/*.conf /other/path/*.conf \"/last/path with spaces/*.conf\" " ++ ], ++ '/path/my.conf': [ ++ 'permitrootlogin prohibit-password' ++ ], ++ '/other/path/another.conf': [ ++ 'ciphers aes128-ctr' ++ ], ++ '/last/path with spaces/filename with spaces.conf': [ ++ 'subsystem sftp other-internal' ++ ] ++ } ++ glob_contents = { ++ '/path/*.conf': [ ++ '/path/my.conf' ++ ], ++ '/other/path/*.conf': [ ++ '/other/path/another.conf' ++ ], ++ '/last/path with spaces/*.conf': [ ++ '/last/path with spaces/filename with spaces.conf' ++ ], ++ } ++ ++ primary_config_path = '/etc/ssh/sshd_config' ++ primary_config_contents = config_contents[primary_config_path] ++ ++ def glob_mocked(pattern): ++ return glob_contents[pattern] ++ ++ def read_config_mocked(path): ++ return config_contents[path] ++ ++ monkeypatch.setattr(glob, 'glob', glob_mocked) ++ monkeypatch.setattr(readopensshconfig, 'read_sshd_config', read_config_mocked) ++ ++ output = parse_config(primary_config_contents) ++ ++ assert isinstance(output, OpenSshConfig) ++ assert len(output.permit_root_login) == 1 ++ assert output.permit_root_login[0].value == 'prohibit-password' ++ assert output.permit_root_login[0].in_match is None ++ assert output.use_privilege_separation is None ++ assert output.ciphers == "aes128-ctr" ++ assert output.protocol is None ++ assert output.subsystem_sftp == 'other-internal' ++ ++ + def test_produce_config(): + output = [] + +-- +2.42.0 + diff --git a/leapp-repository.spec b/leapp-repository.spec index e90c88a..3d3815e 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -42,7 +42,7 @@ py2_byte_compile "%1" "%2"} Name: leapp-repository Version: 0.20.0 -Release: 4%{?dist} +Release: 5%{?dist} Summary: Repositories for leapp License: ASL 2.0 @@ -106,6 +106,50 @@ Patch0047: 0047-fix-some-typos-spotted-by-codespell.patch Patch0048: 0048-BZ-2283067-don-t-remove-Tomcat-during-Satellite-7to8.patch Patch0049: 0049-Add-product-certs-and-target-for-9.5.patch +# CTC2 +Patch0050: 0050-packit-Enable-8.10to9.5-tests.patch +Patch0051: 0051-dnf-plugin-data-sort-intput-lists.patch +Patch0052: 0052-rhui-setups-support-alibaba-cloud.patch +Patch0053: 0053-check_rhui-allow-minor-versions-in-the-RHUI-table.patch +Patch0054: 0054-rhui-google-add-RHEL7-ELS-setup-into-RHUI_SETUPS.patch +Patch0055: 0055-rhui-aws-arm-fix-incorrect-client-names.patch +Patch0056: 0056-rhui-azure-hardcore-client-repoids-changes-for-RHEL8.patch +Patch0057: 0057-fix-rhui-package-collection.patch +Patch0058: 0058-.packit.yaml-update-ENV-variables.patch +Patch0059: 0059-.packit.yaml-adjust-post_install_script-for-RHEL-7.9.patch +Patch0060: 0060-Additional-.packit.yaml-fixes.patch +Patch0061: 0061-Add-PR-review-changes.patch +Patch0062: 0062-rhui-gcp-add-SAP-RHEL-8.10-client-1253.patch +Patch0063: 0063-PR-welcome-msg-update-the-msg-to-cover-additional-Pa.patch +Patch0064: 0064-Add-RHEL-7-for-SAP-ELS-to-the-RHUI-config-1254.patch +Patch0065: 0065-Revert-Add-RHEL-7-for-SAP-ELS-to-the-RHUI-config-125.patch +Patch0066: 0066-codespell-Use-specific-version-instead-of-master.patch +Patch0067: 0067-Demote-Attempted-to-both-enable-and-disable-message-.patch +Patch0068: 0068-Don-t-enable-services-that-will-be-afterwards-disabl.patch +Patch0069: 0069-Use-frozen-branch-for-rhel7-downstream-testing-1263.patch +Patch0070: 0070-load-obsoleted-gpg-keys-from-gpg-signatures.json.patch +Patch0071: 0071-refactor-distributionsignedrpmscanner-to-use-common-.patch +Patch0072: 0072-IPU-9-10-Initial-preparation-upgrade-paths-and-leapp.patch +Patch0073: 0073-Packaging-Introduce-EL-9-builds-for-IPU-9-10.patch +Patch0074: 0074-Add-RHEL9-container-for-building-and-testing.patch +Patch0075: 0075-tests-update-pytest-requirements-to-Py3.6-compat.patch +Patch0076: 0076-IPU-9-10-Add-FAKE-RHEL-10-certs-and-GPG-keys.patch +Patch0077: 0077-Install-util-linux-into-the-target-container.patch +Patch0078: 0078-Fix-LEAPP_IPU_IN_PROGRESS-9to1-9to10.patch +Patch0079: 0079-Add-unit-tests-for-config.version.get_major_version.patch +Patch0080: 0080-Add-artificial-9-10-repomaping-data.patch +Patch0081: 0081-Update-PES-data.patch +Patch0082: 0082-IPU-9-10-Specify-default-PESIDS-for-el10.patch +Patch0083: 0083-Skip-directory-hash-files.patch +Patch0084: 0084-IPU-9-10-Migrate-rebuild-RPM-DB.patch +Patch0085: 0085-Define-empty-obsoleted-RPM-GPG-keys-for-RHEL-10.patch +Patch0086: 0086-Add-9to10-to-GH-unit-test-action.patch +Patch0087: 0087-Fix-or-TODO-some-version-specific-actions-in-actors.patch +Patch0088: 0088-Replace-deprecated-shutil.rmtree-onerror-kwarg.patch +Patch0089: 0089-UpgradeInitramfsGenerator-drop-distutils-dependency.patch +Patch0090: 0090-Fix-detection-when-a-bootable-partition-in-on-RAID.patch +Patch0091: 0091-GPG-check-do-not-raise-an-error-when-TargetUserSpace.patch +Patch0092: 0092-OpenSSHConfigScanner-Include-directive-is-supported-.patch %description %{summary} @@ -306,6 +350,49 @@ Requires: python3-gobject-base %patch0047 -p1 %patch0048 -p1 %patch0049 -p1 +%patch0050 -p1 +%patch0051 -p1 +%patch0052 -p1 +%patch0053 -p1 +%patch0054 -p1 +%patch0055 -p1 +%patch0056 -p1 +%patch0057 -p1 +%patch0058 -p1 +%patch0059 -p1 +%patch0060 -p1 +%patch0061 -p1 +%patch0062 -p1 +%patch0063 -p1 +%patch0064 -p1 +%patch0065 -p1 +%patch0066 -p1 +%patch0067 -p1 +%patch0068 -p1 +%patch0069 -p1 +%patch0070 -p1 +%patch0071 -p1 +%patch0072 -p1 +%patch0073 -p1 +%patch0074 -p1 +%patch0075 -p1 +%patch0076 -p1 +%patch0077 -p1 +%patch0078 -p1 +%patch0079 -p1 +%patch0080 -p1 +%patch0081 -p1 +%patch0082 -p1 +%patch0083 -p1 +%patch0084 -p1 +%patch0085 -p1 +%patch0086 -p1 +%patch0087 -p1 +%patch0088 -p1 +%patch0089 -p1 +%patch0090 -p1 +%patch0091 -p1 +%patch0092 -p1 %build @@ -383,6 +470,18 @@ done; # no files here %changelog +* Wed Jul 24 2024 Toshio Kuratomi - 0.20.0-5 +- Improve set_systemd_services_states logging +- [IPU 7 -> 8] Fix detection of bootable device on RAID +- Fix detection of valid sshd config with internal-sftp subsystem in Leapp +- Handle a false positive GPG check error when TargetUserSpaceInfo is missing +- Fix failing "update-ca-trust" command caused by missing util-linux package +- Improve report when a system is unsupported +- Fix handling of versions in RHUI configuration for ELS and SAP upgrades +- Add missing RHUI GCP config info for RHEL for SAP +- Fix upgrade on aarch64 via RHUI on AWS +- Resolves: RHEL-33902, RHEL-38909, RHEL-30573, RHEL-43978, RHEL-39046, RHEL-39047, RHEL-39049 + * Thu May 30 2024 Petr Stodulka - 0.20.0-4 - Enable new upgrade path RHEL 8.10 -> 9.5 - Minor updates in reports