SHA256
1
0
forked from pool/elilo

- elilo.efi

* update to elilo-3.16 to fix OBS download check.
    Essentially "white-space" changes, plus bumping version number,
    minus Debian idiosyncrasies.
- elilo.spec
  * Remove date string from 'eliloalt'.
  * Avoid duplication of 'elilo.txt'.
- elilo.pl
  * Support for 'UUID=' and 'LABEL=' to specify root file-system.
- Update openSUSE to elilo-3.14 from SLE11.
  * Avoid crash caused by EFI memory map changes.  (bnc#800035)

OBS-URL: https://build.opensuse.org/package/show/Base:System/elilo?expand=0&rev=12
This commit is contained in:
Raymund Will 2013-10-25 14:33:44 +00:00 committed by Git OBS Bridge
parent a2cc45afea
commit 3f8af3bf30
12 changed files with 159 additions and 96 deletions

View File

@ -1,44 +1,47 @@
3 . 1 4 R E L E A S E N O T E S
3 . 1 6 R E L E A S E N O T E S
===================================
QUICK CHANGE SUMMARY
====================
* Fixes for newly emerging x86_64 UEFI-2 boxes where long standing old
assumptions are borked.
* Uptake of SUSE and community patches
- add sysfs support for efi vars (formerly /proc/efi/vars)
- fix strncpy overflow
- fix bzimage alloc
- cleanups
- support longer command line
- yet some more mac fixes
- align elilo with latest kernel boot protocol format.
- new memory management strategy for initrd and kernel image loading.
* add text-mode command line option, force text-mode (bypass graphics probes).
* replace error output on GOP handle failed, downgraded to normal
print status with more informative output.
* Fix ia32 build issue with new gcc due to stack protector enforcement.
* Adds native x86x crossbuild functionality
build 32bit or 64bit versions from either environment via
make ARCH=ia32|x86_64 (the ARCH IS case sensitive).
make by itself will default to the native host arch.
* Add console reset call during initialization. thanks A. Steinmetz
* simplify output of no GOP warning text so it no longer looks like an error.
* MAJOR: Fixed Fault crash when EFI memory map changes from under elilo.
(from an outside interrupt in this case). When the EFI Memory map
changes after elilo has already built boot params to pass to the
kernel the EFI call to ExitBootSvcs just prior to boot will fail
because elilo has the old map key. This is valid EFI behavior, elilo
retries to pick up the new memory map and key but had already freed
the start params portion of boot params resulting in a NULL DEREF
crash reset once it hands the now bogus boot params to the kernel on
the 2nd successful call to exit efi and boot.
Thanks to Jerry Hoemann @ HP for reporting this bug.
* minor bugfix, fixed -m option broken. thanks Allan-lsk.
BUILD NOTES
====================
You will need the following toolchain to build elilo-3.14 from source
the elilo build environment is optimized for Debian and Debian based distros.
elilo-3.14 was built in the Debian Lenny (Ubuntu 10.04) build environment.
elilo-3.16 was built in the squeeze+(ubuntu 11.x) build environments except
for itanium which is unchanged to best support legacy enterprise configs.
Toolchain versions for this release were:
x86x(32 &64)
* gnu-efi --> 3.0i-2ubuntu1
* gcc ------> 4.4.3-1ubuntu1
* binutils -> 2.20.1-3ubuntu7
x86x(32 & 64bit versions)
* gnu-efi --> 3.0i-3
* gcc ------> 4:4.4.4-1ubuntu2
* binutils -> 2.20.51.20100908-0ubuntu2
ia64
* gnu-efi --> 3.0e-2
* gcc ------> 4.3.2-2
* binutils -> 2.18.1~cvs20080103-7
* if you use a debian based (lenny)build environment you will have no problems
* if you use a debian based build environment you will have no problems
and setting it up is simple. you will be able to build elilo in 3 steps:
1. apt-get install gnu-efi, gcc, binutils
2. apt-get source elilo (or download elilo-3.14.tar.gz from SourceForge.)
3. extract source tarball and cd ./elilo-3.14 and type $> make
2. apt-get source elilo (or download elilo-3.16 source from SourceForge.)
3. extract source tarball and cd to ./$your-elilo-source and type $> make
** If you use the upstream toolchain tarballs(i.e. pre distro) you will need

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:93fb9f9ec22763c3071a19422b3a8073cd020e5d6cca5762a0ff35871f17a4b0
size 219473

3
elilo-3.16-source.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4c0b247d96cfa9067e6728ebc95d511ffda9f47af4831c2ec7c19dfa2ea5f9a0
size 147468

View File

@ -7,7 +7,7 @@
--- a/x86_64/system.c
+++ b/x86_64/system.c
@@ -957,6 +957,11 @@ do_memmap:
@@ -953,6 +953,11 @@ do_memmap:
#endif
if (e820_map_overflow && !e820_map_overflow_warned) {
CHAR8 *aem = (CHAR8 *)"add_efi_memmap";
@ -19,7 +19,7 @@
e820_map_overflow_warned++;
#if DEBUG_CREATE_BOOT_PARAMS
@@ -968,11 +973,26 @@ do_memmap:
@@ -964,11 +969,26 @@ do_memmap:
goto do_memmap;
}
@ -121,14 +121,14 @@
#endif /* __ELILO_SYSDEPS_X86_64_H__ */
--- a/bootparams.c
+++ b/bootparams.c
@@ -96,21 +96,14 @@ create_boot_params(CHAR16 *args, memdesc
@@ -93,21 +93,14 @@ create_boot_params(CHAR16 *args, memdesc
*/
Memset(bp, 0, BOOT_PARAM_MEMSIZE);
+ /*
+ * Convert kernel command line args from UNICODE to ASCII
+ * and put them where the kernel expects them:
+ */
+ */
U2ascii(args, cp, cmdline_size);
if (sysdeps_create_boot_params(bp, cp, initrd, vmcode, cookie) == -1) return 0;

View File

@ -44,7 +44,7 @@
--- a/fs/netfs.c
+++ b/fs/netfs.c
@@ -522,7 +522,8 @@ netfs_open(netfs_interface_t *this, CHAR
@@ -517,7 +517,8 @@ netfs_open(netfs_interface_t *this, CHAR
netfs_fd_t *f;
EFI_STATUS status;
CHAR8 ascii_name[FILENAME_MAXLEN];

View File

@ -1,16 +0,0 @@
---
elilo.c | 3 +++
1 file changed, 3 insertions(+)
--- a/elilo.c
+++ b/elilo.c
@@ -483,6 +483,9 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_T
*/
uefi_call_wrapper(BS->SetWatchdogTimer, 4, 0, 0x0, 0, NULL);
+ /* start a clean console */
+ uefi_call_wrapper(systab->ConOut->Reset, 2, systab->ConOut, FALSE);
+
/* initialize memory allocator */
if (alloc_init() == -1) return EFI_LOAD_ERROR;

42
elilo-de-debianify.diff Normal file
View File

@ -0,0 +1,42 @@
---
Make.defaults | 5 +++--
ia32/Makefile | 2 +-
x86_64/Makefile | 2 +-
3 files changed, 5 insertions(+), 4 deletions(-)
--- a/Make.defaults
+++ b/Make.defaults
@@ -63,8 +63,9 @@ CDIR := $(shell if [ "$$PWD" != "" ];
TOPDIR =
ALLSUBDIRS = ia32 ia64 x86_64 fs choosers devschemes tools
-HOSTARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH | sed s,i[3456789]86,ia32, | sed s,amd64,x86_64, )
-ARCH := $(shell dpkg-architecture -qDEB_BUILD_ARCH | sed s,i[3456789]86,ia32, | sed s,amd64,x86_64, )
+HOSTARCH := $(shell if ! dpkg-architecture -qDEB_BUILD_ARCH 2>/dev/null; then \
+ uname -m; fi | sed -e s,i[3456789]86,ia32, -e s,amd64,x86_64, )
+ARCH := $(HOSTARCH)
INCDIR = -I. -I$(TOPDIR) -I$(EFIINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol -I$(TOPDIR)/efi110
CPPFLAGS = -DCONFIG_$(ARCH)
--- a/x86_64/Makefile
+++ b/x86_64/Makefile
@@ -43,7 +43,7 @@ all: $(TARGET)
system.o: rmswitch.h
rmswitch.h: bin_to_h.c rmswitch.S
- $(CC) -o bin_to_h $(SRCDIR)/bin_to_h.c
+ $(CC) $(OPTIMFLAGS) -o bin_to_h $(SRCDIR)/bin_to_h.c
$(AS) -o rmswitch.o $(SRCDIR)/rmswitch.S
$(LD) -Ttext 0x0 -s --oformat binary -o rmswitch rmswitch.o
./bin_to_h <rmswitch >rmswitch.h
--- a/ia32/Makefile
+++ b/ia32/Makefile
@@ -42,7 +42,7 @@ all: $(TARGET)
system.o: rmswitch.h
rmswitch.h: bin_to_h.c rmswitch.S
- $(CC) -o bin_to_h $(SRCDIR)/bin_to_h.c
+ $(CC) $(OPTIMFLAGS) -o bin_to_h $(SRCDIR)/bin_to_h.c
$(AS) -o rmswitch.o $(SRCDIR)/rmswitch.S
$(LD) -Ttext 0x0 -s --oformat binary -o rmswitch rmswitch.o
./bin_to_h <rmswitch >rmswitch.h

View File

@ -1,19 +0,0 @@
---
x86_64/system.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--- a/x86_64/system.c
+++ b/x86_64/system.c
@@ -641,9 +641,9 @@ sysdeps_create_boot_params(
*/
if (param_start != NULL) {
CopyMem(bp, param_start, 0x2000);
- free(param_start);
- param_start = NULL;
- param_size = 0;
+ /* keeping param_start might lose some RAM,
+ * but doesn't crash...
+ */
}
/*
* Save off our header revision information.

View File

@ -1,9 +1,22 @@
-------------------------------------------------------------------
Fri Oct 25 13:37:55 UTC 2013 - rw@suse.de
- elilo.efi
* update to elilo-3.16 to fix OBS download check.
Essentially "white-space" changes, plus bumping version number,
minus Debian idiosyncrasies.
- elilo.spec
* Remove date string from 'eliloalt'.
* Avoid duplication of 'elilo.txt'.
- elilo.pl
* Support for 'UUID=' and 'LABEL=' to specify root file-system.
-------------------------------------------------------------------
Thu Oct 24 17:18:48 UTC 2013 - rw@suse.de
- elilo.spec
* Add perl modules to 'PreReq'. (bnc#842183)
- Update to elilo-3.14 from SLE11.
- Update openSUSE to elilo-3.14 from SLE11.
-------------------------------------------------------------------
Fri Aug 16 12:01:42 UTC 2013 - rw@suse.de
@ -32,7 +45,7 @@ Fri Apr 19 13:28:08 UTC 2013 - rw@suse.com
- elilo.efi
* Clear console on startup. (bnc#812799)
* Avoid crash caused by EFI memory map changes.
* Avoid crash caused by EFI memory map changes. (bnc#800035)
- elilo.pl
* Work around chainloading issue with XEN. (bnc#812109)
@ -153,7 +166,7 @@ Fri Jun 17 12:54:53 UTC 2011 - rw@suse.de
-------------------------------------------------------------------
Fri Dec 17 10:51:23 UTC 2010 - coolo@novell.com
- Update to elilo-3.12 from SLE11 to fix EFI boot (bnc#659368)
- Update openSUSE to elilo-3.12 from SLE11 to fix EFI boot (bnc#659368)
(see ChangeLog for a detailed log)
-------------------------------------------------------------------

View File

@ -1,5 +1,5 @@
#!/usr/bin/perl -w
# $Id: elilo.pl,v 0.85 2013/08/15 17:38:03 rw Exp $
# $Id: elilo.pl,v 0.86 2013/10/25 14:22:33 rw Exp $
use strict;
my $C = $0; $C =~ s{^.*/}{};
@ -57,7 +57,7 @@ EoD
$| = 1;
sub Version() {
my $v = q($Revision: 0.85 $ );
my $v = q($Revision: 0.86 $ );
$v =~ s/^\$ Rev.*:\ ([0-9.]+)\ \$\ /$1/x;
$v .= " (part of elilo-$Edition)" if ( $Edition ne "\@EDITION\@" );
print "$C version $v\n";
@ -524,10 +524,19 @@ sub readLink($) {
sub GconfProbeFSuuid($) {
my( $dev) = @_;
my $udir = "/dev/disk/by-uuid";
my $ldir = "/dev/disk/by-label";
my $uuid = "";
my $tgt = "";
Info( 5, "GconfProbeFSuuid($dev): \n");
if ( ! -b $dev ) {
if ( $dev =~ m{^UUID=([0-9A-Fa-f-]+)$} ) {
return ( (-b "$udir/$1") ? $1 : "" );
} elsif ( $dev =~ m{^LABEL=([0-9A-Fa-f-]+)$} ) {
$dev = readLink( "$ldir/$1");
return ( "" ) unless ( defined( $dev) );
}
}
while ( -l $dev ) {
$_ = readLink( $dev);
return ( "" ) unless ( defined( $_) );
@ -553,23 +562,24 @@ sub GconfProbeFSuuid($) {
return ( $uuid );
}
sub GconfFSuuid($) {
my( $rdev) = @_;
return ( "" ) unless ( $Sconf{SB} ) ;
return ( $GconfFSuuid{$rdev} ) if ( exists( $GconfFSuuid{$rdev}) );
my( $spec) = @_;
return ( "" ) unless ( $Sconf{SB} );
return ( $GconfFSuuid{$spec} ) if ( exists( $GconfFSuuid{$spec}) );
my $ruuid = "";
my $uuid = "";
my $cmd = "/usr/sbin/grub2-probe";
if ( -x $cmd ) {
chomp( $ruuid = qx{$cmd --device "$rdev" --target=fs_uuid}) if ( -x $cmd );
my $dop = (-b $spec) ? "--device" : "";
chomp( $uuid = qx{$cmd --target=fs_uuid $dop "$spec"});
} else {
$ruuid = GconfProbeFSuuid( $rdev);
$uuid = GconfProbeFSuuid( $spec);
}
if ( ! $ruuid ) {
Panic( 3, "couldn't determine fs_uuid -- skip Secure Boot (grub) config!\n");
if ( ! defined( $uuid) || ! $uuid ) {
Panic( 3, "couldn't determine fs_uuid -- skip SecureBoot/grub2 config!\n");
$Sconf{SB} = "";
}
$GconfFSuuid{$rdev} = $ruuid;
return ( $ruuid );
$GconfFSuuid{$spec} = $uuid;
return ( $uuid );
}
sub Gconf() {
my @parts = ("pre", "Econf", "Xconf", "post");
@ -621,7 +631,7 @@ sub Gconf() {
$Gconf{$k} = $Econf{$lbl}{$k} if (exists( $Econf{$lbl}{$k}));
}
$Gconf{rootfsuuid} = GconfFSuuid( $Econf{$lbl}{root});
#TODO: $Gconf{bootfsuuid} = GconfFSuuid( GconfFSdev( "/boot"));
#TODO: $Gconf{bootfsuuid} = GconfFSuuid( "/boot");
} elsif ( $ns eq "Xconf" ) {
foreach my $k ( "vmm", "kernel", "cfg", "description") {
$Gconf{$k} = $Xconf{$lbl}{$k} if (exists( $Xconf{$lbl}{$k}));
@ -932,7 +942,7 @@ sub ebm($$$$$) {
next unless ( hwpEqual( $hwp, $3) );
if ( $file eq $4 ) {
my $c = hex($1);
# This effort below to elliminate holes in the boot entry list voids
# This effort below to elliminate holes in the boot enry list voids
# the attempt to order EBM entries by simply calling '--refresh-EBM'.
# The full solution would require adding an interface to 'efibootmgr -o',
# which is unfortunately not feasable this late in the release cycle.

View File

@ -29,18 +29,22 @@ Name: elilo
Summary: EFI Linux Loader
License: GPL-2.0+
Group: System/Boot
Version: 3.14
Version: 3.16
Release: 0
ExclusiveArch: ia64 %ix86 x86_64
PreReq: /usr/bin/perl perl(Pod::Usage) perl(Getopt::Long)
# "perl" must be in place *before* any package's 'pre' or 'post' section
# can (directly or indirectly) run '/sbin/elilo'! (bnc#842183)
%ifarch ia64
PreReq: perl(File::Compare)
%endif
Url: http://elilo.sourceforge.net/
Source: http://dl.sourceforge.net/elilo/elilo-3.14-source.tar.gz
#ource: http://downloads.sourceforge.net/elilo/elilo-3.16-all.tar.gz
Source: elilo-%{version}-source.tar.xz
Source1: elilo.pl
Source2: debian.eliloalt.man8
Source3: elilo.conf.man5
Source4: 3.14-release-notes.txt
Source4: http://downloads.sourceforge.net/elilo/%{version}-release-notes.txt
Source9: rpmlintrc
Patch0: elilo-ipv6.diff
Patch1: elilo-max-conf.diff
@ -48,8 +52,8 @@ Patch2: elilo-mac-conf.diff
Patch3: elilo-auto-add_efi_memmap.diff
Patch4: elilo-blocksize.diff
Patch5: elilo-text-mode.diff
Patch6: elilo-clean-console.diff
Patch7: elilo-keep-start-params.diff
Patch10: elilo-de-debianify.diff
Patch11: eliloalt-no-date.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@ -57,22 +61,22 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
The EFI Linux boot loader.
%prep
%setup -q -n elilo
%setup -q -n %{name}-%{version}-source
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch10 -p1
%patch11 -p1
%build
perl -pi -e 's{/usr/lib}{%{_libdir}}' Make.defaults
##################################################################
## DO NOT ADD RPM OPT FLAGS! THIS DOES NOT BUILD AGAINST GLIBC. ##
##################################################################
make OPTIMFLAGS="-fno-strict-aliasing -fno-stack-protector"
make OPTIMFLAGS="-fmessage-length=0"
perl -pe 's{\@EDITION\@}{%{version}-%{release}};
s{\@LIBDIR\@}{%{_libdir}};
s{\@ARCH\@}{%{_target_cpu}};
@ -92,10 +96,15 @@ install -D -p -m 644 elilo.8 $RPM_BUILD_ROOT/usr/share/man/man8/elilo.8
install -D -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT/usr/share/man/man8/eliloalt.8
install -D -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT/usr/share/man/man5/elilo.conf.5
install -p -m 644 %{SOURCE4} RELEASE-NOTES
diff -q docs/README.txt docs/elilo.txt && rm -f docs/README.txt
%post
#/sbin/elilo -v || :
echo "Please run /sbin/elilo!"
if [ -r /etc/sysconfig/bootloader ]; then
. /etc/sysconfig/bootloader
if [ "$LOADER_TYPE" = "elilo" -a -r /etc/elilo.conf ]; then
/sbin/elilo -v || :
fi
fi
%files
%defattr(-, root, root)

21
eliloalt-no-date.diff Normal file
View File

@ -0,0 +1,21 @@
---
tools/eliloalt.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
--- a/tools/eliloalt.c
+++ b/tools/eliloalt.c
@@ -282,7 +282,13 @@ main(int argc, char **argv)
switch(c) {
case 0: continue; /* fast path for options */
case 1:
- printf("Version %s Date: %s\n", ELILOALT_VERSION, __DATE__);
+ printf("Version %s\n", ELILOALT_VERSION);
+ /* Don't use __DATE__ here, as it causes
+ * excessive rebuilds, which seems very
+ * wasteful for a tool that did not change
+ * in a very long time, and probably won't
+ * any more...
+ */
exit(0);
case 2:
case 'h':