Fix #247: fall back to reboot -f in sulogin mode

When logged in from sulogin we cannot send IPC to Finit, not even
signals, to delegate reboot.  For usability, attempt to tell reboot that
it's in sulogin mode -- provided the bundled sulogin is used -- to let
reboot trigger over to forced reboot.

We cannot do much about initctl, just document this as a limitation.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2022-04-25 21:44:33 +02:00
parent 0c4a9b62c2
commit addb8c4019
5 changed files with 18 additions and 1 deletions
+3
View File
@@ -153,6 +153,9 @@ enabled. The default Finit rescue mode configuration is installed into
By default the a root shell, without login, is started. By default the a root shell, without login, is started.
> **Note:** in this mode `initctl` will not work. Use the `-f` flag to
> force `reboot`, `shutdown`, or `poweroff`.
Debugging Debugging
--------- ---------
+4 -1
View File
@@ -63,7 +63,10 @@ The `bool` setting is one of `on, off, true false, 1, 0`.
you will be given a root login to a maintenance shell. However, if you will be given a root login to a maintenance shell. However, if
`sulogin` is missing, the file `/lib/finit/rescue.conf` is read and `sulogin` is missing, the file `/lib/finit/rescue.conf` is read and
the system booted in a limited fallback mode. See [config.md][] the system booted in a limited fallback mode. See [config.md][]
for more information. for more information.
**Note:** in this mode `initctl` will not work. Correct the problem
and use `reboot -f` to force reboot.
* `single`, or `S`: Single user mode, runlevel 1, in Finit. Useful to * `single`, or `S`: Single user mode, runlevel 1, in Finit. Useful to
debug problems with the regular runlevel. All services and TTYs in debug problems with the regular runlevel. All services and TTYs in
+3
View File
@@ -645,6 +645,9 @@ activate it.
The rescue mode comes in two flavors; *traditional* and *fallback*. The rescue mode comes in two flavors; *traditional* and *fallback*.
> **Note:** in this mode `initctl` will not work. Use the `-f` flag to
> force `reboot`, `shutdown`, or `poweroff`.
### Traditional ### Traditional
+5
View File
@@ -26,6 +26,7 @@
#include <getopt.h> #include <getopt.h>
#include <signal.h> #include <signal.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include "util.h" #include "util.h"
@@ -159,6 +160,10 @@ int reboot_main(int argc, char *argv[])
/* Check for any overrides */ /* Check for any overrides */
transform(NULL); transform(NULL);
/* Check if we're in sulogin shell */
if (getenv("SULOGIN"))
force = 1;
if (force) { if (force) {
sync(); sync();
+3
View File
@@ -193,6 +193,9 @@ int main(void)
nopass: nopass:
freepw(&pw); freepw(&pw);
/* tell initctl/reboot to trigger force mode */
setenv("SULOGIN", "finit", 1);
return sh(); return sh();
} }
} }