Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
[contrib] Add rom-o-matic to contrib
- Loading branch information
Marty Connor
committed
Jan 17, 2010
1 parent
330abeb
commit 67a10ef
Showing
41 changed files
with
1,854 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
<? | ||
|
||
/** | ||
* Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. | ||
* Copyright (C) 2009 Entity Cyber, Inc. | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation; either version 2 of the | ||
* License, or any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
*/ | ||
|
||
?> | ||
<hr> | ||
<h4> | ||
Resources: | ||
</h4> | ||
<ul> | ||
<li> | ||
Source code for gPXE images is available at | ||
<a href="http://etherboot.org/wiki/download" target="_blank"> | ||
http://etherboot.org/wiki/download</a> | ||
<br><br> | ||
</li> | ||
<li> | ||
For general information about using gPXE, please visit the | ||
<a href="http://www.etherboot.org/" target="_blank"> | ||
Etherboot Project Home Page</a> | ||
<br><br> | ||
</li> | ||
<li> | ||
For Email-based support for gPXE please join | ||
<a href="http://etherboot.org/wiki/mailinglists" target="_blank"> | ||
Etherboot Project mailing lists.</a> | ||
<br><br> | ||
</li> | ||
<li> | ||
For real-time online gPXE support via IRC please visit the | ||
<a href="irc://irc.freenode.net/%23etherboot"> #etherboot channel | ||
of irc.freenode.net</a>. | ||
<br><br> | ||
</li> | ||
</ul> | ||
<hr> | ||
<font size="-1"> | ||
<br> | ||
Please email <a href="mailto:<? echo "${webmaster_email}" ?>"><? echo "${webmaster_email}"?></a> | ||
with questions or comments about this website. | ||
</font> | ||
<br><br> | ||
<hr> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,306 @@ | ||
<?php // -*- Mode: PHP; -*- | ||
|
||
/** | ||
* Copyright (C) 2009 Marty Connor <mdc@etherboot.org>. | ||
* Copyright (C) 2009 Entity Cyber, Inc. | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation; either version 2 of the | ||
* License, or any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
*/ | ||
|
||
// Get utility functions and set globals | ||
require_once "utils.php"; | ||
|
||
// Make sure at least $A (action) was supplied | ||
if ( ! isset ( $_POST['A'] ) ) { | ||
|
||
// Present user with form to customize build options | ||
require_once "customize-flags.php"; | ||
|
||
exit (); | ||
|
||
// If user chose "Customize" option on form | ||
} else if ( $_POST['A'] == "Customize" ) { | ||
|
||
// Present user with form to customize build options | ||
require_once "customize-flags.php"; | ||
|
||
exit (); | ||
|
||
// The following conditional includes all other cases except "Get Image" | ||
// particularly the explicit ($A == "Start Over") case | ||
} else if ( $_POST['A'] != "Get Image" ) { | ||
|
||
// Note that this method of redirections discards all the | ||
// configuration flags, which is intentional in this case. | ||
|
||
$dest = curDirURL (); | ||
header ( "Location: $dest" ); | ||
|
||
// This next "echo" should normally not be seen, because | ||
// the "header" statement above should cause immediate | ||
// redirection but just in case... | ||
|
||
echo "Try this link: <a href=\"$dest\">$dest</a>"; | ||
|
||
exit (); | ||
} | ||
|
||
// OK, we're going to try to use whatever options have been set | ||
// to build an image. | ||
|
||
// Make sure at least $nic was supplied | ||
if ( ! isset ( $_POST['nic'] ) ) { | ||
die ( "No NIC supplied!" ); | ||
} | ||
if ( isset ( $nics[$_POST['nic']] ) ) { | ||
$nic = $nics[$_POST['nic']]; | ||
} else { | ||
die ( "Invalid NIC \"${_POST['nic']}\" supplied!" ); | ||
} | ||
|
||
// Fetch flags | ||
$flags = get_flags (); | ||
|
||
// Get requested format | ||
$ofmt = isset ( $_POST['ofmt'] ) ? $_POST['ofmt'] : ""; | ||
$fmt_extension = isset ( $ofmts[$ofmt] ) ? $ofmts[$ofmt] : 'dsk'; | ||
|
||
// Handle some special cases | ||
|
||
$pci_vendor_code = ""; | ||
$pci_device_code = ""; | ||
|
||
if ( $nic == 'undionly' && $fmt_extension == "pxe" ) { | ||
|
||
// undionly.pxe can't work because it unloads the PXE stack | ||
// that it needs to communicate with, so we set the extension | ||
// to .kpxe, which has a chance of working. The extension | ||
// .kkpxe is another option. | ||
|
||
$fmt_extension = "kpxe"; | ||
|
||
} else if ( $fmt_extension == "rom" ) { | ||
|
||
if ( ! isset ( $_POST['pci_vendor_code'] ) | ||
|| ! isset ( $_POST['pci_device_code'] ) ) { | ||
die ( "rom output format selected but PCI code(s) missing!" ); | ||
} | ||
|
||
$pci_vendor_code = $_POST['pci_vendor_code']; | ||
$pci_device_code = $_POST['pci_device_code']; | ||
|
||
if ( $pci_vendor_code == "" | ||
|| $pci_device_code == "" ) { | ||
die ( "rom output format selected but PCI code(s) missing!" ); | ||
} | ||
|
||
// Try to be forgiving of 0xAAAA format | ||
if ( strtolower ( substr ( $pci_vendor_code, 0, 2 ) ) == "0x" | ||
&& strlen ( $pci_vendor_code ) == 6 ) { | ||
$pci_vendor_code = substr ( $pci_vendor_code, 2, 4 ); | ||
} | ||
if ( strtolower ( substr ( $pci_device_code, 0, 2 ) ) == "0x" | ||
&& strlen ( $pci_device_code ) == 6 ) { | ||
$pci_device_code = substr ( $pci_device_code, 2, 4 ); | ||
} | ||
|
||
// concatenate the pci codes to get the $nic part of the | ||
// Make target | ||
$pci_codes = strtolower ( $pci_vendor_code . $pci_device_code ); | ||
|
||
$nic = $pci_codes; | ||
if ( ! isset ( $roms[$pci_codes] ) ) { | ||
die ( "Sorry, no network driver supports PCI codes<br>" | ||
. "${_POST['pci_vendor_code']}:" | ||
. "${_POST['pci_device_code']}" ); | ||
} | ||
} else if ( $fmt_extension != "rom" | ||
&& ( $pci_vendor_code != "" || $pci_device_code != "" ) ) { | ||
die ( "'$fmt_extension' format was selected but PCI IDs were" | ||
. " also entered.<br>Did you mean to select 'rom' output format" | ||
. " instead?" ); | ||
} | ||
|
||
/** | ||
* remove temporary build directory | ||
* | ||
* @return bool true if removal is successful, false otherwise | ||
*/ | ||
function rm_build_dir () | ||
{ | ||
global $build_dir; | ||
global $keep_build_dir; | ||
|
||
if ( $keep_build_dir !== true ) { | ||
rm_file_or_dir ( $build_dir ); | ||
} | ||
} | ||
|
||
// Arrange for the build directory to always be removed on exit. | ||
$build_dir = ""; | ||
$keep_build_dir = false; | ||
register_shutdown_function ( 'rm_build_dir' ); | ||
|
||
// Make temporary copy of src directory | ||
$build_dir = mktempcopy ( "$src_dir", "/tmp", "MDCROM" ); | ||
$config_dir = $build_dir . "/config"; | ||
|
||
// Write config files with supplied flags | ||
write_gpxe_config_files ( $config_dir, $flags ); | ||
|
||
// Handle a possible embedded script | ||
$emb_script_cmd = ""; | ||
$embedded_script = isset ( $_POST['embedded_script'] ) ? $_POST['embedded_script'] : ""; | ||
if ( $embedded_script != "" ) { | ||
$emb_script_path = "$build_dir" . "/script0.gpxe"; | ||
|
||
if ( substr ( $embedded_script, 0, 5 ) != "#!gpxe" ) { | ||
$embedded_script = "#!gpxe\n" . $embedded_script; | ||
} | ||
|
||
// gPXE 0.9.7 doesn't like '\r\n" in the shebang... | ||
$embedded_script = str_replace ( "\r\n", "\n", $embedded_script ); | ||
|
||
write_file_from_string ( $emb_script_path, $embedded_script ); | ||
$emb_script_cmd = "EMBEDDED_IMAGE=${emb_script_path}"; | ||
} | ||
|
||
// Make the requested image. $status is set to 0 on success | ||
$make_target = "bin/${nic}.${fmt_extension}"; | ||
$make_cmd = "make -C '$build_dir' '$make_target' $emb_script_cmd $2>&1"; | ||
|
||
exec ( $make_cmd, $maketxt, $status ); | ||
|
||
// Uncomment the following section for debugging | ||
|
||
/** | ||
echo "<h2>build.php:</h2>"; | ||
echo "<h3>Begin debugging output</h3>"; | ||
//echo "<h3>\$_POST variables</h3>"; | ||
//echo "<pre>"; var_dump ( $_POST ); echo "</pre>"; | ||
echo "<h3>Build options:</h3>"; | ||
echo "<strong>Build directory is:</strong> $build_dir" . "<br><br>"; | ||
echo "\$_POST['ofmt'] = " . "\"${_POST['ofmt']}\"" . "<br>"; | ||
echo "\$_POST['nic'] = " . "\"${_POST['nic']}\"" . "<br>"; | ||
echo "\$_POST['pci_vendor_code'] = " . "\"${_POST['pci_vendor_code']}\"" . "<br>"; | ||
echo "\$_POST['pci_device_code'] = " . "\"${_POST['pci_device_code']}\"" . "<br>"; | ||
echo "<h3>Flags:</h3>"; | ||
show_flags ( $flags ); | ||
if ( $embedded_script != "" ) { | ||
echo "<h3>Embedded script:</h3>"; | ||
echo "<blockquote>"."<pre>"; | ||
echo $embedded_script; | ||
echo "</pre>"."</blockquote>"; | ||
} | ||
echo "<h3>Make output:</h3>"; | ||
echo "Make command: " . $make_cmd . "<br>"; | ||
echo "Build status = <? echo $status ?>" . "<br>"; | ||
echo "<blockquote>"."<pre>"; | ||
echo htmlentities ( implode ("\n", $maketxt ) ); | ||
echo "</pre>"."</blockquote>"; | ||
// Uncomment the next line if you want to keep the | ||
// build directory around for inspection after building. | ||
$keep_build_dir = true; | ||
die ( "<h3>End debugging output</h3>" ); | ||
**/ // End debugging section | ||
|
||
// Send ROM to browser (with extreme prejudice) | ||
|
||
if ( $status == 0 ) { | ||
|
||
$fp = fopen("${build_dir}/${make_target}", "rb" ); | ||
if ( $fp > 0 ) { | ||
|
||
$len = filesize ( "${build_dir}/${make_target}" ); | ||
if ( $len > 0 ) { | ||
|
||
$buf = fread ( $fp, $len ); | ||
fclose ( $fp ); | ||
|
||
// Delete build directory as soon as it is not needed | ||
rm_build_dir (); | ||
|
||
$output_filename = "gpxe-${version}-${nic}.${fmt_extension}"; | ||
|
||
// Try to force IE to handle downloading right. | ||
Header ( "Cache-control: private"); | ||
Header ( "Content-Type: application/x-octet-stream; " . | ||
"name=$output_filename"); | ||
Header ( "Content-Disposition: attachment; " . | ||
"Filename=$output_filename"); | ||
Header ( "Content-Location: $output_filename"); | ||
Header ( "Content-Length: $len"); | ||
|
||
echo $buf; | ||
|
||
exit (); | ||
} | ||
} | ||
} | ||
|
||
/* | ||
* If we reach this point, the build has failed, and we provide | ||
* debugging information for a potential bug report | ||
* | ||
*/ | ||
|
||
// Remove build directory | ||
rm_build_dir (); | ||
|
||
// Announce failure if $status from make was non-zero | ||
echo "<h2>Build failed. Status = " . $status . "</h2>"; | ||
echo "<h2>build.php:</h2>"; | ||
echo "<h3>Build options:</h3>"; | ||
echo "<strong>Build directory is:</strong> $build_dir" . "<br><br>"; | ||
echo "\$_POST['ofmt'] = " . "\"${_POST['ofmt']}\"" . "<br>"; | ||
echo "\$_POST['nic'] = " . "\"${_POST['nic']}\"" . "<br>"; | ||
echo "\$_POST['pci_vendor_code'] = " . "\"${_POST['pci_vendor_code']}\"" . "<br>"; | ||
echo "\$_POST['pci_device_code'] = " . "\"${_POST['pci_device_code']}\"" . "<br>"; | ||
|
||
echo "<h3>Flags:</h3>"; | ||
show_flags ( $flags ); | ||
|
||
if ( $embedded_script != "" ) { | ||
echo "<h3>Embedded script:</h3>"; | ||
echo "<blockquote>"."<pre>"; | ||
echo $embedded_script; | ||
echo "</pre>"."</blockquote>"; | ||
} | ||
|
||
echo "<h3>Make output:</h3>"; | ||
echo "Make command: " . $make_cmd . "<br>"; | ||
echo "<blockquote>"."<pre>"; | ||
echo htmlentities ( implode ("\n", $maketxt ) ); | ||
echo "</pre>"."</blockquote>"; | ||
|
||
echo "Please let us know that this happened, and paste the above output into your email message.<br>"; | ||
|
||
include_once $bottom_inc; | ||
|
||
// For emacs: | ||
// Local variables: | ||
// c-basic-offset: 4 | ||
// c-indent-level: 4 | ||
// tab-width: 4 | ||
// End: | ||
|
||
?> |
Oops, something went wrong.