Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Mar 2012 23:16:21 +0000
From:      Chris Rees <utisoft@gmail.com>
To:        Ian Lepore <freebsd@damnhippie.dyndns.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, Ed Schouten <ed@freebsd.org>
Subject:   Re: svn commit: r232977 - in head: etc sbin/init
Message-ID:  <CADLo838KgHUydM7LFma54S0FSKywzQcXyGXk_kG6XVGQ5n%2B0Pg@mail.gmail.com>
In-Reply-To: <1331852174.8403.12.camel@revolution.hippie.lan>
References:  <201203141622.q2EGM9HR021407@svn.freebsd.org> <1331852174.8403.12.camel@revolution.hippie.lan>

next in thread | previous in thread | raw e-mail | index | archive | help
On 15 Mar 2012 22:57, "Ian Lepore" <freebsd@damnhippie.dyndns.org> wrote:
>
> 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).
>

Not really.  Processes are given a 'jailed' property, but apart from that
are just regular processes.  Also, faking PIDs like that will also hide the
host (real) init.... though whether that is a problem or not is an exercise
for the reader.

Chris



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CADLo838KgHUydM7LFma54S0FSKywzQcXyGXk_kG6XVGQ5n%2B0Pg>