• Leigh B. Stoller's avatar
    Death to proxydhcp; one less specialized daemon. DHCP will return the · 2b2b8ca1
    Leigh B. Stoller authored
    filename to boot, and all local nodes will boot the same pxeboot kernel,
    which has been extended to allow for jumping directly into a specific MFS
    (in addition to the usual testbed boot into a partition or multiboot
    Bootinfo and the bootwhat protocol extended to tell the client node what
    MFS to jump into directly, without a reboot. pxe_boot_path and
    next_pxe_boot_path are now deprecated, with bootinfo used to control which
    MFS to boot. Nodes now boot a single pxeboot kernel, and bootinfo tells
    them what to do next.
    Bootinfo greatly simplifed. temp_boot_osid has been added to allow for
    temporary booting of different kernels (such as with ndoe_admin or
    create_image). Unlike next_boot_osid which is a one-shot boot,
    temp_boot_osid causes the node to boot that OS until told not too.
    next_boot_path and def_boot_path in the nodes table are now ignored.
    Bootinfo gets path info strictly from the os_info table entry for the osid
    given in one of def_boot_osid, temp_boot_osid, or next_boot_osid.  This
    makes the selection of what to do in bootinfo a lot simpler (and for
    TBBootWhat in libdb). The os_info table also modified to include an MFS
    flag so that bootinfo knows to tell the client that the path refers to an
    MFS and not a multiboot kernel.
    Change to boot sequence; free nodes no longer boot into the default OSID.
    Instead, they are told to wait in pxeboot until told what to do, which
    will typically be when the node is allocated and a specific OSID
    picked. If the node needs to be reloaded, then the node is told to jump
    directly into the Frisbee MFS, which saves one complete reboot cycle
    whether the node has the requested OS installed, or not.  New program
    added called "bootinfosend" that is used by node_reboot to "wake up" up
    nodes sitting in pxewait mode, so that they query bootinfo again and boot.
    node_reboot changed to look at the event state of a node, and use
    bootinfosend to wake up nodes, rather then power cycle, since pxeboot does
    not repsond to pings. Retry (if the UDP packet is lost) is handled by
    Event support added to bootinfo, to replace the event generation that was
    in proxydhcp. I have not included the caching that Mac had in proxydhcp
    since it does not appear that bootinfo packets are lost very
    often. Cleaned up all of the event and DB queury code to use lib/libtb for
    DB access, and moved all of the event code into a separate file.  The
    event sequence when a node boots now looks like this:
    	'SHUTDOWN'    --> 'PXEBOOTING'  (BootInfo)
    	'PXEBOOTING', --> 'PXEBOOTING'  (BootInfo Retry)
    	'PXEBOOTING', --> 'BOOTING'     (Node Not Free)
    	'PXEBOOTING', --> 'PXEWAIT'     (Node is Free)
    	'PXEWAIT',    --> 'PXEWAKEUP'   (Node Allocated)
    	'PXEWAKEUP',  --> 'PXEWAKEUP'   (Bootinfo Retry)
    	'PXEWAKEUP',  --> 'PXEBOOTING'  (Node Woke Up)
    Change stated to support resending PXEWAKEUP events when node times out.
    After 3 tries, node is power cycled. Other minor cleanup in stated.
    Clean up and simplify os_select, while adding support for temp_next_boot
    and removing all trace of def_boot_path and next_boot_path processing.
    Remove all pxe_boot_path and next_pxe_boot_path processing.  Changed
    command line interface to support "clearing" fields. For example,
    node_admin changed to call os_select like this to have the node
    temporarily boot the FreeBSD MFS:
    	os_select -t FREEBSD-MFS pcXXX
    which sets temp_boot_osid. To turn admin mode off:
    	os_select -c -t pcXXX
    which says to clear temp_boot_osid.
    sql/database-fill-supplemental.sql modifed to add os_info table
    entries for the FreeBSD, Frisbee, and newnode MFS's.
    Be sure to change dhcpd config, restart dhcp, kill proxydhcp, restart