Bug#832582: update-rc.d foo disable broken without insserv

Michael Biebl biebl at debian.org
Wed Jul 27 09:48:00 BST 2016


Package: init-system-helpers
Version: 1.40
Severity: serious

In the latest upload, we dropped the insserv dependency and added some
fallback code for SysV init scripts for the case where insserv is not
installed [1].

Unfortunately, the disable case is not handled correctly. It removes all
symlinks:


    # for "disable" we cannot rely on the init script still being present, as
    # this gets called in postrm for purging. Just remove all symlinks.
    if ("disable" eq $action) { unlink($_) for
        glob("/etc/rc?.d/[SK][0-9][0-9]$scriptname"); return; }

On package upgrades, the SysV init script gets enabled again via
update-rc.d foo defaults. This means
1/ For SysV only service, we enable and start a service, overriding the
   admins settings.
2/ For a package with native service files and a SysV init script, the
   state gets out of sync.

I consider 1/ a blocker, which is why I'm marking this as RC.

The correct why to handle disable a SysV init script, is to turn
existing S symlinks in runlevel S,2,3,4,5 into K symlinks.

For this we don't need the LSB header, we simply have to check for the
existence symlinks on the disk.
The update-rc.d man page says that the sequence number of the K symlink
should be 100 minus the priority of the S symlink.
For simplicities reason, I would simply turn S symlinks into K01
symlinks.

Enable would be the reverse action. We check in runlevels S,2,3,4,5 for
K symlinks and turn them into S symlinks.
Again, I would just use priority S01 here.

So, a disable + enable on service foo might change the priority of that
SysV init script, but under systemd those priorities are ignored and if
sysvinit-core is installed, it will pull in insserv which will correct
the priorities. So we do not lose any relevant (admin) configuration.

Regards,
Michael


[1] http://anonscm.debian.org/cgit/collab-maint/init-system-helpers.git/commit/?id=f51e81cabe
-- System Information:
Debian Release: stretch/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'unstable'), (200, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.6.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages init-system-helpers depends on:
ii  perl-base  5.22.2-3

init-system-helpers recommends no packages.

init-system-helpers suggests no packages.

-- no debconf information



More information about the Pkg-systemd-maintainers mailing list