[libvirt] [PATCH 6/6] spec: clean up libvirtd and virtlockd service mgmt

Michael Chapman mike at very.puzzling.org
Mon Dec 9 06:23:30 UTC 2013


- 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 at 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




More information about the libvir-list mailing list