Skip to content

CLK 6.12 Namespacing#1065

Open
bmastbergen wants to merge 13 commits intociq-6.12.yfrom
{bmastbergen}_ciq-6.12.y-namespacing
Open

CLK 6.12 Namespacing#1065
bmastbergen wants to merge 13 commits intociq-6.12.yfrom
{bmastbergen}_ciq-6.12.y-namespacing

Conversation

@bmastbergen
Copy link
Copy Markdown
Collaborator

This PR brings CLK 6.12 in sync with CLK 6.18 with respect to namespacing

  • Introduces the kernel-clk6.12 package name with %{pkg_suffix} macro. Renames all tool packages (perf, libperf, rtla, rv, etc.) with the clk6.12 suffix. Adds Provides/Conflicts tags for non-parallel installable packages (headers, tools, doc) to prevent conflicts with stock Rocky packages while satisfying their dependencies.
  • Switches Module.symvers compression from xz to gzip to align with upstream kernel spec. Fixes ghost file permissions from 0644 to 0600.
  • Injects +clk6.12 into KVERREL and EXTRAVERSION so running kernels display their CLK identity in uname output (e.g., 6.12.78-1.1.el9.x86_64+clk6.12).
  • Sync spec changes from 6.18 branch - Consolidates version defines, reworks the -default package with proper scriptlets, converts tools to short-form naming, bundles bindgen-cli
    for Rocky 9.6, and exports GRUB_NON_STANDARD_KERNEL to prevent boot menu hijacking. Also fixes Provides/Requires to use %{name} instead of hardcoded "kernel".
  • Add Obsoletes tags for upgrade path from old kernel packages - Adds explicit Obsoletes entries for specific kernel-6.12 versions (6.12.15, 6.12.30, 6.12.43, 6.12.63, 6.12.74, 6.12.77) to all kernel and tool packages. These explicit Obsoletes ensure systems with the previous un-namespaced CLK 6.12 kernels see the new kernel-clk6.12 packages as upgrades.

bmastbergen and others added 5 commits April 1, 2026 15:23
Rename spec file from kernel.spec to kernel-clk6.12.spec.

Introduce %{pkg_suffix} macro (clk%{patchversion}) and use it for:
- package_name: kernel-%{pkg_suffix}
- tool packages: perf, python3-perf, libperf, rtla, rv

Tool packages now named:
- perf-%{pkg_suffix}
- python3-perf-%{pkg_suffix}
- libperf-%{pkg_suffix}
- libperf-%{pkg_suffix}-devel
- rtla-%{pkg_suffix}
- rv-%{pkg_suffix}
- *-debuginfo variants

Each tool package includes:
- Provides: <original-name> = %{specrpmversion}-%{release}
- Conflicts: <original-name>

Adds Provides and Conflicts tags to kernel-clk6.12-* packages that
cannot be parallel installed with stock Rocky kernel packages:
- kernel-doc
- kernel-headers
- kernel-cross-headers
- kernel-debuginfo-common
- kernel-tools
- kernel-tools-libs
- kernel-tools-libs-devel
- kernel-selftests-internal

This allows these packages to satisfy dependencies for stock kernel
packages while preventing simultaneous installation with stock Rocky
kernel tools.

Remove gemini switch, which comes from kernel-ark and is part of their
solution for a kernel variant that should supplant the factory kernel.

Fix config file naming in %prep to use %{name} instead of hardcoded
'kernel' prefix.

Update generate_tarball.sh to reference kernel-clk6.12.spec.
Switch Module.symvers compression from the dynamic %compression
macro (xz) to hardcoded gzip -c9, matching the upstream kernel spec.
Also fixes the ghost file permissions from 0644 to 0600.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Dieter <jdieter@ciq.com>
Inject +%{pkg_suffix} into KVERREL and the shell-level equivalents
(KernelVer, DevelDir, EXTRAVERSION) so that uname -r shows the CLK
kernel identity, e.g. 6.12.78-1.1.el9_ciq.x86_64+clk6.12.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Jonathan Dieter <jdieter@ciq.com>
- Consolidate version defines (kernel_major_minor, kernel_patch, buildid)
- Derive specversion, pkgrelease, tarfile_release from base defines
- Rework -default package with proper scriptlets and kernel-provider
- Convert tools subpackages to short form naming
- Bundle bindgen-cli for Rocky 9.6 builds
- Export GRUB_NON_STANDARD_KERNEL to prevent boot default hijacking
- Update generate_tarball.sh for new version scheme

Fix Provides/Requires to use %{name} instead of hardcoded kernel

Package names should use %{name} (kernel-clk6.12) instead of hardcoded
'kernel' in Provides and Requires to ensure dependency resolution works
correctly for CLK kernels.
Add Obsoletes tags to all packages to enable smooth upgrades from
non-namespaced kernel-6.12.x packages to kernel-clk6.12-6.12.x.

Use explicit version lists (6.12.15, 6.12.30, 6.12.43, 6.12.63,
6.12.74, 6.12.77) instead of version ranges to avoid unintentionally
obsoleting future major versions like kernel-7.0.

Changes:
- Add Obsoletes for kernel-core and all kernel variant packages
- Add Obsoletes for all non-parallel installable packages:
  * kernel-doc, kernel-headers, kernel-cross-headers
  * perf, python3-perf, libperf
  * rtla, rv
  * kernel-tools, kernel-tools-libs
  * kernel-selftests-internal
  * All corresponding debuginfo packages
@bmastbergen bmastbergen requested review from a team and jdieter April 2, 2026 00:58

# Pick the right kernel config file
Config=%{name}-%{_target_cpu}${Variant:+-${Variant}}.config
Config=kernel-%{_target_cpu}${Variant:+-${Variant}}.config
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call out. I just now realized that this naming difference was driven by the fact that we have a stub merge.py in the 6.12 branch and a functional one in the 6.18 branch. I've synced up both of these things with 6.18

@bmastbergen bmastbergen requested a review from PlaidCat April 3, 2026 16:53
%define kernel_reqprovconf(o) \
%if %{-o:0}%{!-o:1}\
Provides: kernel = %{specversion}-%{pkg_release}\
Obsoletes: kernel = 6.12.15\
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added. Thanks!

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do these obsoletes show up anywhere except the kernel package? Are they in kernel-debug or any other variant we might build?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There were a couple packages missing obsoletes, but I think with what I have now everything that needs them has them. The only packages that don't explicitly have them are meta packages (which I don't think need them) and our -default packages.

bmastbergen@troas ~/ciq/build_files
 % for rpm in *x86_64*.rpm; do echo "=== $rpm ==="; rpm -qp --qf '[%{OBSOLETENAME} = %{OBSOLETEVERSION}\n]' "$rpm" 2>/dev/null \
    | grep -E "6\.12\.(15|30|43|63|74|77)"; echo; done
=== kernel-clk6.12-6.12.78-1.1.el9.x86_64.rpm ===

=== kernel-clk6.12-core-6.12.78-1.1.el9.x86_64.rpm ===
kernel = 6.12.15
kernel = 6.12.30
kernel = 6.12.43
kernel = 6.12.63
kernel = 6.12.74
kernel = 6.12.77
kernel-core = 6.12.15
kernel-core = 6.12.30
kernel-core = 6.12.43
kernel-core = 6.12.63
kernel-core = 6.12.74
kernel-core = 6.12.77

=== kernel-clk6.12-cross-headers-6.12.78-1.1.el9.x86_64.rpm ===
kernel-cross-headers = 6.12.15
kernel-cross-headers = 6.12.30
kernel-cross-headers = 6.12.43
kernel-cross-headers = 6.12.63
kernel-cross-headers = 6.12.74
kernel-cross-headers = 6.12.77

=== kernel-clk6.12-debug-6.12.78-1.1.el9.x86_64.rpm ===

=== kernel-clk6.12-debug-core-6.12.78-1.1.el9.x86_64.rpm ===
kernel = 6.12.15
kernel = 6.12.30
kernel = 6.12.43
kernel = 6.12.63
kernel = 6.12.74
kernel = 6.12.77
kernel-debug-core = 6.12.15
kernel-debug-core = 6.12.30
kernel-debug-core = 6.12.43
kernel-debug-core = 6.12.63
kernel-debug-core = 6.12.74
kernel-debug-core = 6.12.77

=== kernel-clk6.12-debug-debuginfo-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debug-debuginfo = 6.12.15
kernel-debug-debuginfo = 6.12.30
kernel-debug-debuginfo = 6.12.43
kernel-debug-debuginfo = 6.12.63
kernel-debug-debuginfo = 6.12.74
kernel-debug-debuginfo = 6.12.77

=== kernel-clk6.12-debug-devel-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debug-devel = 6.12.15
kernel-debug-devel = 6.12.30
kernel-debug-devel = 6.12.43
kernel-debug-devel = 6.12.63
kernel-debug-devel = 6.12.74
kernel-debug-devel = 6.12.77

=== kernel-clk6.12-debug-devel-matched-6.12.78-1.1.el9.x86_64.rpm ===

=== kernel-clk6.12-debuginfo-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debuginfo = 6.12.15
kernel-debuginfo = 6.12.30
kernel-debuginfo = 6.12.43
kernel-debuginfo = 6.12.63
kernel-debuginfo = 6.12.74
kernel-debuginfo = 6.12.77

=== kernel-clk6.12-debuginfo-common-x86_64-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debuginfo-common-x86_64 = 6.12.15
kernel-debuginfo-common-x86_64 = 6.12.30
kernel-debuginfo-common-x86_64 = 6.12.43
kernel-debuginfo-common-x86_64 = 6.12.63
kernel-debuginfo-common-x86_64 = 6.12.74
kernel-debuginfo-common-x86_64 = 6.12.77

=== kernel-clk6.12-debug-modules-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debug-modules = 6.12.15
kernel-debug-modules = 6.12.30
kernel-debug-modules = 6.12.43
kernel-debug-modules = 6.12.63
kernel-debug-modules = 6.12.74
kernel-debug-modules = 6.12.77

=== kernel-clk6.12-debug-modules-core-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debug-modules-core = 6.12.15
kernel-debug-modules-core = 6.12.30
kernel-debug-modules-core = 6.12.43
kernel-debug-modules-core = 6.12.63
kernel-debug-modules-core = 6.12.74
kernel-debug-modules-core = 6.12.77

=== kernel-clk6.12-debug-modules-extra-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debug-modules-extra = 6.12.15
kernel-debug-modules-extra = 6.12.30
kernel-debug-modules-extra = 6.12.43
kernel-debug-modules-extra = 6.12.63
kernel-debug-modules-extra = 6.12.74
kernel-debug-modules-extra = 6.12.77

=== kernel-clk6.12-debug-modules-internal-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debug-modules-internal = 6.12.15
kernel-debug-modules-internal = 6.12.30
kernel-debug-modules-internal = 6.12.43
kernel-debug-modules-internal = 6.12.63
kernel-debug-modules-internal = 6.12.74
kernel-debug-modules-internal = 6.12.77

=== kernel-clk6.12-debug-modules-partner-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debug-modules-partner = 6.12.15
kernel-debug-modules-partner = 6.12.30
kernel-debug-modules-partner = 6.12.43
kernel-debug-modules-partner = 6.12.63
kernel-debug-modules-partner = 6.12.74
kernel-debug-modules-partner = 6.12.77

=== kernel-clk6.12-debug-uki-virt-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debug-uki-virt = 6.12.15
kernel-debug-uki-virt = 6.12.30
kernel-debug-uki-virt = 6.12.43
kernel-debug-uki-virt = 6.12.63
kernel-debug-uki-virt = 6.12.74
kernel-debug-uki-virt = 6.12.77

=== kernel-clk6.12-debug-uki-virt-addons-6.12.78-1.1.el9.x86_64.rpm ===
kernel-debug-uki-virt-addons = 6.12.15
kernel-debug-uki-virt-addons = 6.12.30
kernel-debug-uki-virt-addons = 6.12.43
kernel-debug-uki-virt-addons = 6.12.63
kernel-debug-uki-virt-addons = 6.12.74
kernel-debug-uki-virt-addons = 6.12.77

=== kernel-clk6.12-default-6.12.78-1.1.el9.x86_64.rpm ===

=== kernel-clk6.12-devel-6.12.78-1.1.el9.x86_64.rpm ===
kernel-devel = 6.12.15
kernel-devel = 6.12.30
kernel-devel = 6.12.43
kernel-devel = 6.12.63
kernel-devel = 6.12.74
kernel-devel = 6.12.77

=== kernel-clk6.12-devel-matched-6.12.78-1.1.el9.x86_64.rpm ===

=== kernel-clk6.12-headers-6.12.78-1.1.el9.x86_64.rpm ===
kernel-headers = 6.12.15
kernel-headers = 6.12.30
kernel-headers = 6.12.43
kernel-headers = 6.12.63
kernel-headers = 6.12.74
kernel-headers = 6.12.77

=== kernel-clk6.12-ipaclones-internal-6.12.78-1.1.el9.x86_64.rpm ===
kernel-ipaclones-internal = 6.12.15
kernel-ipaclones-internal = 6.12.30
kernel-ipaclones-internal = 6.12.43
kernel-ipaclones-internal = 6.12.63
kernel-ipaclones-internal = 6.12.74
kernel-ipaclones-internal = 6.12.77

=== kernel-clk6.12-modules-6.12.78-1.1.el9.x86_64.rpm ===
kernel-modules = 6.12.15
kernel-modules = 6.12.30
kernel-modules = 6.12.43
kernel-modules = 6.12.63
kernel-modules = 6.12.74
kernel-modules = 6.12.77

=== kernel-clk6.12-modules-core-6.12.78-1.1.el9.x86_64.rpm ===
kernel-modules-core = 6.12.15
kernel-modules-core = 6.12.30
kernel-modules-core = 6.12.43
kernel-modules-core = 6.12.63
kernel-modules-core = 6.12.74
kernel-modules-core = 6.12.77

=== kernel-clk6.12-modules-extra-6.12.78-1.1.el9.x86_64.rpm ===
kernel-modules-extra = 6.12.15
kernel-modules-extra = 6.12.30
kernel-modules-extra = 6.12.43
kernel-modules-extra = 6.12.63
kernel-modules-extra = 6.12.74
kernel-modules-extra = 6.12.77

=== kernel-clk6.12-modules-internal-6.12.78-1.1.el9.x86_64.rpm ===
kernel-modules-internal = 6.12.15
kernel-modules-internal = 6.12.30
kernel-modules-internal = 6.12.43
kernel-modules-internal = 6.12.63
kernel-modules-internal = 6.12.74
kernel-modules-internal = 6.12.77

=== kernel-clk6.12-modules-partner-6.12.78-1.1.el9.x86_64.rpm ===
kernel-modules-partner = 6.12.15
kernel-modules-partner = 6.12.30
kernel-modules-partner = 6.12.43
kernel-modules-partner = 6.12.63
kernel-modules-partner = 6.12.74
kernel-modules-partner = 6.12.77

=== kernel-clk6.12-selftests-internal-6.12.78-1.1.el9.x86_64.rpm ===
kernel-selftests-internal = 6.12.15
kernel-selftests-internal = 6.12.30
kernel-selftests-internal = 6.12.43
kernel-selftests-internal = 6.12.63
kernel-selftests-internal = 6.12.74
kernel-selftests-internal = 6.12.77

=== kernel-clk6.12-tools-6.12.78-1.1.el9.x86_64.rpm ===
kernel-tools = 6.12.15
kernel-tools = 6.12.30
kernel-tools = 6.12.43
kernel-tools = 6.12.63
kernel-tools = 6.12.74
kernel-tools = 6.12.77

=== kernel-clk6.12-tools-debuginfo-6.12.78-1.1.el9.x86_64.rpm ===
kernel-tools-debuginfo = 6.12.15
kernel-tools-debuginfo = 6.12.30
kernel-tools-debuginfo = 6.12.43
kernel-tools-debuginfo = 6.12.63
kernel-tools-debuginfo = 6.12.74
kernel-tools-debuginfo = 6.12.77

=== kernel-clk6.12-tools-libs-6.12.78-1.1.el9.x86_64.rpm ===
kernel-tools-libs = 6.12.15
kernel-tools-libs = 6.12.30
kernel-tools-libs = 6.12.43
kernel-tools-libs = 6.12.63
kernel-tools-libs = 6.12.74
kernel-tools-libs = 6.12.77

=== kernel-clk6.12-tools-libs-devel-6.12.78-1.1.el9.x86_64.rpm ===
kernel-tools-libs-devel = 6.12.15
kernel-tools-libs-devel = 6.12.30
kernel-tools-libs-devel = 6.12.43
kernel-tools-libs-devel = 6.12.63
kernel-tools-libs-devel = 6.12.74
kernel-tools-libs-devel = 6.12.77

=== kernel-clk6.12-uki-virt-6.12.78-1.1.el9.x86_64.rpm ===
kernel-uki-virt = 6.12.15
kernel-uki-virt = 6.12.30
kernel-uki-virt = 6.12.43
kernel-uki-virt = 6.12.63
kernel-uki-virt = 6.12.74
kernel-uki-virt = 6.12.77

=== kernel-clk6.12-uki-virt-addons-6.12.78-1.1.el9.x86_64.rpm ===
kernel-uki-virt-addons = 6.12.15
kernel-uki-virt-addons = 6.12.30
kernel-uki-virt-addons = 6.12.43
kernel-uki-virt-addons = 6.12.63
kernel-uki-virt-addons = 6.12.74
kernel-uki-virt-addons = 6.12.77

=== libperf-clk6.12-6.12.78-1.1.el9.x86_64.rpm ===
libperf = 6.12.15
libperf = 6.12.30
libperf = 6.12.43
libperf = 6.12.63
libperf = 6.12.74
libperf = 6.12.77

=== libperf-clk6.12-debuginfo-6.12.78-1.1.el9.x86_64.rpm ===
libperf-debuginfo = 6.12.15
libperf-debuginfo = 6.12.30
libperf-debuginfo = 6.12.43
libperf-debuginfo = 6.12.63
libperf-debuginfo = 6.12.74
libperf-debuginfo = 6.12.77

=== libperf-clk6.12-devel-6.12.78-1.1.el9.x86_64.rpm ===
libperf-devel = 6.12.15
libperf-devel = 6.12.30
libperf-devel = 6.12.43
libperf-devel = 6.12.63
libperf-devel = 6.12.74
libperf-devel = 6.12.77

=== perf-clk6.12-6.12.78-1.1.el9.x86_64.rpm ===
perf = 6.12.15
perf = 6.12.30
perf = 6.12.43
perf = 6.12.63
perf = 6.12.74
perf = 6.12.77

=== perf-clk6.12-debuginfo-6.12.78-1.1.el9.x86_64.rpm ===
perf-debuginfo = 6.12.15
perf-debuginfo = 6.12.30
perf-debuginfo = 6.12.43
perf-debuginfo = 6.12.63
perf-debuginfo = 6.12.74
perf-debuginfo = 6.12.77

=== python3-perf-clk6.12-6.12.78-1.1.el9.x86_64.rpm ===
python3-perf = 6.12.15
python3-perf = 6.12.30
python3-perf = 6.12.43
python3-perf = 6.12.63
python3-perf = 6.12.74
python3-perf = 6.12.77

=== python3-perf-clk6.12-debuginfo-6.12.78-1.1.el9.x86_64.rpm ===
python3-perf-debuginfo = 6.12.15
python3-perf-debuginfo = 6.12.30
python3-perf-debuginfo = 6.12.43
python3-perf-debuginfo = 6.12.63
python3-perf-debuginfo = 6.12.74
python3-perf-debuginfo = 6.12.77

=== rtla-clk6.12-6.12.78-1.1.el9.x86_64.rpm ===
rtla = 6.12.15
rtla = 6.12.30
rtla = 6.12.43
rtla = 6.12.63
rtla = 6.12.74
rtla = 6.12.77

=== rv-clk6.12-6.12.78-1.1.el9.x86_64.rpm ===
rv = 6.12.15
rv = 6.12.30
rv = 6.12.43
rv = 6.12.63
rv = 6.12.74
rv = 6.12.77




Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I should have been clearer. We can have, at most, one obsolete for any particular package/version combination, otherwise dnf throws up its hands and complains that it doesn't know which package to obsolete with. So, in the above, the kernel-clk6.12 package should obsolete the old kernel, while kernel-clk6.12-core should obsolete the old kernel-core. kernel-clk6.12-debug should obsolete kernel-debug and kernel-clk6.12-debug-core should obsolete kernel-debug-core.

Please make sure each package is only obsoleted by one package here.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I think this looks good. I'm assuming you've tested by having those kernels on a system and doing a DNF update.

Do note that this will remove all of our older kernels, rather than keeping 3 of them around. This might be a surprise for those using this kernel.

And, as I'm thinking about it, it might be worth having kernel-clk6.12-default Obsoleting the base kernel packages. This is making the assumption that anyone with our old non-namespaced kernels installed wants them to continue being the default when doing updates. Otherwise, if they still had some old stock Rocky kernels installed, updates to those would become the default moving forward.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I think this looks good. I'm assuming you've tested by having those kernels on a system and doing a DNF update.

Yea, it does what I expect. If I have a kernel-6.12.74 installed and a repo with kernel-clk6.12 in it, a 'dnf upgrade' gets me kernel-clk6.12 packages.

Do note that this will remove all of our older kernels, rather than keeping 3 of them around. This might be a surprise for those using this kernel.

I haven't had more than one 6.12 kernel installed, so I guess I didn't notice this. I can test to confirm. I'm not sure how to get around this. Also, maybe its ok for this one paradigm change (non-namespaced 6.12 -> namespaced 6.12) for that to happen? I'm not sure

And, as I'm thinking about it, it might be worth having kernel-clk6.12-default Obsoleting the base kernel packages. This is making the assumption that anyone with our old non-namespaced kernels installed wants them to continue being the default when doing updates. Otherwise, if they still had some old stock Rocky kernels installed, updates to those would become the default moving forward.

So the scenario you are thinking about is:

  • User has kernel-6.12.77 installed
  • User also has kernel-5.14.0 installed
  • They upgrade, kernel-6.12.77 is replaced by kernel-clk6.12
  • They upgrade and a newer kernel-5.14.0 package is available, and since /etc/sysconfig/kernel still says DEFAULT_KERNEL=kernel-core the newer 5.14.0 is going to be the default.

To ensure that the 6.12 kernel continues to be the default (via future kernel-clk6.12 updates) we would make kernel-clk6.12-default obsolete kernel-6.12.* so it gets installed on upgrade AND sets DEFAULT_KERNEL=kernel-clk6.12-core

That makes sense to me, but just to clarify, we'd be MOVING the obsoletes of the base kernel package from kernel-clk6.12 to kernel-clk6.12-default, right? they can't both obsolete the same thing.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do note that this will remove all of our older kernels, rather than keeping 3 of them around. This might be a surprise for those using this kernel.

I haven't had more than one 6.12 kernel installed, so I guess I didn't notice this. I can test to confirm. I'm not sure how to get around this. Also, maybe its ok for this one paradigm change (non-namespaced 6.12 -> namespaced 6.12) for that to happen? I'm not sure

There is no easy way to get around it, but I think it's ok. At the very least it needs to be documented.

And, as I'm thinking about it, it might be worth having kernel-clk6.12-default Obsoleting the base kernel packages. This is making the assumption that anyone with our old non-namespaced kernels installed wants them to continue being the default when doing updates. Otherwise, if they still had some old stock Rocky kernels installed, updates to those would become the default moving forward.

So the scenario you are thinking about is:

* User has kernel-6.12.77 installed

* User also has kernel-5.14.0 installed

* They upgrade, kernel-6.12.77 is replaced by kernel-clk6.12

* They upgrade and a newer kernel-5.14.0 package is available, and since /etc/sysconfig/kernel still says DEFAULT_KERNEL=kernel-core the newer 5.14.0 is going to be the default.

To ensure that the 6.12 kernel continues to be the default (via future kernel-clk6.12 updates) we would make kernel-clk6.12-default obsolete kernel-6.12.* so it gets installed on upgrade AND sets DEFAULT_KERNEL=kernel-clk6.12-core

That makes sense to me, but just to clarify, we'd be MOVING the obsoletes of the base kernel package from kernel-clk6.12 to kernel-clk6.12-default, right? they can't both obsolete the same thing.

Yes, your summary is correct, and, yes, we'd move the obsoletes because we can't have multiple packages obsoleting the same thing.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will approve this when @jdieter is happy

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, moved the obsoletes to kernel-clk6.12-default BUT...

I apparently lied when I said the 'dnf update' path worked. I cannot get that to work (with the obsoletes in kernel-clk6.12 or kernel-clk6.12-default). I swear it worked before but maybe my AI was just telling me what I wanted to hear.

PlaidCat
PlaidCat previously approved these changes Apr 3, 2026
Copy link
Copy Markdown
Collaborator

@PlaidCat PlaidCat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

Adds Obsoletes tags for kernel*-uki-virt and kernel*-uki-virt-addons packages
to ensure proper upgrade path from versions 6.12.15-77.
Adds Obsoletes tags for kernel-tools-debuginfo to ensure proper upgrade
path from versions 6.12.15-77.
Adds Obsoletes tags for kernel*-ipaclones-internal to ensure proper upgrade
path from versions 6.12.15-77.
Fixes issue where both kernel-core and kernel-debug-core were obsoleting
the 'kernel' metapackage, causing DNF conflicts.

Changes:
- Removed 'Obsoletes: kernel = ...' from kernel_reqprovconf macro
- Added 'Obsoletes: kernel = ...' to base metapackage (kernel-clk6.12)
- Added 'Obsoletes: kernel-%{1} = ...' to kernel_meta_package macro
  for variants (kernel-clk6.12-debug, etc.)

Now each old package is obsoleted by exactly one new package:
- kernel → kernel-clk6.12
- kernel-core → kernel-clk6.12-core
- kernel-debug → kernel-clk6.12-debug
- kernel-debug-core → kernel-clk6.12-debug-core
Move 'Obsoletes: kernel = ...' from the base metapackage to the
kernel-clk6.12-default package. This ensures that:

1. Users upgrading from old kernel-6.12.* packages will automatically get
   kernel-clk6.12-default installed (via Obsoletes)

2. kernel-clk6.12-default takes ownership of /etc/sysconfig/kernel to ensure
   kernel-clk6.12 variants remain the default kernel on the system

3. Without this, users with old CIQ kernels AND stock Rocky kernels might end
   up with stock Rocky kernels becoming the default after upgrade

The kernel-clk6.12-debug metapackage still keeps its Obsoletes since there
is no kernel-clk6.12-debug-default package.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants