Page MenuHomeFreeBSD

D16625.diff
No OneTemporary

D16625.diff

Index: head/sbin/init/init.8
===================================================================
--- head/sbin/init/init.8
+++ head/sbin/init/init.8
@@ -31,7 +31,7 @@
.\" @(#)init.8 8.3 (Berkeley) 4/18/94
.\" $FreeBSD$
.\"
-.Dd August 7, 2018
+.Dd August 14, 2018
.Dt INIT 8
.Os
.Sh NAME
@@ -316,6 +316,14 @@
.Xr reboot 8
.Fl r
for details.
+.It Va init_exec
+If set to a valid file name in the root file system,
+instructs
+.Nm
+to directly execute that file as the very first action,
+replacing
+.Nm
+as PID 1.
.It Va init_script
If set to a valid file name in the root file system,
instructs
@@ -341,6 +349,8 @@
The default is
.Dq Li /bin/sh .
It is used for running the
+.Va init_exec
+or
.Va init_script
if set, as well as for the
.Pa /etc/rc
Index: head/sbin/init/init.c
===================================================================
--- head/sbin/init/init.c
+++ head/sbin/init/init.c
@@ -149,6 +149,7 @@
static void execute_script(char *argv[]);
static void open_console(void);
static const char *get_shell(void);
+static void replace_init(char *path);
static void write_stderr(const char *message);
typedef struct init_session {
@@ -330,6 +331,11 @@
close(1);
close(2);
+ if (kenv(KENV_GET, "init_exec", kenv_value, sizeof(kenv_value)) > 0) {
+ replace_init(kenv_value);
+ _exit(0); /* reboot */
+ }
+
if (kenv(KENV_GET, "init_script", kenv_value, sizeof(kenv_value)) > 0) {
state_func_t next_transition;
@@ -1085,6 +1091,22 @@
shell = get_shell();
execv(shell, argv);
stall("can't exec %s for %s: %m", shell, script);
+}
+
+/*
+ * Execute binary, replacing init(8) as PID 1.
+ */
+static void
+replace_init(char *path)
+{
+ char *argv[3];
+ char sh[] = "sh";
+
+ argv[0] = sh;
+ argv[1] = path;
+ argv[2] = NULL;
+
+ execute_script(argv);
}
/*
Index: head/stand/man/loader.8
===================================================================
--- head/stand/man/loader.8
+++ head/stand/man/loader.8
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd August 13, 2018
+.Dd August 14, 2018
.Dt LOADER 8
.Os
.Sh NAME
@@ -490,6 +490,9 @@
has been processed, allowing kernel panics that happen during the early stages
of boot to be captured.
.It Va init_chroot
+See
+.Xr init 8 .
+.It Va init_exec
See
.Xr init 8 .
.It Va init_path

File Metadata

Mime Type
text/plain
Expires
Sat, Dec 21, 5:51 PM (19 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15544332
Default Alt Text
D16625.diff (2 KB)

Event Timeline