Subject: Re: /kern/kernel
To: None <current-users@netbsd.org>
From: der Mouse <mouse@Rodents.Montreal.QC.CA>
List: current-users
Date: 09/14/1998 08:23:55
>> I just hacked in support for booting with -r, which prompts for a
>> root directory to run under at boot time.  It passes a smoke test,
>> but needs real testing.  (I'm also going to add -i, to make it
>> prompt for a path to use for init [...].)

[one reply says]
> Nice.  Sun uses the -i flag for this already; I think -r is reserved
> under Slowlaris, but that's moot :-).  Good ideas!

[another reply says]
> Why not go the Solaris way and implement "-a" which asks you at a set
> of prompts where to find /, init (and anything else) rather than
> command line options (CLO) for each ?

Well, we already have -a, which causes a whole bunch of things to get
prompted for, starting with the bootloader prompting for the boot
device.  Yes, it probably would make some sense to conditionalize these
on RB_ASKME rather than new bits set by new options, and I may do it
that way.

But there's something more serious: -r as I've implemented it can't
work.  (-i is implemented and works very nicely.)

What I did for -r is, in main() [kern/init_main.c], after setting up
the root filesystem mount, prompt for a path, and use the vnode it
references as rootvnode (and the cdir for processes 0, 1, 2).

The problem is, / is mounted read-only.  To remount it read-write,
userland does "mount -o update /dev/whatever /".  This doesn't work,
because when the kernel looks up / to get the mounted-on vnode, it gets
a different vnode from the one the root device is currently mounted on.
I'm thinking about possible ways to fix this, but so far all I have is
ideas.  (The one I currently favor is to remember the *real* root and
have mount(2) silently substitute that when userland tries to mount
onto rootvnode.  Note this doesn't affect how mount(2) interacts with
chroot(2), because I'm talking about rootvnode, not fd_rdir.)

> I suspect using one CLO for all of this class of option is a tad
> better than one for each given that such events are nearly always
> attended anyway.

Well...in some respects.  It has problems, though; notably that the
kernel sometimes sets RB_ASKNAME internally (for example, if it can't
mount what it thinks root is supposed to be, it sets RB_ASKNAME to
cause a prompt for a new place to find root).  It would be unpleasant
and somewhat counterintuitive for this to suddenly turn on all this
prompting for alternative root and init path and such.

It *would* be possible to have -a turn on multiple RB_ flags, and that
may be better than what I currently have.

					der Mouse

			       mouse@rodents.montreal.qc.ca
		     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B