forked from pool/syslinux
645ce1e6ec
* Major code base changes; all filesystem rewritten in C. This work was done primarily by Liu Aleaxander (Yuanhan Liu). * Better support for booting from MBRs which don't pass handover information. * EXTLINUX: Try to be smarter about finding the partition offset. * chain.c32: support chainloading Dell Real Mode Kernel (Gene Cumm). * chain.c32: fix booting in CHS mode. * Fix the -s option to the syslinux/extlinux installer (Arwin Vosselman). * isohybrid: fix padding of large images (PJ Pandit). * SYSLINUX: correctly handle the case where the -d option is specified with a non-absolute path, i.e. "syslinux -d syslinux" instead of "syslinux -d /syslinux". * ISOLINUX: recognize the directory names /boot/syslinux and /syslinux, and the filename syslinux.cfg in addition to the isolinux-specific names. Thus, "syslinux.cfg" is now a generic name, whereas "isolinux.cfg" or "extlinux.conf" is specific to different derivative. * chain.c32: support setting alternate config filename for stage2 of GRUB Legacy (Gert Hulselmans). * whichsys.c32: execute specific command, based on Syslinux bootloader variant (Gert Hulselmans). * lua.c32: a lot of new bindings added to the "syslinux" namespace: VESA, PCI, DMI, kernel loading (Marcel Ritter). * btrfs: print a comprehensive error message if compressed or encrypted files are encountered (neither is currently OBS-URL: https://build.opensuse.org/package/show/system:install:head/syslinux?expand=0&rev=25
70 lines
1.4 KiB
Perl
70 lines
1.4 KiB
Perl
#! /usr/bin/perl
|
|
|
|
#
|
|
# Patch new base dir into isolinux.
|
|
#
|
|
# Makes some assumptions about memory layout in isolinux.
|
|
#
|
|
|
|
use Getopt::Long;
|
|
|
|
sub help;
|
|
|
|
$opt_base = undef;
|
|
$opt_help = undef;
|
|
|
|
GetOptions(
|
|
'help' => \$opt_help,
|
|
'base=s' => \$opt_base,
|
|
);
|
|
|
|
$file = shift;
|
|
|
|
help if $file eq '' || $opt_help;
|
|
|
|
open F, $file or die "$file: $!\n";
|
|
sysread F, $file_buf, -s($file);
|
|
close F;
|
|
|
|
if((length $file_buf > (8 << 10)) && ($file_buf =~ m#(/boot(/[\x20-\xff]*)\x00*)\x00isolinux.cfg\x00#s)) {
|
|
$format = 1;
|
|
}
|
|
elsif((length $file_buf > (8 << 10)) && ($file_buf =~ m#(/boot(/[\x20-\xff]*)\x00*)\x00/boot/syslinux\x00#s)) {
|
|
$format = 2;
|
|
}
|
|
|
|
die "$file: is not isolinux\n" unless $format;
|
|
|
|
$start = length $`;
|
|
$base_buf = $1;
|
|
$old_base = $2;
|
|
|
|
if(defined $opt_base) {
|
|
($base = $opt_base) =~ s#^/*##;
|
|
|
|
$base = "/boot/$base";
|
|
die "$opt_base: file name too long\n" if length($base) > length($base_buf);
|
|
$base_buf = $base . "\x00" x (length($base_buf) - length($base));
|
|
substr($file_buf, $start, length($base_buf)) = $base_buf;
|
|
|
|
open F, ">$file" or die "$file: $!\n";
|
|
syswrite F, $file_buf;
|
|
close F;
|
|
|
|
($old_base = $base) =~ s#^/boot##;
|
|
}
|
|
|
|
print "base=$old_base\n";
|
|
|
|
|
|
sub help
|
|
{
|
|
die
|
|
"usage: isolinux-config [options] isolinux_binary\n" .
|
|
"Configure isolinux.\n" .
|
|
"Options:\n" .
|
|
" --base dir\tset isolinux base directory to dir\n" .
|
|
" --help\tthis message\n";
|
|
}
|
|
|