Bug#919507: Reboot required patch for Debian policy
On Sun, 20 Jan 2019 15:02:05 -0700
Sean Whitton <email@example.com> wrote:
> > It is clear to me that a reboot will occur whenever
> > /var/run/reboot-required exists, regardless of the
> > state of /var/run/reboot-required.pkgs.
> > It is not clear to me where reboot-required.pkgs is used.
> Your current patch suggests that the purpose of reboot-required.pkgs
> is to inform users of which package needs a reboot. I take it this
> is your guess as to the file's purpose? How sure are you about
> this? We shouldn't write something in Policy that we don't properly
> > +To inform users as to which package(s)
> > +require a reboot, add the name of the package(s) requiring the
> > reboot +to ``/run/reboot-required.pkgs``. Programs should not add a
> > package +name to ``/run/reboot-required.pkgs`` if it is already
> > present there.
> I suggest "It is conventional to append the package name to
> ``/run/reboot-required.pkgs``" to avoid saying what the file is for,
> since we're not sure.
I did look through the "reboot-required.pkgs" hits
at codesearch.debian.org. At this point I can't recall exactly which
packages I looked at and which I didn't but I looked at better
than 50% of them.
(My general approach to researching all issues
related to this bug report is to look at the code involving
scripting languages but not bother to track, say, #define
references through compiled code.)
Everywhere I've looked for reboot-required.pkgs I've found
code equivalent to:
echo "Rebooting due to the following packages:"
I'm 99% confident that _a_ purpose of reboot-required.pkgs
is to provide a list of the packages requiring a reboot
to a human. And notification did not seem to be via logs.
I can't say if the file has any other purpose.
Regardless of the above, I've made your change as suggested.
The important thing I want to convey is that reboot-required.pkgs
does not affect the reboot signal. It does something supplementary.
Better not to over-specify.
It is also worth nothing at this point that kubernetes appears
to be touching reboot-required and adding to reboot-required.pkgs, but
doing so in non-package-installation related code. AFAICT. At least
that's what I recall now after a short glance through the code
some time ago. This is why I added the bit about regular
programs being able to signal for reboot.
> > +An expected time to signal that a reboot is required is upon
> > +installation or upgrade of a package. Signaling is called for
> > when a +reboot is needed to fully apply the changes a package
> > introduces. The +appropriate place to manipulate reboot related
> > files is expected to be +in the ``postinst`` maintainer script when
> > it is called as ``postinst +configure
> > most-recently-configured-version`` because this is when it +is
> > known that the package successfully installed and configured.
> Expressions like "expected" and "is called for" sound like they are
> normative, but it seems like your aim in this paragraph is to describe
> the purpose of a feature, rather than to specify how it may and may
> not be used.
> Let's try to avoid giving the impression of normativity.
> How about:
> The ``/run/reboot-required`` mechanism is used when a reboot is
> needed to fully apply the changes introduced by a package
> installation or upgrade. Typically it is the ``postinst``
> maintainer script that touches ``/run/reboot-required``, at the
> end of a successful configuration of the package.
I used your text, removing an "a".
> > +Note that the Operating System is not guaranteed to act on these
> > +files. When, and whether, a reboot occurs is dependent upon the
> > +installation and configuration of a package which provides a reboot
> > +feature. The same is true of user notifications involving
> > reboot.
> It seems obvious that touching ``/run/reboot-required`` does not
> trigger a reboot, and typical Debian systems never reboot by
> themselves. IMO this paragraph is unnecessarily verbose. How about:
> There are no guarantees provided by the ``/var/reboot-required``
> convention as to when the required reboot will occur.
Shorter is better. I tweaked slightly.
Thanks for all the editing!
Free Software: "You don't pay back, you pay forward."
-- Robert A. Heinlein
diff --git a/policy/ch-opersys.rst b/policy/ch-opersys.rst
index 59c92ec..8276bfe 100644
@@ -1040,3 +1040,33 @@ Debian, so this section has been removed.
activate the trigger. In that case, it can be done by calling
``dpkg-trigger --no-await /usr/lib/mime/packages`` from the
maintainer script after creating, modifying, or removing the file.
+ pair: signaling; reboot
+Signaling that a reboot is required
+ single: reboot-required
+ single: reboot-required.pkgs
+Programs can signal that a reboot is required by ``touch``\ing
+``/run/reboot-required``. It is conventional to add the name of the
+package(s) requiring the reboot to
+``/run/reboot-required.pkgs``. Programs should not add a package name
+to ``/run/reboot-required.pkgs`` if it is already present there.
+ single: postinst
+The ``/run/reboot-required`` mechanism is used when a reboot is
+needed to fully apply the changes introduced by package
+installation or upgrade. Typically it is the ``postinst``
+maintainer script that touches ``/run/reboot-required``, at the end
+of a successful configuration of the package.
+There are no guarantees provided by the ``/var/reboot-required``
+convention as to when or whether the requested reboot will occur.