]> git.ipfire.org Git - thirdparty/systemd.git/commit
shared/install: try harder to find enablement symlinks when disabling a unit
authorFranck Bui <fbui@suse.com>
Mon, 25 Nov 2019 15:05:56 +0000 (16:05 +0100)
committerFranck Bui <fbui@suse.com>
Fri, 10 Jan 2020 13:28:42 +0000 (14:28 +0100)
commit66a19d85a533b15ed32f4066ec880b5a8c06babd
tree0ca7aad724e71d6507c3d9be045fb54990cf5d4a
parent29a743f99346ca0eae0fbf7389307bad873fb1be
shared/install: try harder to find enablement symlinks when disabling a unit

It might be needed to follow symlinks more deeply when we're looking for
enablement symlinks pointing to the removed service.

Let's consider the case where service 'old' is being renamed 'new' (will happen
most likely during package upgrade). Before the service is going to be renamed,
there's the following enablement symlink:

 /etc/systemd/system/multi-user.target.wants/old.service -> /usr/lib/systemd/system/old.service

In order to rename 'old' into 'new' and transparently restart the service, the
old name is still provided as a 'static' alias for the new service. This should
also help keeping backward compatibilities since the old name might still be
embedded in unit files, scripts, generators and such.

Hence after the package is upgraded, the following symlinks including the
enablement symlink are present:

 /usr/lib/systemd/system/old.service -> new.service
 /etc/systemd/system/multi-user.target.wants/old.service -> /usr/lib/systemd/system/old.service

If later the user decides to disable the service, we should figure out that the
enablement symlink (which still has the old name) is actually referring to 'new'
(indirectly) even if it points to the alias.
src/shared/install.c