svn commit: r232977 - in head: etc sbin/init
Ian Lepore
freebsd at damnhippie.dyndns.org
Thu Mar 15 22:56:23 UTC 2012
On Wed, 2012-03-14 at 16:22 +0000, Ed Schouten wrote:
> Author: ed
> Date: Wed Mar 14 16:22:09 2012
> New Revision: 232977
> URL: http://svn.freebsd.org/changeset/base/232977
>
> Log:
> Make init(8) slightly more robust when /dev/console is missing.
>
> If the environment doesn't offer a working /dev/console, the existing
> version of init(8) will simply refuse running rc(8) scripts. This means
> you'll only have a system running init(8) and nothing else.
>
> Change the code to do the following:
>
> - Open /dev/console like we used to do, but make it more robust to use
> O_NONBLOCK to prevent blocking on a carrier.
> - If this fails, use /dev/null as stdin and /var/log/init.log as stdout
> and stderr.
Given that the /var filesystem is mounted (and with readonly root,
actually created) by an rc script run by init, does this make sense?
Maybe it makes sense only within a jail, but not when running as pid 1?
> - If even this fails, use /dev/null as stdin, stdout and stderr.
>
> So why us this useful? Well, if you remove the `getpid() == 1' check in
> main(), you can now use init(8) inside jails to properly execute rc(8).
> It still requires some polishing, as existing tools assume init(8) has
> PID 1.
Not just existing tools, but 3rd party software is likely to contain
this assumption (I know some of ours does). The manpage for init
contains examples of using a hard-coded 1. Would it be practical for
any reference to pid 1 to get somehow magically redirected inside a jail
to the pid of an init process running within that jail? That's just a
pure blue-sky idea that popped into my head; I know almost nothing about
jails (their implementation or how to use them).
>
> Also it is now possible to use use init(8) on `headless' devices that
> don't even have a serial boot console.
-- Ian
More information about the svn-src-head
mailing list