Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F105790031
D16625.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D16625.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D16625: sbin/init/init.c: Add init_exec
Attached
Detach File
Event Timeline
Log In to Comment