From 4d2c4566aad24982c24e6c3aeddee302ff894d34 Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Wed, 14 Oct 2015 13:55:07 +0100 Subject: [PATCH] dtrace: avoid installonly-related kernel upgrade failure The dtrace modules packages have long depended on their associated kernel, in order to cause them to be removed when the associated kernel is removed. It turns out that the installonly feature (which forces installation of kernel packages and removal of old ones rather than upgrades on 'yum upgrade') fails to cope with this situation: you get a broken-packages notice rather than a removal of the dependent package. So remove the dependency, and instead install an at job from a %postun trigger that removes old modules a little later. If this hits the rpm lock, it will fail and leave modules around; if the kernel is later reinstalled, it will remove a module that has a corresponding kernel still installed. However, both of these cases are harmless: the first case is expected to be extremely rare (you'd have to be, by chance, doing an rpm run precisely four hours after the upgrade that removed the old kernel) and has no negative consequences but the loss of a bit of disk space to a useless kernel module; the second case is harmless because the next dtrace run against that kernel will reinstall the module anyway. Orabug: 21669543 Signed-off-by: Nick Alcock Acked-by: Kris Van Hees --- dtrace/dtrace-module-OL6.spec | 34 ++++++++++++++++++++++++++++++++-- dtrace/dtrace-module-OL7.spec | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/dtrace/dtrace-module-OL6.spec b/dtrace/dtrace-module-OL6.spec index 0f60f42e05fc..e52d7a71a3b0 100644 --- a/dtrace/dtrace-module-OL6.spec +++ b/dtrace/dtrace-module-OL6.spec @@ -33,6 +33,7 @@ %define dt_0_4_3 1027 %define dt_0_4_4 1028 %define dt_0_4_5 1029 +%define dt_0_4_6 1030 %define dt_0_5_0 1280 %{lua: local kver = rpm.expand("%{kver}") @@ -45,8 +46,12 @@ if rpm.vercmp(kver, "4.1.4-3") >= 0 then rpm.define("srcver 0.5.0") - rpm.define("bldrel 3") + rpm.define("bldrel 4") rpm.define("dt_vcode "..rpm.expand("%{dt_0_5_0}")) + elseif rpm.vercmp(kver, "3.8.13-119") >= 0 then + rpm.define("srcver 0.4.6") + rpm.define("bldrel 1") + rpm.define("dt_vcode "..rpm.expand("%{dt_0_4_6}")) elseif rpm.vercmp(kver, "3.8.13-87") >= 0 then rpm.define("srcver 0.4.5") rpm.define("bldrel 3") @@ -99,9 +104,13 @@ Summary: dtrace module Version: %{srcver} Release: %{bldrel}.el6 Provides: dtrace-modules +%if %{dt_vcode} >= %{dt_0_4_6} +Requires: at +%else +Requires: kernel%{variant} = %{kver} +%endif License: CDDL Group: System Environment/Kernel -Requires: kernel%{variant} = %{kver} Source0: dtrace-module-%{srcver}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: kernel%{variant}-devel = %{kver} @@ -124,6 +133,16 @@ Maintainers: Nick Alcock Kris Van Hees +%if %{dt_vcode} >= %{dt_0_4_6} +# If this package is not removed, but its dependent kernel is, schedule +# a later removal via at, late enough that this yum job is probably over. +%triggerun -- kernel%{variant} = %{kver} + +at now + 4 hours >/dev/null 2>&1 <<'EOF' +rpm --quiet -e dtrace-modules-%{kver} +EOF +%endif + %package -n %{header_pkg} Summary: Header files for communication with the DTrace kernel module. %if %{dt_vcode} >= %{dt_0_4_4} @@ -159,7 +178,9 @@ Release: %{bldrel}.el6 Provides: dtrace-kernel-interface = 1 License: CDDL Group: System Environment/Kernel +%if %{dt_vcode} < %{dt_0_4_6} Requires: kernel%{variant} = %{kver} +%endif Source0: dtrace-module-%{srcver}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: kernel%{variant}-devel = %{kver} @@ -260,6 +281,9 @@ rm -rf %{buildroot} %changelog %if %{dt_vcode} >= %{dt_0_5_0} +* Tue Nov 17 2015 Kris Van Hees - 0.5.0-4 +- Remove explicit dependency on kernel RPM. + [Orabug: 21669543] * Fri Sep 18 2015 Kris Van Hees - 0.5.0-3 - Enable building DTrace modules for SPARC64. * Mon Aug 10 2015 Natalya Naumova - 0.5.0-2 @@ -271,6 +295,12 @@ rm -rf %{buildroot} [Orabug: 19005048] - Update uid / gid handling in view of namespaces in UEK4 kernels. [Orabug: 20456825] +%else +%if %{dt_vcode} >= %{dt_0_4_6} +* Tue Nov 17 2015 Kris Van Hees - 0.4.6-1 +- Remove explicit dependency on kernel RPM. + [Orabug: 21669543] +%endif %endif %if %{dt_vcode} >= %{dt_0_4_5} * Tue Jul 7 2015 Kris Van Hees - 0.4.5-3 diff --git a/dtrace/dtrace-module-OL7.spec b/dtrace/dtrace-module-OL7.spec index 908c61b76a20..9ad060057109 100644 --- a/dtrace/dtrace-module-OL7.spec +++ b/dtrace/dtrace-module-OL7.spec @@ -33,6 +33,7 @@ %define dt_0_4_3 1027 %define dt_0_4_4 1028 %define dt_0_4_5 1029 +%define dt_0_4_6 1030 %define dt_0_5_0 1280 %{lua: local kver = rpm.expand("%{kver}") @@ -45,8 +46,12 @@ if rpm.vercmp(kver, "4.1.4-3") >= 0 then rpm.define("srcver 0.5.0") - rpm.define("bldrel 3") + rpm.define("bldrel 4") rpm.define("dt_vcode "..rpm.expand("%{dt_0_5_0}")) + elseif rpm.vercmp(kver, "3.8.13-119") >= 0 then + rpm.define("srcver 0.4.6") + rpm.define("bldrel 1") + rpm.define("dt_vcode "..rpm.expand("%{dt_0_4_6}")) elseif rpm.vercmp(kver, "3.8.13-87") >= 0 then rpm.define("srcver 0.4.5") rpm.define("bldrel 3") @@ -99,9 +104,13 @@ Summary: dtrace module Version: %{srcver} Release: %{bldrel}.el7 Provides: dtrace-modules +%if %{dt_vcode} >= %{dt_0_4_6} +Requires: at +%else +Requires: kernel%{variant} = %{kver} +%endif License: CDDL Group: System Environment/Kernel -Requires: kernel%{variant} = %{kver} Source0: dtrace-module-%{srcver}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: kernel%{variant}-devel = %{kver} @@ -124,6 +133,16 @@ Maintainers: Nick Alcock Kris Van Hees +%if %{dt_vcode} >= %{dt_0_4_6} +# If this package is not removed, but its dependent kernel is, schedule +# a later removal via at, late enough that this yum job is probably over. +%triggerun -- kernel%{variant} = %{kver} + +at now + 4 hours >/dev/null 2>&1 <<'EOF' +rpm --quiet -e dtrace-modules-%{kver} +EOF +%endif + %package -n %{header_pkg} Summary: Header files for communication with the DTrace kernel module. %if %{dt_vcode} >= %{dt_0_4_4} @@ -150,7 +169,9 @@ Release: %{bldrel}.el7 Provides: dtrace-kernel-interface = 1 License: CDDL Group: System Environment/Kernel +%if %{dt_vcode} < %{dt_0_4_6} Requires: kernel%{variant} = %{kver} +%endif Source0: dtrace-module-%{srcver}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: kernel%{variant}-devel = %{kver} @@ -251,6 +272,9 @@ rm -rf %{buildroot} %changelog %if %{dt_vcode} >= %{dt_0_5_0} +* Tue Nov 17 2015 Kris Van Hees - 0.5.0-4 +- Remove explicit dependency on kernel RPM. + [Orabug: 21669543] * Fri` Sep 18 2015 Kris Van Hees - 0.5.0-3 - Enable building DTrace modules on SPARC64. * Tue Aug 18 2015 Kris Van Hees - 0.5.0-2 @@ -262,11 +286,16 @@ rm -rf %{buildroot} [Orabug: 19005048] - Update uid / gid handling in view of namespaces in UEK4 kernels. [Orabug: 20456825] +%else +%if %{dt_vcode} >= %{dt_0_4_6} +* Tue Nov 17 2015 Kris Van Hees - 0.4.6-1 +- Remove explicit dependency on kernel RPM. + [Orabug: 21669543] +%endif %endif %if %{dt_vcode} >= %{dt_0_4_5} * Mon Jul 6 2015 Natalya Naumova - 0.4.5-3 - modules signing support - * Tue Jun 23 2015 Kris Van Hees - 0.4.5-2 - Validate d_path() argument pointer to avoid crash. [Orabug: 21304207] -- 2.50.1