From 3f8af3bf30ddfff32f64fae62b4eb763377cca19adbc2165d1b4331612a0e5cf Mon Sep 17 00:00:00 2001 From: Raymund Will Date: Fri, 25 Oct 2013 14:33:44 +0000 Subject: [PATCH] - 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 --- ...elease-notes.txt => 3.16-release-notes.txt | 53 ++++++++++--------- elilo-3.14-source.tar.gz | 3 -- elilo-3.16-source.tar.xz | 3 ++ elilo-auto-add_efi_memmap.diff | 8 +-- elilo-blocksize.diff | 2 +- elilo-clean-console.diff | 16 ------ elilo-de-debianify.diff | 42 +++++++++++++++ elilo-keep-start-params.diff | 19 ------- elilo.changes | 19 +++++-- elilo.pl | 38 ++++++++----- elilo.spec | 31 +++++++---- eliloalt-no-date.diff | 21 ++++++++ 12 files changed, 159 insertions(+), 96 deletions(-) rename 3.14-release-notes.txt => 3.16-release-notes.txt (70%) delete mode 100644 elilo-3.14-source.tar.gz create mode 100644 elilo-3.16-source.tar.xz delete mode 100644 elilo-clean-console.diff create mode 100644 elilo-de-debianify.diff delete mode 100644 elilo-keep-start-params.diff create mode 100644 eliloalt-no-date.diff diff --git a/3.14-release-notes.txt b/3.16-release-notes.txt similarity index 70% rename from 3.14-release-notes.txt rename to 3.16-release-notes.txt index 637493e..e66cc59 100644 --- a/3.14-release-notes.txt +++ b/3.16-release-notes.txt @@ -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 diff --git a/elilo-3.14-source.tar.gz b/elilo-3.14-source.tar.gz deleted file mode 100644 index f7026e6..0000000 --- a/elilo-3.14-source.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:93fb9f9ec22763c3071a19422b3a8073cd020e5d6cca5762a0ff35871f17a4b0 -size 219473 diff --git a/elilo-3.16-source.tar.xz b/elilo-3.16-source.tar.xz new file mode 100644 index 0000000..a6391b0 --- /dev/null +++ b/elilo-3.16-source.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c0b247d96cfa9067e6728ebc95d511ffda9f47af4831c2ec7c19dfa2ea5f9a0 +size 147468 diff --git a/elilo-auto-add_efi_memmap.diff b/elilo-auto-add_efi_memmap.diff index 592cb6e..4040f12 100644 --- a/elilo-auto-add_efi_memmap.diff +++ b/elilo-auto-add_efi_memmap.diff @@ -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; diff --git a/elilo-blocksize.diff b/elilo-blocksize.diff index 3df572c..df35744 100644 --- a/elilo-blocksize.diff +++ b/elilo-blocksize.diff @@ -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]; diff --git a/elilo-clean-console.diff b/elilo-clean-console.diff deleted file mode 100644 index e56550f..0000000 --- a/elilo-clean-console.diff +++ /dev/null @@ -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; - diff --git a/elilo-de-debianify.diff b/elilo-de-debianify.diff new file mode 100644 index 0000000..7b6b6de --- /dev/null +++ b/elilo-de-debianify.diff @@ -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.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.h diff --git a/elilo-keep-start-params.diff b/elilo-keep-start-params.diff deleted file mode 100644 index 7181af4..0000000 --- a/elilo-keep-start-params.diff +++ /dev/null @@ -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. diff --git a/elilo.changes b/elilo.changes index ba5ab46..09e4fe4 100644 --- a/elilo.changes +++ b/elilo.changes @@ -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) ------------------------------------------------------------------- diff --git a/elilo.pl b/elilo.pl index a0ef3cd..58ded54 100644 --- a/elilo.pl +++ b/elilo.pl @@ -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. diff --git a/elilo.spec b/elilo.spec index 5384e64..e05322b 100644 --- a/elilo.spec +++ b/elilo.spec @@ -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) diff --git a/eliloalt-no-date.diff b/eliloalt-no-date.diff new file mode 100644 index 0000000..974a76c --- /dev/null +++ b/eliloalt-no-date.diff @@ -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':