Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Mar 2012 16:56:14 -0600
From:      Ian Lepore <freebsd@damnhippie.dyndns.org>
To:        Ed Schouten <ed@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org
Subject:   Re: svn commit: r232977 - in head: etc sbin/init
Message-ID:  <1331852174.8403.12.camel@revolution.hippie.lan>
In-Reply-To: <201203141622.q2EGM9HR021407@svn.freebsd.org>
References:  <201203141622.q2EGM9HR021407@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1331852174.8403.12.camel>