[PATCH 1/5] activation: change SystemdService to ActivationRequest

Scott James Remnant scott at netsplit.com
Thu Jan 6 04:13:08 PST 2011


On Thu, Jan 6, 2011 at 11:46 AM, Simon McVittie
<simon.mcvittie at collabora.co.uk> wrote:
> On Thu, 06 Jan 2011 at 01:52:48 +0000, Scott James Remnant wrote:
>> The inverse though would be an upstream D-Bus service without the
>> systemd name wouldn't work for systemd?
>
> As far as I can see (I'm not an expert on this code), systemd activation
> is opt-in (if you don't specify the systemd name, the dbus activation code
> is always used) whereas you want Upstart activation to be mandatory if Upstart
> is present (all activations are handed off to Upstart, and the dbus activation
> code is never used unless Upstart is missing).
>
No, not necessarily; that's just a possibility and it's worth keeping
in the discussion at this phase.  But it's irrelevant for this
particular problem.

What I'm thinking is this; let's say an upstream distributes the following:

    [D-Bus Service]
    Name=org.freedesktop.Example
    Exec=/usr/sbin/example-service
    ActivationRequest=example

This is a .service file intended to use systemd's "example" unit.
Shipped on a systemd system it will work fine, shipped on a neutral
system it would work (the activation request would be ignored), but
shipped on an Upstart system it would fail because even if there were
a job for this, the request has overridden the use of the bus name so
Upstart no longer works.

Now let's say a different upstream distributes:

    [D-Bus Service]
    Name=com.ubuntu.Example
    Exec=/usr/sbin/example-ubuntu-service
    ActivationByManager=true

This is a .service file intended to use Upstart's mechanism, a job
gets activated by the bus name because it hasn't changed the request,
just set the activation-by-manager flag.  This will work on an Upstart
system, and it will work on a neutral system, but this *won't work* on
a systemd system because there is no "com.ubuntu.Example" unit file.


So what we've come up with so far in terms of a common protocol
actually makes it *harder* to share service files, not easier.

It doesn't even scale beyond the two existing init daemons, if the
windows D-Bus port wanted to use the windows service manager, would
they have to name all their services the same as systemd to guarantee
compatibility?

I'm starting to think that the only way to have any activated service
name in the .service file is if it's scoped by the activation
manager's name itself, going back to:

    SystemdService=...

(or, if it's preferred:

    ActivationRequest[systemd]=...

though that's just spelling at this point)

Scott


More information about the dbus mailing list