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