(Sorry for the noise, pressed 'send' to soon...)

Am 2015-03-20 15:01, schrieb Raphael Hertzog:
On Sun, 15 Mar 2015, Christian Seiler wrote:
Control: severity -1 important
Control: tags -1 + patch

I'm tempted to raise the severity to serious as the current behaviour
is really bad for packages that ship both native .service files and
init script.

I was also tempted, but decided to first raise it to important first (it
was normal before).

I have created a patch that implements the previously missing parts of systemd integration into update-rc.d, following along the lines of the
patch I have written for deb-systemd-helper (bug #780522).

While this improves the situation, there is at least another corner case.

I really believe that reimplementing "systemctl enable/disable" ourselves
is a bad choice. I understand it's needed to register this
enabled/disabled status even when systemd is not installed... but we
should have stored those information in a directory of our own
and call all the required "systemctl enable/disable"accordingly when we
install systemd.

The corner case I just encountered is with "openbsd-inetd". The
service file is inetd.service but the package ships openbsd-inetd.service
as a symlink to inetd.service so both names refer to the same unit
and it effectively masks the init script (/etc/init.d/openbsd-inetd).

Everything is fine except that when deb-systemd-helper enables
inetd.service it creates inetd.service symlinks. And when you do
"update-rc.d openbsd-inetd enable/disable", update-rc.d will create/remove
an openbsd-inetd.service symlink.

So "update-rc.d openbsd-inetd disable" doesn't disable the service
since inetd.service remains... and enable creates a duplicate symlink
in multi-user.target.wants.

Using "systemctl enable|disable inetd" works as expected
but "systemctl enable|disable openbsd-inetd" does not detect
that openbsd-inetd is a synonym for inetd, and will consider
that the unit is one coming from a SysV setup since
/etc/init.d/openbsd-inetd exists...

Note that with bare systemd (at least 215, I didn't test newer versions),
this doesn't really work either:

# cat > /lib/systemd/system/a.service <<EOF
[Service]
ExecStart=/bin/true
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF
# ln -s a.service /lib/systemd/system/b.service
# systemctl daemon-reload
# systemctl enable a.service        # works
Created symlink from /etc/systemd/system/multi-user.target.wants/a.service to /lib/systemd/system/a.service.
# systemctl disable a.service       # works
Removed symlink /etc/systemd/system/multi-user.target.wants/a.service.
# systemctl enable b.service
Failed to execute operation: No such file or directory

(There is no /etc/init.d/a or /etc/init.d/b, so only systemd's own code-
path will be used here.)

So even if update-rc.d didn't do the logic by itself, non-Alias=-symlinks
currently don't work with systemctl enable/disable, so your example
wouldn't have worked even if Jessie came only with systemd and insserv was
only used for sysv scripts.

Christian


--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to