On Mon, 11 Sep 2017 14:41:12 +0100, Ian Jackson wrote: > Sean Whitton writes ("Steps towards a patch to document disabling a > daemon upon installation"): > ... >> [draft policy text] > ... >> > +The default behaviour is to enable autostarting your package's >> > daemon. >> > +If the daemon should not be autostarted unless the local >> > administrator +has explicitly requested this, use instead add to your >> > ``postinst`` +script + >> > +:: >> > + >> > + update-rc.d package defaults + update-rc.d package disable > > This has a bug: after the first rune, but before this second, starting > the daemon is enabled. (This is a regression compared to the previous > approach.) > > To make this work correctly, I think we need a new update-rc.d mechanism > which provides, in one go, the equivalent of > update-rc.d DAEMON defaults && update-rc.d DAEMON disable > > Something like > update-rc.d DAEMON add-disabled > maybe.
FWIW, there's a bug for that: #857452 >> 2. Do we need to include any text saying *why* the /etc/default >> practice >> is a bad idea? I couldn't come up with a succinct way to state it. >> In general, I think we can err on the side of not including the >> text, >> since we have policy bugs that document the reasons. > > How about this text: > > Setting a value in /etc/default/PACKAGE is nowadays troublesome > because supporting that pattern is very hard due to inflexibility in > systemd, which is usually the default init system. > > This also makes it clear that this pattern is perfectly fine if for any > reason the package does not support systemd. The /etc/default/PACKAGE thing was an anti-pattern before systemd appeared, so gratuitous jabs at it are out of place. I suggest instead mentioning the real reasons its bad: 1. Two interfaces for disabling services, which is confusing. All init systems already have an interface to disable services, so it is better to use that instead. 2. Nonstandard interface: is the knob called DISABLE or ENABLE? Is it ENABLE_FOO or ENABLE_BAR? Or maybe BAR_ENABLED? Since the pattern is reinvented by different services there is inconsistency. 3. Confusing and incorrect bootup messages. "Foo doesn't work even though I see that it starts at boot!" 4. Inability to start disabled services. A service with ENABLE=no can't be started without editing the default file, and then you have to remember to set it back before reboot. > >> 3. The maintscript snippet I have added is not right because it will >> disable the daemon every time the package is updated. >> Unfortunately, >> the postinst doesn't know whether this is a new installation, or an >> upgrade. > > This should also be fixed with a new update-rc.d rune. Agreed. > I can't speak to the behaviour of systemd, but I think the > > update-rc.d add-disabled > > operation I propose would, for sysvinit systems, do the follow: > > 1. Are there already rc*.d links for DAEMON ? If so, do nothing. > > 2. If not, create them in the way that defaults && disable > would have done. Currently, update-rc.d leaves all the hard work to insserv under sysvinit. The behaviour would have to change to check if any links exist and skip invoking insserv in that case. I am not sure if that would mean a behavior change though. Maybe this early in the release cycle is a good time to try these kinds of changes. For systemd, this operation would be a nop. I don't know about other init systems. What would they need? -- Saludos, Felipe Sateler