david/ipxe
david
/
ipxe
Archived
1
0
Fork 0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/contrib/mklrpnb/mklrpnb

46 lines
1.6 KiB
Perl
Executable File

#!/usr/bin/perl -w
#
# A program to make a netbootable image from a LRP firewall floppy
# Tested on a Coyote Linux floppy
#
@cfg = `mtype a:syslinux.cfg`;
unless (defined(@cfg)) {
print "Cannot find syslinux.cfg on floppy\n";
exit 1;
}
($append) = grep(/^append/, @cfg); # find the append= line
chomp($append); # remove trailing newline
$append =~ s/append=//; # remove the append= at beginning
@args = split(/ /, $append); # split into arguments at whitespace
($root) = grep(/^initrd=/, @args); # find the initrd= argument
$root =~ s/^initrd=//; # remove the initrd= at beginning
($lrp) = grep(/^LRP=/, @args); # find the LRP= argument
$lrp =~ s/^LRP=//; # remove the LRP= at beginning
@lrp = split(/,/, $lrp); # split into filenames at ,
unshift(@lrp, $root); # prepend the root LRP filename
$append = '';
foreach $i (@args) { # rebuild the append string
next if ($i =~ /^initrd=/); # minus the unneeded parameters
next if ($i =~ /^LRP=/);
next if ($i =~ /^boot=/);
$append .= "$i ";
}
# print "$append\n";
$tempdir = "/tmp/lrp$$";
mkdir($tempdir, 0777) or die "$tempdir: $!\n";
chdir($tempdir) or die "$tempdir: $!\n";
foreach $i (@lrp) {
$i .= '.lrp' if $i !~ /\.lrp$/;
print "Unpacking $i\n";
system("mtype a:$i | tar zxvf -");
}
print "Repacking to /tmp/lrp.lrp\n";
system("tar zcf /tmp/lrp.lrp *");
chdir('/tmp') or die "/tmp: $!\n";
system("rm -fr $tempdir");
print "Extracting kernel image from floppy\n";
system("mtype a:linux > /tmp/lrp.ker");
print "Creating netboot image in /tmp/lrp.nb\n";
system("mkelf-linux --append='$append' --output=/tmp/lrp.nb /tmp/lrp.ker /tmp/lrp.lrp");
exit 0;