- systemctl and the %systemd_* RPM macros can take multiple unit names
in the one invocation. Make use of this to avoid repeated systemd
daemon reloads.
- virtlockd was only properly enabled and disabled when using systemd,
but when systemd RPM macros were not available (e.g. on Fedora < 18).
Make sure it's enabled when systemd RPM macros are present, or when
using initscripts.
- Always use "reload" on virtlockd, not "condrestart". This allows it
to
cleanly re-execute itself without losing running state. Ignore any
error should the reload fail.
- Move the reloading of virtlockd and libvirtd via their initscripts
into the daemon package's %postun scriptlet. These services must be
restarted after all of the libvirt-daemon-driver-* packages have
been upgraded during the same RPM transaction.
- Add a %triggerpostun executed only when upgrading an older
libvirt-daemon. As an older package would only reload libvirtd during
%post, and the newer package would only reload libvirtd during
%postun, such an upgrade would not reload libvirtd at all without the
trigger.
Signed-off-by: Michael Chapman <mike(a)very.puzzling.org>
---
libvirt.spec.in | 43 +++++++++++++++++++++++--------------------
1 file changed, 23 insertions(+), 20 deletions(-)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index bd16eb3..9b34f3f 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1591,12 +1591,11 @@ done
%if %{with_systemd}
%if %{with_systemd_macros}
- %systemd_post libvirtd.service
+ %systemd_post virtlockd.socket libvirtd.service
%else
if [ $1 -eq 1 ] ; then
# Initial installation
- /bin/systemctl enable virtlockd.socket >/dev/null 2>&1 || :
- /bin/systemctl enable libvirtd.service >/dev/null 2>&1 || :
+ /bin/systemctl enable virtlockd.socket libvirtd.service >/dev/null 2>&1 ||
:
fi
%endif
%else
@@ -1611,46 +1610,50 @@ fi
%endif
/sbin/chkconfig --add libvirtd
-if [ "$1" -ge "1" ]; then
- /sbin/service libvirtd condrestart > /dev/null 2>&1
-fi
+/sbin/chkconfig --add virtlockd
%endif
%preun daemon
%if %{with_systemd}
%if %{with_systemd_macros}
- %systemd_preun libvirtd.service
+ %systemd_preun libvirtd.service virtlockd.socket virtlockd.service
%else
if [ $1 -eq 0 ] ; then
# Package removal, not upgrade
- /bin/systemctl --no-reload disable virtlockd.socket > /dev/null 2>&1 || :
- /bin/systemctl --no-reload disable libvirtd.service > /dev/null 2>&1 || :
- /bin/systemctl stop libvirtd.service > /dev/null 2>&1 || :
- /bin/systemctl stop virtlockd.service > /dev/null 2>&1 || :
+ /bin/systemctl --no-reload disable libvirtd.service virtlockd.socket
virtlockd.service > /dev/null 2>&1 || :
+ /bin/systemctl stop libvirtd.service virtlockd.socket virtlockd.service >
/dev/null 2>&1 || :
fi
%endif
%else
if [ $1 = 0 ]; then
/sbin/service libvirtd stop 1>/dev/null 2>&1
/sbin/chkconfig --del libvirtd
+ /sbin/service virtlockd stop 1>/dev/null 2>&1
+ /sbin/chkconfig --del virtlockd
fi
%endif
%postun daemon
%if %{with_systemd}
- %if %{with_systemd_macros}
- %systemd_postun_with_restart libvirtd.service
- %else
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
if [ $1 -ge 1 ] ; then
- # Package upgrade, not uninstall
- /bin/systemctl status virtlockd.service >/dev/null 2>&1
- if [ $? = 1 ] ; then
- /bin/systemctl kill --signal=USR1 virtlockd.service >/dev/null 2>&1 ||
:
- fi
+ /bin/systemctl reload-or-try-restart virtlockd.service >/dev/null 2>&1 ||
:
/bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
fi
- %endif
+ %else
+if [ $1 -ge 1 ]; then
+ /sbin/service virtlockd reload > /dev/null 2>&1 || :
+ /sbin/service libvirtd condrestart > /dev/null 2>&1
+fi
+ %endif
+
+ %if %{with_systemd}
+ %else
+%triggerpostun daemon -- libvirt-daemon < 1.2.1
+if [ "$1" -ge "1" ]; then
+ /sbin/service virtlockd reload > /dev/null 2>&1 || :
+ /sbin/service libvirtd condrestart > /dev/null 2>&1
+fi
%endif
%if %{with_network}
--
1.8.4.2