Pre CTC2 candidate

- Introduce new upgrade path RHEL 8.9 -> 9.3
- Update leapp data files to reflect new changes between systems
- Detect and report use of deprecated Xorg drivers
- Minor improvements of generated reports
- Fix false positive report about invalid symlinks
- Inhibit the upgrade when unsupported x86-64 microarchitecture is detected
- Resolves: rhbz#2215997
This commit is contained in:
Petr Stodulka 2023-06-19 23:53:40 +02:00
parent 65448d3a2a
commit c64266d19b
31 changed files with 9871 additions and 19 deletions

View File

@ -0,0 +1,49 @@
From 096c3a9545c2f98167d38b89d1115d9ae1031c87 Mon Sep 17 00:00:00 2001
From: Michal Reznik <mreznik@redhat.com>
Date: Fri, 25 Mar 2022 18:17:50 +0100
Subject: [PATCH 01/30] Add leapp pkgs rpm verification into the breadcrumbs
---
commands/upgrade/breadcrumbs.py | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/commands/upgrade/breadcrumbs.py b/commands/upgrade/breadcrumbs.py
index 9138965c..bfb91148 100644
--- a/commands/upgrade/breadcrumbs.py
+++ b/commands/upgrade/breadcrumbs.py
@@ -41,6 +41,7 @@ class _BreadCrumbs(object):
self._crumbs = {
'activity': activity,
'packages': self._get_packages(),
+ 'leapp_file_changes': [],
'executed': ' '.join([v if ' ' not in v else '"{}"'.format(v) for v in sys.argv]),
'success': True,
'activity_started': datetime.datetime.utcnow().isoformat() + 'Z',
@@ -86,6 +87,7 @@ class _BreadCrumbs(object):
def save(self):
self._crumbs['run_id'] = os.environ.get('LEAPP_EXECUTION_ID', 'N/A')
+ self._crumbs['leapp_file_changes'].extend(self._verify_leapp_pkgs())
messages = get_messages(('IPUConfig',), self._crumbs['run_id'])
versions = json.loads((messages or [{}])[0].get('message', {}).get(
'data', '{}')).get('version', {'target': 'N/A', 'source': 'N/A'})
@@ -124,6 +126,16 @@ class _BreadCrumbs(object):
for t in [line.strip().split(' ', 1) for line in res['stdout'].split('\n') if line.strip()]]
return []
+ def _verify_leapp_pkgs(self):
+ upg_path = os.environ.get('LEAPP_IPU_IN_PROGRESS').split('to')
+ cmd = ['/bin/bash', '-c', 'rpm -V leapp leapp-upgrade-el{}toel{}'.format(upg_path[0], upg_path[1])]
+ res = _call(cmd, lambda x, y: None, lambda x, y: None)
+ if res.get('exit_code', None) == 1:
+ if res.get('stdout', None):
+ return [{'result': t[0], 'file_name': t[1]}
+ for t in [line.strip().split(' ', 1) for line in res['stdout'].split('\n') if line.strip()]]
+ return []
+
def produces_breadcrumbs(f):
"""
--
2.40.1

View File

@ -0,0 +1,42 @@
From 6aee6d7f3b6628f5161d5bf9795ab53d52fa1819 Mon Sep 17 00:00:00 2001
From: Petr Stodulka <pstodulk@redhat.com>
Date: Fri, 10 Mar 2023 13:34:41 +0100
Subject: [PATCH 02/30] Update codespell ignorelist: couldn,repositor
The new version of codespell contains additional "typos" for the
detection in the dictionary, which produces FP fails in tests
as typos are detected also in cases like:
couldn\'t
repositor{suffix}
etc. For now, we will just update the ignorelist, but in future
it would be ideal to not generate such cases. Doing differences
between singular/plural is not providing big benefit in report.
Escaping is not so problematic I would say, but in case of issues,
we could just switch to longer form - like "could not".
But there is no beenfit to update the existing code now, so let's
focus in future on better texts and keep the existing strings as
they are until they are reworded due to additional wanted changes
(I mean, if there is any additional reason in future to change them).
FYI:
https://github.com/codespell-project/codespell/issues/2786
---
.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 e7532d98..681669ab 100644
--- a/.github/workflows/codespell.yml
+++ b/.github/workflows/codespell.yml
@@ -17,7 +17,7 @@ jobs:
- uses: actions/checkout@v3
- uses: codespell-project/actions-codespell@master
with:
- ignore_words_list: ro,fo
+ ignore_words_list: ro,fo,couldn,repositor
skip: "./repos/system_upgrade/common/actors/storagescanner/tests/files/mounts,\
./repos/system_upgrade/el7toel8/actors/networkmanagerreadconfig/tests/files/nm_cfg_file_error,\
./repos/system_upgrade/common/actors/scancpu/tests/files/lscpu_s390x"
--
2.40.1

View File

@ -0,0 +1,29 @@
From bf3da8ef5007606bcd73b677a4524e30ab4a8dff Mon Sep 17 00:00:00 2001
From: Andrea Waltlova <awaltlov@redhat.com>
Date: Mon, 20 Mar 2023 18:35:49 +0100
Subject: [PATCH 03/30] Fix dead link in checkipaserver actor
---
.../actors/checkipaserver/libraries/checkipaserver.py | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/repos/system_upgrade/common/actors/checkipaserver/libraries/checkipaserver.py b/repos/system_upgrade/common/actors/checkipaserver/libraries/checkipaserver.py
index 41daff15..5ec36d06 100644
--- a/repos/system_upgrade/common/actors/checkipaserver/libraries/checkipaserver.py
+++ b/repos/system_upgrade/common/actors/checkipaserver/libraries/checkipaserver.py
@@ -1,10 +1,8 @@
from leapp import reporting
from leapp.libraries.common.config.version import get_source_major_version
-MIGRATION_GUIDE_7 = (
- "https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux"
- "/8/html/installing_identity_management/migrate-7-to-8_migrating"
- )
+MIGRATION_GUIDE_7 = "https://red.ht/IdM-upgrading-RHEL-7-to-RHEL-8"
+
# TBD: update the doc url when migration guide 8->9 becomes available
MIGRATION_GUIDE_8 = "https://red.ht/IdM-upgrading-RHEL-8-to-RHEL-9"
MIGRATION_GUIDES = {
--
2.40.1

View File

@ -0,0 +1,38 @@
From acf3346dd0c0b952194cf0c3ff6803e857165d1f Mon Sep 17 00:00:00 2001
From: Petr Stodulka <pstodulk@redhat.com>
Date: Fri, 24 Mar 2023 13:56:07 +0100
Subject: [PATCH 04/30] checkhybridimage: Fix the produce of the report
The actor can produce the report, however the report is never
stored / accepted by the leapp framework as the Report has not been
set in the `produces` tuple. Fixing the actor.
Signed-off-by: Petr Stodulka <pstodulk@redhat.com>
---
.../common/actors/cloud/checkhybridimage/actor.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/repos/system_upgrade/common/actors/cloud/checkhybridimage/actor.py b/repos/system_upgrade/common/actors/cloud/checkhybridimage/actor.py
index 47f5fdd8..3cd2d864 100644
--- a/repos/system_upgrade/common/actors/cloud/checkhybridimage/actor.py
+++ b/repos/system_upgrade/common/actors/cloud/checkhybridimage/actor.py
@@ -1,6 +1,7 @@
from leapp.actors import Actor
from leapp.libraries.actor.checkhybridimage import check_hybrid_image
from leapp.models import FirmwareFacts, HybridImage, InstalledRPM
+from leapp.reporting import Report
from leapp.tags import ChecksPhaseTag, IPUWorkflowTag
@@ -16,7 +17,7 @@ class CheckHybridImage(Actor):
name = 'checkhybridimage'
consumes = (InstalledRPM, FirmwareFacts)
- produces = (HybridImage,)
+ produces = (HybridImage, Report)
tags = (ChecksPhaseTag, IPUWorkflowTag)
def process(self):
--
2.40.1

View File

@ -0,0 +1,194 @@
From d0b26dc60f11a59566564540395e11838a53e1b4 Mon Sep 17 00:00:00 2001
From: Rodolfo Olivieri <rolivier@redhat.com>
Date: Tue, 21 Mar 2023 14:07:39 -0300
Subject: [PATCH 05/30] Upgrade packit.yaml config to have integration tests
This commit introduces the execution of leapp-repository integration tests as
a packit job.
Signed-off-by: Rodolfo Olivieri <rolivier@redhat.com>
---
.packit.yaml | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 170 insertions(+)
diff --git a/.packit.yaml b/.packit.yaml
index f1d59ce1..96ed8901 100644
--- a/.packit.yaml
+++ b/.packit.yaml
@@ -84,3 +84,173 @@ jobs:
post-upstream-clone:
# builds from master branch should start with 100 release, to have high priority
- bash -c "sed -i \"s/1%{?dist}/100%{?dist}/g\" packaging/leapp-repository.spec"
+
+- job: tests
+ fmf_url: "https://gitlab.cee.redhat.com/oamg/tmt-plans"
+ fmf_ref: "master"
+ use_internal_tf: True
+ trigger: pull_request
+ targets:
+ epel-7-x86_64:
+ distros: [RHEL-7.9-ZStream]
+ identifier: tests-7.9to8.6
+ tmt_plan: "^(?!.*c2r)(?!.*sap)(?!.*8to9)"
+ tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
+ tf_extra_params:
+ environments:
+ - tmt:
+ context:
+ distro: "rhel-7.9"
+ env:
+ SOURCE_RELEASE: "7.9"
+ TARGET_RELEASE: "8.6"
+
+- job: tests
+ fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
+ fmf_ref: "master"
+ use_internal_tf: True
+ trigger: pull_request
+ targets:
+ epel-7-x86_64:
+ distros: [RHEL-7.9-ZStream]
+ identifier: tests-7.9to8.8
+ tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)(?!.*max_sst)"
+ tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
+ tf_extra_params:
+ environments:
+ - tmt:
+ context:
+ distro: "rhel-7.9"
+ env:
+ SOURCE_RELEASE: "7.9"
+ TARGET_RELEASE: "8.8"
+
+- job: tests
+ fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
+ fmf_ref: "master"
+ use_internal_tf: True
+ trigger: pull_request
+ targets:
+ epel-7-x86_64:
+ distros: [RHEL-7.9-ZStream]
+ identifier: tests-7.9to8.8-sst
+ tmt_plan: "^(?!.*tier[2-3].*)(.*max_sst.*)"
+ tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
+ tf_extra_params:
+ environments:
+ - tmt:
+ context:
+ distro: "rhel-7.9"
+ env:
+ SOURCE_RELEASE: "7.9"
+ TARGET_RELEASE: "8.8"
+
+- job: tests
+ fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
+ fmf_ref: "master"
+ use_internal_tf: True
+ trigger: pull_request
+ targets:
+ epel-7-x86_64:
+ distros: [RHEL-7.9-rhui]
+ identifier: tests-7to8-aws-e2e
+ tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)(.*e2e)"
+ tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys; echo 42; yum-config-manager --enable rhel-7-server-rhui-optional-rpms"
+ tf_extra_params:
+ environments:
+ - tmt:
+ context:
+ distro: "rhel-7.9"
+ env:
+ SOURCE_RELEASE: "7.9"
+ TARGET_RELEASE: "8.6"
+ RHUI: "aws"
+
+- job: tests
+ fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
+ fmf_ref: "master"
+ use_internal_tf: True
+ trigger: pull_request
+ targets:
+ epel-8-x86_64:
+ distros: [RHEL-8.6.0-Nightly]
+ identifier: tests-8.6to9.0
+ tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(?!.*max_sst)"
+ tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
+ tf_extra_params:
+ environments:
+ - tmt:
+ context:
+ distro: "rhel-8.6"
+ env:
+ SOURCE_RELEASE: "8.6"
+ TARGET_RELEASE: "9.0"
+ TARGET_KERNEL: "el9"
+ RHSM_REPOS: "rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms"
+
+- job: tests
+ fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
+ fmf_ref: "master"
+ use_internal_tf: True
+ trigger: pull_request
+ targets:
+ epel-8-x86_64:
+ distros: [RHEL-8.7.0-Nightly]
+ identifier: tests-8.7to9.0
+ tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(?!.*max_sst)"
+ tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
+ tf_extra_params:
+ environments:
+ - tmt:
+ context:
+ distro: "rhel-8.7"
+ env:
+ SOURCE_RELEASE: "8.7"
+ TARGET_RELEASE: "9.0"
+ TARGET_KERNEL: "el9"
+ RHSM_REPOS: "rhel-8-for-x86_64-appstream-rpms,rhel-8-for-x86_64-baseos-rpms"
+
+- job: tests
+ fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
+ fmf_ref: "master"
+ use_internal_tf: True
+ trigger: pull_request
+ targets:
+ epel-8-x86_64:
+ distros: [RHEL-8.6.0-Nightly]
+ identifier: tests-8.6to9.0-sst
+ tmt_plan: "^(?!.*tier[2-3].*)(.*max_sst.*)"
+ tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
+ tf_extra_params:
+ environments:
+ - tmt:
+ context:
+ distro: "rhel-8.6"
+ env:
+ SOURCE_RELEASE: "8.6"
+ TARGET_RELEASE: "9.0"
+ TARGET_KERNEL: "el9"
+ RHSM_REPOS: "rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms"
+
+- job: tests
+ fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
+ fmf_ref: "master"
+ use_internal_tf: True
+ trigger: pull_request
+ targets:
+ epel-8-x86_64:
+ distros: [RHEL-8.6-rhui]
+ identifier: tests-8to9-aws-e2e
+ tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(.*e2e)"
+ tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
+ tf_extra_params:
+ environments:
+ - tmt:
+ context:
+ distro: "rhel-8.6"
+ env:
+ SOURCE_RELEASE: "8.6"
+ TARGET_RELEASE: "9.0"
+ TARGET_KERNEL: "el9"
+ RHSM_REPOS: "rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms"
+ RHUI: "aws"
--
2.40.1

View File

@ -0,0 +1,178 @@
From d0f7e7c5ec10ba5a7baa90e881f050074e3da86c Mon Sep 17 00:00:00 2001
From: Rodolfo Olivieri <rolivier@redhat.com>
Date: Wed, 22 Mar 2023 09:31:18 -0300
Subject: [PATCH 06/30] Update packit config to match the leapp-repositoyr
tests
Signed-off-by: Rodolfo Olivieri <rolivier@redhat.com>
---
.packit.yaml | 101 ++++++++++++++++++++++++++-------------------------
1 file changed, 52 insertions(+), 49 deletions(-)
diff --git a/.packit.yaml b/.packit.yaml
index 96ed8901..0ece84da 100644
--- a/.packit.yaml
+++ b/.packit.yaml
@@ -94,7 +94,7 @@ jobs:
epel-7-x86_64:
distros: [RHEL-7.9-ZStream]
identifier: tests-7.9to8.6
- tmt_plan: "^(?!.*c2r)(?!.*sap)(?!.*8to9)"
+ tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)(?!.*max_sst)"
tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tf_extra_params:
environments:
@@ -104,6 +104,7 @@ jobs:
env:
SOURCE_RELEASE: "7.9"
TARGET_RELEASE: "8.6"
+ LEAPPDATA_BRANCH: "upstream"
- job: tests
fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
@@ -124,26 +125,27 @@ jobs:
env:
SOURCE_RELEASE: "7.9"
TARGET_RELEASE: "8.8"
+ LEAPPDATA_BRANCH: "upstream"
-- job: tests
- fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
- fmf_ref: "master"
- use_internal_tf: True
- trigger: pull_request
- targets:
- epel-7-x86_64:
- distros: [RHEL-7.9-ZStream]
- identifier: tests-7.9to8.8-sst
- tmt_plan: "^(?!.*tier[2-3].*)(.*max_sst.*)"
- tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
- tf_extra_params:
- environments:
- - tmt:
- context:
- distro: "rhel-7.9"
- env:
- SOURCE_RELEASE: "7.9"
- TARGET_RELEASE: "8.8"
+# - job: tests
+# fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
+# fmf_ref: "master"
+# use_internal_tf: True
+# trigger: pull_request
+# targets:
+# epel-7-x86_64:
+# distros: [RHEL-7.9-ZStream]
+# identifier: tests-7.9to8.8-sst
+# tmt_plan: "^(?!.*tier[2-3].*)(.*max_sst.*)"
+# tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
+# tf_extra_params:
+# environments:
+# - tmt:
+# context:
+# distro: "rhel-7.9"
+# env:
+# SOURCE_RELEASE: "7.9"
+# TARGET_RELEASE: "8.8"
- job: tests
fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
@@ -165,6 +167,7 @@ jobs:
SOURCE_RELEASE: "7.9"
TARGET_RELEASE: "8.6"
RHUI: "aws"
+ LEAPPDATA_BRANCH: "upstream"
- job: tests
fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
@@ -185,8 +188,8 @@ jobs:
env:
SOURCE_RELEASE: "8.6"
TARGET_RELEASE: "9.0"
- TARGET_KERNEL: "el9"
RHSM_REPOS: "rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms"
+ LEAPPDATA_BRANCH: "upstream"
- job: tests
fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
@@ -195,42 +198,42 @@ jobs:
trigger: pull_request
targets:
epel-8-x86_64:
- distros: [RHEL-8.7.0-Nightly]
- identifier: tests-8.7to9.0
+ distros: [RHEL-8.8.0-Nightly]
+ identifier: tests-8.8to9.2
tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(?!.*max_sst)"
tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tf_extra_params:
environments:
- tmt:
context:
- distro: "rhel-8.7"
+ distro: "rhel-8.8"
env:
- SOURCE_RELEASE: "8.7"
- TARGET_RELEASE: "9.0"
- TARGET_KERNEL: "el9"
+ SOURCE_RELEASE: "8.8"
+ TARGET_RELEASE: "9.2"
RHSM_REPOS: "rhel-8-for-x86_64-appstream-rpms,rhel-8-for-x86_64-baseos-rpms"
+ LEAPPDATA_BRANCH: "upstream"
-- job: tests
- fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
- fmf_ref: "master"
- use_internal_tf: True
- trigger: pull_request
- targets:
- epel-8-x86_64:
- distros: [RHEL-8.6.0-Nightly]
- identifier: tests-8.6to9.0-sst
- tmt_plan: "^(?!.*tier[2-3].*)(.*max_sst.*)"
- tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
- tf_extra_params:
- environments:
- - tmt:
- context:
- distro: "rhel-8.6"
- env:
- SOURCE_RELEASE: "8.6"
- TARGET_RELEASE: "9.0"
- TARGET_KERNEL: "el9"
- RHSM_REPOS: "rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms"
+# - job: tests
+# fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
+# fmf_ref: "master"
+# use_internal_tf: True
+# trigger: pull_request
+# targets:
+# epel-8-x86_64:
+# distros: [RHEL-8.6.0-Nightly]
+# identifier: tests-8.6to9.0-sst
+# tmt_plan: "^(?!.*tier[2-3].*)(.*max_sst.*)"
+# tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
+# tf_extra_params:
+# environments:
+# - tmt:
+# context:
+# distro: "rhel-8.6"
+# env:
+# SOURCE_RELEASE: "8.6"
+# TARGET_RELEASE: "9.0"
+# RHSM_REPOS: "rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms"
+# LEAPPDATA_BRANCH: "upstream"
- job: tests
fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
@@ -251,6 +254,6 @@ jobs:
env:
SOURCE_RELEASE: "8.6"
TARGET_RELEASE: "9.0"
- TARGET_KERNEL: "el9"
RHSM_REPOS: "rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms"
RHUI: "aws"
+ LEAPPDATA_BRANCH: "upstream"
--
2.40.1

View File

@ -0,0 +1,28 @@
From 9d0eab76ca2ac4d27a5dd014ae1f986338b6c421 Mon Sep 17 00:00:00 2001
From: Rodolfo Olivieri <rolivier@redhat.com>
Date: Thu, 23 Mar 2023 11:56:51 -0300
Subject: [PATCH 07/30] Add new environment variable to 8.8to9.2
Signed-off-by: Rodolfo Olivieri <rolivier@redhat.com>
---
.packit.yaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.packit.yaml b/.packit.yaml
index 0ece84da..3c0f7d55 100644
--- a/.packit.yaml
+++ b/.packit.yaml
@@ -210,8 +210,9 @@ jobs:
env:
SOURCE_RELEASE: "8.8"
TARGET_RELEASE: "9.2"
- RHSM_REPOS: "rhel-8-for-x86_64-appstream-rpms,rhel-8-for-x86_64-baseos-rpms"
+ RHSM_REPOS: "rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms"
LEAPPDATA_BRANCH: "upstream"
+ LEAPP_DEVEL_TARGET_RELEASE: "9.2"
# - job: tests
# fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
--
2.40.1

View File

@ -0,0 +1,30 @@
From 5326d06042006f585be4de720dcd9316dda0772e Mon Sep 17 00:00:00 2001
From: mreznik <mreznik@redhat.com>
Date: Tue, 11 Apr 2023 14:52:42 +0200
Subject: [PATCH 08/30] Stop mentioning the "releasever" file removal
Do not mention the "releasever" file removal in order to not confuse
users.
---
.../checketcreleasever/libraries/checketcreleasever.py | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/repos/system_upgrade/common/actors/checketcreleasever/libraries/checketcreleasever.py b/repos/system_upgrade/common/actors/checketcreleasever/libraries/checketcreleasever.py
index c92d7dad..b0eb7918 100644
--- a/repos/system_upgrade/common/actors/checketcreleasever/libraries/checketcreleasever.py
+++ b/repos/system_upgrade/common/actors/checketcreleasever/libraries/checketcreleasever.py
@@ -15,10 +15,7 @@ def handle_etc_releasever():
'file and/or the system is using RHUI infrastructure. In order to avoid issues with repofile URLs '
'(when --release option is not provided) in cases where there is the previous major.minor version value '
'in the configuration, release version will be set to the target release version ({}). This will also '
- 'ensure the system stays on the target version after the upgrade. In order to enable latest minor version '
- 'updates, you can remove "/etc/dnf/vars/releasever" file.'.format(
- target_version
- )
+ 'ensure the system stays on the expected target version after the upgrade'.format(target_version)
),
reporting.Severity(reporting.Severity.INFO),
reporting.Groups([reporting.Groups.UPGRADE_PROCESS]),
--
2.40.1

View File

@ -0,0 +1,32 @@
From dd501739e40837d721dbe2a43a412402555ef46c Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Tue, 14 Mar 2023 12:03:35 +0100
Subject: [PATCH 09/30] Fix trace with impossible LEAPP_DEVEL_TARGET_RELEASE
With this change the (pre)upgrade will correctly handle
impossible target release version, no more ugly trace will
be shown.
OAMG-8651
---
commands/upgrade/breadcrumbs.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/commands/upgrade/breadcrumbs.py b/commands/upgrade/breadcrumbs.py
index bfb91148..61660fb1 100644
--- a/commands/upgrade/breadcrumbs.py
+++ b/commands/upgrade/breadcrumbs.py
@@ -127,6 +127,10 @@ class _BreadCrumbs(object):
return []
def _verify_leapp_pkgs(self):
+ if not os.environ.get('LEAPP_IPU_IN_PROGRESS'):
+ # NOTE(ivasilev) this can happen if LEAPP_DEVEL_TARGET_RELEASE is specified and pointing to an impossible
+ # version
+ return []
upg_path = os.environ.get('LEAPP_IPU_IN_PROGRESS').split('to')
cmd = ['/bin/bash', '-c', 'rpm -V leapp leapp-upgrade-el{}toel{}'.format(upg_path[0], upg_path[1])]
res = _call(cmd, lambda x, y: None, lambda x, y: None)
--
2.40.1

View File

@ -0,0 +1,65 @@
From 035f5a9cfdc74e760cc39a32769296466cb04ff5 Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Thu, 13 Apr 2023 19:50:55 +0200
Subject: [PATCH 10/30] Make copr-build functioning again
After some unknown changes around COPR, the building
command and the used COPR configuration file needs to be
updated.
OAMG-8876
---
.github/workflows/reuse-copr-build.yml | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/reuse-copr-build.yml b/.github/workflows/reuse-copr-build.yml
index eb700df4..093e0c1a 100644
--- a/.github/workflows/reuse-copr-build.yml
+++ b/.github/workflows/reuse-copr-build.yml
@@ -57,18 +57,19 @@ jobs:
env:
COPR_CONFIG: "copr_fedora.conf"
COPR_CHROOT: "epel-7-x86_64,epel-8-x86_64"
+ COPR_REPO: "@oamg/leapp"
run: |
cat << EOF > $COPR_CONFIG
[copr-cli]
login = ${{ secrets.FEDORA_COPR_LOGIN }}
- username = @oamg
+ username = oamgbot
token = ${{ secrets.FEDORA_COPR_TOKEN }}
copr_url = https://copr.fedorainfracloud.org
# expiration date: 2030-07-04
EOF
pip install copr-cli
- PR=${{ steps.pr_nr.outputs.pr_nr }} COPR_CONFIG=$COPR_CONFIG COPR_CHROOT=$COPR_CHROOT make copr_build | tee copr.log
+ PR=${{ steps.pr_nr.outputs.pr_nr }} COPR_CONFIG=$COPR_CONFIG COPR_REPO="$COPR_REPO" COPR_CHROOT=$COPR_CHROOT make copr_build | tee copr.log
COPR_URL=$(grep -Po 'https://copr.fedorainfracloud.org/coprs/build/\d+' copr.log)
echo "::set-output name=copr_url::${COPR_URL}"
@@ -122,18 +123,19 @@ jobs:
env:
COPR_CONFIG: "copr_fedora.conf"
COPR_CHROOT: "epel-7-x86_64,epel-8-x86_64"
+ COPR_REPO: "@oamg/leapp"
run: |
cat << EOF > $COPR_CONFIG
[copr-cli]
login = ${{ secrets.FEDORA_COPR_LOGIN }}
- username = @oamg
+ username = oamgbot
token = ${{ secrets.FEDORA_COPR_TOKEN }}
copr_url = https://copr.fedorainfracloud.org
# expiration date: 2030-07-04
EOF
pip install copr-cli
- PR=${{ steps.leapp_pr.outputs.leapp_pr }} COPR_CONFIG=$COPR_CONFIG COPR_CHROOT=$COPR_CHROOT make copr_build | tee copr.log
+ PR=${{ steps.leapp_pr.outputs.leapp_pr }} COPR_CONFIG=$COPR_CONFIG COPR_REPO="$COPR_REPO" COPR_CHROOT=$COPR_CHROOT make copr_build | tee copr.log
COPR_URL=$(grep -Po 'https://copr.fedorainfracloud.org/coprs/build/\d+' copr.log)
echo "::set-output name=copr_url::${COPR_URL}"
--
2.40.1

View File

@ -0,0 +1,93 @@
From eb438f8be15b99fb4fae2346386e60283903ca20 Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Mon, 17 Apr 2023 12:36:24 +0200
Subject: [PATCH 11/30] Add tag in packit.yaml to enable cost metrics
collection
Now all tft tests run by packit should be marked accordingly
with a sst-upgrades tag.
OAMG-8892
---
.packit.yaml | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/.packit.yaml b/.packit.yaml
index 3c0f7d55..595e94be 100644
--- a/.packit.yaml
+++ b/.packit.yaml
@@ -101,6 +101,11 @@ jobs:
- tmt:
context:
distro: "rhel-7.9"
+ # tag resources as sst_upgrades to enable cost metrics collection
+ - settings:
+ provisioning:
+ tags:
+ BusinessUnit: sst_upgrades
env:
SOURCE_RELEASE: "7.9"
TARGET_RELEASE: "8.6"
@@ -122,6 +127,11 @@ jobs:
- tmt:
context:
distro: "rhel-7.9"
+ # tag resources as sst_upgrades to enable cost metrics collection
+ - settings:
+ provisioning:
+ tags:
+ BusinessUnit: sst_upgrades
env:
SOURCE_RELEASE: "7.9"
TARGET_RELEASE: "8.8"
@@ -163,6 +173,11 @@ jobs:
- tmt:
context:
distro: "rhel-7.9"
+ # tag resources as sst_upgrades to enable cost metrics collection
+ - settings:
+ provisioning:
+ tags:
+ BusinessUnit: sst_upgrades
env:
SOURCE_RELEASE: "7.9"
TARGET_RELEASE: "8.6"
@@ -185,6 +200,11 @@ jobs:
- tmt:
context:
distro: "rhel-8.6"
+ # tag resources as sst_upgrades to enable cost metrics collection
+ - settings:
+ provisioning:
+ tags:
+ BusinessUnit: sst_upgrades
env:
SOURCE_RELEASE: "8.6"
TARGET_RELEASE: "9.0"
@@ -207,6 +227,11 @@ jobs:
- tmt:
context:
distro: "rhel-8.8"
+ # tag resources as sst_upgrades to enable cost metrics collection
+ - settings:
+ provisioning:
+ tags:
+ BusinessUnit: sst_upgrades
env:
SOURCE_RELEASE: "8.8"
TARGET_RELEASE: "9.2"
@@ -252,6 +277,11 @@ jobs:
- tmt:
context:
distro: "rhel-8.6"
+ # tag resources as sst_upgrades to enable cost metrics collection
+ - settings:
+ provisioning:
+ tags:
+ BusinessUnit: sst_upgrades
env:
SOURCE_RELEASE: "8.6"
TARGET_RELEASE: "9.0"
--
2.40.1

View File

@ -0,0 +1,134 @@
From f4edd16317ee188dd0958a293ea51d0afa2f606e Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Mon, 17 Apr 2023 13:33:12 +0200
Subject: [PATCH 12/30] Workaround packit#2010 issue
Looks like tf_post_install_script and environment override does
not play nice together yet, so let's workaround it for now.
OAMG-8892
---
.packit.yaml | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/.packit.yaml b/.packit.yaml
index 595e94be..fd0af7ec 100644
--- a/.packit.yaml
+++ b/.packit.yaml
@@ -95,15 +95,15 @@ jobs:
distros: [RHEL-7.9-ZStream]
identifier: tests-7.9to8.6
tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)(?!.*max_sst)"
- tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tf_extra_params:
environments:
- tmt:
context:
distro: "rhel-7.9"
- # tag resources as sst_upgrades to enable cost metrics collection
- - settings:
+ # tag resources as sst_upgrades to enable cost metrics collection
+ settings:
provisioning:
+ post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tags:
BusinessUnit: sst_upgrades
env:
@@ -121,15 +121,15 @@ jobs:
distros: [RHEL-7.9-ZStream]
identifier: tests-7.9to8.8
tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)(?!.*max_sst)"
- tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tf_extra_params:
environments:
- tmt:
context:
distro: "rhel-7.9"
- # tag resources as sst_upgrades to enable cost metrics collection
- - settings:
+ # tag resources as sst_upgrades to enable cost metrics collection
+ settings:
provisioning:
+ post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tags:
BusinessUnit: sst_upgrades
env:
@@ -167,15 +167,15 @@ jobs:
distros: [RHEL-7.9-rhui]
identifier: tests-7to8-aws-e2e
tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)(.*e2e)"
- tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys; echo 42; yum-config-manager --enable rhel-7-server-rhui-optional-rpms"
tf_extra_params:
environments:
- tmt:
context:
distro: "rhel-7.9"
- # tag resources as sst_upgrades to enable cost metrics collection
- - settings:
+ # tag resources as sst_upgrades to enable cost metrics collection
+ 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"
tags:
BusinessUnit: sst_upgrades
env:
@@ -194,15 +194,15 @@ jobs:
distros: [RHEL-8.6.0-Nightly]
identifier: tests-8.6to9.0
tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(?!.*max_sst)"
- tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tf_extra_params:
environments:
- tmt:
context:
distro: "rhel-8.6"
- # tag resources as sst_upgrades to enable cost metrics collection
- - settings:
+ # tag resources as sst_upgrades to enable cost metrics collection
+ settings:
provisioning:
+ post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tags:
BusinessUnit: sst_upgrades
env:
@@ -221,15 +221,15 @@ jobs:
distros: [RHEL-8.8.0-Nightly]
identifier: tests-8.8to9.2
tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(?!.*max_sst)"
- tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tf_extra_params:
environments:
- tmt:
context:
distro: "rhel-8.8"
- # tag resources as sst_upgrades to enable cost metrics collection
- - settings:
+ # tag resources as sst_upgrades to enable cost metrics collection
+ settings:
provisioning:
+ post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tags:
BusinessUnit: sst_upgrades
env:
@@ -271,15 +271,15 @@ jobs:
distros: [RHEL-8.6-rhui]
identifier: tests-8to9-aws-e2e
tmt_plan: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(.*e2e)"
- tf_post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tf_extra_params:
environments:
- tmt:
context:
distro: "rhel-8.6"
- # tag resources as sst_upgrades to enable cost metrics collection
- - settings:
+ # tag resources as sst_upgrades to enable cost metrics collection
+ settings:
provisioning:
+ post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
tags:
BusinessUnit: sst_upgrades
env:
--
2.40.1

View File

@ -0,0 +1,71 @@
From 0404072439f9c528d569cd23e60b83fb3823b3b5 Mon Sep 17 00:00:00 2001
From: mreznik <mreznik@redhat.com>
Date: Sun, 9 Apr 2023 10:37:31 +0200
Subject: [PATCH 13/30] Improve the "checkgrubcore" report message
No action is needed in case Leapp is able to detect the GRUB2 device
---
.../common/actors/checkgrubcore/actor.py | 16 +++++++++-------
.../checkgrubcore/tests/test_checkgrubcore.py | 2 +-
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/repos/system_upgrade/common/actors/checkgrubcore/actor.py b/repos/system_upgrade/common/actors/checkgrubcore/actor.py
index 37eeeca8..6aa99797 100644
--- a/repos/system_upgrade/common/actors/checkgrubcore/actor.py
+++ b/repos/system_upgrade/common/actors/checkgrubcore/actor.py
@@ -6,8 +6,10 @@ from leapp.models import FirmwareFacts, GrubInfo
from leapp.reporting import create_report, Report
from leapp.tags import ChecksPhaseTag, IPUWorkflowTag
-GRUB_SUMMARY = ('On legacy (BIOS) systems, GRUB core (located in the gap between the MBR and the '
- 'first partition) does not get automatically updated when GRUB is upgraded.')
+GRUB_SUMMARY = ('On legacy (BIOS) systems, GRUB2 core (located in the gap between the MBR and the '
+ 'first partition) cannot be updated during the rpm transaction and Leapp has to initiate '
+ 'the update running "grub2-install" after the transaction. No action is needed before the '
+ 'upgrade. After the upgrade, it is recommended to check the GRUB configuration.')
class CheckGrubCore(Actor):
@@ -33,7 +35,7 @@ class CheckGrubCore(Actor):
if grub_info.orig_device_name:
create_report([
reporting.Title(
- 'GRUB core will be updated during upgrade'
+ 'GRUB2 core will be automatically updated during the upgrade'
),
reporting.Summary(GRUB_SUMMARY),
reporting.Severity(reporting.Severity.HIGH),
@@ -41,13 +43,13 @@ class CheckGrubCore(Actor):
])
else:
create_report([
- reporting.Title('Leapp could not identify where GRUB core is located'),
+ reporting.Title('Leapp could not identify where GRUB2 core is located'),
reporting.Summary(
- 'We assume GRUB core is located on the same device as /boot. Leapp needs to '
- 'update GRUB core as it is not done automatically on legacy (BIOS) systems. '
+ 'We assumed GRUB2 core is located on the same device as /boot, however Leapp could not '
+ 'detect GRUB2 on the device. GRUB2 core needs to be updated maually on legacy (BIOS) systems. '
),
reporting.Severity(reporting.Severity.HIGH),
reporting.Groups([reporting.Groups.BOOT]),
reporting.Remediation(
- hint='Please run "grub2-install <GRUB_DEVICE> command manually after upgrade'),
+ hint='Please run "grub2-install <GRUB_DEVICE> command manually after the upgrade'),
])
diff --git a/repos/system_upgrade/common/actors/checkgrubcore/tests/test_checkgrubcore.py b/repos/system_upgrade/common/actors/checkgrubcore/tests/test_checkgrubcore.py
index 0816963b..fe15b65b 100644
--- a/repos/system_upgrade/common/actors/checkgrubcore/tests/test_checkgrubcore.py
+++ b/repos/system_upgrade/common/actors/checkgrubcore/tests/test_checkgrubcore.py
@@ -5,7 +5,7 @@ from leapp.libraries.common.config import mock_configs
from leapp.models import FirmwareFacts, GrubInfo
from leapp.reporting import Report
-NO_GRUB = 'Leapp could not identify where GRUB core is located'
+NO_GRUB = 'Leapp could not identify where GRUB2 core is located'
def test_actor_update_grub(current_actor_context):
--
2.40.1

View File

@ -0,0 +1,27 @@
From 8ed665ca45c90ddd305ff6a3be341d2eef351a9e Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Tue, 25 Apr 2023 12:18:52 +0200
Subject: [PATCH 14/30] Update pr-welcome-msg with packit tests info
Let's mention the big leap for leapp officially together with
a command to (re-)trigger tests.
---
.github/workflows/pr-welcome-msg.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/pr-welcome-msg.yml b/.github/workflows/pr-welcome-msg.yml
index 5fbf9558..adeed97c 100644
--- a/.github/workflows/pr-welcome-msg.yml
+++ b/.github/workflows/pr-welcome-msg.yml
@@ -24,6 +24,8 @@ jobs:
- **review please** to notify leapp developers of 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 leapp\*master\*. If you need a different version of leapp from PR#42, use `/packit test oamg/leapp#42`
+
To launch regression testing public members of oamg organization can leave the following comment:
- **/rerun** to schedule basic regression tests using this pr build and leapp\*master\* as artifacts
- **/rerun 42** to schedule basic regression tests using this pr build and leapp\*PR42\* as artifacts
--
2.40.1

View File

@ -0,0 +1,38 @@
From e43346659072d2b86df8272949951e12675ee2e3 Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Tue, 25 Apr 2023 12:37:36 +0200
Subject: [PATCH 15/30] Further tune welcome-bot message
- Do not use master, use latest upstream
- Add precise command to request review from oamg-developers
---
.github/workflows/pr-welcome-msg.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/pr-welcome-msg.yml b/.github/workflows/pr-welcome-msg.yml
index adeed97c..7e7ba831 100644
--- a/.github/workflows/pr-welcome-msg.yml
+++ b/.github/workflows/pr-welcome-msg.yml
@@ -21,15 +21,15 @@ 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** to notify leapp developers of review request
+ - **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 leapp\*master\*. If you need a different version of leapp from PR#42, use `/packit test oamg/leapp#42`
+ Packit will automatically schedule regression tests for this PR's build and latest upstream leapp build. If you need a different version of leapp from PR#42, use `/packit test oamg/leapp#42`
To launch regression testing public members of oamg organization can leave the following comment:
- - **/rerun** to schedule basic regression tests using this pr build and leapp\*master\* as artifacts
+ - **/rerun** to schedule basic regression tests using this pr build and latest upstream leapp build as artifacts
- **/rerun 42** to schedule basic regression tests using this pr build and leapp\*PR42\* as artifacts
- - **/rerun-sst** to schedule sst tests using this pr build and leapp\*master\* as artifacts
+ - **/rerun-sst** to schedule sst tests using this pr build and latest upstream leapp build as artifacts
- **/rerun-sst 42** to schedule sst tests using this pr build and leapp\*PR42\* as artifacts
Please [open ticket](https://url.corp.redhat.com/oamg-ci-issue) in case you experience technical problem with the CI. (RH internal only)
--
2.40.1

View File

@ -0,0 +1,24 @@
From ac8b6a1bad62ce5a823b61677788e4a9a6c16e33 Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Tue, 25 Apr 2023 14:37:26 +0200
Subject: [PATCH 16/30] Remove note about leapp-ci build
As leapp packages are built by packit now, this is not used
anymore.
---
.github/workflows/pr-welcome-msg.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/pr-welcome-msg.yml b/.github/workflows/pr-welcome-msg.yml
index 7e7ba831..cec7c778 100644
--- a/.github/workflows/pr-welcome-msg.yml
+++ b/.github/workflows/pr-welcome-msg.yml
@@ -34,4 +34,4 @@ jobs:
Please [open ticket](https://url.corp.redhat.com/oamg-ci-issue) in case you experience technical problem with the CI. (RH internal only)
- **Note:** In case there are problems with tests not being triggered automatically on new PR/commit or pending for a long time, please consider rerunning the CI by commenting **leapp-ci build** (might require several comments). If the problem persists, contact leapp-infra.
+ **Note:** In case there are problems with tests not being triggered automatically on new PR/commit or pending for a long time, please contact leapp-infra.
--
2.40.1

View File

@ -0,0 +1,38 @@
From a600097a8f5ab9f0083a9abb906e0a0b5394176c Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Wed, 8 Mar 2023 12:12:51 +0100
Subject: [PATCH 17/30] Fix false positive non-utf symlinks reported
Because of botched up check for python2 valid utf symlinks were reported
as non-utf ones.
OAMG-8629
---
.../system_upgrade/common/actors/rootscanner/actor.py | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/repos/system_upgrade/common/actors/rootscanner/actor.py b/repos/system_upgrade/common/actors/rootscanner/actor.py
index 515fd7d7..dc02c7a2 100644
--- a/repos/system_upgrade/common/actors/rootscanner/actor.py
+++ b/repos/system_upgrade/common/actors/rootscanner/actor.py
@@ -28,8 +28,16 @@ class RootScanner(Actor):
return subdir_cls(name=name)
for subdir in os.listdir('/'):
- # Note(ivasilev) non-utf encoded string will appear as byte strings
+ # Note(ivasilev) in py3 env non-utf encoded string will appear as byte strings
+ # However in py2 env subdir will be always of str type, so verification if this is a valid utf-8 string
+ # should be done differently than formerly suggested plain six.binary_type check
+ decoded = True
if isinstance(subdir, six.binary_type):
+ try:
+ subdir.decode('utf-8')
+ except (AttributeError, UnicodeDecodeError):
+ decoded = False
+ if not decoded:
invalid_subdirs.append(_create_a_subdir(InvalidRootSubdirectory, subdir, os.path.join(b'/', subdir)))
else:
subdirs.append(_create_a_subdir(RootSubdirectory, subdir, os.path.join('/', subdir)))
--
2.40.1

View File

@ -0,0 +1,153 @@
From 56b468355e460b9389a97982bd9a04097ce8f96b Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Thu, 23 Mar 2023 15:35:08 +0100
Subject: [PATCH 18/30] Refactor rootscanner to use library
Also introduce tests for the nonutf symlinks
---
commands/upgrade/breadcrumbs.py | 2 --
.../common/actors/rootscanner/actor.py | 32 ++---------------
.../rootscanner/libraries/rootscanner.py | 34 +++++++++++++++++++
.../rootscanner/tests/test_rootscanner.py | 31 +++++++++++++++++
4 files changed, 68 insertions(+), 31 deletions(-)
create mode 100644 repos/system_upgrade/common/actors/rootscanner/libraries/rootscanner.py
create mode 100644 repos/system_upgrade/common/actors/rootscanner/tests/test_rootscanner.py
diff --git a/commands/upgrade/breadcrumbs.py b/commands/upgrade/breadcrumbs.py
index 61660fb1..16903ee0 100644
--- a/commands/upgrade/breadcrumbs.py
+++ b/commands/upgrade/breadcrumbs.py
@@ -128,8 +128,6 @@ class _BreadCrumbs(object):
def _verify_leapp_pkgs(self):
if not os.environ.get('LEAPP_IPU_IN_PROGRESS'):
- # NOTE(ivasilev) this can happen if LEAPP_DEVEL_TARGET_RELEASE is specified and pointing to an impossible
- # version
return []
upg_path = os.environ.get('LEAPP_IPU_IN_PROGRESS').split('to')
cmd = ['/bin/bash', '-c', 'rpm -V leapp leapp-upgrade-el{}toel{}'.format(upg_path[0], upg_path[1])]
diff --git a/repos/system_upgrade/common/actors/rootscanner/actor.py b/repos/system_upgrade/common/actors/rootscanner/actor.py
index dc02c7a2..a3fbb55d 100644
--- a/repos/system_upgrade/common/actors/rootscanner/actor.py
+++ b/repos/system_upgrade/common/actors/rootscanner/actor.py
@@ -1,9 +1,6 @@
-import os
-
-import six
-
from leapp.actors import Actor
-from leapp.models import InvalidRootSubdirectory, RootDirectory, RootSubdirectory
+from leapp.libraries.actor.rootscanner import scan_dir
+from leapp.models import RootDirectory
from leapp.tags import FactsPhaseTag, IPUWorkflowTag
@@ -19,27 +16,4 @@ class RootScanner(Actor):
tags = (IPUWorkflowTag, FactsPhaseTag)
def process(self):
- subdirs = []
- invalid_subdirs = []
-
- def _create_a_subdir(subdir_cls, name, path):
- if os.path.islink(path):
- return subdir_cls(name=name, target=os.readlink(path))
- return subdir_cls(name=name)
-
- for subdir in os.listdir('/'):
- # Note(ivasilev) in py3 env non-utf encoded string will appear as byte strings
- # However in py2 env subdir will be always of str type, so verification if this is a valid utf-8 string
- # should be done differently than formerly suggested plain six.binary_type check
- decoded = True
- if isinstance(subdir, six.binary_type):
- try:
- subdir.decode('utf-8')
- except (AttributeError, UnicodeDecodeError):
- decoded = False
- if not decoded:
- invalid_subdirs.append(_create_a_subdir(InvalidRootSubdirectory, subdir, os.path.join(b'/', subdir)))
- else:
- subdirs.append(_create_a_subdir(RootSubdirectory, subdir, os.path.join('/', subdir)))
-
- self.produce(RootDirectory(items=subdirs, invalid_items=invalid_subdirs))
+ self.produce(scan_dir(b'/'))
diff --git a/repos/system_upgrade/common/actors/rootscanner/libraries/rootscanner.py b/repos/system_upgrade/common/actors/rootscanner/libraries/rootscanner.py
new file mode 100644
index 00000000..3f29c065
--- /dev/null
+++ b/repos/system_upgrade/common/actors/rootscanner/libraries/rootscanner.py
@@ -0,0 +1,34 @@
+import os
+
+import six
+
+from leapp.models import InvalidRootSubdirectory, RootDirectory, RootSubdirectory
+
+
+def scan_dir(root_dir=b'/'):
+ """
+ Scan root directory and return a RootDirectory(subdirs, invalid_subdirs) model object
+ """
+ subdirs = []
+ invalid_subdirs = []
+
+ def _create_a_subdir(subdir_cls, name, path):
+ if os.path.islink(path):
+ return subdir_cls(name=name, target=os.readlink(path))
+ return subdir_cls(name=name)
+
+ for subdir in os.listdir(root_dir):
+ # Note(ivasilev) in py3 env non-utf encoded string will appear as byte strings
+ # However in py2 env subdir will be always of str type, so verification if this is a valid utf-8 string
+ # should be done differently than formerly suggested plain six.binary_type check
+ decoded = True
+ if isinstance(subdir, six.binary_type):
+ try:
+ subdir = subdir.decode('utf-8')
+ except (AttributeError, UnicodeDecodeError):
+ decoded = False
+ if not decoded:
+ invalid_subdirs.append(_create_a_subdir(InvalidRootSubdirectory, subdir, os.path.join(b'/', subdir)))
+ else:
+ subdirs.append(_create_a_subdir(RootSubdirectory, subdir, os.path.join('/', subdir)))
+ return RootDirectory(items=subdirs, invalid_items=invalid_subdirs)
diff --git a/repos/system_upgrade/common/actors/rootscanner/tests/test_rootscanner.py b/repos/system_upgrade/common/actors/rootscanner/tests/test_rootscanner.py
new file mode 100644
index 00000000..d0e5626a
--- /dev/null
+++ b/repos/system_upgrade/common/actors/rootscanner/tests/test_rootscanner.py
@@ -0,0 +1,31 @@
+import os
+import shutil
+import tempfile
+
+import pytest
+
+from leapp.libraries.actor.rootscanner import scan_dir
+
+
+@pytest.mark.parametrize("filename,symlink,count_invalid",
+ [(u'a_utf_file'.encode('utf-8'), u"utf8_symlink".encode('utf-8'), 0),
+ (u'простофайл'.encode('koi8-r'), u"этонеутф8".encode('koi8-r'), 2),
+ (u'a_utf_file'.encode('utf-8'), u"этонеутф8".encode('koi8-r'), 1)])
+def test_invalid_symlinks(filename, symlink, count_invalid):
+ # Let's create a directory with both valid utf-8 and non-utf symlinks
+ # NOTE(ivasilev) As this has to run for python2 as well can't use the nice tempfile.TemporaryDirectory way
+ tmpdirname = tempfile.mkdtemp()
+ # create the file in the temp directory
+ path_to_file = os.path.join(tmpdirname.encode('utf-8'), filename)
+ path_to_symlink = os.path.join(tmpdirname.encode('utf-8'), symlink)
+ with open(path_to_file, 'w') as f:
+ f.write('Some data here')
+ # create a symlink
+ os.symlink(path_to_file, path_to_symlink)
+ # run scan_dir
+ model = scan_dir(tmpdirname.encode('utf-8'))
+ # verify the results
+ assert len(model.items) == 2 - count_invalid
+ assert len(model.invalid_items) == count_invalid
+ # cleanup
+ shutil.rmtree(tmpdirname)
--
2.40.1

View File

@ -0,0 +1,26 @@
From aa21fa14e6f8a4644ee1190943127c3c0f2bc206 Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Thu, 23 Mar 2023 15:39:22 +0100
Subject: [PATCH 19/30] update .pylintrc
---
.pylintrc | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.pylintrc b/.pylintrc
index f5da1f1f..7ddb58d6 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -52,7 +52,8 @@ disable=
consider-using-with, # on bunch spaces we cannot change that...
duplicate-string-formatting-argument, # TMP: will be fixed in close future
consider-using-f-string, # sorry, not gonna happen, still have to support py2
- use-dict-literal
+ use-dict-literal,
+ redundant-u-string-prefix # still have py2 to support
[FORMAT]
# Maximum number of characters on a single line.
--
2.40.1

View File

@ -0,0 +1,21 @@
From d1a7170b5076f03673b17ffd56dd4eb121f4ae2c Mon Sep 17 00:00:00 2001
From: Inessa Vasilevskaya <ivasilev@redhat.com>
Date: Thu, 23 Mar 2023 17:11:33 +0100
Subject: [PATCH 20/30] Set encoding for tests
---
.../common/actors/rootscanner/tests/test_rootscanner.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/repos/system_upgrade/common/actors/rootscanner/tests/test_rootscanner.py b/repos/system_upgrade/common/actors/rootscanner/tests/test_rootscanner.py
index d0e5626a..659a3017 100644
--- a/repos/system_upgrade/common/actors/rootscanner/tests/test_rootscanner.py
+++ b/repos/system_upgrade/common/actors/rootscanner/tests/test_rootscanner.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
import os
import shutil
import tempfile
--
2.40.1

View File

@ -1,7 +1,7 @@
From 818945dbc65f9fcbaeb4cb3bffeffece63339004 Mon Sep 17 00:00:00 2001
From: Petr Stodulka <pstodulk@redhat.com>
Date: Fri, 17 Feb 2023 12:40:55 +0100
Subject: [PATCH 1/5] Introduce leapp data in the RPM & repository
Subject: [PATCH 21/30] Introduce leapp data in the RPM & repository
In the past it was needed to obtain the data by
* automatic download of data files from RH Insights
@ -47,6 +47,20 @@ Configure codespell to ignore .etc/leapp/files
create mode 100644 etc/leapp/files/pes-events.json
create mode 100644 etc/leapp/files/repomap.json
diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml
index 681669ab..50115826 100644
--- a/.github/workflows/codespell.yml
+++ b/.github/workflows/codespell.yml
@@ -20,4 +20,8 @@ jobs:
ignore_words_list: ro,fo,couldn,repositor
skip: "./repos/system_upgrade/common/actors/storagescanner/tests/files/mounts,\
./repos/system_upgrade/el7toel8/actors/networkmanagerreadconfig/tests/files/nm_cfg_file_error,\
- ./repos/system_upgrade/common/actors/scancpu/tests/files/lscpu_s390x"
+ ./repos/system_upgrade/common/actors/scancpu/tests/files/lscpu_s390x,\
+ ./etc/leapp/files/device_driver_deprecation_data.json,\
+ ./etc/leapp/files/pes-events.json,\
+ ./etc/leapp/files/repomap.json"
+
diff --git a/etc/leapp/files/device_driver_deprecation_data.json b/etc/leapp/files/device_driver_deprecation_data.json
new file mode 100644
index 00000000..02bb2a09
@ -509316,6 +509330,26 @@ index 00000000..88116e2d
+ ]
+}
\ No newline at end of file
diff --git a/packaging/leapp-repository.spec b/packaging/leapp-repository.spec
index 5bdd5a9d..2d0d6fd8 100644
--- a/packaging/leapp-repository.spec
+++ b/packaging/leapp-repository.spec
@@ -215,6 +215,7 @@ install -m 0755 -d %{buildroot}%{_sysconfdir}/leapp/repos.d/
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
+install -m 0644 etc/leapp/files/* %{buildroot}%{_sysconfdir}/leapp/files
# install CLI commands for the leapp utility on the expected path
install -m 0755 -d %{buildroot}%{leapp_python_sitelib}/leapp/cli/
@@ -261,6 +262,7 @@ done;
%dir %{repositorydir}
%dir %{custom_repositorydir}
%dir %{leapp_python_sitelib}/leapp/cli/commands
+%config %{_sysconfdir}/leapp/files/*
%{_sysconfdir}/leapp/repos.d/*
%{_sysconfdir}/leapp/transaction/*
%{repositorydir}/*
--
2.40.1

View File

@ -1,7 +1,7 @@
From 619982896c07aa453a1b48b2bf399e4fe4f723b2 Mon Sep 17 00:00:00 2001
From: Jarek Prokop <jprokop@redhat.com>
Date: Fri, 21 Apr 2023 17:25:15 +0200
Subject: [PATCH 2/5] Add el8toel9 actor to handle directory -> symlink with
Subject: [PATCH 22/30] Add el8toel9 actor to handle directory -> symlink with
ruby IRB.
The `/usr/share/ruby/irb/` directory is a symlink in RHEL 9.

View File

@ -1,7 +1,7 @@
From 0c03180b274e9245611a7379a997ac81c726a9e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michal=20He=C4=8Dko?= <michal.sk.com@gmail.com>
Date: Wed, 10 May 2023 16:51:49 +0200
Subject: [PATCH 3/5] Enable 8>9 upgrades with FIPS enabled (#1053)
Subject: [PATCH 23/30] Enable 8>9 upgrades with FIPS enabled (#1053)
Short story long:
==============

View File

@ -1,7 +1,7 @@
From 24bfcccc59047c43237ce1b0202245314eca7158 Mon Sep 17 00:00:00 2001
From: Irina Gulina <igulina@redhat.com>
Date: Fri, 5 May 2023 08:43:19 +0200
Subject: [PATCH 4/5] Change the upgrade paths for SAP HANA
Subject: [PATCH 24/30] Change the upgrade paths for SAP HANA
- Drop 7.9 to 8.2
- Add 7.9 to 8.8, but keep 7.9 to 8.6 as default

View File

@ -0,0 +1,377 @@
From 777e0a641739add1fca50af774d6d924af5550d7 Mon Sep 17 00:00:00 2001
From: David Kubek <dkubek@redhat.com>
Date: Tue, 14 Mar 2023 11:54:18 +0100
Subject: [PATCH 25/30] Inhibit unsupported x86-64 microarchitecture RHEL9
As per [x86-64-ABI][1] In addition to the AMD64 baseline architecture,
several micro-architecture levels implemented by later CPU modules have
been defined, starting at level ``x86-64-v2``.
RHEL9 has a higher CPU requirement than older versions, it now requires
a CPU compatible with ``x86-64-v2`` instruction set or higher. Until
now, there was no check for this and the upgrade crashed unexpectedly.
This commit handles this issue and provides the user with a report
explaining the problem.
The CPU Features are gathered using the ``lscpu`` command by way of
using the ``ScanCPU`` actor. The ``ScanCPU`` actor had to be also
modified to provide the required flags. The mapping of CPU Features to
flags provided by ``lscpu`` has been determined by using the
``/arch/x86/include/asm/cpufeatures.h`` file from the linux kernel.
[1]: https://gitlab.com/x86-psABIs/x86-64-ABI.git
---
.../actors/scancpu/libraries/scancpu.py | 13 +++-
.../actors/scancpu/tests/test_scancpu.py | 74 +++++++++++++++----
repos/system_upgrade/common/models/cpuinfo.py | 4 +-
.../actors/checkmicroarchitecture/actor.py | 63 ++++++++++++++++
.../libraries/checkmicroarchitecture.py | 47 ++++++++++++
.../tests/test_checkmicroarchitecture.py | 65 ++++++++++++++++
6 files changed, 249 insertions(+), 17 deletions(-)
create mode 100644 repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/actor.py
create mode 100644 repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/libraries/checkmicroarchitecture.py
create mode 100644 repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/tests/test_checkmicroarchitecture.py
diff --git a/repos/system_upgrade/common/actors/scancpu/libraries/scancpu.py b/repos/system_upgrade/common/actors/scancpu/libraries/scancpu.py
index 68f5623b..e5555f99 100644
--- a/repos/system_upgrade/common/actors/scancpu/libraries/scancpu.py
+++ b/repos/system_upgrade/common/actors/scancpu/libraries/scancpu.py
@@ -17,6 +17,11 @@ def _get_lscpu_output():
return ''
+def _get_cpu_flags(lscpu):
+ flags = lscpu.get('Flags', '')
+ return flags.split()
+
+
def _get_cpu_entries_for(arch_prefix):
result = []
for message in api.consume(DeviceDriverDeprecationData):
@@ -137,4 +142,10 @@ def process():
api.produce(*_find_deprecation_data_entries(lscpu))
# Backwards compatibility
machine_type = lscpu.get('Machine type')
- api.produce(CPUInfo(machine_type=int(machine_type) if machine_type else None))
+ flags = _get_cpu_flags(lscpu)
+ api.produce(
+ CPUInfo(
+ machine_type=int(machine_type) if machine_type else None,
+ flags=flags
+ )
+ )
diff --git a/repos/system_upgrade/common/actors/scancpu/tests/test_scancpu.py b/repos/system_upgrade/common/actors/scancpu/tests/test_scancpu.py
index 44d4de87..894fae08 100644
--- a/repos/system_upgrade/common/actors/scancpu/tests/test_scancpu.py
+++ b/repos/system_upgrade/common/actors/scancpu/tests/test_scancpu.py
@@ -1,14 +1,59 @@
import os
+import pytest
+
from leapp.libraries.actor import scancpu
from leapp.libraries.common import testutils
+from leapp.libraries.common.config.architecture import (
+ ARCH_ARM64,
+ ARCH_PPC64LE,
+ ARCH_S390X,
+ ARCH_SUPPORTED,
+ ARCH_X86_64
+)
from leapp.libraries.stdlib import api
from leapp.models import CPUInfo
CUR_DIR = os.path.dirname(os.path.abspath(__file__))
+LSCPU = {
+ ARCH_ARM64: {
+ "machine_type": None,
+ "flags": ['fp', 'asimd', 'evtstrm', 'aes', 'pmull', 'sha1', 'sha2', 'crc32', 'cpuid'],
+ },
+ ARCH_PPC64LE: {
+ "machine_type": None,
+ "flags": []
+ },
+ ARCH_S390X: {
+ "machine_type":
+ 2827,
+ "flags": [
+ 'esan3', 'zarch', 'stfle', 'msa', 'ldisp', 'eimm', 'dfp', 'edat', 'etf3eh', 'highgprs', 'te', 'vx', 'vxd',
+ 'vxe', 'gs', 'vxe2', 'vxp', 'sort', 'dflt', 'sie'
+ ]
+ },
+ ARCH_X86_64: {
+ "machine_type":
+ None,
+ "flags": [
+ 'fpu', 'vme', 'de', 'pse', 'tsc', 'msr', 'pae', 'mce', 'cx8', 'apic', 'sep', 'mtrr', 'pge', 'mca', 'cmov',
+ 'pat', 'pse36', 'clflush', 'dts', 'acpi', 'mmx', 'fxsr', 'sse', 'sse2', 'ss', 'ht', 'tm', 'pbe', 'syscall',
+ 'nx', 'pdpe1gb', 'rdtscp', 'lm', 'constant_tsc', 'arch_perfmon', 'pebs', 'bts', 'rep_good', 'nopl',
+ 'xtopology', 'nonstop_tsc', 'cpuid', 'aperfmperf', 'pni', 'pclmulqdq', 'dtes64', 'monitor', 'ds_cpl',
+ 'vmx', 'smx', 'est', 'tm2', 'ssse3', 'sdbg', 'fma', 'cx16', 'xtpr', 'pdcm', 'pcid', 'dca', 'sse4_1',
+ 'sse4_2', 'x2apic', 'movbe', 'popcnt', 'tsc_deadline_timer', 'aes', 'xsave', 'avx', 'f16c', 'rdrand',
+ 'lahf_lm', 'abm', 'cpuid_fault', 'epb', 'invpcid_single', 'pti', 'ssbd', 'ibrs', 'ibpb', 'stibp',
+ 'tpr_shadow', 'vnmi', 'flexpriority', 'ept', 'vpid', 'ept_ad', 'fsgsbase', 'tsc_adjust', 'bmi1', 'avx2',
+ 'smep', 'bmi2', 'erms', 'invpcid', 'cqm', 'xsaveopt', 'cqm_llc', 'cqm_occup_llc', 'dtherm', 'ida', 'arat',
+ 'pln', 'pts', 'md_clear', 'flush_l1d'
+ ]
+ },
+}
+
class mocked_get_cpuinfo(object):
+
def __init__(self, filename):
self.filename = filename
@@ -22,24 +67,25 @@ class mocked_get_cpuinfo(object):
return '\n'.join(fp.read().splitlines())
-def test_machine_type(monkeypatch):
+@pytest.mark.parametrize("arch", ARCH_SUPPORTED)
+def test_scancpu(monkeypatch, arch):
- # cpuinfo doesn't contain a machine field
- mocked_cpuinfo = mocked_get_cpuinfo('lscpu_x86_64')
+ mocked_cpuinfo = mocked_get_cpuinfo('lscpu_' + arch)
monkeypatch.setattr(scancpu, '_get_lscpu_output', mocked_cpuinfo)
monkeypatch.setattr(api, 'produce', testutils.produce_mocked())
- current_actor = testutils.CurrentActorMocked(arch=testutils.architecture.ARCH_X86_64)
+ current_actor = testutils.CurrentActorMocked(arch=arch)
monkeypatch.setattr(api, 'current_actor', current_actor)
- scancpu.process()
- assert api.produce.called == 1
- assert CPUInfo() == api.produce.model_instances[0]
- # cpuinfo contains a machine field
- api.produce.called = 0
- api.produce.model_instances = []
- current_actor = testutils.CurrentActorMocked(arch=testutils.architecture.ARCH_S390X)
- monkeypatch.setattr(api, 'current_actor', current_actor)
- mocked_cpuinfo.filename = 'lscpu_s390x'
scancpu.process()
+
+ expected = CPUInfo(machine_type=LSCPU[arch]["machine_type"], flags=LSCPU[arch]["flags"])
+ produced = api.produce.model_instances[0]
+
assert api.produce.called == 1
- assert CPUInfo(machine_type=2827) == api.produce.model_instances[0]
+
+ # Produced what was expected
+ assert expected.machine_type == produced.machine_type
+ assert sorted(expected.flags) == sorted(produced.flags)
+
+ # Did not produce anything extra
+ assert expected == produced
diff --git a/repos/system_upgrade/common/models/cpuinfo.py b/repos/system_upgrade/common/models/cpuinfo.py
index e3e52838..ee245563 100644
--- a/repos/system_upgrade/common/models/cpuinfo.py
+++ b/repos/system_upgrade/common/models/cpuinfo.py
@@ -32,8 +32,8 @@ class CPUInfo(Model):
# byte_order = fields.StringEnum(['Little Endian', 'Big Endian'])
# """ Byte order of the CPU: 'Little Endian' or 'Big Endian' """
- # flags = fields.List(fields.String(), default=[])
- # """ Specifies flags/features of the CPU. """
+ flags = fields.List(fields.String(), default=[])
+ """ Specifies flags/features of the CPU. """
# hypervisor = fields.Nullable(fields.String())
# hypervisor_vendor = fields.Nullable(fields.String())
diff --git a/repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/actor.py b/repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/actor.py
new file mode 100644
index 00000000..98ffea80
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/actor.py
@@ -0,0 +1,63 @@
+import leapp.libraries.actor.checkmicroarchitecture as checkmicroarchitecture
+from leapp.actors import Actor
+from leapp.models import CPUInfo
+from leapp.reporting import Report
+from leapp.tags import ChecksPhaseTag, IPUWorkflowTag
+
+
+class CheckMicroarchitecture(Actor):
+ """
+ Inhibit if RHEL9 microarchitecture requirements are not satisfied
+
+
+ As per `x86-64-ABI`_ In addition to the AMD64 baseline architecture, several
+ micro-architecture levels implemented by later CPU modules have been
+ defined, starting at level ``x86-64-v2``. The levels are cumulative in the
+ sense that features from previous levels are implicitly included in later
+ levels.
+
+ RHEL9 has a higher CPU requirement than older versions, it now requires a
+ CPU compatible with ``x86-64-v2`` instruction set or higher.
+
+ .. table:: Required CPU features by microarchitecure level with a
+ corresponding flag as shown by ``lscpu``.
+
+ +------------+-------------+--------------------+
+ | Version | CPU Feature | flag (lscpu) |
+ +============+=============+====================+
+ | (baseline) | CMOV | cmov |
+ | | CX8 | cx8 |
+ | | FPU | fpu |
+ | | FXSR | fxsr |
+ | | MMX | mmx |
+ | | OSFXSR | (common with FXSR) |
+ | | SCE | syscall |
+ | | SSE | sse |
+ | | SSE2 | sse2 |
+ +------------+-------------+--------------------+
+ | x86-64-v2 | CMPXCHG16B | cx16 |
+ | | LAHF-SAHF | lahf_lm |
+ | | POPCNT | popcnt |
+ | | SSE3 | pni |
+ | | SSE4_1 | sse4_1 |
+ | | SSE4_2 | sse4_2 |
+ | | SSSE3 | ssse3 |
+ +------------+-------------+--------------------+
+ | ... | | |
+ +------------+-------------+--------------------+
+
+ Note: To get the corresponding flag for the CPU feature consult the file
+ ``/arch/x86/include/asm/cpufeatures.h`` in the linux kernel.
+
+
+ .. _x86-64-ABI: https://gitlab.com/x86-psABIs/x86-64-ABI.git
+
+ """
+
+ name = 'check_microarchitecture'
+ consumes = (CPUInfo,)
+ produces = (Report,)
+ tags = (ChecksPhaseTag, IPUWorkflowTag,)
+
+ def process(self):
+ checkmicroarchitecture.process()
diff --git a/repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/libraries/checkmicroarchitecture.py b/repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/libraries/checkmicroarchitecture.py
new file mode 100644
index 00000000..0f1f1fca
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/libraries/checkmicroarchitecture.py
@@ -0,0 +1,47 @@
+from leapp import reporting
+from leapp.libraries.common.config.architecture import ARCH_X86_64, matches_architecture
+from leapp.libraries.stdlib import api
+from leapp.models import CPUInfo
+
+X86_64_BASELINE_FLAGS = ['cmov', 'cx8', 'fpu', 'fxsr', 'mmx', 'syscall', 'sse', 'sse2']
+X86_64_V2_FLAGS = ['cx16', 'lahf_lm', 'popcnt', 'pni', 'sse4_1', 'sse4_2', 'ssse3']
+
+
+def _inhibit_upgrade(missing_flags):
+ title = 'Current x86-64 microarchitecture is unsupported in RHEL9'
+ summary = ('RHEL9 has a higher CPU requirement than older versions, it now requires a CPU '
+ 'compatible with x86-64-v2 instruction set or higher.\n\n'
+ 'Missings flags detected are: {}\n'.format(', '.join(missing_flags)))
+
+ reporting.create_report([
+ reporting.Title(title),
+ reporting.Summary(summary),
+ reporting.ExternalLink(title='Building Red Hat Enterprise Linux 9 for the x86-64-v2 microarchitecture level',
+ url=('https://developers.redhat.com/blog/2021/01/05/'
+ 'building-red-hat-enterprise-linux-9-for-the-x86-64-v2-microarchitecture-level')),
+ reporting.Severity(reporting.Severity.HIGH),
+ reporting.Groups([reporting.Groups.INHIBITOR]),
+ reporting.Groups([reporting.Groups.SANITY]),
+ reporting.Remediation(hint=('If case of using virtualization, virtualization platforms often allow '
+ 'configuring a minimum denominator CPU model for compatibility when migrating '
+ 'between different CPU models. Ensure that minimum requirements are not below '
+ 'that of RHEL9\n')),
+ ])
+
+
+def process():
+ """
+ Check whether the processor matches the required microarchitecture.
+ """
+
+ if not matches_architecture(ARCH_X86_64):
+ api.current_logger().info('Architecture not x86-64. Skipping microarchitecture test.')
+ return
+
+ cpuinfo = next(api.consume(CPUInfo))
+
+ required_flags = X86_64_BASELINE_FLAGS + X86_64_V2_FLAGS
+ missing_flags = [flag for flag in required_flags if flag not in cpuinfo.flags]
+ api.current_logger().debug('Required flags missing: %s', missing_flags)
+ if missing_flags:
+ _inhibit_upgrade(missing_flags)
diff --git a/repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/tests/test_checkmicroarchitecture.py b/repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/tests/test_checkmicroarchitecture.py
new file mode 100644
index 00000000..b7c850d9
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/checkmicroarchitecture/tests/test_checkmicroarchitecture.py
@@ -0,0 +1,65 @@
+import pytest
+
+from leapp import reporting
+from leapp.libraries.actor import checkmicroarchitecture
+from leapp.libraries.common.config.architecture import ARCH_SUPPORTED, ARCH_X86_64
+from leapp.libraries.common.testutils import create_report_mocked, CurrentActorMocked, logger_mocked
+from leapp.libraries.stdlib import api
+from leapp.models import CPUInfo
+from leapp.utils.report import is_inhibitor
+
+
+@pytest.mark.parametrize("arch", [arch for arch in ARCH_SUPPORTED if not arch == ARCH_X86_64])
+def test_not_x86_64_passes(monkeypatch, arch):
+ """
+ Test no report is generated on an architecture different from x86-64
+ """
+
+ monkeypatch.setattr(reporting, "create_report", create_report_mocked())
+ monkeypatch.setattr(api, 'current_logger', logger_mocked())
+ monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(arch=arch))
+
+ checkmicroarchitecture.process()
+
+ assert 'Architecture not x86-64. Skipping microarchitecture test.' in api.current_logger.infomsg
+ assert not reporting.create_report.called
+
+
+def test_valid_microarchitecture(monkeypatch):
+ """
+ Test no report is generated on a valid microarchitecture
+ """
+
+ monkeypatch.setattr(reporting, "create_report", create_report_mocked())
+ monkeypatch.setattr(api, 'current_logger', logger_mocked())
+
+ required_flags = checkmicroarchitecture.X86_64_BASELINE_FLAGS + checkmicroarchitecture.X86_64_V2_FLAGS
+ monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(arch=ARCH_X86_64,
+ msgs=[CPUInfo(flags=required_flags)]))
+
+ checkmicroarchitecture.process()
+
+ assert 'Architecture not x86-64. Skipping microarchitecture test.' not in api.current_logger.infomsg
+ assert not reporting.create_report.called
+
+
+def test_invalid_microarchitecture(monkeypatch):
+ """
+ Test report is generated on x86-64 architecture with invalid microarchitecture and the upgrade is inhibited
+ """
+
+ monkeypatch.setattr(reporting, "create_report", create_report_mocked())
+ monkeypatch.setattr(api, 'current_logger', logger_mocked())
+ monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(arch=ARCH_X86_64, msgs=[CPUInfo()]))
+
+ checkmicroarchitecture.process()
+
+ produced_title = reporting.create_report.report_fields.get('title')
+ produced_summary = reporting.create_report.report_fields.get('summary')
+
+ assert 'Architecture not x86-64. Skipping microarchitecture test.' not in api.current_logger().infomsg
+ assert reporting.create_report.called == 1
+ assert 'microarchitecture is unsupported' in produced_title
+ assert 'RHEL9 has a higher CPU requirement' in produced_summary
+ assert reporting.create_report.report_fields['severity'] == reporting.Severity.HIGH
+ assert is_inhibitor(reporting.create_report.report_fields)
--
2.40.1

View File

@ -0,0 +1,25 @@
From 7043c7e0c5e674f4337ea0d141e19e5cefbbe79d Mon Sep 17 00:00:00 2001
From: Marek Filip <wecros@gmail.com>
Date: Wed, 31 May 2023 13:39:39 +0200
Subject: [PATCH 26/30] Fix doc link in checktargetrepos.py
---
.../actors/checktargetrepos/libraries/checktargetrepos.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/repos/system_upgrade/common/actors/checktargetrepos/libraries/checktargetrepos.py b/repos/system_upgrade/common/actors/checktargetrepos/libraries/checktargetrepos.py
index 77d53feb..5a53bf21 100644
--- a/repos/system_upgrade/common/actors/checktargetrepos/libraries/checktargetrepos.py
+++ b/repos/system_upgrade/common/actors/checktargetrepos/libraries/checktargetrepos.py
@@ -32,7 +32,7 @@ def process():
if target_major_version == '8':
ipu_doc_url = (
'https://access.redhat.com/documentation/en-us/'
- 'red_hat_enterprise_linux/8/html-single/upgrading_to_rhel_8/index'
+ 'red_hat_enterprise_linux/8/html-single/upgrading_from_rhel_7_to_rhel_8/index'
)
elif target_major_version == '9':
ipu_doc_url = 'TBA'
--
2.40.1

View File

@ -1,25 +1,26 @@
From 1240116a7989f24f00a06273104f059449516365 Mon Sep 17 00:00:00 2001
From 548a3b77e7dcf214bc1319f2cf47a0612dc78573 Mon Sep 17 00:00:00 2001
From: Petr Stodulka <pstodulk@redhat.com>
Date: Mon, 5 Jun 2023 16:24:03 +0200
Subject: [PATCH] Update the repomap.json file for RHUI Azure
Date: Mon, 5 Jun 2023 18:37:07 +0200
Subject: [PATCH 27/30] Update the repomap.json file to address changes in RHUI
Azure
python repomap_diff.py old_repomap.json new_repomap.json
Diff:
Upg paths are unchanged.
Mappings are unchanged.
The following repos have been removed:
- Repo(pesid='rhel8-AppStream', major_version='8', repoid='rhui-rhel-8-for-x86_64-appstream-rhui-rpms', repo_type='rpm', channel='ga', arch='x86_64', rhui='azure')
- Repo(pesid='rhel8-BaseOS', major_version='8', repoid='rhui-rhel-8-for-x86_64-baseos-rhui-rpms', repo_type='rpm', channel='ga', arch='x86_64', rhui='azure')
- Repo(pesid='rhel8-CRB', major_version='8', repoid='rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms', repo_type='rpm', channel='ga', arch='x86_64', rhui='azure')
- Repo(pesid='rhel8-AppStream', major_version='8', repoid='rhui-rhel-8-for-x86_64-appstream-rhui-rpms', repo_type='rpm', channel='ga', arch='x86_64', rhui='azure')
The following repos have been added:
- Repo(pesid='rhel8-AppStream', major_version='8', repoid='rhel-8-for-x86_64-appstream-rhui-rpms', repo_type='rpm', channel='ga', arch='x86_64', rhui='azure')
- Repo(pesid='rhel8-CRB', major_version='8', repoid='codeready-builder-for-rhel-8-x86_64-rhui-rpms', repo_type='rpm', channel='ga', arch='x86_64', rhui='azure')
- Repo(pesid='rhel8-BaseOS', major_version='8', repoid='rhel-8-for-x86_64-baseos-rhui-rpms', repo_type='rpm', channel='ga', arch='x86_64', rhui='azure')
- Repo(pesid='rhel8-AppStream', major_version='8', repoid='rhel-8-for-x86_64-appstream-rhui-rpms', repo_type='rpm', channel='ga', arch='x86_64', rhui='azure')
---
etc/leapp/files/repomap.json | 44 ++++++++++++++++++------------------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/etc/leapp/files/repomap.json b/etc/leapp/files/repomap.json
index 88116e2..14b6f0d 100644
index 88116e2d..14b6f0d7 100644
--- a/etc/leapp/files/repomap.json
+++ b/etc/leapp/files/repomap.json
@@ -1,5 +1,5 @@

View File

@ -0,0 +1,748 @@
From 855c025f455f3c5f4949f016d39b573666789ab9 Mon Sep 17 00:00:00 2001
From: Matej Matuska <mmatuska@redhat.com>
Date: Mon, 19 Jun 2023 12:26:17 +0200
Subject: [PATCH 28/30] Add prod certs and upgrade paths for 8.9 & 9.3
---
.github/workflows/codespell.yml | 4 +--
.../common/files/prod-certs/8.9/279.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/8.9/362.pem | 36 +++++++++++++++++++
.../common/files/prod-certs/8.9/363.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/8.9/419.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/8.9/433.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/8.9/479.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/8.9/486.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/8.9/72.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/9.3/279.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/9.3/362.pem | 36 +++++++++++++++++++
.../common/files/prod-certs/9.3/363.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/9.3/419.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/9.3/433.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/9.3/479.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/9.3/486.pem | 35 ++++++++++++++++++
.../common/files/prod-certs/9.3/72.pem | 35 ++++++++++++++++++
.../common/files/upgrade_paths.json | 7 ++--
.../common/libraries/config/version.py | 2 +-
19 files changed, 569 insertions(+), 6 deletions(-)
create mode 100644 repos/system_upgrade/common/files/prod-certs/8.9/279.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/8.9/362.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/8.9/363.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/8.9/419.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/8.9/433.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/8.9/479.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/8.9/486.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/8.9/72.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/9.3/279.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/9.3/362.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/9.3/363.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/9.3/419.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/9.3/433.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/9.3/479.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/9.3/486.pem
create mode 100644 repos/system_upgrade/common/files/prod-certs/9.3/72.pem
diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml
index 50115826..1348c7fe 100644
--- a/.github/workflows/codespell.yml
+++ b/.github/workflows/codespell.yml
@@ -23,5 +23,5 @@ jobs:
./repos/system_upgrade/common/actors/scancpu/tests/files/lscpu_s390x,\
./etc/leapp/files/device_driver_deprecation_data.json,\
./etc/leapp/files/pes-events.json,\
- ./etc/leapp/files/repomap.json"
-
+ ./etc/leapp/files/repomap.json,\
+ ./repos/system_upgrade/common/files/prod-certs"
diff --git a/repos/system_upgrade/common/files/prod-certs/8.9/279.pem b/repos/system_upgrade/common/files/prod-certs/8.9/279.pem
new file mode 100644
index 00000000..db37263c
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/8.9/279.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGJTCCBA2gAwIBAgIJALDxRLt/tU+JMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExMTE0MTgyN1oXDTQzMDEx
+MTE0MTgyN1owRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFtjNWViY2Fi
+ZS0yMjgwLTQ1MTAtOWIxNy02OTg5ZDljNGE5OGJdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBrjCBqzAJBgNVHRMEAjAAMEMGDCsGAQQBkggJAYIXAQQzDDFSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIFBvd2VyLCBsaXR0bGUgZW5kaWFuMBUGDCsG
+AQQBkggJAYIXAgQFDAM4LjkwGQYMKwYBBAGSCAkBghcDBAkMB3BwYzY0bGUwJwYM
+KwYBBAGSCAkBghcEBBcMFXJoZWwtOCxyaGVsLTgtcHBjNjRsZTANBgkqhkiG9w0B
+AQsFAAOCAgEAZ5VTVzFyEs0H5dkrav/ynp2WADNCzAVBk7byHzIniDA+9blCDyFi
+w6Yb8KcDEpk4LRxj5wFWSdyCBGX4QpmHZkzxISk49O4MiOhpcfNKwNPzl7p8zdvO
+nm7H+ZIwPWHd5jKvxORsqB8Y7Tk6xM3usXcwSsv93jijIY7nifKIA1kUovi8h7pw
+ZxAys/ABvkegVXp2783GSc9H2ItWVExBEb3rgCkzW5b+ltRnncDYB4lRH5GlND8Q
+OBrth+253HImkA1mSvWewOwOcdtPB79IKkgF2P3vfrakFQva6F4vA7KKcIBdPf/I
+D1wuniZyBxwvKSdN62jy2LWgkSM2SoXpDyUVE0fE8qkoXEcuAImVWeaL4o0uoFn2
+tZ141z7pG8uMzPweS+x6LwmezftSuUtVh2rESuszfvR8dckPvA2a39BU4qpxt4Nr
+nyosCDBxT3p5CZyvVzFalanZd2J8aWnertrn1K+KMi5pEmqPCUccGwHZe6wvaEAu
+yKUOXdcjs627TIce2OGNAu92cNXeZAsG3xAzzFxo/mBx8TxaMNL579sf7YYsfdY5
+L47yhN5LD1efLfP1yQjrdcwR3LKVg8NU0JFc2xBf9tnZ1vzlT350nNkgZfkNhoLi
+mTSquBuT+oOdcmNrJIpv65hyRG08YGhS0AAMYsheE2TGcjo6VPpQCDU=
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/8.9/362.pem b/repos/system_upgrade/common/files/prod-certs/8.9/362.pem
new file mode 100644
index 00000000..6fd40e9e
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/8.9/362.pem
@@ -0,0 +1,36 @@
+-----BEGIN CERTIFICATE-----
+MIIGNDCCBBygAwIBAgIJALDxRLt/tU9zMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExMTE0MTY1NloXDTQzMDEx
+MTE0MTY1NlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFs2YmYzNWFh
+NS0yOTFlLTQ3MzktODBlOS01ZDZlODJlODM0YjJdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBvTCBujAJBgNVHRMEAjAAMEgGDCsGAQQBkggJAYJqAQQ4DDZSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIFBvd2VyLCBsaXR0bGUgZW5kaWFuIEJldGEw
+GgYMKwYBBAGSCAkBgmoCBAoMCDguOSBCZXRhMBkGDCsGAQQBkggJAYJqAwQJDAdw
+cGM2NGxlMCwGDCsGAQQBkggJAYJqBAQcDBpyaGVsLTgscmhlbC04LWJldGEtcHBj
+NjRsZTANBgkqhkiG9w0BAQsFAAOCAgEARkOuDEfPta9hzL9cW/KcxeJMKSCIDnYN
+s9+ROCossSvxA7aLedpTcQ3S+rKbw4gDHjwG2ej1xrt3GWc7Kbhmdofk1fKPn4M/
+70Iy6bWcwagHLgUNMziQEzftogYbmOtxMZKX7E1bk1DqvROs2kg/2+a1b/5Z51gT
+a5B9SjFPF02FmlqIaFt2mVKr2RjfZo9c5J16lbZdNKLTXxMZbcxJF6DH0xyyft57
+MyMsl7fcIH81Lz7kFJ56EfnJvy2H+VCxKYIJZFetAaQKqyPGqbid9QH/ZMHB3tYv
+sjWd9Dn0jeuQ6K4Cb0wqEx84a9REh0Ige8r9AY+wwWwuivpmCtFtGccEwmMvL657
+kBMffttaCCyL83GupdTg05+1AokLIFNm0UE/+ma69JOS2hvjM+pC/eMJGZlRAOWM
+oZtsKoKU42oAA9sLSbHAKAN54hnRKOIGABdOGmHOCwPm7tZJ99ZkQo8vli/hCuBE
+pVZiFGYbo34mlsOcJxjBI/4RUIXmWijbgHQemJUgWecbEHlEYu7yR1aVWDraTAKm
+vxxf41D4xDis+g9dspHQWwqxHJ2QsOPp1AtXThgO5vJ6Mu0sd50SDXiD0qrMq/5l
+95Gaa5Ih6JjFttlftftJ6l3rsycLLwoPBcHKMptgyin1ysg/TsRZ9OvznrMhTT9w
+nEMeBZgLxXU=
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/8.9/363.pem b/repos/system_upgrade/common/files/prod-certs/8.9/363.pem
new file mode 100644
index 00000000..803aafc2
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/8.9/363.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGJjCCBA6gAwIBAgIJALDxRLt/tU9yMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExMTE0MTY1NVoXDTQzMDEx
+MTE0MTY1NVowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFtlYmNjOWQw
+Yy0yYjU1LTQ4MTAtOGY0ZC1mZTczYzViYzYyNDJdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBrzCBrDAJBgNVHRMEAjAAMDoGDCsGAQQBkggJAYJrAQQqDChSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIEFSTSA2NCBCZXRhMBoGDCsGAQQBkggJAYJr
+AgQKDAg4LjkgQmV0YTAZBgwrBgEEAZIICQGCawMECQwHYWFyY2g2NDAsBgwrBgEE
+AZIICQGCawQEHAwacmhlbC04LHJoZWwtOC1iZXRhLWFhcmNoNjQwDQYJKoZIhvcN
+AQELBQADggIBAEKQU4JdkRynFZJqFN6waBVJsSWfdMPvCDZ7C+aJiXjeJEzccziE
+QK1rN2TiZzMcJdGu4eimXIPdjz5gZnupy6ZbNZLjGBfCEuIGQZLOF1aBwdM/chPq
+bZniU+Iu3VmJZ5nBdYBMwWee8I9E4T1Ia5m8sh93pL9F8M4a/SRBG26tSTRPHf3I
+zpEIR7nsbussbApcSiq/sGOr80DDycpS2hc5qPiICnwPIfGQNEgMRA8G//3JJZ1q
+4nwG5WHxLK68K9i9bUKOBVizEiAnqGCdDcTez1Qanags95Uvebnpx6QvST6b4bjG
+8pvbu8GTw/CGnYSw9pg2Is8nkDIQN66j/JGcbysFad4vldiLjUYkjVpdxYUT6fVE
+jmWFE0Px6jf7u0NqD3sjKVxy5RwcBorrYC2TM4tQfJbrTfVhJXxRUFVKkcq8q10a
+zhTISai2re7qPE08SQ1pzQ98KV44ZY0atnGOhb95EKhE1+Nvdzjf0aNDzcWGHTlO
+TwaoGeZXgh0xRUj+6+MXsk6c5PLNnEUOdsW4pkYt1ew0FhzkyED0hr2rVAUXSBCH
+5nJ7N6DStcVZwgc7j5c57c8+a22L6R6ncuoZh7qmujVN7zgvP/6c7ZcGUixe+I7s
+h/14X8CuC12Hwod3A9Qod/7LorjbKAO45xIWYaMjvnYVgwA26Jk5Uapb
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/8.9/419.pem b/repos/system_upgrade/common/files/prod-certs/8.9/419.pem
new file mode 100644
index 00000000..c41dc91d
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/8.9/419.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGFzCCA/+gAwIBAgIJALDxRLt/tU+IMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExMTE0MTgyN1oXDTQzMDEx
+MTE0MTgyN1owRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFthODQ5MGNk
+YS04M2IwLTQ2ZDYtOGRhMy1mOGU0YTY4NzQyZjFdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBoDCBnTAJBgNVHRMEAjAAMDUGDCsGAQQBkggJAYMjAQQlDCNSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIEFSTSA2NDAVBgwrBgEEAZIICQGDIwIEBQwD
+OC45MBkGDCsGAQQBkggJAYMjAwQJDAdhYXJjaDY0MCcGDCsGAQQBkggJAYMjBAQX
+DBVyaGVsLTgscmhlbC04LWFhcmNoNjQwDQYJKoZIhvcNAQELBQADggIBABZR2AuL
+G1qvNs6+3mXN3QncJaKV5BenG8lglARP2V0+R26F4vbJJ2bxSc5Xyr1tp+qji2fL
+POJSwCwR06RDMhUEs8N5cLfpzDpXhq9KPF+L3GEDemMeWzt4JeVI3ekJLPWqm4L/
+5qxFsqL1GFYvDK/Qd9Rf5NEsum3Phv6y9aYhmLPEnDcKxhl0+ju3nth68p3pnk7b
+pJlUQ+xsVuQixG8OBAugPcbW624Nf6g9R5ZtwAFv9t709zUjqI4HCJJAbgfAI18Z
+uPiHs7S42xY3XVTTucx2DAkKlMi4bS9Pk/EK7r5xiiDZkN1zqyYVN9kKUqJGhtFq
+w1W+SPuryexcZ6lXzZUzaxQXc2u1N1ATGdgubyS94O2lY6XM7JAN+nSe51xrbtcM
+XOwibUGCmELek8wmJTSIj1kFo/7vBVgyqoffDOgmRXpogFCJZk2v69WVCWmo2BYS
+5LnucG8iZMQ1Ix+6llsNgCTp32zApk26DA8WYzGRsXv88TWhNpI0iQjO9HMhJlBN
+PqwrQpyprOFwKsKJxWSC1kcEPJ3gYJVawUq5hbYxpUplxt1q670xfKqN0egXcUrL
+rnNWYsq+pJpQo601pgP2eQJQRWzWFwioYkbbliPMgFQVuKQATGq4l2VZn/PQ/SSF
+/CDtUf1/ucR7cRcl/AT1MVlkC1DrCHb2yDgh
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/8.9/433.pem b/repos/system_upgrade/common/files/prod-certs/8.9/433.pem
new file mode 100644
index 00000000..5ce693ee
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/8.9/433.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGKTCCBBGgAwIBAgIJALDxRLt/tU90MA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExMTE0MTY1NloXDTQzMDEx
+MTE0MTY1NlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFs4YjkzMzU0
+Zi1lMDdmLTQxYzUtOTRkOC05MWQ0MGY0Y2NhNWRdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBsjCBrzAJBgNVHRMEAjAAMEEGDCsGAQQBkggJAYMxAQQxDC9SZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIElCTSB6IFN5c3RlbXMgQmV0YTAaBgwrBgEE
+AZIICQGDMQIECgwIOC45IEJldGEwFwYMKwYBBAGSCAkBgzEDBAcMBXMzOTB4MCoG
+DCsGAQQBkggJAYMxBAQaDBhyaGVsLTgscmhlbC04LWJldGEtczM5MHgwDQYJKoZI
+hvcNAQELBQADggIBAKH1KhOE0yRAcJ2aqMvGlfrhqEPhtzBNp73vt0QNyNDlU3Ud
+ijwKlTIsmLFbAXGQj4WdR4TbCm0BZP4+6pMPjwhFXHdU5fHpOD/BiIV7csZKNWZy
+HpuBv0Kp4Xv7yJoHy6YhPoaIPIwDX4VPPjoSccn2jHUDGg/o9mTyUZfCnIe5GrwM
+MDck15uvG5kRhIkCcW6AkJuaNpPNLLHLjX7VNDYwAYllmWbozu0YQ7KhHHslT0z3
+HFlDVFbrt3X/0Zv0DOrkN/50f0i6KlPevFBBdvPuGTkPIRANSmNGu0DRn8fF1G+3
+8TrAi1tIBaQ6E4/RZJ3y0YGnV2fO/bDuv8qscQGWoSkmFEAsrvCih5swoBhJ8aPn
+6FusamiIKH/okwX59eAA+yhFfohmsrn3kxXNbDOfozchHYuP3trk6jfDLsS6519f
+cHGaJtmzVNfsF2QoHp9aWbkgE0kzBPUOvXOa6T3AXYcTzhkpWDR+MxcUl9y/eNh1
+s/hbiQH7BBMHq+/sMPD7n3Dus51am1xamDy1B+v8b5p8kNTbrUR0uzEzCQNsrZtM
+jSa3SziP+DJwGu5Ag2qFAfI5rXFHCPrk+fgeg/4uSz+Smtm1W1mqK0AQMmYBqgCq
+q8WPWP8kQt79RbtprUgNTCvSg+mY18uiyO6B0VqcT9gRIE6/oTXR7RfFCH6h
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/8.9/479.pem b/repos/system_upgrade/common/files/prod-certs/8.9/479.pem
new file mode 100644
index 00000000..c8952280
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/8.9/479.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGFTCCA/2gAwIBAgIJALDxRLt/tU+LMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExMTE0MTgyOFoXDTQzMDEx
+MTE0MTgyOFowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFtiOThjZDg0
+ZC0yMDk5LTRmNGQtOWM0My1mYWFjMjI1OGExOTBdMIICIjANBgkqhkiG9w0BAQEF
+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
+OC45MBgGDCsGAQQBkggJAYNfAwQIDAZ4ODZfNjQwJgYMKwYBBAGSCAkBg18EBBYM
+FHJoZWwtOCxyaGVsLTgteDg2XzY0MA0GCSqGSIb3DQEBCwUAA4ICAQB0AKa00fqK
+1LSDclHITX5fN2fBiT9mU0yen8ku+tOFZQ2zkkspGSEE+//d6jXn7xbYByf4YMmN
+M4wzIVET6uJ8uvi8Z/D3Pktm4ErPQMjZ3N3J6oKkrgZSaaqvMS+YCbaGKL17iOxz
+QwXub6oSpfW0KguSeCPtJ2wODQs45ggIPPdnuJsiyn/nXRwg+qlM0KPpn0y4TWHM
+tmAf4Vu4Bz9wdqQylZ1n8oIX5vm0R4m7ihM0zLyt4tTucMr1dh9H8V6Cw/RGg1b/
+J2Z8HvtIWfOa0dmLDkYxbmZRfoBXKjG8KTE0PrvaRuaa1wb7P9ZhVw8yfHqSG4QS
+DqHEMaYpodqjYKcmRpAd7yR16OpEMv+j5oOHiXwyR51pKjconspuSdD9Oso6o/H4
+JFloBTzAYWV5FMeDMzDwJ89D3T8okZwv/jftIlCMHcQFwKvd+pPQGrdJkLc06WsB
+RtKb89s7pwaqpItHScFypX0DzluJ/uIy6cT8xGjbbohyvRhCuUxEcNmlTUmMlQT9
+ll+5nCh6g+qUFFRclCAYstnU+7akEEa+L8sLcq7Bs576ZYlbuoFgBbXhYA2YU95m
+OI/q7kF/hm5p8pHNw/JnRzeX7Fo+n4AyeOBT9Az+bTis4gyCo3v9sAuLyscrCPtv
+0Vkuk+SRppk0hoUZzNtyeMAAzLFK+juhpA==
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/8.9/486.pem b/repos/system_upgrade/common/files/prod-certs/8.9/486.pem
new file mode 100644
index 00000000..9ac3b351
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/8.9/486.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGJDCCBAygAwIBAgIJALDxRLt/tU91MA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExMTE0MTY1NloXDTQzMDEx
+MTE0MTY1NlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFs5MDhjYjA5
+ZC1mOTlmLTQ1OTEtOWViOS02Y2E2ZTg2OTQ1ODRdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBrTCBqjAJBgNVHRMEAjAAMDoGDCsGAQQBkggJAYNmAQQqDChSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIHg4Nl82NCBCZXRhMBoGDCsGAQQBkggJAYNm
+AgQKDAg4LjkgQmV0YTAYBgwrBgEEAZIICQGDZgMECAwGeDg2XzY0MCsGDCsGAQQB
+kggJAYNmBAQbDBlyaGVsLTgscmhlbC04LWJldGEteDg2XzY0MA0GCSqGSIb3DQEB
+CwUAA4ICAQAFLcBknEcS9WQCE5QzsjzEKMW2FzObxTJk69Al1/gYVfYmWszd8F5V
+jUyd077DiWkqaHGYR64/E7acdSRd1npms52Jj07YGQTshIbaNQLoseQeJ8b/Bcma
++Htrr73JWK+rcUdOiLjv+7gykFevxptgYUACLnjfJxxJmVWBVt5305yOgvFj6Sip
+RTALMY0uQty9/T4HybURCjK+hHinnDPypGKEg/7KRpjpQ8kRGjD5IZQ4sQzHkrIE
+fvVHs4t5IIYJ5iaR6ropcBUrBrz+loTOfcCAoUhAVjYDIOJnuQm2XVNgbM/uDBZG
+fwI7XKauUVvNa/h2tbSQ/f3cyEVbfSwfv8nlLoWe4XYvipTQpPcIDvm8GgOuiyax
+kXy5a2ToyiAfepEeJhSBX4IM38TjWiEn2+jcapaQSuAtH6Wy+3HWO6qpnRQ8sRF4
+WrK+WqW2DnTop9K1fLdUnwjFimZDdBxwnnJ0JLop7ZJWchKFFT3oxsykBMnH+6gm
+O1nHZpgtBAcOj+qLi6z+PvptqBxeTSnSQbdEWpsC+RsWXIOvvTllHRduKU62PdSg
++87Mp4opiStjhgRVDq1Ba8XWxo/rlf6HDuPI/uut4XhZ8tpsJ+aj6t0lQLU6dm81
+1Vjw3yHlJy4ire6E9jzz9q1JNYLWWLJCbPEPlF4hd8zw6nAfDzSNmw==
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/8.9/72.pem b/repos/system_upgrade/common/files/prod-certs/8.9/72.pem
new file mode 100644
index 00000000..9d896b59
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/8.9/72.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGFjCCA/6gAwIBAgIJALDxRLt/tU+KMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExMTE0MTgyN1oXDTQzMDEx
+MTE0MTgyN1owRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFthNDU4Nzll
+OS0zYWE4LTQ3MTEtOTIwNi03M2Y1Yzk3ZTAwYjVdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBnzCBnDAJBgNVHRMEAjAAMDsGCysGAQQBkggJAUgBBCwMKlJlZCBIYXQg
+RW50ZXJwcmlzZSBMaW51eCBmb3IgSUJNIHogU3lzdGVtczAUBgsrBgEEAZIICQFI
+AgQFDAM4LjkwFgYLKwYBBAGSCAkBSAMEBwwFczM5MHgwJAYLKwYBBAGSCAkBSAQE
+FQwTcmhlbC04LHJoZWwtOC1zMzkweDANBgkqhkiG9w0BAQsFAAOCAgEASZ0dxU60
+Wrrh5ApGxwe53AbbIiDdMc4641p2IbVM6J3/09Er4orl6xch0s/ReVbWgYfO4DDT
+q+L0f5csn8HggdFHmEvjFwJ1IBWj4gWpBQuZy4MSowntNla2MnVeFPKBK46qrDNO
+SQKwEkIRB5hYKMDAwZFY6ewuuVpEnhfBoSfr/Xg7e414pWhRaVlTk/x6L78KZk9j
+7gw4QpptMq9r2qp+TaAew76g5bVDLDnCYTX3c+MGqVZcj5dw3TUctvLYRc+gY6gO
+5bpmLCbtsD19IKqB4Wi7IF/NqdN4YLBaNfedyugzUDWkJWt1mIZfunpsoQm0Yys7
+upkEMwgfMBclq9QDnO4jbOC3cnp7qKgkim94wxPdGf19xijSfBnIwIwuFxzJPFpe
+spp8DUz6alwyBmM9UjIzpybfMVOKDHR8LCiB53EMJW2nxWgW8nItYSMbfsNukAJv
+Md4UKRJ5zHB+xcyAI1NF7KgfrmScC0HwZ5BiDDK1iZHAeTOH6GtNkii4HSGvuZAW
+m7ujIHohHCfIKiZiR2YfMnWhYQiH0Y9CX9k4wDWRwdyMRQQftX5RUWLzxFbferTG
+gSVVQjLpeCaWZv3jqekrGzNK0jcaUTTPi//FyeCE8aNXET6M+aK65AmsgnPL+a/K
+7SvOvOa0GfDBoH++jO1u2fAK4DqLd5iFv/o=
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/9.3/279.pem b/repos/system_upgrade/common/files/prod-certs/9.3/279.pem
new file mode 100644
index 00000000..dc6d933a
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/9.3/279.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGJTCCBA2gAwIBAgIJALDxRLt/tVOwMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExODE3MjYxNloXDTQzMDEx
+ODE3MjYxNlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFs4MzNlZjBl
+ZS1hM2U2LTQ3NmQtOTczZi1lM2I1MTczMGJlMGRdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBrjCBqzAJBgNVHRMEAjAAMEMGDCsGAQQBkggJAYIXAQQzDDFSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIFBvd2VyLCBsaXR0bGUgZW5kaWFuMBUGDCsG
+AQQBkggJAYIXAgQFDAM5LjMwGQYMKwYBBAGSCAkBghcDBAkMB3BwYzY0bGUwJwYM
+KwYBBAGSCAkBghcEBBcMFXJoZWwtOSxyaGVsLTktcHBjNjRsZTANBgkqhkiG9w0B
+AQsFAAOCAgEASI4aXuhlVXPj5zmgb3YBTJzQ0QA/+e8jfSmm5NEOagwYvSg5ISp8
+urRpmGMnOJboeXylvSmqPIjVQoJeTk1yE7OqB7F3NDEiPY0QCOHpvHdHd4qjwpp5
+yw2NVk9+8b/3vD3M49bGlOwG2pHSaeybPlrJLBPF2ARHO0HxtqSx2spB0k6XBBG/
+rB6PUtUKbudtCvVNuG70YPAXpvGANgwHNWP6o2EsnZPvATrmvA/PtElNCF39syqJ
+Y1yYe+FYkr9y/ToUTDUFN4aRljrFCHZrGCwz8xI72JqKAB5EaLWdiETWaeWL3VCi
+6CVRDSQ/BvSl+C3bJ7n98Rlt+hEawxGK1zs4VAvpOVq2A1jas9Ia4S+1xvmWVAdi
+it/vH//5I2qIwjE2CGY5Ov5vywW0JT9+kxL1zGiOG8kwxmOdllqqFqQW8eKK9mUe
+HMLZKKX/ASfpg23B8ZaEFiaOCHLqirGc2hokPFWELv6lNclqFajMdWPNwDglP+OK
+ljg+4XC3gqYgt0Cjv/skg6GnWMh4F/xRWDIQAx1TwWPbdF9f2tEmoRspNj+0FLCI
+0rTZ5JRKA7w8tD0TBKZooH7iMxdcJ+mtccp7F3SWpbZMNwR/HxoEbXCtgIhX4mPf
+eJxFT+hA2DbrMI/hPQj7UlSt+suyTzPYphXHy25XGvwxSo/ejudOrq0=
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/9.3/362.pem b/repos/system_upgrade/common/files/prod-certs/9.3/362.pem
new file mode 100644
index 00000000..80a0beb7
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/9.3/362.pem
@@ -0,0 +1,36 @@
+-----BEGIN CERTIFICATE-----
+MIIGNDCCBBygAwIBAgIJALDxRLt/tVOaMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExODE3MjYwNFoXDTQzMDEx
+ODE3MjYwNFowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFszY2M4Mzk2
+My01YmI2LTQ2NTMtYWM3MC03NTc5OTFjZmU1MDddMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBvTCBujAJBgNVHRMEAjAAMEgGDCsGAQQBkggJAYJqAQQ4DDZSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIFBvd2VyLCBsaXR0bGUgZW5kaWFuIEJldGEw
+GgYMKwYBBAGSCAkBgmoCBAoMCDkuMyBCZXRhMBkGDCsGAQQBkggJAYJqAwQJDAdw
+cGM2NGxlMCwGDCsGAQQBkggJAYJqBAQcDBpyaGVsLTkscmhlbC05LWJldGEtcHBj
+NjRsZTANBgkqhkiG9w0BAQsFAAOCAgEAAZCh34sM762ZlnRF4Gi0hfmRr+z9pDmn
+IKw7M3wonyVmvPOCixNMjJGY5K052ZA8TDctC5FfJoKdr3cbEqIxBhHAVS8UYmhu
+qK4egMqUNI3Ui4DaYCDw9Ic7UDZ6KEf2FbK8OHGSZgCG6KCcECGJ/mBzryvP3Ctc
+KYdRHZLJ9h/HmjjD1fhQ0mZySNzKu3XlqT8fqi8g9XLS00defVKrc5G6TdpQJoaQ
+koWLPmSsWQTjQlo6GuTpe/lcsYWzEqjwOpX7eltkAXGYZTf47Ao02XfVuVoRvIEJ
+uESGh18LskQLacrrIBoztjZK7BQcCDfaL26qW5cPSPbZcBbMbc2Y/mL6zCfnaf2t
+VQ0hs2+n/U6f5enymfig9jYdhqq4NvnhhTNC5VZERXuR92bnkyBozogtRQ27RHFT
+cKRF6v6tG8/KWZqmHj4v+yLh0s3ECFH48wO1dzyFhQQWhwxmXQDb5XA8OjpxEGt/
+F9HrNoJhyhXLEc4Sphea5XsDFUYZbGR/MO7f7Pa5SeVqmz35BOLpZVwzU2Dq65Ww
+RPl+litDq4YrrPmdbagB0P0P4uU53i0k8oWF57eqEGgtgJEMlXFkAhwgQ1Pdh37p
+KoczLfGsv79MDbtjbwXZZ1AwDpRlkjEGOkb7zDkYiVhr/UE+Mwv6qNXgdhuKA674
+GXHtOldbC38=
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/9.3/363.pem b/repos/system_upgrade/common/files/prod-certs/9.3/363.pem
new file mode 100644
index 00000000..63ccf162
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/9.3/363.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGJjCCBA6gAwIBAgIJALDxRLt/tVOZMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExODE3MjYwNFoXDTQzMDEx
+ODE3MjYwNFowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFtmNWYyNjUw
+Zi0xODVmLTRkYTItYmFkYy0zOGU2OTBhYjY1Y2FdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBrzCBrDAJBgNVHRMEAjAAMDoGDCsGAQQBkggJAYJrAQQqDChSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIEFSTSA2NCBCZXRhMBoGDCsGAQQBkggJAYJr
+AgQKDAg5LjMgQmV0YTAZBgwrBgEEAZIICQGCawMECQwHYWFyY2g2NDAsBgwrBgEE
+AZIICQGCawQEHAwacmhlbC05LHJoZWwtOS1iZXRhLWFhcmNoNjQwDQYJKoZIhvcN
+AQELBQADggIBAALbefHcK3VySf323O/ORY07zjxqGZAccrIT5BhvyCmr4DNtElMO
+5JdcTuabdx8srv+fHbne8DPKunXwxXoiCE3OuROwb8TvxEkdhNt9X+MvyIIaqAJE
+yftfq2fzh01rtSwu5PpWQzYX7NqFaJnZAOT0aVMZfufGuBflP4wWUBfhVdLt0/uJ
+NSe59gFuq9U8XPfDk7rcL1gmHT+n+4rxaNUtrRul0o8KR/kCytTYmS/HrrAfmzQW
+w/oJOqMIfjmgCTNkE4j/ZGR5hqGcxLvqHBV5cD5Og7bPLhM/FCEc1QdBD6Gkoocu
+R4k+oZuT2St12cD56yB4gVSeFX4XYt3ehX+zmHP1el/m6ZFM1SPqIsHbs549cG9D
+s8mNxlMIOY47n3welSYWvGOVEReB1ihX74tDmfC3keg2t5qVCyQHKAddQ1z+GM0Q
+ngiJuYEf9rUFuFe23bEy3NkCLWSfQYDsHC1FjaOhxUCNSkN6YW8IUXQWz5Rb5Som
+NucA3B+F7e43hi5ZOgHQ6BY+OiUnyt2XUWbJqBuapiq3XWuDMT5hkVC7yEqS0X2u
+jHluXbxExHjkQydVWQvVDSffOcimcHTddAGMI3UFmDAzzdRXlbm/By5uGZQbUcag
+MG0E415u4myf7Sry8X1Fc/Dgmxj+aU6jsE+0Ur2J08iUC8FMoqRaVNs/
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/9.3/419.pem b/repos/system_upgrade/common/files/prod-certs/9.3/419.pem
new file mode 100644
index 00000000..a64cb936
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/9.3/419.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGFzCCA/+gAwIBAgIJALDxRLt/tVOvMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExODE3MjYxNVoXDTQzMDEx
+ODE3MjYxNVowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFsxMDY3YTc5
+Mi01OTk2LTQ3MTEtODgwMC0xOTUwOTU0NzU4NTBdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBoDCBnTAJBgNVHRMEAjAAMDUGDCsGAQQBkggJAYMjAQQlDCNSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIEFSTSA2NDAVBgwrBgEEAZIICQGDIwIEBQwD
+OS4zMBkGDCsGAQQBkggJAYMjAwQJDAdhYXJjaDY0MCcGDCsGAQQBkggJAYMjBAQX
+DBVyaGVsLTkscmhlbC05LWFhcmNoNjQwDQYJKoZIhvcNAQELBQADggIBACN+Q+sC
+Czu4DtARf+f1yOJbM6fZGI0j8O4uJ6fm6pTCG5VLMhaOmz19MF3tjd/3ZpyZirq7
+dUoYiTA1IN9k/f3pm8uunCmpG3tJyM7x2wL72B+7d37UbiaZ042h0oCjy0jb9CBg
+cfb9g+MNCCWBoAExpFavwG8x0FQCoxWIOal/yYN8GGGTZYZ7oj3dwpdJ9XYhSI2J
+YhHaaiQJAQihl+m9yVRw6DKm98tfgMPh2C7W5Wp/krFQbE5vcJZbkX7IN298grd5
+uacOMYUK7szcGCW957rCto+she4Ig6Z/eQznWzAtQz99rVzDX0D6rV8OgYfmofXB
+E/QebHOlLe8M17rZPslGD4UHXqZ0aqeKFLUzpM45jA6jJ5b78r7KpiPcYFE5OpFR
+6NakTavJ8ilUBIgSXQicVZH5LNvELgO5dzCjlrfJqj5tGvPwEHUP/uSpKg0Z71DH
+2yW9U4WoYz3s1FEc5vcXrU+vz7Pxl7sELiJ753fH71kUyG2QjwxgfbdH0YwZ/a/t
+sTrjyTrFpOajacPSdBp/SMOul40eRkJPmDNRp6kIzU+wRKO+x2Dsm9ZNklTk1Tk5
+FX8y1eyYUyO3IPRFzO9tmQYvNrCbnxtnVHvsiK2bQFkKEy8SUOYKbjOJ9p4koAjm
+zNT9mgMCVTfmKugrpVbptkDlWlbmRMGakOs1
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/9.3/433.pem b/repos/system_upgrade/common/files/prod-certs/9.3/433.pem
new file mode 100644
index 00000000..9c9fecfd
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/9.3/433.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGKTCCBBGgAwIBAgIJALDxRLt/tVObMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExODE3MjYwNFoXDTQzMDEx
+ODE3MjYwNFowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFsxODFiNGNm
+Ny1mZTJiLTRhMjQtYWJiYy0xYzJlYmUwZTRhOGVdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBsjCBrzAJBgNVHRMEAjAAMEEGDCsGAQQBkggJAYMxAQQxDC9SZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIElCTSB6IFN5c3RlbXMgQmV0YTAaBgwrBgEE
+AZIICQGDMQIECgwIOS4zIEJldGEwFwYMKwYBBAGSCAkBgzEDBAcMBXMzOTB4MCoG
+DCsGAQQBkggJAYMxBAQaDBhyaGVsLTkscmhlbC05LWJldGEtczM5MHgwDQYJKoZI
+hvcNAQELBQADggIBANaD1YdjSAn6VNTSFKuX/sIc0VhrtbcXLXj6U3AdDvoJN4Yi
+Qm3fFn2Y4N7W8U8gREaIxRaEUG3G1Lru6S9uYIoZu6w+faHOehbKyTU07xJ3YwIU
+lWdIciAwnOsUxnoMN7NDW1caFGPUTgPrDArzkHSyn88Hh+dmtuocvZ3s7WSZqXTC
+opZjxbP/O5+Td7NKBNmAEdi7lIQVWcljyrv+2HxlYiIfZ6o0iRBpbabhxoKCDXG1
+p1e5Pz92nXXPHG0lWvw6XNCebnEwU91ndEebbRI4lIe7FNYdIIhylWW8wAmPT7eP
+rEX6Q4Vd3LDbGwcGQXyxVgpqCyW62VN9BlBIRHowGI9qKPBctTANUmmyNhswiiO5
+j3UtRHCv3iJcpEv7iW6volH4HwF+uv/PtGJCHeDWnt6qUleBbtjvmapzCRhUOzID
+To7n5blIFCptEfcBUnT8SlUZWKQ2lhf5KZ0k9vPHWtFib0pJ1WETwTiho6BeoY8F
+2HfD/6xFuOHshsjkl3druUpX3xjLOqqCaSDKwGwJTMt+TT//GwasL7OvheZG4dIa
+OrZXnzl+pw5cNSofOC1FWKi7xD0x8fAmQbMwLf/eKrpynVnFvcDsWbEAtZfU6jy0
+i2oFGDjHYX9VwnB9pjRk6gm7Y1eCQSkheP4gM/w7+FVuW4azbJ3R4vQm/kSO
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/9.3/479.pem b/repos/system_upgrade/common/files/prod-certs/9.3/479.pem
new file mode 100644
index 00000000..8217fc3b
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/9.3/479.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGFTCCA/2gAwIBAgIJALDxRLt/tVOyMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExODE3MjYxNloXDTQzMDEx
+ODE3MjYxNlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFs4MzdlYzZi
+OC1mZWQyLTRhODUtOWJlMC1jMjJkZDM3NmE2YjBdMIICIjANBgkqhkiG9w0BAQEF
+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
+OS4zMBgGDCsGAQQBkggJAYNfAwQIDAZ4ODZfNjQwJgYMKwYBBAGSCAkBg18EBBYM
+FHJoZWwtOSxyaGVsLTkteDg2XzY0MA0GCSqGSIb3DQEBCwUAA4ICAQDDwbB0lRuo
+eheuRxVPx5mOpwMk72D4/940FBBIfgpJ0tyelkSOEBnL4GmN5HzN6vXwyj03N/M7
+Q2d9lAMKjsobWJZ4Wd12eJhB1FYUd/LNv62T9QL1Xac7ve/LWUNIXygcazh2nwVw
+jJo1gzJ9BLIExZiNLpBESeMcJn+Vgi9tQGcqD+QjWH5E14xwHD1j0Ni8GuQpr/S5
+KS1sF1rVl+m5BZP93NfNlijL9OXIzUyX78wq3vh+YcfrtyMi4Ric3s+6sXz/1l1E
+EfUyzxJy4AGuzAYA1zGmQhNv0GrqWnXoqjyNPCqZz3c5K1o6BaQGZoyojA6sSm0D
+2QW0j4haVimS0x8FboEOHIxpxNl91iTQ5OwzwmGxzNssW/w+guPzGjo9fPg0gptY
+witpiGTsAeqbqQ8uyNhXVkZA1vcYwP44MtZdQTGt1VIRyVnPzFEoGmfGG5a6vk7v
+4GBWjM/uSyJHXFe3GZFZcnmwchYEbKf78tAaWrbhfWSf5ahj68VJNc/waNfjQ8TW
+HPlV1x1RVTuGRDocWGUYabq4d3deU6vw3/EYowfphwK6ID5Sh/jfsVtO8BasVvK4
+d1s51rINFw7chj8leszo3zKgdaGhJG5DNE+/lh/zq4+3SSVmMz60ymbSyJ58am1m
+maoFBh+goPx/hrRTXxtfp+qNp4C7xY8o3Q==
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/9.3/486.pem b/repos/system_upgrade/common/files/prod-certs/9.3/486.pem
new file mode 100644
index 00000000..591f473b
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/9.3/486.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGJDCCBAygAwIBAgIJALDxRLt/tVOcMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExODE3MjYwNFoXDTQzMDEx
+ODE3MjYwNFowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFthNWYyMDk4
+NC04NGYxLTQ0ZTUtOTNkNC0wMzJiMDI1MDQyYWRdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBrTCBqjAJBgNVHRMEAjAAMDoGDCsGAQQBkggJAYNmAQQqDChSZWQgSGF0
+IEVudGVycHJpc2UgTGludXggZm9yIHg4Nl82NCBCZXRhMBoGDCsGAQQBkggJAYNm
+AgQKDAg5LjMgQmV0YTAYBgwrBgEEAZIICQGDZgMECAwGeDg2XzY0MCsGDCsGAQQB
+kggJAYNmBAQbDBlyaGVsLTkscmhlbC05LWJldGEteDg2XzY0MA0GCSqGSIb3DQEB
+CwUAA4ICAQC+1Krw6yHDMaqNxAN1dlGAJA58Sm5RUimBgyHDG/IGo5uTJWuqJF2J
+rbfcoo1pswElQiMRUrChbT3vUXgXaORlVQHdnBepH228qTTA33CiP2UoQKYwR1rj
+FtZGnyUdqwITn9Sm8ZbX0fa74UUZ4bS1IkZQKJdKHkBQHUjhtEUvA76baJjWLG2Y
+f282IVG1t5Z8zRDhR6akabtIjEd8AQZ4EFufFLCyZMxKhvKd4RYOvBOD06AFl3KM
++kiMjFQlLjUF3ldB7JnSpMwN829ocX3rrGYQMzYz6yg5ByxWmYqHMymBgRhC/gDX
+Sxi0Znej559QBTXidLy5exASrc/t8iwwlr94WLRDfAyV2Ven9OQu5/fbdnCY2Wb0
+2MOkglx6tVgl+Y1H2pfF7qOcS3iYDSkCxPlgWXYIoxsxvwW0W0nGA2WsIntnP9UK
+5cFX5lFMgsNGxqFmrHVR1Q9DVg9tCV3uG9lQPvwX3bHHtvaxZD5NJ6HgvEaNcvyN
+ZW6QYTnaam6XqavL0sBw9/N01SEW7NBM1DO3VGMrWzWF3nTADUbea9wCVqXkkydd
+spjFWAlxMMVWXz0CWCNdBiylKHhpmencrkA0wxjaDntJcm8qtmJol1obz8/5GNxX
+BzszVd7VwwGY6G7h929bctv9NsyfmA+NlXYWFp5Hwdqp+jmBnxlr3Q==
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/prod-certs/9.3/72.pem b/repos/system_upgrade/common/files/prod-certs/9.3/72.pem
new file mode 100644
index 00000000..25dbb8ab
--- /dev/null
+++ b/repos/system_upgrade/common/files/prod-certs/9.3/72.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGFjCCA/6gAwIBAgIJALDxRLt/tVOxMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD
+VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExFjAUBgNVBAoMDVJlZCBI
+YXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0d29yazEuMCwGA1UEAwwlUmVk
+IEhhdCBFbnRpdGxlbWVudCBQcm9kdWN0IEF1dGhvcml0eTEkMCIGCSqGSIb3DQEJ
+ARYVY2Etc3VwcG9ydEByZWRoYXQuY29tMB4XDTIzMDExODE3MjYxNloXDTQzMDEx
+ODE3MjYxNlowRDFCMEAGA1UEAww5UmVkIEhhdCBQcm9kdWN0IElEIFs2MGExNTA1
+Yy1jNDJkLTQyNzktOGM4My0yNGQyYjFmMDM3YmRdMIICIjANBgkqhkiG9w0BAQEF
+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
+AwEAAaOBnzCBnDAJBgNVHRMEAjAAMDsGCysGAQQBkggJAUgBBCwMKlJlZCBIYXQg
+RW50ZXJwcmlzZSBMaW51eCBmb3IgSUJNIHogU3lzdGVtczAUBgsrBgEEAZIICQFI
+AgQFDAM5LjMwFgYLKwYBBAGSCAkBSAMEBwwFczM5MHgwJAYLKwYBBAGSCAkBSAQE
+FQwTcmhlbC05LHJoZWwtOS1zMzkweDANBgkqhkiG9w0BAQsFAAOCAgEARLQjlxaO
+jQEdcV7ycIcjgwpeeB4TDFrg+3NCnBTqHWw4zoKv0r19CRuMNW7uyKlpRRk+0Eyt
+zblQD9cxsNywibOMliSV6aKZb7jVfx/0wbx+w+7A+n2YpkHedWQpcbSYsrQ+GZLg
+ORTfbpqt+qXUyx2PqyGqwjpO0mvW1cpV4Nqm0vs8veAPMuJd9wnbb8n3Ib/XcmHA
+hlnTCoO5kYZk9xAFYNmdWQSSfmD3hH7bdWMV17ppWrkNY14RF8BjYcmHOaUOAGdf
+caKDx9I4QeQfKDfBhvxj9KdAecQEAjhxuD3qjwkQfbrGkRdKsMAu85xagvHAXwaY
+tobmyUZg/uXozr8Vss3wwWxllDxtGpQG8mAUTlly6vvlbDXGns2Ga4RbEA++vRUM
+rOK2r7lCg8bexbHRa+F4WtUhrcZ3gIiGGDJt93aOcfgZul+FW/fXQSYKYP/C4cEn
+1VhUakpp+j+Iffu7Y5TPGE9fOGxbkmcUBbLxDOlt1M58F6tt9rOLCcLUDBU20ZLD
+GJVE7BqyQQ4FEkzPZ6zb1fbVWP1VPZT00Mgb6FFyrfo4FeLSoqMIU7y/1LRocwi2
+BW7E9IfcO3OPdIu3hsGs7vXd+juMj8pGres6bp8EFS5wF7QgcSBMTGO4/bPAg0Wv
+pUuiDsjVPVq0wfhTOOj2Tp6mPKcg62IRpT0=
+-----END CERTIFICATE-----
diff --git a/repos/system_upgrade/common/files/upgrade_paths.json b/repos/system_upgrade/common/files/upgrade_paths.json
index 5d8b44e9..2069e26d 100644
--- a/repos/system_upgrade/common/files/upgrade_paths.json
+++ b/repos/system_upgrade/common/files/upgrade_paths.json
@@ -1,10 +1,11 @@
{
"default": {
- "7.9": ["8.6", "8.8"],
+ "7.9": ["8.6", "8.8", "8.9"],
"8.6": ["9.0"],
"8.8": ["9.2"],
- "7": ["8.6", "8.8"],
- "8": ["9.2"]
+ "8.9": ["9.3"],
+ "7": ["8.6", "8.8", "8.9"],
+ "8": ["9.3"]
},
"saphana": {
"7.9": ["8.8", "8.6"],
diff --git a/repos/system_upgrade/common/libraries/config/version.py b/repos/system_upgrade/common/libraries/config/version.py
index 6bf6b4da..e146bd9b 100644
--- a/repos/system_upgrade/common/libraries/config/version.py
+++ b/repos/system_upgrade/common/libraries/config/version.py
@@ -14,7 +14,7 @@ OP_MAP = {
_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.6', '8.8'], 'rhel-saphana': ['8.6', '8.8']},
+ '8': {'rhel': ['8.6', '8.8', '8.9'], 'rhel-saphana': ['8.6', '8.8']},
}
--
2.40.1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -42,7 +42,7 @@ py2_byte_compile "%1" "%2"}
Name: leapp-repository
Version: 0.18.0
Release: 3%{?dist}
Release: 4%{?dist}
Summary: Repositories for leapp
License: ASL 2.0
@ -55,13 +55,36 @@ BuildArch: noarch
### PATCHES HERE
# Patch0001: filename.patch
Patch0001: 0001-Introduce-leapp-data-in-the-RPM-repository.patch
Patch0002: 0002-Add-el8toel9-actor-to-handle-directory-symlink.patch
Patch0003: 0003-Enable-8-9-upgrades-with-FIPS-enabled-1053.patch
Patch0004: 0004-Change-the-upgrade-paths-for-SAP-HANA.patch
Patch0005: 0005-Update-the-repomap.json-file-for-RHUI-Azure.patch
Patch0001: 0001-Add-leapp-pkgs-rpm-verification-into-the-breadcrumbs.patch
Patch0002: 0002-Update-codespell-ignorelist-couldn-repositor.patch
Patch0003: 0003-Fix-dead-link-in-checkipaserver-actor.patch
Patch0004: 0004-checkhybridimage-Fix-the-produce-of-the-report.patch
Patch0005: 0005-Upgrade-packit.yaml-config-to-have-integration-tests.patch
Patch0006: 0006-Update-packit-config-to-match-the-leapp-repositoyr-t.patch
Patch0007: 0007-Add-new-environment-variable-to-8.8to9.2.patch
Patch0008: 0008-Stop-mentioning-the-releasever-file-removal.patch
Patch0009: 0009-Fix-trace-with-impossible-LEAPP_DEVEL_TARGET_RELEASE.patch
Patch0010: 0010-Make-copr-build-functioning-again.patch
Patch0011: 0011-Add-tag-in-packit.yaml-to-enable-cost-metrics-collec.patch
Patch0012: 0012-Workaround-packit-2010-issue.patch
Patch0013: 0013-Improve-the-checkgrubcore-report-message.patch
Patch0014: 0014-Update-pr-welcome-msg-with-packit-tests-info.patch
Patch0015: 0015-Further-tune-welcome-bot-message.patch
Patch0016: 0016-Remove-note-about-leapp-ci-build.patch
Patch0017: 0017-Fix-false-positive-non-utf-symlinks-reported.patch
Patch0018: 0018-Refactor-rootscanner-to-use-library.patch
Patch0019: 0019-update-.pylintrc.patch
Patch0020: 0020-Set-encoding-for-tests.patch
Patch0021: 0021-Introduce-leapp-data-in-the-RPM-repository.patch
Patch0022: 0022-Add-el8toel9-actor-to-handle-directory-symlink-with-.patch
Patch0023: 0023-Enable-8-9-upgrades-with-FIPS-enabled-1053.patch
Patch0024: 0024-Change-the-upgrade-paths-for-SAP-HANA.patch
Patch0025: 0025-Inhibit-unsupported-x86-64-microarchitecture-RHEL9.patch
Patch0026: 0026-Fix-doc-link-in-checktargetrepos.py.patch
Patch0027: 0027-Update-the-repomap.json-file-to-address-changes-in-R.patch
Patch0028: 0028-Add-prod-certs-and-upgrade-paths-for-8.9-9.3.patch
Patch0029: 0029-Update-leapp-data-files-1.1-2.0-and-requires-repomap.patch
Patch0030: 0030-el8toel9-Warn-about-deprecated-Xorg-drivers.patch
%description
@ -209,6 +232,31 @@ Requires: python3-gobject-base
%patch0003 -p1
%patch0004 -p1
%patch0005 -p1
%patch0006 -p1
%patch0007 -p1
%patch0008 -p1
%patch0009 -p1
%patch0010 -p1
%patch0011 -p1
%patch0012 -p1
%patch0013 -p1
%patch0014 -p1
%patch0015 -p1
%patch0016 -p1
%patch0017 -p1
%patch0018 -p1
%patch0019 -p1
%patch0020 -p1
%patch0021 -p1
%patch0022 -p1
%patch0023 -p1
%patch0024 -p1
%patch0025 -p1
%patch0026 -p1
%patch0027 -p1
%patch0028 -p1
%patch0029 -p1
%patch0030 -p1
%build
@ -286,6 +334,15 @@ done;
# no files here
%changelog
* Mon Jun 19 2023 Petr Stodulka <pstodulk@redhat.com> - 0.18.0-4
- Introduce new upgrade path RHEL 8.9 -> 9.3
- Update leapp data files to reflect new changes between systems
- Detect and report use of deprecated Xorg drivers
- Minor improvements of generated reports
- Fix false positive report about invalid symlinks
- Inhibit the upgrade when unsupported x86-64 microarchitecture is detected
- Resolves: rhbz#2215997
* Mon Jun 05 2023 Petr Stodulka <pstodulk@redhat.com> - 0.18.0-3
- Update the repomap.json file to address planned changes on RHUI Azure
- Resolves: rhbz#2203800