summaryrefslogtreecommitdiffstats
path: root/contrib/mklrpnb/mklrpnb
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/mklrpnb/mklrpnb')
-rwxr-xr-xcontrib/mklrpnb/mklrpnb45
1 files changed, 45 insertions, 0 deletions
diff --git a/contrib/mklrpnb/mklrpnb b/contrib/mklrpnb/mklrpnb
new file mode 100755
index 00000000..47590f74
--- /dev/null
+++ b/contrib/mklrpnb/mklrpnb
@@ -0,0 +1,45 @@
+#!/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;