Added support for embedded scripts into rom-o-matic.net master
authorPravin Shinde <pravin@black-perl.(none)>
Sat, 27 Jun 2009 15:45:56 +0000 (17:45 +0200)
committerPravin Shinde <pravin@black-perl.(none)>
Sat, 27 Jun 2009 15:45:56 +0000 (17:45 +0200)
This support is using Javascript
and is extension of "Configure" command.
user can add any number of scipting files.
There are few validation checks that I have not done yet,
like making sure that required options are selected when adding scripting support.

BKO.php [new file with mode: 0644]
EmbeddedScriptSupport.js [new file with mode: 0644]
build.php
configinfo.php
flags.php
index.php
setup.php
top.php

diff --git a/BKO.php b/BKO.php
new file mode 100644 (file)
index 0000000..059bce6
--- /dev/null
+++ b/BKO.php
@@ -0,0 +1,19 @@
+<div id="EmbeddedScript">
+<h2>Embedded custom gpxe Scripts</h2>
+<p>
+We give you with option to embedd the gpxe scripts into the images that you are creating<br/>
+These scripts provide you the flexibility to do whatever you want at boot time. 
+</p>
+<script src="EmbeddedScriptSupport.js"></script>
+<br/>
+<div id="scriptCounterHolder"/> 
+<input type="hidden" name="noOfScripts" value = "0">
+</div>
+
+
+<div id="scriptHolder1"/> 
+<br/>Enable Scripting support <input type="checkbox" value="off"  name="BKO" onclick="addOneMoreScript()"> 
+</div>
+<br/>
+</div>
+       
\ No newline at end of file
diff --git a/EmbeddedScriptSupport.js b/EmbeddedScriptSupport.js
new file mode 100644 (file)
index 0000000..14e1ee9
--- /dev/null
@@ -0,0 +1,72 @@
+var scriptCounter=0;
+
+function removeScriptingSupport() {
+       scriptCounter=0;
+       var element = document.getElementById("scriptHolder1") ;
+       var myString = "<br/>Enable Scripting support \n"
+               + "<input type=\"checkbox\" value=\"off\"   onclick=\"addOneMoreScript()\">\n" ; 
+       element.innerHTML = myString ;
+
+       /* Reset the script counter hidden field */
+       element = document.getElementById("scriptCounterHolder") ;
+       myString = "<input type=\"hidden\" name=\"noOfScripts\" value = \"" 
+                       + scriptCounter + "\">\n" ;
+       element.innerHTML = myString ;
+
+       
+} /* end function : removeScriptingSupport() */
+
+function addOneMoreScript() {
+       scriptCounter++;
+       var scriptID = "scriptHolder" + scriptCounter ;
+       var nextScriptNo = scriptCounter + 1;
+       var element = document.getElementById(scriptID) ;
+       var myString = "<hr/>\nPut your gpxe script here.<br/>"
+                       + "Script name is [scriptNo"+ scriptCounter + ".gpxe]<br/>"
+                       + "<textarea name=\"scriptNo" + scriptCounter + "\" rows=\"30\" cols=\"80\">\n" 
+                       + "#!gpxe</textarea>\n" 
+                       + "<div id=\"scriptHolder" + nextScriptNo + "\">"  
+                       + "<hr/><br/>Add one more script \n"
+                       + "<input type=\"checkbox\" value=\"off\"  onclick=\"addOneMoreScript()\">\n"
+                       + "<br/>Remove Scripting support\n"
+                       + "<input type=\"checkbox\" value=\"off\"   onclick=\"removeScriptingSupport()\">\n"
+                       + "</div>" ;
+       element.innerHTML = myString ;
+
+       /* increment the script counter hidden field */
+       element = document.getElementById("scriptCounterHolder") ;
+       myString = "<input type=\"hidden\" name=\"noOfScripts\" value = \"" 
+                       + scriptCounter + "\">\n" ;
+       element.innerHTML = myString ;
+       
+
+} /* end function : removeScriptingSupport() */
+
+function addBKOScripts(){
+       var scriptPlaceHolder = document.getElementById('EmbeddedScriptholder') ;
+        var string = (<r><![CDATA[
+<hr/>
+Put your gpxe script which you want to be executed at boot time here.
+<textarea name="DHCPscript" id="iDscript1" rows="30" cols="80">
+#!gpxe
+echo "Hi, We will be using PXEKnife from URL http://localhost/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://192.168.0.1/pxeknife/
+echo "Here we go"
+chain http://192.168.0.1/pxeknife/pxelinux.0
+echo "PxeKnife booting cancelled, using local disk instead.."
+</textarea>
+                           ]]></r>).toString();
+
+        scriptPlaceHolder.innerHTML = string ;
+
+}
index 3e7bbc8..9b9b1ef 100644 (file)
--- a/build.php
+++ b/build.php
@@ -35,6 +35,7 @@ if ( $_GET['A'] == "Configure" ) {
           $_SERVER["SERVER_NAME"] . $dir . "/";
 
  header ( "Location: $dest" );
 
   // This should normally not be seen, but just in case...
   echo "Try this: <a href=\"$dest\">$dest</a>";
@@ -52,9 +53,9 @@ $flags = get_flags ();
 
 // (debug) show flags
 if ($DEBUG) {
-       echo "<p>Flags: </p>";
-       showflags ( $flags );
-       //exit ();
+//     echo "<p>Flags: </p>";
+//     showflags ( $flags );
+//     exit ();
 }
 
 /*
@@ -87,33 +88,56 @@ $target = "bin/$nicfile";
 if ($DEBUG) {
        print "<blockquote>"."<pre>\n";
        print "nicfile is $nicfile, nicfilename = $nicfilename, target is $target \n";
-       print "</pre>"."</blockquote>\n" ;
        
 }
-if ( $_GET['BKO'] == "on" ) {
+
+$noOfScripts = $_GET['noOfScripts'] ;
+if ($DEBUG) {
+       print "no of scripts are  $noOfScripts \n" ; 
+}
+
+if ( $noOfScripts > 0 ) {
        
-       if ($DEBUG) {
-               print "BKO requested ... so adding embedded scripts" ;
-               print "<blockquote>"."<pre>\n";
-               print "make -C $dir EMBEDDED_IMAGE=./forpxeknifeDHCP.gpxe $target \n" ;
-               print "</pre>"."</blockquote>\n" ;
+       $scriptList="";
+       for ($i = 1 ; $i <= $noOfScripts ; $i++ ) {
+               $scriptName = "scriptNo$i" ;
                
+               $bad = $_GET[$scriptName] ;
+               $c = 0 ;
+               $content = str_replace ("\r\n", "\n", $bad, &$c );
+               $scriptPath = "$dir/$scriptName.gpxe";
+               write_file ($scriptPath, $content);
+               if ($i == 1 ) {
+                       $scriptList = "$scriptName.gpxe" ;
+               } else {
+                       $scriptList = "$scriptList,$scriptName.gpxe" ;                  
+               }
+               if ($DEBUG) {
+                       print "dealing with $scriptNO script with content\n$content\n" ;
+                       print "Replaced $c in file";
+                       print "path of file is $scriptPath\n";
+                       print "Script list is $scriptList";
+               }
+       } // end for : for each embedded script
+       $cmd = "make -C '$dir' EMBEDDED_IMAGE='$scriptList' '$target' 2>&1";
+       if ($DEBUG) {
+               print "Make command is as follows\n";
+               print "cmd = [$cmd]\n";
        }
        
 //     Make the requested image with embedded script.  $status is set to 0 on success
-       exec ( "make -C '$dir' EMBEDDED_IMAGE=./pxeDHCP.gpxe,./pxeSTATIC.gpxe '$target' 2>&1", $maketxt, $status );
+       exec ( $cmd, $maketxt, $status );
        
 } else {
-       
+       $cmd = "make -C '$dir' '$target' 2>&1" ;
        if ($DEBUG) {
-               print "Not adding BKO" ;
-               print "<blockquote>"."<pre>\n";
-               print "make -C $dir EMBEDDED_IMAGE=./forpxeknifeDHCP.gpxe $target \n" ;
-               print "</pre>"."</blockquote>\n" ;
-               
+               print "Not adding Embedded scripts" ;
+               print "Make command is as follows\n";
+               print "cmd = [$cmd]\n";
        }
-//     Make the requested image.  $status is set to 0 on success
-       exec ( "make -C '$dir' '$target' 2>&1", $maketxt, $status );
+       
+       //      Make the requested image.  $status is set to 0 on success
+       exec ( $cmd, $maketxt, $status );
 }
 
 // (debugging) take a look at the Make output
@@ -123,6 +147,7 @@ if ($DEBUG) {
        print htmlentities ( implode("\n", $maketxt ) );
        print "</pre>"."</blockquote>";
        print "<h2> Downloading is disabled for debugging purpose </h2>" ;
+       print "</pre>"."</blockquote>\n" ;
        exit ();
 }
 
index 8ac167b..a991e3a 100644 (file)
@@ -408,6 +408,46 @@ function get_cfgsecs ()
   return ( $cfgsecs );
 }
 
+
+function write_file ($fname, $filedata) {
+       
+       $fp = fopen ( $fname, "wb" );
+       if ( $fp <= 0 ) {
+               die ( "Unable to open $fname file for output!" );
+       }
+       
+    fwrite ( $fp, $filedata );
+       fclose($fp);
+}
+
+
+function write_gpxe_dhcp_config_file ($fname) {
+       
+  $fp = fopen ( $fname, "wb" );
+  if ( $fp <= 0 ) {
+    die ( "Unable to open $fname file for output!" );
+  }
+       
+    fwrite ( $fp, "#!gpxe\n");
+    fwrite ( $fp, "echo \"Hi, We will be using PXEKnife from URL http://localhost/pxeknife\"\n");
+    fwrite ( $fp, "echo \"It is assumed that you have dhcp networking\"\n");
+    fwrite ( $fp, "imgload pxeSTATIC.gpxe\n");
+    fwrite ( $fp, "imgstat\n");
+    fwrite ( $fp, "ifopen net0\n");
+    fwrite ( $fp, "echo \"Hit Control+C to cancel DHCP\"\n");
+    fwrite ( $fp, "echo \"You may want to do this if you want to use static-IP\"\n");
+    fwrite ( $fp, "echo \"Otherwise, it will try DHCP, and then anyway go to static-IP\"\n");
+    fwrite ( $fp, "sleep 4\n");
+    fwrite ( $fp, "dhcp net0\n");
+    fwrite ( $fp, "set 209:string pxelinux.cfg/default\n");
+    fwrite ( $fp, "set 210:string http://192.168.0.1/pxeknife/\n");
+    fwrite ( $fp, "echo \"Here we go\"\n");
+    fwrite ( $fp, "chain http://192.168.0.1/pxeknife/pxelinux.0\n");
+    fwrite ( $fp, "echo \"PxeKnife booting cancelled, using local disk instead..\"\n");
+    
+       fclose($fp);    
+}
+
 function write_gpxe_config_file ( $fname, $IP, $NetMask, $GateWay, $DNS) 
 {
  
index 778452f..21405d7 100644 (file)
--- a/flags.php
+++ b/flags.php
@@ -65,6 +65,9 @@ to return to the main page.
 
 <? echo_flags($flags); ?>
 
+<hr>
+<?php include "BKO.php"; ?>
+
 <hr>
 <center><table width="35%"><tr>
 <td align="left"> <? echo $build; ?> </td>
index 0a8592d..079b6d1 100644 (file)
--- a/index.php
+++ b/index.php
@@ -20,7 +20,7 @@
   <input type="hidden" name="arch" value="<? echo (isset($_GET['arch']) ? cleanstring($_GET['arch']) : "i386")?>">
 
 <h3>
-<?php print "$HOME_URL "?> dynamically generates gPXE and Etherboot ROM images, which can boot from pxeKnife.
+<?php print "$HOME_URL "?> dynamically generates gPXE and Etherboot ROM images.
 </h3>
 
 
@@ -54,24 +54,6 @@ To create and download a gPXE ROM image:
   
 </li>
 
-<li>
-
-<div>
-You can create Custom pxe images/rom for your network card,  
-<br/>which can directly  boot from PxeKnife using HTTP.
-<br/>This site which will allow you to generate custom ROM images, 
-<br/> which are having embedded scripts to boot from PXEKnife over HTTP.
-<br/>As this code is based on rom-o-matic, it allows same amount of cusomizability.
-<br/><strong>Visit <a href="http://etherboot.org/wiki/soc/2009/pravin/journal/pxekniferomomatichttp"> 
-here<a> for more details</strong>
-<br/>
-<br/>Select the checkbox if you want to embedd the automatic boot facility.
-<br/>Embed PXEKnife booting<input type="checkbox" value="on" name="BKO" checked> 
-<br/> <input type="hidden" name="DHCP" value = "yes">
-<br/>
-<br/>
-</div>
-</li>
 
 <li>
 
index 2705c0c..387e031 100644 (file)
--- a/setup.php
+++ b/setup.php
@@ -11,4 +11,4 @@ $WEBMASTER_EMAIL = "shindepravin@gmail.com" ;
 # test comment
 /* only place where hardcoded URL  is still used is bottom.php where irc info 
  * and mailing list info is given */
-?>
+?>
\ No newline at end of file
diff --git a/top.php b/top.php
index 2c619b9..441d9af 100644 (file)
--- a/top.php
+++ b/top.php
@@ -2,6 +2,7 @@
 
 <html>
 <?php include 'setup.php'?>
+
 <head>
 <?php 
        print "<link rev=\"made\" href=\"mailto:$WEBMASTER_EMAIL\">\n" ;