From ee1ce580f5373070e4b6a50d1ae4a3218c737a72 Mon Sep 17 00:00:00 2001 Message-Id: From: Martin Kletzander Date: Mon, 14 Feb 2022 12:37:37 +0100 Subject: [PATCH] Make systemd unit ordering more robust Since libvirt-guests script/service can operate on various URIs and we do support both socket activation and traditional services, the ordering should be specified for all the possible sockets and services. Also remove the Wants= dependency since do not want to start any service. We cannot know which one libvirt-guests is configured, so we'd have to start all the daemons which would break if unused colliding services are not masked (libvirtd.service in the modular case and all the modular daemon service units in the monolithic scenario). Fortunately we can assume that the system is configured properly to start services/sockets that are of interest to the user. That also works with the setup described in https://libvirt.org/daemons.html . To make it even more robust we add the daemon service into the machine units created for individual domains as it was missing there. https://bugzilla.redhat.com/show_bug.cgi?id=1868537 Signed-off-by: Martin Kletzander Reviewed-by: Michal Privoznik (cherry picked from commit 4e42686adef8b9e9266f0099ddcd25bc95c4ed43) Signed-off-by: Martin Kletzander --- src/util/virsystemd.c | 8 ++++++-- tools/libvirt-guests.service.in | 12 +++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c index a86d4c6bb9..f156c2f39a 100644 --- a/src/util/virsystemd.c +++ b/src/util/virsystemd.c @@ -441,8 +441,10 @@ int virSystemdCreateMachine(const char *name, nicindexes, nnicindexes, sizeof(int)); gprops = g_variant_new_parsed("[('Slice', <%s>)," " ('After', <['libvirtd.service']>)," + " ('After', <['virt%sd.service']>)," " ('Before', <['virt-guest-shutdown.target']>)]", - slicename); + slicename, + drivername); message = g_variant_new("(s@ayssus@ai@a(sv))", name, guuid, @@ -489,8 +491,10 @@ int virSystemdCreateMachine(const char *name, uuid, 16, sizeof(unsigned char)); gprops = g_variant_new_parsed("[('Slice', <%s>)," " ('After', <['libvirtd.service']>)," + " ('After', <['virt%sd.service']>)," " ('Before', <['virt-guest-shutdown.target']>)]", - slicename); + slicename, + drivername); message = g_variant_new("(s@ayssus@a(sv))", name, guuid, diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in index 1a9b233e11..3cf6476196 100644 --- a/tools/libvirt-guests.service.in +++ b/tools/libvirt-guests.service.in @@ -1,10 +1,20 @@ [Unit] Description=Suspend/Resume Running libvirt Guests -Wants=libvirtd.service Requires=virt-guest-shutdown.target After=network.target After=time-sync.target +After=libvirtd.socket +After=virtqemud.socket +After=virtlxcd.socket +After=virtvboxd.socket +After=virtvzd.socket +After=virtxend.socket After=libvirtd.service +After=virtqemud.service +After=virtlxcd.service +After=virtvboxd.service +After=virtvzd.service +After=virtxend.service After=virt-guest-shutdown.target Documentation=man:libvirt-guests(8) Documentation=https://libvirt.org -- 2.35.1