Skip to content

Commit 574cc4f

Browse files
jdieterclaude
andcommitted
Rework -default package and clean up tool subpackage naming
Move -default subpackage out of %if %{with_tools} guard so it exists independently of the tools build flag. Add Requires(posttrans) on -core to guarantee vmlinuz is installed before grubby runs. Add Provides/Conflicts on kernel-provider(default) for mutual exclusion. Replace the simple %post sed approach with proper %pre/%postun/%posttrans scriptlets that back up the original /etc/sysconfig/kernel, restore it on uninstall, and use grubby to set the boot default. Convert tools subpackages from -n %{package_name}-tools to %package tools (short form) matching the convention used by all other subpackages. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Jonathan Dieter <jdieter@ciq.com>
1 parent f05b823 commit 574cc4f

1 file changed

Lines changed: 85 additions & 32 deletions

File tree

ciq/SPECS/kernel-clk6.18.spec

Lines changed: 85 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1321,7 +1321,7 @@ This package provides debug information for the libperf package.
13211321
%endif
13221322

13231323
%if %{with_tools}
1324-
%package -n %{package_name}-tools
1324+
%package tools
13251325
Summary: Assortment of tools for the Linux kernel
13261326
Provides: kernel-tools = %{specversion}-%{release}
13271327
Conflicts: kernel-tools
@@ -1336,19 +1336,19 @@ Obsoletes: cpuspeed < 1:1.5-16
13361336
Requires: %{package_name}-tools-libs = %{specversion}-%{release}
13371337
%endif
13381338
%define __requires_exclude ^%{_bindir}/python
1339-
%description -n %{package_name}-tools
1339+
%description tools
13401340
This package contains the tools/ directory from the kernel source
13411341
and the supporting documentation.
13421342

1343-
%package -n %{package_name}-tools-libs
1343+
%package tools-libs
13441344
Summary: Libraries for the kernels-tools
13451345
Provides: kernel-tools-libs = %{specversion}-%{release}
13461346
Conflicts: kernel-tools-libs
1347-
%description -n %{package_name}-tools-libs
1347+
%description tools-libs
13481348
This package contains the libraries built from the tools/ directory
13491349
from the kernel source.
13501350

1351-
%package -n %{package_name}-tools-libs-devel
1351+
%package tools-libs-devel
13521352
Summary: Assortment of tools for the Linux kernel
13531353
Provides: kernel-tools-libs-devel = %{specversion}-%{release}
13541354
Conflicts: kernel-tools-libs-devel
@@ -1359,15 +1359,15 @@ Obsoletes: cpupowerutils-devel < 1:009-0.6.p1
13591359
%endif
13601360
Requires: %{package_name}-tools-libs = %{version}-%{release}
13611361
Provides: %{package_name}-tools-devel
1362-
%description -n %{package_name}-tools-libs-devel
1362+
%description tools-libs-devel
13631363
This package contains the development files for the tools/ directory from
13641364
the kernel source.
13651365

1366-
%package -n %{package_name}-tools-debuginfo
1366+
%package tools-debuginfo
13671367
Summary: Debug information for package %{package_name}-tools
13681368
Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
13691369
AutoReqProv: no
1370-
%description -n %{package_name}-tools-debuginfo
1370+
%description tools-debuginfo
13711371
This package provides debug information for package %{package_name}-tools.
13721372

13731373
# Note that this pattern only works right to match the .build-id
@@ -1404,17 +1404,24 @@ complex systems.
14041404
The rv tool is the interface for a collection of monitors that aim
14051405
analysing the logical and timing behavior of Linux.
14061406

1407-
%package -n %{package_name}-default
1408-
Summary: Make kernel-%{pkg_suffix} the default kernel
1409-
Requires: %{package_name}-core
1410-
%description -n %{package_name}-default
1411-
This package configures kernel-%{pkg_suffix} as the default kernel for the system
1412-
by modifying /etc/sysconfig/kernel. When installed, new kernels will be
1413-
kernel-%{pkg_suffix} variants by default.
1414-
14151407
# with_tools
14161408
%endif
14171409

1410+
%package default
1411+
Summary: Set kernel-%{pkg_suffix} as the default kernel
1412+
Requires: %{package_name} = %{?epoch:%{epoch}:}%{specversion}-%{release}
1413+
Requires(posttrans): %{package_name}-core = %{?epoch:%{epoch}:}%{specversion}-%{release}
1414+
Provides: kernel-provider(default)
1415+
Conflicts: kernel-provider(default)
1416+
%description default
1417+
This package sets kernel-%{pkg_suffix} as the default kernel for the system
1418+
by modifying /etc/sysconfig/kernel. When installed, only new kernels of the
1419+
kernel-%{pkg_suffix} variants will be set as the default kernel.
1420+
1421+
WARNING: Installing this package takes ownership of /etc/sysconfig/kernel.
1422+
Manual edits will be overwritten on reinstall. To manage this file yourself,
1423+
remove this package first.
1424+
14181425
%if %{with_selftests}
14191426

14201427
%package selftests-internal
@@ -3760,23 +3767,69 @@ popd
37603767
###
37613768

37623769
%if %{with_tools}
3763-
%post -n %{package_name}-tools-libs
3770+
%post tools-libs
37643771
/sbin/ldconfig
37653772

3766-
%postun -n %{package_name}-tools-libs
3773+
%postun tools-libs
37673774
/sbin/ldconfig
37683775
%endif
37693776

3770-
%post -n %{package_name}-default
3771-
if [ -f /etc/sysconfig/kernel ]; then
3772-
# Update existing DEFAULTKERNEL line or append if not present
3773-
if grep -q "^DEFAULTKERNEL=" /etc/sysconfig/kernel; then
3774-
/bin/sed -i 's/^DEFAULTKERNEL=.*/DEFAULTKERNEL=kernel-%{pkg_suffix}/' /etc/sysconfig/kernel
3777+
%postun default
3778+
# Restore original /etc/sysconfig/kernel on uninstall, but only if the file
3779+
# still references our kernel. If another kernel-provider(default) package
3780+
# has already taken over the file, the grep won't match and we leave it alone.
3781+
if [ "$1" -eq 0 ] && \
3782+
grep -q "^DEFAULTKERNEL=kernel-%{pkg_suffix}-core$" /etc/sysconfig/kernel 2>/dev/null; then
3783+
if [ -f /etc/sysconfig/kernel.rpmsave ]; then
3784+
mv -f /etc/sysconfig/kernel.rpmsave /etc/sysconfig/kernel
37753785
else
3776-
echo "DEFAULTKERNEL=kernel-%{pkg_suffix}" >> /etc/sysconfig/kernel
3786+
# Backup is gone; write a sane default
3787+
cat > /etc/sysconfig/kernel <<EOF
3788+
# UPDATEDEFAULT specifies if kernel-install should make
3789+
# new kernels the default
3790+
UPDATEDEFAULT=yes
3791+
3792+
# DEFAULTKERNEL specifies the default kernel package type
3793+
DEFAULTKERNEL=kernel-core
3794+
EOF
37773795
fi
37783796
fi
37793797

3798+
%pre default
3799+
# Already configured -- nothing to do. This also handles upgrades safely:
3800+
# %postun of the old version sees $1 > 0 and skips the restore, so our
3801+
# managed file from the prior install remains intact.
3802+
if grep -q "^DEFAULTKERNEL=kernel-%{pkg_suffix}-core$" /etc/sysconfig/kernel 2>/dev/null; then
3803+
exit 0
3804+
fi
3805+
3806+
# Back up the original file only on first install; never clobber an existing
3807+
# backup so the original config is always recoverable on uninstall.
3808+
if [ ! -f /etc/sysconfig/kernel.rpmsave ] && [ -f /etc/sysconfig/kernel ]; then
3809+
cp -f /etc/sysconfig/kernel /etc/sysconfig/kernel.rpmsave || exit 1
3810+
fi
3811+
3812+
# Write our managed configuration
3813+
cat > /etc/sysconfig/kernel <<EOF
3814+
# This file is managed by %{package_name}-default
3815+
# To revert to the original, uninstall %{package_name}-default
3816+
# and restore /etc/sysconfig/kernel.rpmsave
3817+
#
3818+
# UPDATEDEFAULT specifies if kernel-install should make
3819+
# new kernels the default
3820+
UPDATEDEFAULT=yes
3821+
3822+
# DEFAULTKERNEL specifies the default kernel package type
3823+
DEFAULTKERNEL=kernel-%{pkg_suffix}-core
3824+
EOF
3825+
3826+
%posttrans default
3827+
# Set this kernel version as the boot default after all transactions complete
3828+
if [ -f /boot/vmlinuz-%{KVERREL} ]; then
3829+
grubby --set-default=/boot/vmlinuz-%{KVERREL} ||
3830+
echo "warning: failed to set kernel-%{pkg_suffix} as boot default" >&2
3831+
fi
3832+
37803833
#
37813834
# This macro defines a %%post script for a kernel*-devel package.
37823835
# %%kernel_devel_post [<subpackage>]
@@ -4141,9 +4194,9 @@ fi\
41414194

41424195
%if %{with_tools}
41434196
%ifnarch %{cpupowerarchs}
4144-
%files -n %{package_name}-tools
4197+
%files tools
41454198
%else
4146-
%files -n %{package_name}-tools -f cpupower.lang
4199+
%files tools -f cpupower.lang
41474200
%{_bindir}/cpupower
41484201
%{_libexecdir}/cpupower
41494202
%{_unitdir}/cpupower.service
@@ -4187,16 +4240,16 @@ fi\
41874240
%endif
41884241

41894242
%if %{with_debuginfo}
4190-
%files -f %{package_name}-tools-debuginfo.list -n %{package_name}-tools-debuginfo
4243+
%files -f %{package_name}-tools-debuginfo.list tools-debuginfo
41914244
%endif
41924245

4193-
%files -n %{package_name}-tools-libs
4246+
%files tools-libs
41944247
%ifarch %{cpupowerarchs}
41954248
%{_libdir}/libcpupower.so.1
41964249
%{_libdir}/libcpupower.so.1.0.1
41974250
%endif
41984251

4199-
%files -n %{package_name}-tools-libs-devel
4252+
%files tools-libs-devel
42004253
%ifarch %{cpupowerarchs}
42014254
%{_libdir}/libcpupower.so
42024255
%{_includedir}/cpufreq.h
@@ -4236,12 +4289,12 @@ fi\
42364289
%{_mandir}/man1/rv-mon-sched.1.gz
42374290
%{_mandir}/man1/rv.1.gz
42384291

4239-
%files -n %{package_name}-default
4240-
# This is a meta-package with no files
4241-
42424292
# with_tools
42434293
%endif
42444294

4295+
%files default
4296+
# This is a meta-package with no files
4297+
42454298
%if %{with_selftests}
42464299
%files selftests-internal
42474300
%{_libexecdir}/ksamples

0 commit comments

Comments
 (0)