[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [RFC] Bootloader configuration

On Thu, 2006-03-02 at 12:36 +0000, John Levon wrote:
> On Wed, Mar 01, 2006 at 11:53:08PM -0500, Jeremy Katz wrote:
> > > 3) bootloaders are forced to return configuration params like 'args', 
> > > since
> > >    the code assumes it knows all with regards to image.py
> > 
> > A boot loader _does_ need to pass back everything regarding an image,
> > though.  All of kernel, initrd and arguments can and should be
> > accessible/modifiable by the boot loader.
> Yes. However, it is not right to *demand* that the bootloader provide
> all of these. This is the case with the current interface:

What's the use case for _not_ having them set by the boot loader?

> > > 2) Filesystem support needs to be delivered into the correct python
> > >    directory, and carefully match the exact internal API used by pygrub
> > 
> > It's hardly that complicated of an API.  Actually, it's probably too
> > simple more than anything
> Simplicity is not the issue, stability is. This sounds like you want to
> change it already.

Adding entry points can be done without breaking existing code if future
filesystems need support for more things.  I think you're reading a lot
more into that statement than was intended

> > Why invent yet another config file format that everything that anyone
> > would want to use within a guest has to be able to parse instead?  Sure,
> > the grub syntax has its warts, but it works well enough.  And creating
> > something else involves a completely separate knowledge set for users
> > inside of a guest vs on physical machines.
> Until such a time that grub is ported to Xen and all domU's are updated,
> it does not make sense to use a config file of an unrelated program to
> hold this data. And when that does happen, pygrub can be deleted as
> well.

Why not?  For a concrete example -- we have a set of utilities that are
used for updating the grub.conf when you install a new kernel.  If you
install a new kernel inside a guest, you want the same basic idea to
occur -- you want the config file that says what kernel to boot to be
updated with information on the new kernel.  Going with a different
format means that tools need significant overhauling to work in a
paravirtualized guest instead of just working.  There are *huge*
benefits here.

> > > The Xen python code parses the 'kernel' value into 'method' and 'params', 
> > > then
> > > searches for a bootloader handler matching 'method' as follows:
> > > 
> > >      /usr/lib/xen/boot/bootload-<method>
> > >      <auxbinpath>/bootload-<method>
> > >      /etc/xen/scripts/bootload-<method>
> > 
> > Since you have to specify the same method for kernel and ramdisk, this
> > is pretty much the same as the current bootloader config option. 
> Except that pygrub isn't assumed which both requires the pygrub-specific
> "bootentry" and 

Nothing in Xen right now "assumes" pygrub.  All of the code generically
calls just an executable and expects to read an sxp back on a pipe.
This was done explicitly as there were a few people that wanted to be
able to experiment with other boot loaders.  I half-expected to see
someone do a LILO clone :)

You don't want to use stdout as if you use stdout, your boot loader now
has no way to actually let the user make any changes.  As I said, the
bootentry stuff was added at the request of someone on the list.  

> ignores kernel/ramdisk choices.

Ignores it how?

> > > When found, the bootloader is invoked as follows:
> > > 
> > >      -b <bootdisk> -k <kernel's method-param> [-r <ramdisk's 
> > > method-param>] \
> > >         -d <disk1> [ -d <disk2> ... ]
> > 
> > What params do you see making sense here?  
> For grub method, the boot entry, and later, the kernel if wanted. For
> root method, kernel/ramdisk path. For XXX bootloader, some
> method-specific parameters. 

The entire goal of the boot loader code is to move determination of what
to boot _out_ of dom0 and into domU, so passing the kernel and ramdisk
seems somewhat counter to that goal.  I really have a hard time seeing
parameters which would be specific to kernel or ramdisk -- an easy way
to pass args to the boot loader binary doesn't seem unreasonable[1] and
far less overhead to accomplish. 


[1] although it probably works if you just do bootloader="/usr/bin/foo
myargs" now

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.