Pxeknife integretion with rom-o-matic

Plan

provide pxe images/rom/nic with gpxe script embedded. This script will connect to pxeknife server to get boot loader.

Implementation

Actual working implementation is described here

In file rom-o-matic/build.php the image is compiled by following command

make -C '$dir' '$target'

I have modified it to compile with embedded image by modifying above code with

make -C '$dir' EMBEDDED_IMAGE=./pxeDHCP.gpxe,./pxeSTATIC.gpxe '$target'

the script ./pxeDHCP.gpxe contains following code

#!gpxe
echo "Hi, We will be using PXEKnife from URL http://www.alien.doesntexist.org/pxeknife"
echo "It is assumed that you have dhcp networking"
imgload pxeSTATIC.gpxe
imgstat
ifopen net0
echo "Hit Control+C to cancel DHCP"
echo "You may want to do this if you want to use static-IP"
echo "Otherwise, it will try DHCP, and then anyway go to static-IP"
sleep 4
dhcp net0
set 209:string pxelinux.cfg/default
set 210:string http://www.alien.doesntexist.org/pxeknife/
echo "Here we go"
chain http://www.alien.doesntexist.org/pxeknife/pxelinux.0
echo "PxeKnife booting cancelled, using local disk instead.."

and ./pxeSTATIC.gpxe contains following script.

#!gpxe
echo "As you dont have DHCP, you need to give details about network configuration"
echo "Soon, you will be presented with interface to provide details about network configuration"
echo "Please provide, IP address, Netmask, Gateway and Router"
ifopen net0
set net0/ip 10.0.2.15
set net0/netmask 255.255.255.0
set net0/gateway 10.0.2.2
set net0/dns 10.0.2.3
sleep 3
config
set 209:string pxelinux.cfg/default
set 210:string http://www.alien.doesntexist.org/pxeknife/
echo "Here we go"
chain http://www.alien.doesntexist.org/pxeknife/pxelinux.0
echo "PxeKnife booting cancelled, using local disk instead.."

The code is hosted at url http://www.alien.doesntexist.org/pxeknife/PHP/gpxe_generation/

Problems (solved)

When I boot using qemu with following command

qemu -fda gpxe-git-e1000.dsk

I get following error

no such interface: net0

and booting fails :-(. I also tried with gpxe-git-3c509-eisa.dsk but same result.

But when I compile the the gpxe with same script and no target, it works fine

make EMBEDDED_IMAGE=./pxeDHCP.gpxe
qemu -fda bin/gpxe.dsk

Solution

Problem was that, qemu does not support all network drivers, and you need to tell qemu which device driver to emulate. Following qemu command is working for rtl8139

qemu -fda gpxe-git-rtl8139.dsk -net nic,model=rtl8139 -net user

For static IP

To support static IP, the plan is to have two scripts, one with DHCP and one with Static. When DHCP fails, static will pick up and continue execution.

Problem (solved)

Second script is not getting executed. I had to load the second script from first script using imgload

imgload pxeSTATIC.gpxe

Other than that, I had to comment out the break statement in core/main.c inside function main() there is a loop which iterate over each image. but there was a break, which had to be removed.

        if ( have_images() ) {
            for_each_image ( image ) {
                image_exec ( image );
                /* break;  */ /* commented so that second script will be executed -- pravin */
            }
        } else {

Other change is done in image/script.c file inside function script_exec() where at end, it re-registers the script. The second executable does not get executed when this line is there, so, I commented it out. I am not sure what exactly is the problem, but my guess is that,
re_register puts the script on top of the list, but older mapping where second script was loaded in memory gets messed up somehow.

    rc = 0;
 done:
    /* Re-register image and return */
    register_image ( image );    /* commented so that next one will be executed -- pravin */
    return rc;
}

Navigation

* [[:start|Home]] * [[:about|About our Project]] * [[:download|Download]] * [[:screenshots|Screenshots]] * Documentation * [[:howtos|HowTo Guides]] * [[:appnotes|Application Notes]] * [[:faq:|FAQs]] * [[:doc|General Doc]] * [[:talks|Videos, Talks, and Papers]] * [[:hardwareissues|Hardware Issues]] * [[:mailinglists|Mailing lists]] * [[http://support.etherboot.org/|Bugtracker]] * [[:contributing|Contributing]] * [[:editing_permission|Wiki Edit Permission]] * [[:wiki:syntax|Wiki Syntax]] * [[:contact|Contact]] * [[:relatedlinks|Related Links]] * [[:commerciallinks|Commercial Links]] * [[:acknowledgements|Acknowledgements]] * [[:logos|Logo Art]]

QR Code
QR Code soc:2009:pravin:journal:pxekniferomomatic (generated for current page)