Add migration spec for kernel -> kernel-clk6.12 namespace transition#1292
Add migration spec for kernel -> kernel-clk6.12 namespace transition#1292bmastbergen wants to merge 4 commits into
Conversation
RPM spec that transitions users from old non-namespaced CIQ kernel 6.12.x packages to the new kernel-clk6.12 namespace. Uses rich deps to only migrate packages the user actually has installed. Includes a systemd oneshot service to clean up old installonly packages on next boot (can't rpm -e from %posttrans due to RPM db lock). Migration shims intentionally avoid Provides for non-namespaced names (e.g. kernel-headers) since the namespaced packages already carry those Provides, and adding them to the shims would trigger the corresponding Conflicts directives.
…ich deps Switch shims from version-pinned Obsoletes to a version ceiling (< 6.13) so dnf upgrade automatically discovers them as replacements for installed non-namespaced packages. Remove Provides for old names on shims to avoid triggering Conflicts on the namespaced packages. Drop rich deps from base package since dnf upgrade discovers each shim independently via Obsoletes. Base package requires kernel-clk6.12-modules (to ensure the full kernel is installed, not just core) and kernel-clk6.12-default (to set DEFAULTKERNEL=kernel-clk6.12-core so future kernel installs become the default boot entry). Move dnf-mark-install to per-subpackage posttrans so namespaced packages survive shim removal. Rewrite cleanup script to dynamically find non-namespaced 6.12.x kernel-core packages instead of using a hardcoded version list. Fix cleanup script to only disable itself when all non-namespaced kernels are gone, not just when some were removed. Note: the kernel-clk6.12 meta-package does not get installed because kernel-clk6.12-core provides the kernel-clk6.12 virtual, letting DNF satisfy the dependency without the meta-package. All real packages (core, modules, modules-core) are installed and functional.
|
I will test this tomorrow |
| %package abi-stablelists | ||
| Summary: Migrate kernel-abi-stablelists to kernel-clk6.12-abi-stablelists | ||
| Obsoletes: kernel-abi-stablelists < %{obs_ceil} | ||
| Requires: kernel-clk6.12-abi-stablelists |
There was a problem hiding this comment.
Does this cause a problem since we don't produce this some we dont have a stable list?
and never provided it previously for clk?
kernel-abi-stablelists.noarch : The Rocky Linux kernel ABI symbol stablelists
I will install it as a part of my test tomorrow (actually I'll install most of these)
There was a problem hiding this comment.
This is a good catch. I've removed this, along with a few other packages we've never built.
Remove migration shims for kernel-cross-headers, kernel-ipaclones-internal, kernel-abi-stablelists, and kernel-uki-virt-addons. The CLK 6.12 kernel spec doesn't produce namespaced equivalents for these (with_cross_headers, with_ipaclones, and with_efiuki are all disabled, and abi-stablelists isn't in the spec at all). If a user had any of these installed, the shim's Requires on a non-existent package would fail the transaction.
|
I ran into some issues. |
We moved netfilter and qdisc schedulers from -extra to -core. that should be the only module packaging change. I think you found a different bug. I think kernel-clk6.12-debug-modules is Providing kernel-clk6.12-modules and that got installed instead of the actual kernel-clk6.12-modules package. That is a kernel-clk6.12.spec bug, not a migration bug. |
The kernel_modules_package and kernel_modules_core_package macros provided the generic package name (e.g. kernel-clk6.12-modules) even for debug variants. This caused DNF to treat kernel-clk6.12-debug-modules as a valid provider of kernel-clk6.12-modules, pulling in the entire debug kernel when only the non-debug modules were intended. Include the variant name in the Provides so debug-modules only provides kernel-clk6.12-debug-modules, not the generic kernel-clk6.12-modules. For non-debug builds the expansion is unchanged.
|
I'm good with shipping this with the debug stuff updated |
Migration metapackage that transitions users from old non-namespaced CIQ kernel 6.12.x packages to the new kernel-clk6.12 namespace.
How it works
Each subpackage shim carries
Obsoletes: <old-name> < 6.12.86(sodnf upgradediscovers it automatically) andRequires: <namespaced-replacement>(to pull in the new package). Shims have no Provides for the old name, which avoids triggering theConflictsdirectives on the namespaced packages.Migration happens automatically via
dnf upgrade. Each shim is discovered independently by the DNF solver via its Obsoletes.What gets migrated
kernel-clk6.12-defaultis pulled in to setDEFAULTKERNEL=kernel-clk6.12-corein/etc/sysconfig/kernel, ensuring future namespaced kernel installs become the default boot entry%posttransrunsdnf mark installon each namespaced replacement so they survive shim removalPrerequisite
The old non-namespaced repo (
ciq-kernel-lt-6_12) must be disabled before migration. If both repos are enabled, DNF prefers same-name upgrades (e.g., kernel-headers 6.12.85 -> 6.12.88) over Obsoletes-based shims.Known limitation
The
kernel-clk6.12meta-package does not get installed becausekernel-clk6.12-coreprovides thekernel-clk6.12virtual, letting DNF satisfy the dependency without the meta-package. All real packages (core, modules, modules-core) are installed and functional.Tested scenarios
dnf upgradediscovers shims and migrates all packagesdnf install kernel-headersafter migration says "already installed"dnf upgradewith old repo re-enabled: nothing to do (Conflicts blocks regression)dnf autoremovedoes not touch any namespaced packages (dnf mark install working)kernel-clk6.12-defaultinstalled,DEFAULTKERNELupdated fromkernel-coretokernel-clk6.12-core