mirror of
https://git.yoctoproject.org/poky
synced 2026-04-30 12:32:12 +02:00
systemd-systemctl: fix instance template WantedBy symlink construction
Fix issue of the below instance template systemd service dependency
[Install]
WantedBy=svc-wants@%i.service
creating the symlink (instance "a" example)
/etc/systemd/system/svc-wants@%i.service.wants/svc-wanted-by@a.service
which should be
/etc/systemd/system/svc-wants@a.service.wants/svc-wanted-by@a.service
as implemented by this change.
The functionality appears regressed just after "thud" baseline when the
logic was refactored from shell script into python (commit
925e30cb10)
(From OE-Core rev: 308397f0bb3d6f3d4e9ec2c6a10823184049c9b5)
Signed-off-by: Martin Siegumfeldt <mns@gomspace.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
9ed46595f8
commit
e510222b57
@@ -195,12 +195,19 @@ class SystemdUnit():
|
|||||||
|
|
||||||
raise SystemdUnitNotFoundError(self.root, unit)
|
raise SystemdUnitNotFoundError(self.root, unit)
|
||||||
|
|
||||||
def _process_deps(self, config, service, location, prop, dirstem):
|
def _process_deps(self, config, service, location, prop, dirstem, instance):
|
||||||
systemdir = self.root / SYSCONFDIR / "systemd" / "system"
|
systemdir = self.root / SYSCONFDIR / "systemd" / "system"
|
||||||
|
|
||||||
target = ROOT / location.relative_to(self.root)
|
target = ROOT / location.relative_to(self.root)
|
||||||
try:
|
try:
|
||||||
for dependent in config.get('Install', prop):
|
for dependent in config.get('Install', prop):
|
||||||
|
# determine whether or not dependent is a template with an actual
|
||||||
|
# instance (i.e. a '@%i')
|
||||||
|
dependent_is_template = re.match(r"[^@]+@(?P<instance>[^\.]*)\.", dependent)
|
||||||
|
if dependent_is_template:
|
||||||
|
# if so, replace with the actual instance to achieve
|
||||||
|
# svc-wants@a.service.wants/svc-wanted-by@a.service
|
||||||
|
dependent = re.sub(dependent_is_template.group('instance'), instance, dependent, 1)
|
||||||
wants = systemdir / "{}.{}".format(dependent, dirstem) / service
|
wants = systemdir / "{}.{}".format(dependent, dirstem) / service
|
||||||
add_link(wants, target)
|
add_link(wants, target)
|
||||||
|
|
||||||
@@ -240,8 +247,8 @@ class SystemdUnit():
|
|||||||
else:
|
else:
|
||||||
service = self.unit
|
service = self.unit
|
||||||
|
|
||||||
self._process_deps(config, service, path, 'WantedBy', 'wants')
|
self._process_deps(config, service, path, 'WantedBy', 'wants', instance)
|
||||||
self._process_deps(config, service, path, 'RequiredBy', 'requires')
|
self._process_deps(config, service, path, 'RequiredBy', 'requires', instance)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for also in config.get('Install', 'Also'):
|
for also in config.get('Install', 'Also'):
|
||||||
|
|||||||
Reference in New Issue
Block a user