Compare commits

2 Commits
main ... 1.1

4 changed files with 72 additions and 25 deletions

View File

@@ -1,3 +1,31 @@
-------------------------------------------------------------------
Mon Jul 7 14:36:05 UTC 2025 - Petr Mladek <pmladek@suse.com>
- Version 1.8
-------------------------------------------------------------------
Mon Jul 7 12:19:16 UTC 2025 - Petr Mladek <pmladek@suse.com>
- Drop different flavors support (bsc#1245949)
-------------------------------------------------------------------
Wed Jun 25 15:20:40 UTC 2025 - Petr Mladek <pmladek@suse.com>
- Hardcode version 1.2 when building for older distributions
than SL 16.0. The existing livepatch packages require exactly
this version. But new versions are backward compatible.
-------------------------------------------------------------------
Wed Jun 25 13:30:09 UTC 2025 - Petr Mladek <pmladek@suse.com>
- Release version 1.7
-------------------------------------------------------------------
Wed Jun 25 10:34:15 UTC 2025 - Petr Mladek <pmladek@suse.com>
- Use "transactional-update" for downgrading livepatch package
on transactional systems (bsc#1245346)
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Jan 31 10:10:30 UTC 2025 - Petr Mladek <pmladek@suse.com> Fri Jan 31 10:10:30 UTC 2025 - Petr Mladek <pmladek@suse.com>

View File

@@ -19,7 +19,11 @@
%define dracutlibdir %{_prefix}/lib/dracut %define dracutlibdir %{_prefix}/lib/dracut
Name: kernel-livepatch-tools Name: kernel-livepatch-tools
Version: 1.6 %if 0%{?suse_version} >= 1600
Version: 1.8
%else
Version: 1.2
%endif
Release: 0 Release: 0
Summary: Scripts for installing kernel live patches Summary: Scripts for installing kernel live patches
License: GPL-2.0-only License: GPL-2.0-only

14
klp.sh
View File

@@ -194,6 +194,13 @@ function klp_detailed_patch_info() {
fi fi
} }
# This check is inspired by zypper source code
function is_transactional_system() {
findmnt -O "ro" -t "btrfs" "/" >/dev/null 2>&1 || return 1
which "transactional-update" >/dev/null 2>&1 || return 1
return 0
}
function klp_downgrade() function klp_downgrade()
{ {
VERBOSE_ORIG="$VERBOSE" VERBOSE_ORIG="$VERBOSE"
@@ -237,7 +244,12 @@ function klp_downgrade()
exit 1 exit 1
fi fi
ZYPPER_COMMAND="zypper -n in --oldpackage $RPM_NAME = $PREV_RPM_VERSION" if is_transactional_system ; then
ZYPPER_COMMAND="transactional-update pkg in -n"
else
ZYPPER_COMMAND="zypper -n in"
fi
ZYPPER_COMMAND="$ZYPPER_COMMAND --oldpackage $RPM_NAME = $PREV_RPM_VERSION"
echo "KLP tool will replace the current kernel live patch with its previous version." echo "KLP tool will replace the current kernel live patch with its previous version."
echo "The command for downgrade is: $ZYPPER_COMMAND" echo "The command for downgrade is: $ZYPPER_COMMAND"
if [ -z "$NON_INTERACTIVE" ]; then if [ -z "$NON_INTERACTIVE" ]; then

View File

@@ -1,29 +1,32 @@
# Defines %flavors_to_build and %kernel_source() as a side effect. # Defines %flavor and %kernel_source() as a side effect.
%klp_module_package(n:x) \ # Also defines %flavors_to_build for backward compatibility.
#
# Macro %variant should be defined in the spec file before %klp_module_package
# is used. The flavor value is guessed from the macro %variant. The value
# "default" is used as a fallback.
%klp_module_package(n:) \
%{expand:%( \ %{expand:%( \
subpkg=/usr/lib/rpm/kernel-livepatch-subpackage \ subpkg=/usr/lib/rpm/kernel-livepatch-subpackage \
variant=%{?variant}%{!?variant:"-default"} \
[ -z "$variant" ] && variant="-default" \
flavor=${variant#-} \
if [ -z "$flavor" ] || [ ! -d "/usr/src/linux-obj/%_target_cpu/$flavor" ]; then \
echo "Error: Kernel flavor '$flavor' derived from '%%variant' not found or empty at /usr/src/linux-obj/%_target_cpu/$flavor." >&2 \
echo "%%%%internal_kmp_error" \
exit 1 \
fi \
echo "%%define _suse_klp_module_subpackage(n:v:r:f:p:bc) %%{expand:%%(cd %_sourcedir; cat $subpkg; echo %%%%nil)}" \ echo "%%define _suse_klp_module_subpackage(n:v:r:f:p:bc) %%{expand:%%(cd %_sourcedir; cat $subpkg; echo %%%%nil)}" \
flavors_to_build= \ krel=$(make -s -C /usr/src/linux-obj/%_target_cpu/$flavor kernelrelease) \
flavors="%*" \ krpmver_flavor=${krel/.0-rc/.rc} \
for flavor in $(ls /usr/src/linux-obj/%_target_cpu 2>/dev/null); do \ krpmver=${krpmver_flavor%%-*} \
case " $flavors " in \ kprovide="kernel-$flavor-$krpmver" \
(*" $flavor "*) \ khashprovide=$(rpm -q --whatprovides "$kprovide" --provides | grep "^kernel-$flavor-srchash-") \
[ -n "%{-x}" ] && continue ;; \ if [ -n "$khashprovide" ]; then \
(*) \ kprovide="$khashprovide" \
[ -z "%{-x}" -a -n "$flavors" ] && continue ;; \ fi \
esac \ echo "%%_suse_klp_module_subpackage -n %{-n*}%{!-n:kernel-livepatch} -r %{release} $krel $krpmver_flavor $kprovide" \
krel=$(make -s -C /usr/src/linux-obj/%_target_cpu/$flavor kernelrelease) \ echo "%%global flavors_to_build ${flavor}" \
krpmver_flavor=${krel/.0-rc/.rc} \ echo "%%global flavor ${flavor}"
krpmver=${krpmver_flavor%%-*} \
kprovide="kernel-$flavor-$krpmver" \
khashprovide=$(rpm -q --whatprovides "$kprovide" --provides | grep "^kernel-$flavor-srchash-") \
if [ -n "$khashprovide" ]; then \
kprovide="$khashprovide" \
fi \
flavors_to_build="$flavors_to_build $flavor" \
echo "%%_suse_klp_module_subpackage -n %{-n*}%{!-n:kernel-livepatch} -r %{release} $krel $krpmver_flavor $kprovide" \
done \
echo "%%global flavors_to_build${flavors_to_build:-%%nil}" \
echo "%%{expand:%%(test -z '%flavors_to_build' && echo %%%%internal_kmp_error)}" \ echo "%%{expand:%%(test -z '%flavors_to_build' && echo %%%%internal_kmp_error)}" \
echo "%%global kernel_source() /usr/src/linux-obj/%_target_cpu/%%%%{1}" \ echo "%%global kernel_source() /usr/src/linux-obj/%_target_cpu/%%%%{1}" \
\ \