This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== 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 ===== In file rom-o-matic/build.php the image is compiled by following command <code> make -C '$dir' '$target' </code> I have modified it to compile with embedded image by modifying above code with <code> make -C '$dir' EMBEDDED_IMAGE=./pxeDHCP.gpxe '$target' </code> the script //./pxeDHCP.gpxe// contains following code <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.." </code> The code is hosted at url [[http://www.alien.doesntexist.org/pxeknife/PHP/gpxe_generation/]] ===== Problems ===== When I boot using qemu with following command <code> qemu -fda gpxe-git-e1000.dsk </code> I get following error <code> no such interface: net0 </code> 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 <code> make EMBEDDED_IMAGE=./pxeDHCP.gpxe qemu -fda bin/gpxe.dsk </code> ==== 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 ===== 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 ==== Second script is not getting executed. I had to load the second script from first script using imgload <code> imgload pxeSTATIC.gpxe </code> 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. <code> if ( have_images() ) { for_each_image ( image ) { image_exec ( image ); /* break; */ /* commented so that second script will be executed -- pravin */ } } else { </code> 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. <code> rc = 0; done: /* Re-register image and return */ register_image ( image ); /* commented so that next one will be executed -- pravin */ return rc; } </code>


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