- 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@xxxxxxxxxxxxxxxxx> --- 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list