Canonical method to locally disable an init script?

Bob Proulx bob at
Tue Nov 24 07:08:56 GMT 2020

Thorsten Glaser wrote:
> 	sudo /usr/sbin/update-rc.d -f rng-tools-debian remove
> However, each update of the package re-enables it, as etckeeper shows:

    man update-rc.d  (ignoring the man page formatting errors that
    are apparently there)

       A common system administration error is to delete the links with the
       thought that this will "disable" the service, i.e., that this will
       prevent the service from being started.  However, if all links have
       been deleted then the next time the package is upgraded, the package's
       postinst script will run update-rc.d again and this will reinstall
       links at their factory default locations.  The correct way to disable
       services is to configure the service as stopped in all runlevels in
       which it is started by default.  In the System V init system this means
       renaming the service's symbolic links from S to K.  .P The script .BI
       /etc/init.d/ name must exist before update-rc.d is run to create the

Here is an example to help clarify:

    root at angst:/etc# find /etc/rc?.d/ -name '*bind9*'

    root at angst:/etc# update-rc.d bind9 disable

    root at angst:/etc# find /etc/rc?.d/ -name '*bind9'

If all links are removed then there is no way for update-rc.d/insserv
to know that it isn't doing a pristine fresh installation.  And
therefore the links are "installed for the first time" as far as they

In order for local changes to persist at least one symlink must be
present so that the installation tools know that this is previously
exist and that they should not install the default.

Hope that helps!

More information about the Debian-init-diversity mailing list