Skip to content

Commit 0e61c8d

Browse files
pablintinoopenshift-cherrypick-robot
authored andcommitted
OCPBUGS-62925: RHEL10 RT kernel packages filtering
This change is a short-term fix for the OCPBUGS-62925 bug triggered by a from scratch deploy of RHEL10 and the RT kernel. Our logic in the MCD has a hard-coded list of packages to install/uninstall that is no longer valid in RHEL10, that doesn't ship the kernel-rt-kvm package. This change conditionates the list of packages to the OS version as short fix.
1 parent 763fec8 commit 0e61c8d

File tree

3 files changed

+79
-11
lines changed

3 files changed

+79
-11
lines changed

pkg/daemon/osrelease/osrelease.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ func (os OperatingSystem) IsEL9() bool {
109109
return os.IsEL() && strings.HasPrefix(os.version, "9.") || os.version == "9"
110110
}
111111

112+
// IsEL10 is true if the OS is RHCOS 10 or SCOS 10
113+
func (os OperatingSystem) IsEL10() bool {
114+
return os.IsEL() && strings.HasPrefix(os.version, "10.") || os.version == "10"
115+
}
116+
112117
// IsFCOS is true if the OS is Fedora CoreOS
113118
func (os OperatingSystem) IsFCOS() bool {
114119
return os.id == fedora && os.variantID == coreos

pkg/daemon/osrelease/osrelease_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,36 @@ VARIANT="CoreOS"
132132
VARIANT_ID=coreos
133133
OSTREE_VERSION='37.20230126.20.0'`
134134

135+
rhcos101OSReleaseContents := `NAME="Red Hat Enterprise Linux CoreOS"
136+
VERSION="10.1.20251005-0 (Coughlan)"
137+
ID="rhel"
138+
ID_LIKE="centos fedora"
139+
VERSION_ID="10.1"
140+
PLATFORM_ID="platform:el10"
141+
PRETTY_NAME="Red Hat Enterprise Linux CoreOS 10.1.20251005-0 (Coughlan)"
142+
ANSI_COLOR="0;31"
143+
LOGO="fedora-logo-icon"
144+
CPE_NAME="cpe:/o:redhat:enterprise_linux:10.1"
145+
HOME_URL="https://www.redhat.com/"
146+
VENDOR_NAME="Red Hat"
147+
VENDOR_URL="https://www.redhat.com/"
148+
DOCUMENTATION_URL="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/10"
149+
BUG_REPORT_URL="https://issues.redhat.com/"
150+
REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 10"
151+
REDHAT_BUGZILLA_PRODUCT_VERSION=10.1
152+
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
153+
REDHAT_SUPPORT_PRODUCT_VERSION="10.1 Beta"
154+
OSTREE_VERSION='10.1.20251005-0'
155+
VARIANT=CoreOS
156+
VARIANT_ID=coreos
157+
OPENSHIFT_VERSION="4.20"`
158+
135159
testCases := []struct {
136160
Name string
137161
OSReleaseContents string
138162
IsEL bool
139163
IsEL9 bool
164+
IsEL10 bool
140165
IsFCOS bool
141166
IsSCOS bool
142167
IsCoreOSVariant bool
@@ -148,6 +173,7 @@ OSTREE_VERSION='37.20230126.20.0'`
148173
OSReleaseContents: rhcos86OSReleaseContents,
149174
IsEL: true,
150175
IsEL9: false,
176+
IsEL10: false,
151177
IsFCOS: false,
152178
IsSCOS: false,
153179
IsCoreOSVariant: true,
@@ -165,11 +191,24 @@ OSTREE_VERSION='37.20230126.20.0'`
165191
IsLikeTraditionalRHEL7: false,
166192
ToPrometheusLabel: "RHCOS",
167193
},
194+
{
195+
Name: "RHCOS 10.1",
196+
OSReleaseContents: rhcos101OSReleaseContents,
197+
IsEL: true,
198+
IsEL9: false,
199+
IsEL10: true,
200+
IsFCOS: false,
201+
IsSCOS: false,
202+
IsCoreOSVariant: true,
203+
IsLikeTraditionalRHEL7: false,
204+
ToPrometheusLabel: "RHEL",
205+
},
168206
{
169207
Name: "Fedora 37 Server",
170208
OSReleaseContents: fedora37ServerOSReleaseContents,
171209
IsEL: false,
172210
IsEL9: false,
211+
IsEL10: false,
173212
IsFCOS: false,
174213
IsSCOS: false,
175214
IsCoreOSVariant: false,
@@ -181,6 +220,7 @@ OSTREE_VERSION='37.20230126.20.0'`
181220
OSReleaseContents: scosOSReleaseContents,
182221
IsEL: true,
183222
IsEL9: true,
223+
IsEL10: false,
184224
IsFCOS: false,
185225
IsSCOS: true,
186226
IsCoreOSVariant: true,
@@ -192,6 +232,7 @@ OSTREE_VERSION='37.20230126.20.0'`
192232
OSReleaseContents: fcosOSReleaseContents,
193233
IsEL: false,
194234
IsEL9: false,
235+
IsEL10: false,
195236
IsFCOS: true,
196237
IsSCOS: false,
197238
IsCoreOSVariant: true,
@@ -209,6 +250,7 @@ OSTREE_VERSION='37.20230126.20.0'`
209250

210251
assert.Equal(t, testCase.IsEL, os.IsEL(), "expected IsEL() to be %v", testCase.IsEL)
211252
assert.Equal(t, testCase.IsEL9, os.IsEL9(), "expected IsEL9() to be %v", testCase.IsEL9)
253+
assert.Equal(t, testCase.IsEL10, os.IsEL10(), "expected IsEL10() to be %v", testCase.IsEL9)
212254
assert.Equal(t, testCase.IsCoreOSVariant, os.IsCoreOSVariant(), "expected IsCoreOSVariant() to be %v", testCase.IsCoreOSVariant)
213255
assert.Equal(t, testCase.IsFCOS, os.IsFCOS(), "expected IsFCOS() to be %v", testCase.IsFCOS)
214256
assert.Equal(t, testCase.IsSCOS, os.IsSCOS(), "expected IsSCOS() to be %v", testCase.IsSCOS)

pkg/daemon/update.go

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ const (
6767
postConfigChangeActionReboot = "reboot"
6868
)
6969

70+
// releaseKernelPackages contains the list of packages per kernel type a given OS release uses
71+
type releaseKernelPackages struct {
72+
defaultKernel []string
73+
realtimeKernel []string
74+
hugePagesKernel []string
75+
}
76+
7077
func getNodeRef(node *corev1.Node) *corev1.ObjectReference {
7178
return &corev1.ObjectReference{
7279
Kind: "Node",
@@ -1719,33 +1726,27 @@ func (dn *CoreOSDaemon) switchKernel(oldConfig, newConfig *mcfgv1.MachineConfig)
17191726
return fmt.Errorf("64k-pages is only supported for aarch64 architecture")
17201727
}
17211728

1722-
// TODO: Drop this code and use https://github.com/coreos/rpm-ostree/issues/2542 instead
1723-
defaultKernel := []string{"kernel", "kernel-core", "kernel-modules", "kernel-modules-core", "kernel-modules-extra"}
1724-
// Note this list explicitly does *not* include kernel-rt as that is a meta-package that tries to pull in a lot
1725-
// of other dependencies we don't want for historical reasons.
1726-
realtimeKernel := []string{"kernel-rt-core", "kernel-rt-modules", "kernel-rt-modules-extra", "kernel-rt-kvm"}
1727-
hugePagesKernel := []string{"kernel-64k-core", "kernel-64k-modules", "kernel-64k-modules-core", "kernel-64k-modules-extra"}
1728-
17291729
if oldKtype != newKtype {
17301730
logSystem("Initiating switch to kernel %s", newKtype)
17311731
} else {
17321732
logSystem("Re-applying kernel type %s", newKtype)
17331733
}
17341734

1735+
kernelPackages := dn.getKernelPackagesForRelease()
17351736
if newKtype == ctrlcommon.KernelTypeRealtime {
17361737
// Switch to RT kernel
17371738
args := []string{"override", "remove"}
1738-
args = append(args, defaultKernel...)
1739-
for _, pkg := range realtimeKernel {
1739+
args = append(args, kernelPackages.defaultKernel...)
1740+
for _, pkg := range kernelPackages.realtimeKernel {
17401741
args = append(args, constants.RPMOSTreeInstallArg, pkg)
17411742
}
17421743

17431744
return runRpmOstree(args...)
17441745
} else if newKtype == ctrlcommon.KernelType64kPages {
17451746
// Switch to 64k pages kernel
17461747
args := []string{"override", "remove"}
1747-
args = append(args, defaultKernel...)
1748-
for _, pkg := range hugePagesKernel {
1748+
args = append(args, kernelPackages.defaultKernel...)
1749+
for _, pkg := range kernelPackages.hugePagesKernel {
17491750
args = append(args, constants.RPMOSTreeInstallArg, pkg)
17501751
}
17511752

@@ -1754,6 +1755,26 @@ func (dn *CoreOSDaemon) switchKernel(oldConfig, newConfig *mcfgv1.MachineConfig)
17541755
return fmt.Errorf("unhandled kernel type %s", newKtype)
17551756
}
17561757

1758+
// getKernelPackagesForRelease returns the list of kernel packaged for the running OS release.
1759+
func (dn *CoreOSDaemon) getKernelPackagesForRelease() releaseKernelPackages {
1760+
// TODO: Drop this code and use https://github.com/coreos/rpm-ostree/issues/2542 instead
1761+
1762+
kernelPackages := releaseKernelPackages{
1763+
defaultKernel: []string{"kernel", "kernel-core", "kernel-modules", "kernel-modules-core", "kernel-modules-extra"},
1764+
hugePagesKernel: []string{"kernel-64k-core", "kernel-64k-modules", "kernel-64k-modules-core", "kernel-64k-modules-extra"},
1765+
// Note this list explicitly does *not* include kernel-rt as that is a meta-package that tries to pull in a lot
1766+
// of other dependencies we don't want for historical reasons.
1767+
realtimeKernel: []string{"kernel-rt-core", "kernel-rt-modules", "kernel-rt-modules-extra"},
1768+
}
1769+
1770+
// RHEL10 early bugfix of OCPBUGS-62925
1771+
// RHEL10 doesn't ship with kernel-rt-kvm
1772+
if !dn.os.IsEL10() {
1773+
kernelPackages.realtimeKernel = append(kernelPackages.realtimeKernel, "kernel-rt-kvm")
1774+
}
1775+
return kernelPackages
1776+
}
1777+
17571778
// updateFiles writes files specified by the nodeconfig to disk. it also writes
17581779
// systemd units. there is no support for multiple filesystems at this point.
17591780
//

0 commit comments

Comments
 (0)