Bring in System V run-level patches (turned off by default).
While I'm here, fix some typos in the manpage. Requested by: des
This commit is contained in:
parent
1427b87c55
commit
1681d65976
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=47998
@ -1,5 +1,5 @@
|
|||||||
# @(#)Makefile 8.1 (Berkeley) 7/19/93
|
# @(#)Makefile 8.1 (Berkeley) 7/19/93
|
||||||
# $Id: Makefile,v 1.14 1997/08/18 03:32:09 davidn Exp $
|
# $Id: Makefile,v 1.15 1998/01/20 10:39:56 bde Exp $
|
||||||
|
|
||||||
PROG= init
|
PROG= init
|
||||||
MAN8= init.8
|
MAN8= init.8
|
||||||
@ -7,6 +7,9 @@ BINMODE=500
|
|||||||
INSTALLFLAGS=-fschg
|
INSTALLFLAGS=-fschg
|
||||||
CFLAGS+=-DDEBUGSHELL -DSECURE -DLOGIN_CAP
|
CFLAGS+=-DDEBUGSHELL -DSECURE -DLOGIN_CAP
|
||||||
|
|
||||||
|
# Uncomment the following line to activate System V compatibility mode
|
||||||
|
#CFLAGS+=-DCOMPAT_SYSV_INIT
|
||||||
|
|
||||||
.if exists(${.CURDIR}/../../secure) && !defined(NOCRYPT) && !defined(NOSECURE)
|
.if exists(${.CURDIR}/../../secure) && !defined(NOCRYPT) && !defined(NOSECURE)
|
||||||
DISTRIBUTION=des
|
DISTRIBUTION=des
|
||||||
DPADD= ${LIBUTIL} ${DESCRYPTOBJDIR}/libdescrypt.a
|
DPADD= ${LIBUTIL} ${DESCRYPTOBJDIR}/libdescrypt.a
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.\" @(#)init.8 8.3 (Berkeley) 4/18/94
|
.\" @(#)init.8 8.3 (Berkeley) 4/18/94
|
||||||
.\" $Id: init.8,v 1.13 1998/12/16 16:50:12 ghelmer Exp $
|
.\" $Id: init.8,v 1.14 1999/06/16 20:01:18 ru Exp $
|
||||||
.\"
|
.\"
|
||||||
.Dd April 18, 1994
|
.Dd April 18, 1994
|
||||||
.Dt INIT 8
|
.Dt INIT 8
|
||||||
@ -43,24 +43,29 @@
|
|||||||
.Nd process control initialization
|
.Nd process control initialization
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm init
|
.Nm init
|
||||||
|
.Nm init
|
||||||
|
.Oo
|
||||||
|
.Cm 0 | 1 | 6 |
|
||||||
|
.Cm c | q
|
||||||
|
.Oc
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
program
|
program
|
||||||
is the last stage of the boot process.
|
is the last stage of the boot process.
|
||||||
It normally runs the automatic reboot sequence as described in
|
It normally runs the automatic reboot sequence as described in
|
||||||
.Xr reboot 8 ,
|
.Xr rc 8 ,
|
||||||
and if this succeeds, begins multi-user operation.
|
and if this succeeds, begins multi-user operation.
|
||||||
If the reboot scripts fail,
|
If the reboot scripts fail,
|
||||||
.Nm
|
.Nm
|
||||||
commences single user operation by giving
|
commences single-user operation by giving
|
||||||
the super-user a shell on the console.
|
the super-user a shell on the console.
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
program may be passed parameters
|
program may be passed parameters
|
||||||
from the boot program to
|
from the boot program to
|
||||||
prevent the system from going multi-user and to instead execute
|
prevent the system from going multi-user and to instead execute
|
||||||
a single user shell without starting the normal daemons.
|
a single-user shell without starting the normal daemons.
|
||||||
The system is then quiescent for maintenance work and may
|
The system is then quiescent for maintenance work and may
|
||||||
later be made to go to multi-user by exiting the
|
later be made to go to multi-user by exiting the
|
||||||
single-user shell (with ^D).
|
single-user shell (with ^D).
|
||||||
@ -75,17 +80,19 @@ If the
|
|||||||
.Em console
|
.Em console
|
||||||
entry in the
|
entry in the
|
||||||
.Xr ttys 5
|
.Xr ttys 5
|
||||||
file is marked ``insecure'',
|
file is marked
|
||||||
|
.Dq insecure ,
|
||||||
then
|
then
|
||||||
.Nm
|
.Nm
|
||||||
will require that the superuser password be
|
will require that the super-user password be
|
||||||
entered before the system will start a single-user shell.
|
entered before the system will start a single-user shell.
|
||||||
The password check is skipped if the
|
The password check is skipped if the
|
||||||
.Em console
|
.Em console
|
||||||
is marked as ``secure''.
|
is marked as
|
||||||
|
.Dq secure .
|
||||||
.Pp
|
.Pp
|
||||||
The kernel runs with four different levels of security.
|
The kernel runs with four different levels of security.
|
||||||
Any superuser process can raise the security level, but only
|
Any super-user process can raise the security level, but only
|
||||||
.Nm
|
.Nm
|
||||||
can lower it.
|
can lower it.
|
||||||
The security levels are:
|
The security levels are:
|
||||||
@ -119,7 +126,9 @@ IP packet filter rules (see
|
|||||||
.Xr ipfw 8
|
.Xr ipfw 8
|
||||||
and
|
and
|
||||||
.Xr ipfirewall 4 )
|
.Xr ipfirewall 4 )
|
||||||
can not be changed and dummynet configuration can not be adjusted.
|
can not be changed and
|
||||||
|
.Xr dummynet 4
|
||||||
|
configuration can not be adjusted.
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
If the security level is initially -1, then
|
If the security level is initially -1, then
|
||||||
@ -127,10 +136,10 @@ If the security level is initially -1, then
|
|||||||
leaves it unchanged.
|
leaves it unchanged.
|
||||||
Otherwise,
|
Otherwise,
|
||||||
.Nm
|
.Nm
|
||||||
arranges to run the system in level 0 mode while single user
|
arranges to run the system in level 0 mode while single-user
|
||||||
and in level 1 mode while multiuser.
|
and in level 1 mode while multi-user.
|
||||||
If level 2 mode is desired while running multiuser,
|
If level 2 mode is desired while running multi-user,
|
||||||
it can be set while single user, e.g., in the startup script
|
it can be set while single-user, e.g., in the startup script
|
||||||
.Pa /etc/rc ,
|
.Pa /etc/rc ,
|
||||||
using
|
using
|
||||||
.Xr sysctl 8
|
.Xr sysctl 8
|
||||||
@ -237,7 +246,7 @@ and allow the system to slowly die away, if it is sent a terminal stop
|
|||||||
signal, i.e.
|
signal, i.e.
|
||||||
.Dq Li "kill \-TSTP 1" .
|
.Dq Li "kill \-TSTP 1" .
|
||||||
A later hangup will resume full
|
A later hangup will resume full
|
||||||
multi-user operations, or a terminate will start a single user shell.
|
multi-user operations, or a terminate will start a single-user shell.
|
||||||
This hook is used by
|
This hook is used by
|
||||||
.Xr reboot 8
|
.Xr reboot 8
|
||||||
and
|
and
|
||||||
@ -253,10 +262,10 @@ This is useful for shutting the machine down cleanly from inside the kernel
|
|||||||
or from X when the machine appears to be hung.
|
or from X when the machine appears to be hung.
|
||||||
.Pp
|
.Pp
|
||||||
.Nm Init
|
.Nm Init
|
||||||
will do the same, except it will shutdown the machine if sent
|
will do the same, except it will halt the machine if sent
|
||||||
the user defined signal 1
|
the user defined signal 1
|
||||||
.Pq Dv USR1 ,
|
.Pq Dv USR1 ,
|
||||||
or will shutdown and turn the power off (if hardware permits) if sent
|
or will halt and turn the power off (if hardware permits) if sent
|
||||||
the user defined signal 2
|
the user defined signal 2
|
||||||
.Pq Dv USR2 .
|
.Pq Dv USR2 .
|
||||||
.Pp
|
.Pp
|
||||||
@ -276,14 +285,42 @@ automatically.
|
|||||||
If, at bootstrap time, the
|
If, at bootstrap time, the
|
||||||
.Nm
|
.Nm
|
||||||
process cannot be located, the system will panic with the message
|
process cannot be located, the system will panic with the message
|
||||||
``panic: "init died (signal %d, exit %d)''.
|
.Dq "panic: init died (signal %d, exit %d)" .
|
||||||
|
.Pp
|
||||||
|
The second synopsis form is only available if
|
||||||
|
.Nm
|
||||||
|
was compiled with the
|
||||||
|
.Em COMPAT_SYSV_INIT
|
||||||
|
option.
|
||||||
|
In this case,
|
||||||
|
.Nm
|
||||||
|
will emulate
|
||||||
|
.At V
|
||||||
|
behavior, i.e. super-user can specify the desired
|
||||||
|
.Em run-level
|
||||||
|
on a command line, and
|
||||||
|
.Nm
|
||||||
|
will signal the original
|
||||||
|
.Pq PID 1
|
||||||
|
.Nm
|
||||||
|
as follows:
|
||||||
|
.Bl -column Run-level SIGTERM
|
||||||
|
.It Sy Run-level Signal Action
|
||||||
|
.It Cm 0 Ta Dv SIGUSR2 Ta "Halt and turn the power off"
|
||||||
|
.It Cm 1 Ta Dv SIGTERM Ta "Go to single-user mode"
|
||||||
|
.It Cm 6 Ta Dv SIGINT Ta "Reboot the machine"
|
||||||
|
.It Cm c Ta Dv SIGTSTP Ta "Block further logins"
|
||||||
|
.It Cm q Ta Dv SIGHUP Ta Rescan the
|
||||||
|
.Xr ttys 5
|
||||||
|
file
|
||||||
|
.El
|
||||||
.Sh DIAGNOSTICS
|
.Sh DIAGNOSTICS
|
||||||
.Bl -diag
|
.Bl -diag
|
||||||
.It "getty repeating too quickly on port %s, sleeping"
|
.It "getty repeating too quickly on port %s, sleeping"
|
||||||
A process being started to service a line is exiting quickly
|
A process being started to service a line is exiting quickly
|
||||||
each time it is started.
|
each time it is started.
|
||||||
This is often caused by a ringing or noisy terminal line.
|
This is often caused by a ringing or noisy terminal line.
|
||||||
.Em "Init will sleep for 10 seconds" ,
|
.Em "Init will sleep for 30 seconds" ,
|
||||||
.Em "then continue trying to start the process" .
|
.Em "then continue trying to start the process" .
|
||||||
.Pp
|
.Pp
|
||||||
.It "some processes would not die; ps axl advised."
|
.It "some processes would not die; ps axl advised."
|
||||||
@ -315,6 +352,7 @@ system shutdown commands
|
|||||||
.Xr kill 1 ,
|
.Xr kill 1 ,
|
||||||
.Xr login 1 ,
|
.Xr login 1 ,
|
||||||
.Xr sh 1 ,
|
.Xr sh 1 ,
|
||||||
|
.Xr dummynet 4 ,
|
||||||
.Xr ipfirewall 4 ,
|
.Xr ipfirewall 4 ,
|
||||||
.Xr ttys 5 ,
|
.Xr ttys 5 ,
|
||||||
.Xr crash 8 ,
|
.Xr crash 8 ,
|
||||||
|
@ -45,7 +45,7 @@ static const char copyright[] =
|
|||||||
static char sccsid[] = "@(#)init.c 8.1 (Berkeley) 7/15/93";
|
static char sccsid[] = "@(#)init.c 8.1 (Berkeley) 7/15/93";
|
||||||
#endif
|
#endif
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"$Id: init.c,v 1.31 1998/07/22 05:45:11 phk Exp $";
|
"$Id: init.c,v 1.32 1999/06/16 20:01:19 ru Exp $";
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -204,9 +204,42 @@ main(argc, argv)
|
|||||||
errx(1, "%s", strerror(EPERM));
|
errx(1, "%s", strerror(EPERM));
|
||||||
|
|
||||||
/* System V users like to reexec init. */
|
/* System V users like to reexec init. */
|
||||||
if (getpid() != 1)
|
if (getpid() != 1) {
|
||||||
errx(1, "already running");
|
#ifdef COMPAT_SYSV_INIT
|
||||||
|
/* So give them what they want */
|
||||||
|
if (argc > 1) {
|
||||||
|
if (strlen(argv[1]) == 1) {
|
||||||
|
register char runlevel = *argv[1];
|
||||||
|
register int sig;
|
||||||
|
|
||||||
|
switch (runlevel) {
|
||||||
|
case '0': /* halt + poweroff */
|
||||||
|
sig = SIGUSR2;
|
||||||
|
break;
|
||||||
|
case '1': /* single-user */
|
||||||
|
sig = SIGTERM;
|
||||||
|
break;
|
||||||
|
case '6': /* reboot */
|
||||||
|
sig = SIGINT;
|
||||||
|
break;
|
||||||
|
case 'c': /* block further logins */
|
||||||
|
sig = SIGTSTP;
|
||||||
|
break;
|
||||||
|
case 'q': /* rescan /etc/ttys */
|
||||||
|
sig = SIGHUP;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto invalid;
|
||||||
|
}
|
||||||
|
kill(1, sig);
|
||||||
|
_exit(0);
|
||||||
|
} else
|
||||||
|
invalid:
|
||||||
|
errx(1, "invalid run-level ``%s''", argv[1]);
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
errx(1, "already running");
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Note that this does NOT open a file...
|
* Note that this does NOT open a file...
|
||||||
* Does 'init' deserve its own facility number?
|
* Does 'init' deserve its own facility number?
|
||||||
|
Loading…
Reference in New Issue
Block a user