<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Fedora doesn't enable and start all units on package installation:
    there are some preset files, based on flavors, which is basically
    the policy stating which units to enable/disable by default. Some
    other units are always enabled (unless masked), by using symlinks
    directly shipped with the package like in
    /usr/lib/systemd/system/multi-users.target.wants/ for intance.
    Contrary to that, Debian/Ubuntu has the policy to enable/start
    services and facilities on package installation during postinst.
    This is done (indirectly) via "systemctl enable", which creates
    symlinks in /etc/systemd/system/*.wants/.<br>
    <br>
    This has 3 drawbacks:<br>
    - Duplicate symlinks for the same targets between /etc and units
    enabled in /usr/lib for units which are already enabled via
    /usr/lib, if the admin runs "enable"<br>
    - Wrt. the "golden image, /etc reset" approach of reducing base os
    installation defaults in /etc, this is another instance of "always
    needs to be there" clutter in /etc. If the package default is  to
    start the service, then it's better to just ship that wants.d/
    symlink in the package (and thus in /usr) instead of always having
    to create the symlink in /etc at package install time or after a
    factory reset.<br>
    - We are mixing sys admin information and distro default choices in
    the same directories, and can't tell apart what is what.<br>
    <br>
    We were thus thinking about having all default distro choices
    shipping target symlinks in /usr/lib, and having the administrator
    overrides this in /etc via systemctl. This could look similar to
    masking a unit, i. e. a symlink "/etc/.../wants.d/foo ->
    /dev/null" overrides "/usr/lib/.../wants.d/foo ->
    ../foo.service", and would be an explicit representation of "the
    admin does not want foo.service to autostart" in /etc.<br>
    <br>
    <br>
    However, we did notice the following: taking an unit, with an
    [Install] section and a symlink to enable in via that target in
    /usr/lib:<br>
    - systemctl status <unit> will report "disabled", where it's
    actually enabled and starting for that unit. This is a bug which
    should be fixed in any case, as "disabled" is outright wrong. On IRC
    it was suggested that those are "static" units, but then it should
    say at least that.<br>
    - systemctl enable <unit> will duplicate the symlink in /etc<br>
    - If we ln -s /dev/null /etc/<…>/<…>.wants/<unit>,
    then systemctl status <unit> will display the unit as being
    enabled, and it will activated once the target is reached.  This is
    also counterintuitive, as usually this means to mask/completely
    disable the unit.<br>
    <br>
    Part of the discussion on #systemd pointed out that the admin should
    then use systemctl mask <unit>. However, that means:<br>
    - The admin can't retarget a default installed unit without
    recreating another unit file<br>
    - There are 2 commands to "disable" an unit: mask for some, disable
    for others, this can bring confusion and admins won't know the
    semantic difference between the two (and indeed this is rather
    technical and unintuitive)<br>
    - The status reported with systemctl is still disabled when it's
    not.<br>
    <br>
    Tested with systemd 216 on fedora 21 and systemd 215 on ubuntu
    vivid.<br>
    <br>
    It will be great if we can come to some common grounds on how we
    should separate admin choices and default distro choices, while
    still working on the "remove /etc default distro configuration" .
    I'm happy to give a hand on the desired solutions there.<br>
    <br>
    Cheers,<br>
    Didier<br>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </body>
</html>