gregor herrmann: > On Sat, 30 Jul 2016 18:40:21 +0000, Chris Knadle wrote: > > Hi Chris!
:)
>>>>> After the upgrade, chosing not to auto-start the daemon, I get this:
>
> So madduck has set START_IODINED to false in /etc/default/iodine
>
>>>>> ● iodined.service - A daemon for tunneling traffic over DNS queries
>>>>> Loaded: loaded (/lib/systemd/system/iodined.service; disabled; vendor
>>>>> preset: enabled)
>>>>> Active: activating (auto-restart) (Result: exit-code) since Wed
>>>>> 2016-07-27 13:17:34 CEST; 4ms ago
>>>>> Docs: man:iodined(8)
>>>>> Process: 2277 ExecStartPre=/bin/sh -xc test ${START_IODINED} = true
>>>>> (code=exited, status=1/FAILURE)
>
> and the new /lib/systemd/system/iodined.service exists with 1 because
> START_IODINED != true
>
>> Unfortunately I don't see what the failure is about.
>
> See above :)
Yep, got it. i.e. ... this behavior is unfortunately expected.
>> Something to note about this: systemd spitting out such a failure *does
>> not* mean that the service didn't start. One still needs to do a 'ps
>> -ef' and look for the service to make sure it's not running.
>
> Interesting ... but still, this failure means that dpkg aborts the
> upgrade, so we have a problem here.
Ohhhh. :-( Yeah that's obviously an issue that needs a solution.
> (And if the service runs its unwanted.)
>>>>> Please use systemd masking instead of the silly shell test and
>>>>> /etc/default/* file variable to control whether the daemon should be
>>>>> started.
>>> Sounds good, I just haven't found yet how to do this from the
>>> packaging side.
>> Enabling/disabling a service via an /etc/default file is not meant to be
>> done with systemd:
>> https://wiki.ubuntu.com/SystemdForUpstartUsers#A.2Fetc.2Fdefault_files_which_enable.2Fdisable_jobs
>
> Right. And
>
> "There is no clean way to evaluate these in a systemd unit. You can
> check them in ExecStartPre=, but that would mean that the unit will
> be in "failed" state if the service gets disabled that way, and so,
> is not desirable."
>
> matches what we see here.
I see that now.
What I think might be helpful here is the dh-systemd package,
specifically the dh_systemd_enable command:
Package: dh-systemd
[...]
Description-en: debhelper add-on to handle systemd unit files
dh-systemd provides a debhelper sequence addon named 'systemd' and the
dh_systemd_enable/dh_systemd_start commands.
.
The dh_systemd_enable command adds the appropriate code to the
postinst, prerm and postrm maint scripts to properly enable/disable
systemd service files.
The dh_systemd_start command deals with start/stop/restart on upgrades
for systemd-only service files.
Because basically what I think you want to happen is:
- systemd (in general) ignores the enable/disable environment
variable in the /etc/default file (because 'disabled' causes
problems), but will use any other environment variables
(This is what I see being done in Debian packages that
support systemd.)
- The postinst script runs 'systemctl enable iodined.service'
upon installation, and I think this could be done conditionally
based on the contents of the enable/disable env variable in
the /etc/default file.
I've had a quick look at the Debian Policy Manual, and /etc/default
files are discussed near the end of section 9.3.2, but it doesn't
discuss this in relation to systemd.
I've been considering this same issue ever since bug #780300.
>> I'm running systemd (and have for several years) and am happy to help
>> with this if I can.
>
> Thanks!
Glad to help where I can.
-- Chris
--
Chris Knadle
[email protected]
signature.asc
Description: OpenPGP digital signature

