[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#941194: initscripts: remove some implementation details



Control: reassign -1 debian-policy

The section on initscripts has too much implementation details about
/etc/rcn.d; these are better explained by external documentation.
Also the rationale for why `DISABLED=yes` (or similar) fits better
into a footnote than the main text (IMHO).

(Policy also should say something about LSB headers in "Writing the
scripts", but that will be a different patch.)

Ansgar
> From 4bdc0bfa5a08ae0481a9820c1d4bfb8b933afcc4 Mon Sep 17 00:00:00 2001
From: Ansgar <ansgar@debian.org>
Date: Thu, 26 Sep 2019 08:49:28 +0200
Subject: [PATCH 1/2] move rationale to discourage old practice into footnote

---
 policy/ch-opersys.rst | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/policy/ch-opersys.rst b/policy/ch-opersys.rst
index 6e0c020..1b63064 100644
--- a/policy/ch-opersys.rst
+++ b/policy/ch-opersys.rst
@@ -554,16 +554,7 @@ administrator can enable autostarting the daemon using the command
 ``update-rc.d package enable``.
 
 An older practice, which should not be used, was to include a line
-like ``DISABLED=yes`` in the package's ``/etc/default`` file.  The
-package's init script would not start the service until the local
-system administrator changed this to ``DISABLED=no``, or similar.  The
-problem with this approach was that it hides from the init system
-whether or not the daemon should actually be started, which leads to
-inconsistent and confusing behavior: ``service <package> start`` may
-return success but not start the service; services with a dependency
-on this service will be started even though the service isn't running;
-and init system status commands may incorrectly claim that the service
-was started.
+like ``DISABLED=yes`` in the package's ``/etc/default`` file.  [#]_
 
 Note that if your package changes runlevels or priority, you may have to
 remove and recreate the links, since otherwise the old links may
@@ -1034,6 +1025,17 @@ Debian, so this section has been removed.
    init scripts, may fail if ``set          -e`` is in effect and echoing status messages to the
    console fails, for example.
 
+.. [#]
+   The package's init script would not start the service until the
+   local system administrator changed this to ``DISABLED=no``, or
+   similar.  The problem with this approach was that it hides from the
+   init system whether or not the daemon should actually be started,
+   which leads to inconsistent and confusing behavior: ``service
+   <package> start`` may return success but not start the service;
+   services with a dependency on this service will be started even
+   though the service isn't running; and init system status commands
+   may incorrectly claim that the service was started.
+
 .. [#]
    Creating, modifying or removing a file in
    ``/usr/lib/mime/packages/`` using maintainer scripts will not
-- 
2.23.0

> From 82db1fc4300e2b6563f2436fadf3f964d567c65b Mon Sep 17 00:00:00 2001
From: Ansgar <ansgar@debian.org>
Date: Thu, 26 Sep 2019 08:54:03 +0200
Subject: [PATCH 2/2] refer to external documentation for implementation
 details of /etc/rcn.d

---
 policy/ch-opersys.rst | 65 ++++++++-----------------------------------
 1 file changed, 12 insertions(+), 53 deletions(-)

diff --git a/policy/ch-opersys.rst b/policy/ch-opersys.rst
index 1b63064..5a647fd 100644
--- a/policy/ch-opersys.rst
+++ b/policy/ch-opersys.rst
@@ -329,59 +329,18 @@ The ``/etc/init.d`` directory contains the scripts executed by ``init``
 at boot time and when the init state (or "runlevel") is changed (see
 ``init(8)``).
 
-There are at least two different, yet functionally equivalent, ways of
-handling these scripts. For the sake of simplicity, this document
-describes only the symbolic link method. However, it must not be assumed
-by maintainer scripts that this method is being used, and any automated
-manipulation of the various runlevel behaviors by maintainer scripts
-must be performed using ``update-rc.d`` as described below and not by
-manually installing or removing symlinks. For information on the
-implementation details of the other method, implemented in the
-``file-rc`` package, please refer to the documentation of that package.
-
-These scripts are referenced by symbolic links in the ``/etc/rcn.d``
-directories. When changing runlevels, ``init`` looks in the directory
-``/etc/rcn.d`` for the scripts it should execute, where ``n`` is the
-runlevel that is being changed to, or ``S`` for the boot-up scripts.
-
-The names of the links all have the form ``Smmscript`` or ``Kmmscript``
-where mm is a two-digit number and script is the name of the script
-(this should be the same as the name of the actual script in
-``/etc/init.d``).
-
-When ``init`` changes runlevel first the targets of the links whose
-names start with a ``K`` are executed, each with the single argument
-``stop``, followed by the scripts prefixed with an ``S``, each with the
-single argument ``start``. (The links are those in the ``/etc/rcn.d``
-directory corresponding to the new runlevel.) The ``K`` links are
-responsible for killing services and the ``S`` link for starting
-services upon entering the runlevel.
-
-For example, if we are changing from runlevel 2 to runlevel 3, init will
-first execute all of the ``K`` prefixed scripts it finds in
-``/etc/rc3.d``, and then all of the ``S`` prefixed scripts in that
-directory. The links starting with ``K`` will cause the referred-to file
-to be executed with an argument of ``stop``, and the ``S`` links with an
-argument of ``start``.
-
-The two-digit number mm is used to determine the order in which to run
-the scripts: low-numbered links have their scripts run first. For
-example, the ``K20`` scripts will be executed before the ``K30``
-scripts. This is used when a certain service must be started before
-another. For example, the name server ``bind`` might need to be started
-before the news server ``inn`` so that ``inn`` can set up its access
-lists. In this case, the script that starts ``bind`` would have a lower
-number than the script that starts ``inn`` so that it runs first:
-
-::
-
-    /etc/rc2.d/S17bind
-    /etc/rc2.d/S70inn
-
-The two runlevels 0 (halt) and 6 (reboot) are slightly different. In
-these runlevels, the links with an ``S`` prefix are still called after
-those with a ``K`` prefix, but they too are called with the single
-argument ``stop``.
+``systemd`` uses dependency information contained within the init
+scripts and symlinks in ``/etc/rcn.d`` to decide which scripts to run
+and in which order. The ``sysv-rc`` runlevel system uses symlinks in
+``/etc/rcn.d`` to decide which scripts to run and in which order, see
+the ``README.runlevels`` file shipped with ``sysv-rc`` for
+implementation details. Other alternatives might exist.
+
+Maintainer scripts must use ``update-rc.d`` as described below to
+interact with the service manage for requests such as enabling or
+disabling services. They should use ``invoke-rc.d`` as described below
+to invoke initscripts for requests such as starting and stopping
+service.
 
 .. _s-writing-init:
 
-- 
2.23.0


Reply to: