From 89d0d7be8ca8b6d020f17b7e35f25083dffdfecd Mon Sep 17 00:00:00 2001 From: Roman Prilipskii Date: Fri, 24 Apr 2026 11:10:35 -0400 Subject: [PATCH 1/4] CLOS-4056: add CL no-auth repos to el9 repomap and upgrade repos Support the no-auth (SWNG mirrorlist) CL8 source repo and CL9 target repos so ELevate can route CloudLinux packages correctly when the source system has been migrated away from the CLN channel scheme. repomap.json.el9: - Add source pesids for CL8 side: cl-channel (SWNG mirrorlist), plus the CLN-era fragmented pesids cloudlinux8-baseos/-appstream/-powertools/-elevate for mixed-state systems. - Add target pesid cloudlinux9-channel (repoid cl-channel) for the full CL9 SWNG mirrorlist, and keep cloudlinux9-baseos/-appstream as narrower static-CDN targets. - Wire the source->target mappings. leapp_upgrade_repositories.repo.el9: - Enable [cl-channel] via the CL9 SWNG mirrorlist as the primary CL target during upgrade. - Enable [cloudlinux9-baseos] and [cloudlinux9-appstream] as backup static targets. Remove [cloudlinux9-crb] and [cloudlinux9-elevate] (no such paths exist on repo.cloudlinux.com). --- .../leapp_upgrade_repositories.repo.el9 | 34 +++-- files/cloudlinux/repomap.json.el9 | 130 ++++++++++++++++++ 2 files changed, 153 insertions(+), 11 deletions(-) diff --git a/files/cloudlinux/leapp_upgrade_repositories.repo.el9 b/files/cloudlinux/leapp_upgrade_repositories.repo.el9 index 4faaa75..3b7e9a5 100644 --- a/files/cloudlinux/leapp_upgrade_repositories.repo.el9 +++ b/files/cloudlinux/leapp_upgrade_repositories.repo.el9 @@ -81,20 +81,32 @@ gpgcheck=1 gpgkey=file:///etc/leapp/repos.d/system_upgrade/common/files/rpm-gpg/9/RPM-GPG-KEY-AlmaLinux-9 # CL repositories used during migration. +# Enabled so CloudLinux-specific packages (cagefs, alt-php*, lve-utils, etc.) +# are available when the source system is on the no-auth (SWNG) scheme and +# CLN is no longer serving them. +# cl-channel is the primary CL9 no-auth repo (SWNG mirrorlist). It serves the +# full CL package set and is the same repoid a runtime CL9 system uses. +[cl-channel] +name=CloudLinux 9 - SWNG mirrorlist +mirrorlist=https://repo.cloudlinux.com/cloudlinux/mirrorlists/cl-mirrors/cloudlinux-x86_64-server-9 +enabled=1 +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux + +# Narrower BaseOS/AppStream static repos (CDN-served, no mirrorlist). These are +# smaller slices of the package set; cl-channel above is the authoritative +# source. Kept as backups for cases where the mirrorlist is unreachable. [cloudlinux9-baseos] name=CloudLinux 9 - BaseOS baseurl=https://repo.cloudlinux.com/cloudlinux/9/BaseOS/$basearch/os/ -# keep cloudlinux9-baseos here because we need repository to install rhn-client-tools -# but at the same time we don't want to use it during migration because we have CLN channel -enabled=0 +enabled=1 gpgcheck=1 -gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux -# todo: is it needed at all? -# [cloudlinux9-elevate] -# name=CloudLinux 9 ELevate -# baseurl=https://repo.cloudlinux.com/elevate/9/$basearch/ -# gpgcheck=1 -# enabled=1 -# gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux +[cloudlinux9-appstream] +name=CloudLinux 9 - AppStream +baseurl=https://repo.cloudlinux.com/cloudlinux/9/AppStream/$basearch/os/ +enabled=1 +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux diff --git a/files/cloudlinux/repomap.json.el9 b/files/cloudlinux/repomap.json.el9 index 7c162be..14fe109 100644 --- a/files/cloudlinux/repomap.json.el9 +++ b/files/cloudlinux/repomap.json.el9 @@ -68,6 +68,40 @@ "target": [ "almalinux9-saphana" ] + }, + { + "source": "cl-channel", + "target": [ + "cloudlinux9-channel", + "cloudlinux9-baseos", + "cloudlinux9-appstream" + ] + }, + { + "source": "cloudlinux8-baseos", + "target": [ + "cloudlinux9-channel", + "cloudlinux9-baseos" + ] + }, + { + "source": "cloudlinux8-appstream", + "target": [ + "cloudlinux9-channel", + "cloudlinux9-appstream" + ] + }, + { + "source": "cloudlinux8-powertools", + "target": [ + "cloudlinux9-channel" + ] + }, + { + "source": "cloudlinux8-elevate", + "target": [ + "cloudlinux9-channel" + ] } ] } @@ -312,6 +346,102 @@ "channel": "ga" } ] + }, + { + "pesid": "cl-channel", + "entries": [ + { + "major_version": "8", + "repo_type": "rpm", + "repoid": "cl-channel", + "arch": "x86_64", + "channel": "ga" + } + ] + }, + { + "pesid": "cloudlinux8-baseos", + "entries": [ + { + "major_version": "8", + "repo_type": "rpm", + "repoid": "cloudlinux8-baseos", + "arch": "x86_64", + "channel": "ga" + } + ] + }, + { + "pesid": "cloudlinux8-appstream", + "entries": [ + { + "major_version": "8", + "repo_type": "rpm", + "repoid": "cloudlinux8-appstream", + "arch": "x86_64", + "channel": "ga" + } + ] + }, + { + "pesid": "cloudlinux8-powertools", + "entries": [ + { + "major_version": "8", + "repo_type": "rpm", + "repoid": "cloudlinux8-powertools", + "arch": "x86_64", + "channel": "ga" + } + ] + }, + { + "pesid": "cloudlinux8-elevate", + "entries": [ + { + "major_version": "8", + "repo_type": "rpm", + "repoid": "cloudlinux8-elevate", + "arch": "x86_64", + "channel": "ga" + } + ] + }, + { + "pesid": "cloudlinux9-baseos", + "entries": [ + { + "major_version": "9", + "repo_type": "rpm", + "repoid": "cloudlinux9-baseos", + "arch": "x86_64", + "channel": "ga" + } + ] + }, + { + "pesid": "cloudlinux9-appstream", + "entries": [ + { + "major_version": "9", + "repo_type": "rpm", + "repoid": "cloudlinux9-appstream", + "arch": "x86_64", + "channel": "ga" + } + ] + }, + { + "pesid": "cloudlinux9-channel", + "entries": [ + { + "major_version": "9", + "repo_type": "rpm", + "repoid": "cl-channel", + "arch": "x86_64", + "channel": "ga" + } + ] } ] } From 906453f91961129e21d9975129e810c99160d4fb Mon Sep 17 00:00:00 2001 From: Roman Prilipskii Date: Fri, 24 Apr 2026 11:39:42 -0400 Subject: [PATCH 2/4] CLOS-4056: add CL no-auth repos to el8 repomap and upgrade repos Mirror the el9 changes on the el8 side. CL8 is being migrated to the no-auth (SWNG) scheme too, so CL7->CL8 upgrades also need CL8 no-auth repos enabled at migration time and a cl-channel target pesid to route packages to the full SWNG mirror. leapp_upgrade_repositories.repo.el8: - Enable [cl-channel] (CL8 SWNG mirrorlist) as the primary CL target. - Enable [cloudlinux8-baseos], add [cloudlinux8-appstream] and [cloudlinux8-powertools] (static CDN slices, backups for the mirror). - Keep [cloudlinux8-elevate] enabled as before. repomap.json.el8: - Add cloudlinux8-channel target pesid (repoid cl-channel, major_version 8). - Prepend cloudlinux8-channel to the target list for the CL7 sources (cloudlinux-base, cloudlinux-updates, cloudlinux-hybrid-updates, cloudlinux-extras) and append it as a fallback for cloudlinux-elevate. --- .../leapp_upgrade_repositories.repo.el8 | 37 ++++++++++++++++--- files/cloudlinux/repomap.json.el8 | 23 +++++++++++- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/files/cloudlinux/leapp_upgrade_repositories.repo.el8 b/files/cloudlinux/leapp_upgrade_repositories.repo.el8 index 50689fd..b70dd87 100644 --- a/files/cloudlinux/leapp_upgrade_repositories.repo.el8 +++ b/files/cloudlinux/leapp_upgrade_repositories.repo.el8 @@ -49,19 +49,46 @@ gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux # CL repositories used during migration. +# Enabled so CloudLinux-specific packages (cagefs, alt-php*, lve-utils, etc.) +# are available when the target CL8 system uses the no-auth (SWNG) scheme +# and CLN is no longer serving them. Mirrors the el9 setup. +# cl-channel is the primary CL8 no-auth repo (SWNG mirrorlist). It serves the +# full CL package set and is the same repoid a runtime CL8 system uses. +[cl-channel] +name=CloudLinux 8 - SWNG mirrorlist +mirrorlist=https://repo.cloudlinux.com/cloudlinux/mirrorlists/cl-mirrors/cloudlinux-x86_64-server-8 +enabled=1 +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux + +# Narrower BaseOS/AppStream/PowerTools static repos (CDN-served). Smaller +# slices of the package set; cl-channel above is the authoritative source. +# Kept as backups when the mirrorlist is unreachable. [cloudlinux8-baseos] name=CloudLinux 8 - BaseOS baseurl=https://repo.cloudlinux.com/cloudlinux/8/BaseOS/$basearch/os/ -# keep cloudlinux8-baseos here because we need repository to install rhn-client-tools -# but at the same time we don't want to use it during migration because we have CLN channel -enabled=0 +enabled=1 +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux + +[cloudlinux8-appstream] +name=CloudLinux 8 - AppStream +baseurl=https://repo.cloudlinux.com/cloudlinux/8/AppStream/$basearch/os/ +enabled=1 +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux + +[cloudlinux8-powertools] +name=CloudLinux 8 - PowerTools +baseurl=https://repo.cloudlinux.com/cloudlinux/8/PowerTools/$basearch/os/ +enabled=1 gpgcheck=1 -gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux [cloudlinux8-elevate] name=CloudLinux 8 ELevate baseurl=https://repo.cloudlinux.com/elevate/8/$basearch/ -gpgcheck=1 enabled=1 +gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux diff --git a/files/cloudlinux/repomap.json.el8 b/files/cloudlinux/repomap.json.el8 index f0cab35..e2caa5e 100644 --- a/files/cloudlinux/repomap.json.el8 +++ b/files/cloudlinux/repomap.json.el8 @@ -13,6 +13,7 @@ { "source": "cloudlinux-base", "target": [ + "cloudlinux8-channel", "cloudlinux8-baseos", "cloudlinux8-appstream", "cloudlinux8-powertools" @@ -21,6 +22,7 @@ { "source": "cloudlinux-updates", "target": [ + "cloudlinux8-channel", "cloudlinux8-baseos", "cloudlinux8-appstream", "cloudlinux8-powertools" @@ -29,6 +31,7 @@ { "source": "cloudlinux-hybrid-updates", "target": [ + "cloudlinux8-channel", "cloudlinux8-baseos", "cloudlinux8-appstream", "cloudlinux8-powertools" @@ -56,11 +59,14 @@ }, { "source": "extras", - "target": ["almalinux8-extras"] + "target": [ + "almalinux8-extras" + ] }, { "source": "cloudlinux-extras", "target": [ + "cloudlinux8-channel", "cloudlinux8-baseos", "cloudlinux8-appstream", "cloudlinux8-powertools", @@ -70,7 +76,8 @@ { "source": "cloudlinux-elevate", "target": [ - "cloudlinux8-elevate" + "cloudlinux8-elevate", + "cloudlinux8-channel" ] } ] @@ -292,6 +299,18 @@ "channel": "ga" } ] + }, + { + "pesid": "cloudlinux8-channel", + "entries": [ + { + "major_version": "8", + "repo_type": "rpm", + "repoid": "cl-channel", + "arch": "x86_64", + "channel": "ga" + } + ] } ] } From 5728e253bb152e875afabd5873a808da785dc864 Mon Sep 17 00:00:00 2001 From: Roman Prilipskii Date: Fri, 24 Apr 2026 12:31:48 -0400 Subject: [PATCH 3/4] CLOS-4056: rename stanza repoid cl-channel -> cloudlinux{8,9}-channel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit During a real leapp upgrade from CL8, the existing /etc/yum.repos.d/cl.repo (with repoid cl-channel) is carried into the target 'upgrade' container alongside our /etc/leapp/files/leapp_upgrade_repositories.repo, which also defined a [cl-channel] stanza. dnf then saw two definitions of the same repoid and the 'A YUM/DNF repository defined multiple times' inhibitor fired, blocking the upgrade. Rename our stanzas to [cloudlinux8-channel] / [cloudlinux9-channel] (same SWNG mirrorlist URLs) and update the matching pesid entries in repomap.json.{el8,el9} so the repoid fields line up. The source-side cl-channel pesid is untouched — it still matches the runtime cl-channel repoid on the source CL8 system. --- files/cloudlinux/leapp_upgrade_repositories.repo.el8 | 12 +++++++++--- files/cloudlinux/leapp_upgrade_repositories.repo.el9 | 12 +++++++++--- files/cloudlinux/repomap.json.el8 | 2 +- files/cloudlinux/repomap.json.el9 | 2 +- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/files/cloudlinux/leapp_upgrade_repositories.repo.el8 b/files/cloudlinux/leapp_upgrade_repositories.repo.el8 index b70dd87..4bd9e85 100644 --- a/files/cloudlinux/leapp_upgrade_repositories.repo.el8 +++ b/files/cloudlinux/leapp_upgrade_repositories.repo.el8 @@ -53,9 +53,15 @@ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux # are available when the target CL8 system uses the no-auth (SWNG) scheme # and CLN is no longer serving them. Mirrors the el9 setup. -# cl-channel is the primary CL8 no-auth repo (SWNG mirrorlist). It serves the -# full CL package set and is the same repoid a runtime CL8 system uses. -[cl-channel] +# cloudlinux8-channel is the primary CL8 no-auth repo (SWNG mirrorlist) we +# provide for the upgrade transaction. It carries the full CL8 package set. +# +# Note: we use the distinct repoid "cloudlinux8-channel" (not "cl-channel") +# so it does not clash with a runtime "cl-channel" repo if the source system +# (or a mixed-state CL7 host) already defines one in /etc/yum.repos.d/. The +# corresponding pesid in repomap.json.el8 maps cloudlinux8-channel -> this +# repoid for CL7 sources. +[cloudlinux8-channel] name=CloudLinux 8 - SWNG mirrorlist mirrorlist=https://repo.cloudlinux.com/cloudlinux/mirrorlists/cl-mirrors/cloudlinux-x86_64-server-8 enabled=1 diff --git a/files/cloudlinux/leapp_upgrade_repositories.repo.el9 b/files/cloudlinux/leapp_upgrade_repositories.repo.el9 index 3b7e9a5..47b22fb 100644 --- a/files/cloudlinux/leapp_upgrade_repositories.repo.el9 +++ b/files/cloudlinux/leapp_upgrade_repositories.repo.el9 @@ -85,9 +85,15 @@ gpgkey=file:///etc/leapp/repos.d/system_upgrade/common/files/rpm-gpg/9/RPM-GPG-K # are available when the source system is on the no-auth (SWNG) scheme and # CLN is no longer serving them. -# cl-channel is the primary CL9 no-auth repo (SWNG mirrorlist). It serves the -# full CL package set and is the same repoid a runtime CL9 system uses. -[cl-channel] +# cloudlinux9-channel is the primary CL9 no-auth repo (SWNG mirrorlist) we +# provide for the upgrade transaction. It carries the full CL9 package set. +# +# Note: we use the distinct repoid "cloudlinux9-channel" (not "cl-channel") +# to avoid clashing with the runtime "cl-channel" repo from the source +# system's /etc/yum.repos.d/cl.repo (CL8), which is carried into the target +# upgrade container and would otherwise trigger the +# "YUM/DNF repository defined multiple times" inhibitor. +[cloudlinux9-channel] name=CloudLinux 9 - SWNG mirrorlist mirrorlist=https://repo.cloudlinux.com/cloudlinux/mirrorlists/cl-mirrors/cloudlinux-x86_64-server-9 enabled=1 diff --git a/files/cloudlinux/repomap.json.el8 b/files/cloudlinux/repomap.json.el8 index e2caa5e..c2f61ec 100644 --- a/files/cloudlinux/repomap.json.el8 +++ b/files/cloudlinux/repomap.json.el8 @@ -306,7 +306,7 @@ { "major_version": "8", "repo_type": "rpm", - "repoid": "cl-channel", + "repoid": "cloudlinux8-channel", "arch": "x86_64", "channel": "ga" } diff --git a/files/cloudlinux/repomap.json.el9 b/files/cloudlinux/repomap.json.el9 index 14fe109..a5995e8 100644 --- a/files/cloudlinux/repomap.json.el9 +++ b/files/cloudlinux/repomap.json.el9 @@ -437,7 +437,7 @@ { "major_version": "9", "repo_type": "rpm", - "repoid": "cl-channel", + "repoid": "cloudlinux9-channel", "arch": "x86_64", "channel": "ga" } From 729d0485f5fd6909cbcdbb9da2ad4605df88cacb Mon Sep 17 00:00:00 2001 From: Roman Prilipskii Date: Thu, 30 Apr 2026 16:10:39 -0400 Subject: [PATCH 4/4] Narrow down upgrade repo comments --- files/cloudlinux/leapp_upgrade_repositories.repo.el8 | 10 ++++------ files/cloudlinux/leapp_upgrade_repositories.repo.el9 | 12 +++++------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/files/cloudlinux/leapp_upgrade_repositories.repo.el8 b/files/cloudlinux/leapp_upgrade_repositories.repo.el8 index 4bd9e85..3406e1d 100644 --- a/files/cloudlinux/leapp_upgrade_repositories.repo.el8 +++ b/files/cloudlinux/leapp_upgrade_repositories.repo.el8 @@ -49,18 +49,16 @@ gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux # CL repositories used during migration. -# Enabled so CloudLinux-specific packages (cagefs, alt-php*, lve-utils, etc.) -# are available when the target CL8 system uses the no-auth (SWNG) scheme -# and CLN is no longer serving them. Mirrors the el9 setup. +# Enabled so CloudLinux-specific packages are available when the source system +# is on the no-auth scheme and CLN is no longer serving them. # cloudlinux8-channel is the primary CL8 no-auth repo (SWNG mirrorlist) we # provide for the upgrade transaction. It carries the full CL8 package set. # # Note: we use the distinct repoid "cloudlinux8-channel" (not "cl-channel") # so it does not clash with a runtime "cl-channel" repo if the source system -# (or a mixed-state CL7 host) already defines one in /etc/yum.repos.d/. The -# corresponding pesid in repomap.json.el8 maps cloudlinux8-channel -> this -# repoid for CL7 sources. +# (or a mixed-state CL7 host) already defines one in /etc/yum.repos.d/. +# The corresponding pesid in repomap.json.el8 maps cloudlinux8-channel -> this repoid for CL7 sources. [cloudlinux8-channel] name=CloudLinux 8 - SWNG mirrorlist mirrorlist=https://repo.cloudlinux.com/cloudlinux/mirrorlists/cl-mirrors/cloudlinux-x86_64-server-8 diff --git a/files/cloudlinux/leapp_upgrade_repositories.repo.el9 b/files/cloudlinux/leapp_upgrade_repositories.repo.el9 index 47b22fb..7cbfb38 100644 --- a/files/cloudlinux/leapp_upgrade_repositories.repo.el9 +++ b/files/cloudlinux/leapp_upgrade_repositories.repo.el9 @@ -81,18 +81,16 @@ gpgcheck=1 gpgkey=file:///etc/leapp/repos.d/system_upgrade/common/files/rpm-gpg/9/RPM-GPG-KEY-AlmaLinux-9 # CL repositories used during migration. -# Enabled so CloudLinux-specific packages (cagefs, alt-php*, lve-utils, etc.) -# are available when the source system is on the no-auth (SWNG) scheme and -# CLN is no longer serving them. +# Enabled so CloudLinux-specific packages are available when the source system +# is on the no-auth scheme and CLN is no longer serving them. # cloudlinux9-channel is the primary CL9 no-auth repo (SWNG mirrorlist) we # provide for the upgrade transaction. It carries the full CL9 package set. # # Note: we use the distinct repoid "cloudlinux9-channel" (not "cl-channel") -# to avoid clashing with the runtime "cl-channel" repo from the source -# system's /etc/yum.repos.d/cl.repo (CL8), which is carried into the target -# upgrade container and would otherwise trigger the -# "YUM/DNF repository defined multiple times" inhibitor. +# to avoid clashing with the runtime "cl-channel" repo from the source system's /etc/yum.repos.d/cl.repo, +# which is carried into the target upgrade container and would otherwise +# trigger the "YUM/DNF repository defined multiple times" inhibitor. [cloudlinux9-channel] name=CloudLinux 9 - SWNG mirrorlist mirrorlist=https://repo.cloudlinux.com/cloudlinux/mirrorlists/cl-mirrors/cloudlinux-x86_64-server-9