systemd.bbclass: do not automatically add Also services

Starting a systemd service “Also” does not mean that both services
must be in the same package. However, the systemd.bbclass enforces
this.

Example:
  a.service:
    [Install]
    Also=b.service
If a.service is packed in package A, b.service is automatically packed
into package A as well. This happens even if b.service is explicitly
added to package B using FILES and SYSTEMD_SERVICE variables.

The automatic packing of socket files with the corresponding service
files is probably a widely used feature of systemd.bbclass. This bahavior
does not change.

Adding regular service files to a package just because it is another
service in the same package that "Also" uses the service is a bug that
this commit fixes.

(From OE-Core rev: f836d80eb48a2a2f9b1e66980021755cf0ca2a26)

Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Adrian Freihofer
2024-12-12 16:55:25 +01:00
committed by Richard Purdie
parent 0324f69749
commit efa5f65c22

View File

@@ -132,18 +132,18 @@ python systemd_populate_packages() {
# for *.service add *@.service
service_base = service.replace('.service', '')
systemd_add_files_and_parse(pkg_systemd, path, service_base + '@.service')
# Add the socket unit which is referred by the Also= in this service file to the same package.
with open(fullpath, 'r') as unit_f:
for line in unit_f:
if line.startswith('Also'):
also_unit = line.split('=', 1)[1].strip()
if also_unit.find('.socket') != -1:
systemd_add_files_and_parse(pkg_systemd, path, also_unit)
if service.find('.socket') != -1:
# for *.socket add *.service and *@.service
service_base = service.replace('.socket', '')
systemd_add_files_and_parse(pkg_systemd, path, service_base + '.service')
systemd_add_files_and_parse(pkg_systemd, path, service_base + '@.service')
# Add all units which have an Also= referring a unit in this package to this package as well.
with open(fullpath, 'r') as unit_f:
for line in unit_f:
if line.startswith('Also'):
also_unit = line.split('=', 1)[1].strip()
bb.warn("also: %s" % also_unit)
systemd_add_files_and_parse(pkg_systemd, path, also_unit)
# Check service-files and call systemd_add_files_and_parse for each entry
def systemd_check_services():