[systemd-devel] [PATCH v3] systemctl: Don't skip SysV init.d scripts when enabling/disabling units

Lennart Poettering lennart at poettering.net
Thu May 28 10:23:59 PDT 2015


On Thu, 28.05.15 15:10, Martin Pitt (martin.pitt at ubuntu.com) wrote:

> Hello again,
> 
> Lennart Poettering [2015-05-28 13:31 +0200]:
> > Hmm? THis sounds the wrong way round. What currently happens should be
> > this: if both are available systemd ignores the sysv script, and only
> > considers the native unit. Is that what you are trying to say?
> 
> Err yes, sorry. Adjusted the patch description.
> 
> > And you now want everything to be applied to both the sysv script and
> > the native unit?
> 
> Right, so that you keep the sysv init script and unit in sync, instead
> of enabling one and disabling the other.
> 
> > What happens if we query the state of things with is-enabled, then?
> 
> Good point, thanks for spotting; fixed. We didn't have that problem in
> our original patch as is-enabled didn't work; curiously, with the new
> systemd-sysv-install wrapper we can now implement is-enabled trivially
> :-) ).

Looks good. Please push.

> 
> Martin
> 
> -- 
> Martin Pitt                        | http://www.piware.de
> Ubuntu Developer (www.ubuntu.com)  | Debian Developer  (www.debian.org)

> From 528c97ef47c59ea65c897eacd04b39a12d2113ae Mon Sep 17 00:00:00 2001
> From: Martin Pitt <martin.pitt at ubuntu.com>
> Date: Wed, 27 May 2015 14:52:17 +0200
> Subject: [PATCH 2/2] systemctl: Don't skip SysV init.d scripts when
>  enabling/disabling units
> 
> If there is both a SysV init.d script and a systemd unit for a given name, we
> want to do the same enable/disable operation for both, instead of just on the
> systemd unit. This keeps the enablement status in sync so that switching init
> systems behaves as expected.
> ---
>  src/systemctl/systemctl.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
> index f0ba83d..897248a 100644
> --- a/src/systemctl/systemctl.c
> +++ b/src/systemctl/systemctl.c
> @@ -5149,7 +5149,10 @@ static int enable_sysv_units(const char *verb, char **args) {
>                                  break;
>                  }
>  
> -                if (found_native)
> +                /* If we have both a native unit and a SysV script,
> +                 * enable/disable them both (below); for is-enabled, prefer the
> +                 * native unit */
> +                if (found_native && streq(verb, "is-enabled"))
>                          continue;
>  
>                  p = path_join(arg_root, SYSTEM_SYSVINIT_PATH, name);
> @@ -5161,7 +5164,10 @@ static int enable_sysv_units(const char *verb, char **args) {
>                  if (!found_sysv)
>                          continue;
>  
> -                log_info("%s is not a native service, redirecting to systemd-sysv-install", name);
> +                if (found_native)
> +                        log_info("Synchronizing state of %s with SysV init with %s...", name, argv[0]);
> +                else
> +                        log_info("%s is not a native service, redirecting to systemd-sysv-install", name);
>  
>                  if (!isempty(arg_root))
>                          argv[c++] = q = strappend("--root=", arg_root);
> @@ -5209,6 +5215,9 @@ static int enable_sysv_units(const char *verb, char **args) {
>                  } else
>                          return -EPROTO;
>  
> +                if (found_native)
> +                        continue;
> +
>                  /* Remove this entry, so that we don't try enabling it as native unit */
>                  assert(f > 0);
>                  f--;
> -- 
> 2.1.4
> 




> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel



Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list