forked from pool/elilo
Accepting request 652139 from Base:System
OBS-URL: https://build.opensuse.org/request/show/652139 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/elilo?expand=0&rev=31
This commit is contained in:
commit
8086aa8f1c
66
elilo-high_base_mem.diff
Normal file
66
elilo-high_base_mem.diff
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
x86_64/system.c | 31 +++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 31 insertions(+)
|
||||||
|
|
||||||
|
--- a/x86_64/system.c
|
||||||
|
+++ b/x86_64/system.c
|
||||||
|
@@ -44,7 +44,9 @@
|
||||||
|
#include "loader.h"
|
||||||
|
#include "rmswitch.h"
|
||||||
|
|
||||||
|
+#ifndef DEBUG_CREATE_BOOT_PARAMS
|
||||||
|
#define DEBUG_CREATE_BOOT_PARAMS 0
|
||||||
|
+#endif
|
||||||
|
#if DEBUG_CREATE_BOOT_PARAMS
|
||||||
|
#define DPR(a) do { if (elilo_opt.debug) { Print a; } } while ( 0 )
|
||||||
|
#else
|
||||||
|
@@ -100,6 +102,7 @@ UINTN sizeof_init_gdt = sizeof init_gdt;
|
||||||
|
*/
|
||||||
|
|
||||||
|
UINTN high_base_mem = 0x90000;
|
||||||
|
+VOID *high_base_mem_address = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Highest available extended memory address.
|
||||||
|
@@ -128,6 +131,30 @@ sysdeps_init(EFI_HANDLE dev)
|
||||||
|
{
|
||||||
|
DBG_PRT((L"sysdeps_init()\n"));
|
||||||
|
|
||||||
|
+ DBG_PRT((L"fix high_base_mem and gdt_addr\n"));
|
||||||
|
+ while (!high_base_mem_address) {
|
||||||
|
+ high_base_mem_address = alloc_pages(5, EfiLoaderData,
|
||||||
|
+ AllocateAddress,
|
||||||
|
+ (void *)high_base_mem);
|
||||||
|
+ if (!high_base_mem_address) {
|
||||||
|
+ if (high_base_mem > (1 << 16)) {
|
||||||
|
+ high_base_mem -= (1 << 16);
|
||||||
|
+ } else {
|
||||||
|
+ /* fall back to previous behavior */
|
||||||
|
+ high_base_mem = 0x90000;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (high_base_mem_address) {
|
||||||
|
+ VERB_PRT(3, Print(L"high_base_mem="PTR_FMT"\n",
|
||||||
|
+ high_base_mem_address));
|
||||||
|
+ gdt_addr.base = high_base_mem + 0x4000;
|
||||||
|
+ } else {
|
||||||
|
+ ERR_PRT((L"Failed to allocate high_base_mem, "
|
||||||
|
+ "stomping over heritage 0x90000.\n"));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Register our loader(s)...
|
||||||
|
*/
|
||||||
|
@@ -624,6 +651,10 @@ sysdeps_create_boot_params(
|
||||||
|
ERR_PRT((L"bp="PTR_FMT" cmdline="PTR_FMT" initrd="PTR_FMT" cookie="PTR_FMT"",
|
||||||
|
bp, cmdline, initrd, cookie));
|
||||||
|
|
||||||
|
+ if (high_base_mem_address != NULL) {
|
||||||
|
+ free(high_base_mem_address);
|
||||||
|
+ high_base_mem_address = NULL;
|
||||||
|
+ }
|
||||||
|
if (param_start != NULL) {
|
||||||
|
free(param_start);
|
||||||
|
param_start = NULL;
|
26
elilo-textmenu-disable-print-devices.diff
Normal file
26
elilo-textmenu-disable-print-devices.diff
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
choosers/textmenu.c | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
--- a/choosers/textmenu.c
|
||||||
|
+++ b/choosers/textmenu.c
|
||||||
|
@@ -308,11 +308,19 @@ reprint:
|
||||||
|
|
||||||
|
switch (key.UnicodeChar) {
|
||||||
|
/* XXX Do we really want this in textmenual mode? */
|
||||||
|
+#if 0
|
||||||
|
+ /*
|
||||||
|
+ * Definitely not, as '?' is a valid character on a
|
||||||
|
+ * kernel command line and sometimes needed for URLs
|
||||||
|
+ * while booting an installation. (And the output
|
||||||
|
+ * is barely visible anyhow...)
|
||||||
|
+ */
|
||||||
|
case L'?':
|
||||||
|
Print(L"\n");
|
||||||
|
print_devices();
|
||||||
|
first_time = 0;
|
||||||
|
goto reprint;
|
||||||
|
+#endif
|
||||||
|
case CHAR_BACKSPACE:
|
||||||
|
case CHAR_DEL:
|
||||||
|
if (PromptLen == 0) break;
|
@ -1,3 +1,28 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Nov 23 14:29:41 UTC 2018 - rw@suse.com
|
||||||
|
|
||||||
|
- elilo.efi
|
||||||
|
* Try to properly allocate high_base_mem. (bsc#1000769)
|
||||||
|
(elilo-high_base_mem.diff)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Nov 22 16:17:20 UTC 2018 - rw@suse.com
|
||||||
|
|
||||||
|
- elilo.spec
|
||||||
|
* Work around glitches introduced by gnu-efi.
|
||||||
|
* Add '-mno-red-zone' to work around Microsoft/SystemV AMD64 ABI
|
||||||
|
discrepancies. (bsc#953502)
|
||||||
|
- elilo.pl
|
||||||
|
* Support 'ucode=' for XEN. (bsc#1102567)
|
||||||
|
* SecureBoot: Support detached configuration template.
|
||||||
|
* Add support for 'UUID='/'LABEL=' to specify EFI system partition
|
||||||
|
and fix bug introduced by NVMe device handling. (bsc#917195)
|
||||||
|
* Handle NVMe device names. (fate#317591)
|
||||||
|
* Don't abort, when "skip" is announced. (bsc#917130)
|
||||||
|
- elilo.efi
|
||||||
|
* Remove special handling for '?' in textmenu-mode. (bsc#928546)
|
||||||
|
(elilo-textmenu-disable-print-devices.diff)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Mar 3 11:12:54 UTC 2018 - bwiedemann@suse.com
|
Sat Mar 3 11:12:54 UTC 2018 - bwiedemann@suse.com
|
||||||
|
|
||||||
@ -13,7 +38,7 @@ Thu Jul 31 12:41:32 UTC 2014 - dimstar@opensuse.org
|
|||||||
Fri Oct 25 13:37:55 UTC 2013 - rw@suse.de
|
Fri Oct 25 13:37:55 UTC 2013 - rw@suse.de
|
||||||
|
|
||||||
- elilo.efi
|
- elilo.efi
|
||||||
* update to elilo-3.16 to fix OBS download check.
|
* Update to elilo-3.16 to fix OBS download check.
|
||||||
Essentially "white-space" changes, plus bumping version number,
|
Essentially "white-space" changes, plus bumping version number,
|
||||||
minus Debian idiosyncrasies.
|
minus Debian idiosyncrasies.
|
||||||
- elilo.spec
|
- elilo.spec
|
||||||
|
112
elilo.pl
112
elilo.pl
@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
# $Id: elilo.pl,v 0.86 2013/10/25 14:22:33 rw Exp $
|
# $Id: elilo.pl,v 0.94 2018/11/22 15:48:50 rw Exp $
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
my $C = $0; $C =~ s{^.*/}{};
|
my $C = $0; $C =~ s{^.*/}{};
|
||||||
@ -18,6 +18,7 @@ my %Flist = ();
|
|||||||
my $Sconf = "$dbg/etc/" . $Fconf;
|
my $Sconf = "$dbg/etc/" . $Fconf;
|
||||||
my $Xconf = "xen.cfg";
|
my $Xconf = "xen.cfg";
|
||||||
my $Gconf = "grub.cfg";
|
my $Gconf = "grub.cfg";
|
||||||
|
my $GconfT = "$dbg/etc/default/elilo2grub.in";
|
||||||
|
|
||||||
my @eBinaries = ("elilo.efi", "xen.efi", "shim.efi");
|
my @eBinaries = ("elilo.efi", "xen.efi", "shim.efi");
|
||||||
my ($elilo, $xen, $shim) = @eBinaries;
|
my ($elilo, $xen, $shim) = @eBinaries;
|
||||||
@ -57,7 +58,7 @@ EoD
|
|||||||
$| = 1;
|
$| = 1;
|
||||||
|
|
||||||
sub Version() {
|
sub Version() {
|
||||||
my $v = q($Revision: 0.86 $ );
|
my $v = q($Revision: 0.94 $ );
|
||||||
$v =~ s/^\$ Rev.*:\ ([0-9.]+)\ \$\ /$1/x;
|
$v =~ s/^\$ Rev.*:\ ([0-9.]+)\ \$\ /$1/x;
|
||||||
$v .= " (part of elilo-$Edition)" if ( $Edition ne "\@EDITION\@" );
|
$v .= " (part of elilo-$Edition)" if ( $Edition ne "\@EDITION\@" );
|
||||||
print "$C version $v\n";
|
print "$C version $v\n";
|
||||||
@ -226,7 +227,7 @@ sub section2Econf($$%) {
|
|||||||
my $Xsections = 0;
|
my $Xsections = 0;
|
||||||
sub section2Xconf($$%) {
|
sub section2Xconf($$%) {
|
||||||
my( $in, $lnr, %current) = @_;
|
my( $in, $lnr, %current) = @_;
|
||||||
my( $label, $image, $initrd, $append, $root, $vmm, $vmmopts, $desc);
|
my( $label, $image, $initrd, $append, $root, $vmm, $vmmopts, $ucode, $desc);
|
||||||
|
|
||||||
if ( ! $current{xencfg} ) {
|
if ( ! $current{xencfg} ) {
|
||||||
Info( 3, "=== Xconf: skipping ".
|
Info( 3, "=== Xconf: skipping ".
|
||||||
@ -256,6 +257,8 @@ sub section2Xconf($$%) {
|
|||||||
$root = ($root ? " root=$root " : " ");
|
$root = ($root ? " root=$root " : " ");
|
||||||
$vmm = (exists( $current{VMM}) ? $current{VMM} :
|
$vmm = (exists( $current{VMM}) ? $current{VMM} :
|
||||||
(exists( $Sconf{vmm}) ? $Sconf{vmm} : ""));
|
(exists( $Sconf{vmm}) ? $Sconf{vmm} : ""));
|
||||||
|
$ucode = (exists( $current{ucode}) ? $current{ucode} :
|
||||||
|
(exists( $Sconf{ucode}) ? $Sconf{ucode} : ""));
|
||||||
if ( exists( $current{description}) ) {
|
if ( exists( $current{description}) ) {
|
||||||
$desc = $current{description};
|
$desc = $current{description};
|
||||||
} else {
|
} else {
|
||||||
@ -273,6 +276,7 @@ sub section2Xconf($$%) {
|
|||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
Info( 2, sprintf "=== %2d. Xconf: $label\n", ++$sections);
|
Info( 2, sprintf "=== %2d. Xconf: $label\n", ++$sections);
|
||||||
|
$Xconf{$label}{ucode} = $ucode if ($ucode);
|
||||||
$Xconf{$label}{vmm} = $vmm;
|
$Xconf{$label}{vmm} = $vmm;
|
||||||
$Xconf{$label}{options} = $vmmopts;
|
$Xconf{$label}{options} = $vmmopts;
|
||||||
$Xconf{$label}{kernel} = $image;
|
$Xconf{$label}{kernel} = $image;
|
||||||
@ -289,7 +293,6 @@ sub section2Xconf($$%) {
|
|||||||
$Xconf{$label}{cfg} = "xen". ++$Xsections .".cfg";
|
$Xconf{$label}{cfg} = "xen". ++$Xsections .".cfg";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,11 +347,11 @@ sub Parse($$) {
|
|||||||
$current{$1} = (defined($2)) ? $2 : "true";
|
$current{$1} = (defined($2)) ? $2 : "true";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if ( m{^\s*(?:image|initrd|vmm)\s*=\s*} ) {
|
if ( m{^\s*(?:image|initrd|vmm|ucode)\s*=\s*} ) {
|
||||||
my $orig = $_;
|
my $orig = $_;
|
||||||
chomp;
|
chomp;
|
||||||
s{(vmm\s*=\s*)"([^"]+)"\s*(#.*)?$}{$1$2};
|
s{(vmm\s*=\s*)"([^"]+)"\s*(#.*)?$}{$1$2};
|
||||||
s{^(\s*(image|initrd|vmm)\s*=\s*)(/\S+/)?([^/\s]+)\s*(.*?)\s*$}{$1$4};
|
s{^(\s*(image|initrd|vmm|ucode)\s*=\s*)(/\S+/)?([^/\s]+)\s*(.*?)\s*$}{$1$4};
|
||||||
my( $k, $p, $f, $o) = ($2, $3, $4, $5);
|
my( $k, $p, $f, $o) = ($2, $3, $4, $5);
|
||||||
#Info( 8, ">>> $.: k=$k p=$p f=$f\n");
|
#Info( 8, ">>> $.: k=$k p=$p f=$f\n");
|
||||||
$_ .= "\n";
|
$_ .= "\n";
|
||||||
@ -368,6 +371,11 @@ sub Parse($$) {
|
|||||||
} elsif ( defined( $o) && $o ) {
|
} elsif ( defined( $o) && $o ) {
|
||||||
Warn( "$in: $.: ignoring trailing garbage...\n");
|
Warn( "$in: $.: ignoring trailing garbage...\n");
|
||||||
}
|
}
|
||||||
|
if ( $k eq "ucode" ) {
|
||||||
|
$Sconf{$k} = $f if (!exists( $current{image}) && !exists( $Sconf{$k}));
|
||||||
|
$_ = "# $_"; # hide 'ucode' from elilo.conf -- it's only for XEN!
|
||||||
|
$opt = 0; # ucode is *never* optional!
|
||||||
|
}
|
||||||
if ( ! defined( $p) ) {
|
if ( ! defined( $p) ) {
|
||||||
$p = "/boot/";
|
$p = "/boot/";
|
||||||
}
|
}
|
||||||
@ -396,7 +404,7 @@ sub Parse($$) {
|
|||||||
} elsif ( $opt ) {
|
} elsif ( $opt ) {
|
||||||
Info( 0, "$C: Info: $in: $.: missing optional '$p$f' skipped\n");
|
Info( 0, "$C: Info: $in: $.: missing optional '$p$f' skipped\n");
|
||||||
} else {
|
} else {
|
||||||
Warn( "$in: $.: missing '$p$f' skipped\n");
|
Warn( "$in: $.: missing '$p$f'\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
next if ( $k eq "VMM" ); # omit efi-based "vmm" lines from elilo.conf!
|
next if ( $k eq "VMM" ); # omit efi-based "vmm" lines from elilo.conf!
|
||||||
@ -564,6 +572,7 @@ sub GconfProbeFSuuid($) {
|
|||||||
sub GconfFSuuid($) {
|
sub GconfFSuuid($) {
|
||||||
my( $spec) = @_;
|
my( $spec) = @_;
|
||||||
return ( "" ) unless ( $Sconf{SB} );
|
return ( "" ) unless ( $Sconf{SB} );
|
||||||
|
$spec =~ s{^UUID=}{/dev/disk/by-uuid/};
|
||||||
return ( $GconfFSuuid{$spec} ) if ( exists( $GconfFSuuid{$spec}) );
|
return ( $GconfFSuuid{$spec} ) if ( exists( $GconfFSuuid{$spec}) );
|
||||||
|
|
||||||
my $uuid = "";
|
my $uuid = "";
|
||||||
@ -571,17 +580,20 @@ sub GconfFSuuid($) {
|
|||||||
if ( -x $cmd ) {
|
if ( -x $cmd ) {
|
||||||
my $dop = (-b $spec) ? "--device" : "";
|
my $dop = (-b $spec) ? "--device" : "";
|
||||||
chomp( $uuid = qx{$cmd --target=fs_uuid $dop "$spec"});
|
chomp( $uuid = qx{$cmd --target=fs_uuid $dop "$spec"});
|
||||||
} else {
|
}
|
||||||
|
if ( ! defined( $uuid) || ! $uuid ) {
|
||||||
$uuid = GconfProbeFSuuid( $spec);
|
$uuid = GconfProbeFSuuid( $spec);
|
||||||
}
|
}
|
||||||
if ( ! defined( $uuid) || ! $uuid ) {
|
if ( ! defined( $uuid) || ! $uuid ) {
|
||||||
Panic( 3, "couldn't determine fs_uuid -- skip SecureBoot/grub2 config!\n");
|
Warn( "couldn't determine fs_uuid -- skip SecureBoot/grub2 config!\n");
|
||||||
$Sconf{SB} = "";
|
$Sconf{SB} = "";
|
||||||
|
return ( "" );
|
||||||
}
|
}
|
||||||
$GconfFSuuid{$spec} = $uuid;
|
$GconfFSuuid{$spec} = $uuid;
|
||||||
return ( $uuid );
|
return ( $uuid );
|
||||||
}
|
}
|
||||||
sub Gconf() {
|
sub Gconf($) {
|
||||||
|
my ($data) = @_;
|
||||||
my @parts = ("pre", "Econf", "Xconf", "post");
|
my @parts = ("pre", "Econf", "Xconf", "post");
|
||||||
my @keys = ("label", "kernel", "ramdisk", "options", "description",
|
my @keys = ("label", "kernel", "ramdisk", "options", "description",
|
||||||
"rootfsuuid", "bootfsuuid", "disknr", "partnr", "vmm", "cfg");
|
"rootfsuuid", "bootfsuuid", "disknr", "partnr", "vmm", "cfg");
|
||||||
@ -593,7 +605,7 @@ sub Gconf() {
|
|||||||
|
|
||||||
$re = qr{^\>\>grub\.($re|.*)\<\<}ox;
|
$re = qr{^\>\>grub\.($re|.*)\<\<}ox;
|
||||||
|
|
||||||
while ( <DATA> ) {
|
while ( <$data> ) {
|
||||||
if ( m{^__(END)__} || ($current && m{$re}o) ) {
|
if ( m{^__(END)__} || ($current && m{$re}o) ) {
|
||||||
Info( 9, "<<$current\n$lines>>$current => $_");
|
Info( 9, "<<$current\n$lines>>$current => $_");
|
||||||
$S{$current} = $lines;
|
$S{$current} = $lines;
|
||||||
@ -695,8 +707,16 @@ sub Transfer ($$) {
|
|||||||
my( $in, $dir) = @_;
|
my( $in, $dir) = @_;
|
||||||
my $c = $Sconf{'__warn-count'};
|
my $c = $Sconf{'__warn-count'};
|
||||||
|
|
||||||
|
if ( $Sconf{SB} ) {
|
||||||
Gconf() if ( $Sconf{SB} );
|
my $fh;
|
||||||
|
if ( -r $GconfT ) {
|
||||||
|
open( $fh, "< $GconfT") || Panic( 1, "$GconfT: failed to open: $!\n");
|
||||||
|
} else {
|
||||||
|
open( $fh, "<&DATA") || Panic( 1, "<DATA>: failed to dup: $!\n");
|
||||||
|
}
|
||||||
|
Gconf($fh) if ( $Sconf{SB} );
|
||||||
|
close( $fh);
|
||||||
|
}
|
||||||
|
|
||||||
Warn( "no complete section for $Xconf!\n")
|
Warn( "no complete section for $Xconf!\n")
|
||||||
if ( $Sconf{xencfg} && ! exists( $Labels{Xconf}) );
|
if ( $Sconf{xencfg} && ! exists( $Labels{Xconf}) );
|
||||||
@ -844,16 +864,36 @@ sub MP($) {
|
|||||||
my ( $d) = @_;
|
my ( $d) = @_;
|
||||||
my @I = ("/etc/fstab", "/proc/mounts", "/etc/mtab");
|
my @I = ("/etc/fstab", "/proc/mounts", "/etc/mtab");
|
||||||
Info( 3, "### MP($d):");
|
Info( 3, "### MP($d):");
|
||||||
foreach my $f ( @I ) {
|
SOURCE: foreach my $f ( @I ) {
|
||||||
open( IN, "< $f") || next;
|
open( IN, "< $f") || next;
|
||||||
while ( <IN> ) {
|
while ( <IN> ) {
|
||||||
chomp;
|
chomp;
|
||||||
next if ( m{^#} );
|
next if ( m{^#} );
|
||||||
my @F = split;
|
my @F = split;
|
||||||
|
my $lno;
|
||||||
if ( $F[1] eq $d ) {
|
if ( $F[1] eq $d ) {
|
||||||
Info( 3, " found in '$f' line $. => true\n");
|
my $dev = $F[0];
|
||||||
|
$dev =~ s{^UUID=}{/dev/disk/by-uuid/};
|
||||||
|
$dev =~ s{^LABEL=}{/dev/disk/by-label/};
|
||||||
|
$lno = $.;
|
||||||
close( IN);
|
close( IN);
|
||||||
return( $F[0]);
|
while ( -l $dev ) {
|
||||||
|
my $t = `readlink -en "$dev"`;
|
||||||
|
if ( ! defined( $t) ) {
|
||||||
|
Info( 0, "readlink failed for line $lno in '$f'.\n");
|
||||||
|
next SOURCE;
|
||||||
|
}
|
||||||
|
if ( ! -b $dev ) {
|
||||||
|
Info( 0, "no block-device on line $lno in '$f': $dev.\n");
|
||||||
|
next SOURCE;
|
||||||
|
}
|
||||||
|
if ( $t =~ m{^(/dev/|(../)*)dm-[0-9a-f]+$}i ) {
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
$dev = $t;
|
||||||
|
}
|
||||||
|
Info( 3, " found '$dev' in '$f' line $lno => true\n");
|
||||||
|
return( $dev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close( IN);
|
close( IN);
|
||||||
@ -920,8 +960,8 @@ sub ebm($$$$$) {
|
|||||||
my $entry;
|
my $entry;
|
||||||
|
|
||||||
if ( ! -r "$MP$path" ) {
|
if ( ! -r "$MP$path" ) {
|
||||||
#Warn( "refusing to create EBM for non-existant binary ($MP$path).\n");
|
#Warn( "refusing to create EBM for non-existent binary ($MP$path).\n");
|
||||||
Warn( "refusing to create EBM for non-existant binary.\n");
|
Warn( "refusing to create EBM for non-existent binary.\n");
|
||||||
return unless ( $test );
|
return unless ( $test );
|
||||||
Info( 1, "#");
|
Info( 1, "#");
|
||||||
}
|
}
|
||||||
@ -942,10 +982,10 @@ sub ebm($$$$$) {
|
|||||||
next unless ( hwpEqual( $hwp, $3) );
|
next unless ( hwpEqual( $hwp, $3) );
|
||||||
if ( $file eq $4 ) {
|
if ( $file eq $4 ) {
|
||||||
my $c = hex($1);
|
my $c = hex($1);
|
||||||
# This effort below to elliminate holes in the boot enry list voids
|
# This effort below to eliminate holes in the boot entry list voids
|
||||||
# the attempt to order EBM entries by simply calling '--refresh-EBM'.
|
# the attempt to order EBM entries by simply calling '--refresh-EBM'.
|
||||||
# The full solution would require adding an interface to 'efibootmgr -o',
|
# The full solution would require adding an interface to 'efibootmgr -o',
|
||||||
# which is unfortunately not feasable this late in the release cycle.
|
# which is unfortunately not feasible this late in the release cycle.
|
||||||
# if ( $lbl eq $2 ) {
|
# if ( $lbl eq $2 ) {
|
||||||
# # delete label with higher number
|
# # delete label with higher number
|
||||||
# my $n = ($num < $c) ? $c : $num;
|
# my $n = ($num < $c) ? $c : $num;
|
||||||
@ -969,26 +1009,33 @@ sub ebm($$$$$) {
|
|||||||
|
|
||||||
sub Refresh($$) {
|
sub Refresh($$) {
|
||||||
my ( $device, $dir) = @_;
|
my ( $device, $dir) = @_;
|
||||||
my ($dev, $part, $path, $label, $ret);
|
my ($dev, $sep, $part, $path, $label, $ret);
|
||||||
my $shim_opts = ""; #$sBinaries[1];
|
my $shim_opts = ""; #$sBinaries[1];
|
||||||
|
|
||||||
# device & partition
|
# device & partition
|
||||||
if ( $device =~ m{^(.*)-part(\d+)$} ) {
|
if ( $device =~ m{^(.*)([-_]part)(\d+)$} ) {
|
||||||
$dev = $1;
|
$dev = $1;
|
||||||
$part = $2;
|
$sep = $2;
|
||||||
} elsif ( $device =~ m{^(.*)_part(\d+)$} ) {
|
$part = $3;
|
||||||
# /dev/mapper/... should not be used
|
} elsif ( $device =~ m{^(.*/[a-z0-9]+)(p)(\d+)$}i ) {
|
||||||
|
# accept things like 'c0d0p1' or 'nvme0n0p1'
|
||||||
$dev = $1;
|
$dev = $1;
|
||||||
$part = $2;
|
$sep = $2;
|
||||||
} elsif ( $device =~ m{^(.*/c\d+d\d+)p(\d+)$} ) {
|
$part = $3;
|
||||||
$dev = $1;
|
} elsif ( $device =~ m{^(/dev/[a-z]+)(\d+)$}i ) {
|
||||||
$part = $2;
|
# accept '/dev/sda1', but refuse '/dev/dm-1'
|
||||||
} elsif ( $device =~ m{^(/dev/\D+)(\d+)$} ) {
|
|
||||||
$dev = $1;
|
$dev = $1;
|
||||||
|
$sep = "";
|
||||||
$part = $2;
|
$part = $2;
|
||||||
} else {
|
} else {
|
||||||
Panic( 2, "parse error on EFI partition $device.\n");
|
Panic( 2, "parse error on EFI partition $device.\n");
|
||||||
}
|
}
|
||||||
|
if ( ! -b $dev ) {
|
||||||
|
Panic( 2, "EFI partition parent device $dev not found.\n");
|
||||||
|
}
|
||||||
|
if ( ! -b "$dev$sep$part" ) {
|
||||||
|
Panic( 2, "EFI partition $part on device $dev not found.\n");
|
||||||
|
}
|
||||||
Info( 4, "#### dev=$dev, part=$part\n");
|
Info( 4, "#### dev=$dev, part=$part\n");
|
||||||
# path
|
# path
|
||||||
$path = "/efi/$VD/";
|
$path = "/efi/$VD/";
|
||||||
@ -1002,6 +1049,11 @@ sub Refresh($$) {
|
|||||||
$label = "SUSE Linux Enterprise";
|
$label = "SUSE Linux Enterprise";
|
||||||
}
|
}
|
||||||
Info( 4, "#### label=$label\n");
|
Info( 4, "#### label=$label\n");
|
||||||
|
if ( $Sconf{SB} && ! exists($Sconf{'SB-fallback'}) &&
|
||||||
|
! -r "$MP$path$shim" ) {
|
||||||
|
# try to force "fallback" when primary target went missing!
|
||||||
|
$Sconf{'SB-fallback'} = "true";
|
||||||
|
}
|
||||||
if ( ! $Sconf{SB} || exists($Sconf{'SB-fallback'}) ) {
|
if ( ! $Sconf{SB} || exists($Sconf{'SB-fallback'}) ) {
|
||||||
my $lbl = $label . ($Sconf{'SB'} ? " (fallback)" : "");
|
my $lbl = $label . ($Sconf{'SB'} ? " (fallback)" : "");
|
||||||
$ret = ebm( "XEN ".$lbl, $dev, $part, $path . $xen, "")
|
$ret = ebm( "XEN ".$lbl, $dev, $part, $path . $xen, "")
|
||||||
|
20
elilo.spec
20
elilo.spec
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package elilo
|
# spec file for package elilo
|
||||||
#
|
#
|
||||||
# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -23,6 +23,7 @@ BuildRequires: binutils219
|
|||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
BuildRequires: gnu-efi >= 3.0u
|
BuildRequires: gnu-efi >= 3.0u
|
||||||
|
BuildRequires: xz
|
||||||
BuildRequires: perl(Pod::Man)
|
BuildRequires: perl(Pod::Man)
|
||||||
|
|
||||||
Name: elilo
|
Name: elilo
|
||||||
@ -52,6 +53,8 @@ Patch2: elilo-mac-conf.diff
|
|||||||
Patch3: elilo-auto-add_efi_memmap.diff
|
Patch3: elilo-auto-add_efi_memmap.diff
|
||||||
Patch4: elilo-blocksize.diff
|
Patch4: elilo-blocksize.diff
|
||||||
Patch5: elilo-text-mode.diff
|
Patch5: elilo-text-mode.diff
|
||||||
|
Patch6: elilo-textmenu-disable-print-devices.diff
|
||||||
|
Patch7: elilo-high_base_mem.diff
|
||||||
Patch10: elilo-de-debianify.diff
|
Patch10: elilo-de-debianify.diff
|
||||||
Patch11: eliloalt-no-date.diff
|
Patch11: eliloalt-no-date.diff
|
||||||
|
|
||||||
@ -68,23 +71,32 @@ The EFI Linux boot loader.
|
|||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
%patch5 -p1
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
%patch11 -p1
|
%patch11 -p1
|
||||||
|
# work around b0rked 'Str'-ops in newer 'gnu-efi' ... :-(
|
||||||
|
find . -type f -name '*.[ch]' -print0 | xargs -0rn 1 \
|
||||||
|
perl -pi -e 's{Str(Chr|n(X?Cpy|Cat))}{eliloStr$1}g'
|
||||||
|
|
||||||
%build
|
%build
|
||||||
perl -pi -e 's{/usr/lib}{%{_libdir}}' Make.defaults
|
perl -pi -e 's{/usr/lib}{%{_libdir}}' Make.defaults
|
||||||
##################################################################
|
##################################################################
|
||||||
## DO NOT ADD RPM OPT FLAGS! THIS DOES NOT BUILD AGAINST GLIBC. ##
|
## DO NOT ADD RPM OPT FLAGS! THIS DOES NOT BUILD AGAINST GLIBC. ##
|
||||||
##################################################################
|
##################################################################
|
||||||
make OPTIMFLAGS="-fmessage-length=0"
|
OPTFLAGS="-fmessage-length=0"
|
||||||
|
%ifnarch ia64
|
||||||
|
OPTFLAGS="$OPTFLAGS -mno-red-zone"
|
||||||
|
%endif
|
||||||
|
make OPTIMFLAGS="$OPTFLAGS"
|
||||||
perl -pe 's{\@EDITION\@}{%{version}};
|
perl -pe 's{\@EDITION\@}{%{version}};
|
||||||
s{\@LIBDIR\@}{%{_libdir}};
|
s{\@LIBDIR\@}{%{_libdir}};
|
||||||
s{\@ARCH\@}{%{_target_cpu}};
|
s{\@ARCH\@}{%{_target_cpu}};
|
||||||
' < %{SOURCE1} > elilo.pl &&
|
' < %{SOURCE1} > elilo.pl &&
|
||||||
chmod 555 elilo.pl && touch -r %{SOURCE1} elilo.pl
|
chmod 555 elilo.pl && touch -r %{SOURCE1} elilo.pl
|
||||||
! grep -F '%%{version}-%%{release}' elilo.pl
|
! grep -F '%%{version}' elilo.pl
|
||||||
pod2man -s 8 -c "System Boot" -r "SuSE Linux" \
|
pod2man -s 8 -c "System Boot" -r "SuSE Linux" \
|
||||||
-n elilo -d "%{version}-%{release}" elilo.pl elilo.8
|
-n elilo -d "%{version}" elilo.pl elilo.8
|
||||||
touch -r elilo.pl elilo.8
|
touch -r elilo.pl elilo.8
|
||||||
|
|
||||||
%install
|
%install
|
||||||
|
Loading…
Reference in New Issue
Block a user