diff --git a/.cvsignore b/.cvsignore index e69de29..a80626b 100644 --- a/.cvsignore +++ b/.cvsignore @@ -0,0 +1 @@ +grub2.tar.gz diff --git a/90_persistent b/90_persistent new file mode 100644 index 0000000..634b177 --- /dev/null +++ b/90_persistent @@ -0,0 +1,36 @@ +#! /bin/sh -e + +# update-grub helper script. +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# The output of this script is copied from part of grub.cfg +# that correspond to itself. The achievement is that user can +# modify that part of grub.cfg directly, and it will be persistent +# across update-grub runs. + +transform="s&^&&;s,grub,grub2," +ME=$(echo $0 |sed 's,/,\\/,g') +GRUBCFG=/boot/`echo grub | sed ${transform}`/grub.cfg + +# Exit gracefully if there's no configuration file yet +[ -f ${GRUBCFG} ] || exit 0 + +awk " + BEGIN {echo = 0} + /### BEGIN $ME ###/ {echo = 1; next} + /### END $ME ###/ {echo = 0; next} + {if (echo) print} +" ${GRUBCFG} diff --git a/grub-1.95-grubdir.patch b/grub-1.95-grubdir.patch new file mode 100644 index 0000000..419c701 --- /dev/null +++ b/grub-1.95-grubdir.patch @@ -0,0 +1,17 @@ +This should ideally be done using transformations. +Alternatively, /boot/grub may be used, no grub's files there should conflict +with grub2 and they both can share the same device.map. + +Lubomir Rintel + +--- grub2.orig/include/grub/util/misc.h 2007-11-28 14:10:01.000000000 +0100 ++++ grub2/include/grub/util/misc.h 2007-11-28 14:10:20.000000000 +0100 +@@ -28,7 +28,7 @@ + /* NetBSD uses /boot for its boot block. */ + # define DEFAULT_DIRECTORY "/grub" + #else +-# define DEFAULT_DIRECTORY "/boot/grub" ++# define DEFAULT_DIRECTORY "/boot/grub2" + #endif + + #define DEFAULT_DEVICE_MAP DEFAULT_DIRECTORY "/device.map" diff --git a/grub-1.96-garbage.patch b/grub-1.96-garbage.patch new file mode 100644 index 0000000..991ab92 --- /dev/null +++ b/grub-1.96-garbage.patch @@ -0,0 +1,52 @@ +http://lists.gnu.org/archive/html/grub-devel/2008-04/msg00079.html + +Self-explainable. Make update-grub ignore rpm leftover files and VIM +swap files. + +2008-04-15 Lubomir Kundrak + + * util/update-grub.in: replace the junk file switch with + unconditional call to grub_file_is_not_garbage + * util/update-grub_lib.in (grub_file_is_not_garbage): ignore + also rpm leftover files and editor backup files + +diff -urp grub-1.96.orig/util/update-grub.in grub-1.96/util/update-grub.in +--- grub-1.96.orig/util/update-grub.in 2008-04-15 00:16:12.000000000 +0200 ++++ grub-1.96/util/update-grub.in 2008-04-15 00:17:06.000000000 +0200 +@@ -145,18 +145,12 @@ cat << EOF + EOF + + for i in ${update_grub_dir}/* ; do +- case "$i" in +- # emacsen backup files. FIXME: support other editors +- *~) ;; +- *) +- if grub_file_is_not_garbage "$i" && test -x "$i" ; then +- echo +- echo "### BEGIN $i ###" +- "$i" +- echo "### END $i ###" +- fi +- ;; +- esac ++ if grub_file_is_not_garbage "$i" && test -x "$i" ; then ++ echo ++ echo "### BEGIN $i ###" ++ "$i" ++ echo "### END $i ###" ++ fi + done + + # none of the children aborted with error, install the new grub.cfg +diff -urp grub-1.96.orig/util/update-grub_lib.in grub-1.96/util/update-grub_lib.in +--- grub-1.96.orig/util/update-grub_lib.in 2008-04-15 00:16:12.000000000 +0200 ++++ grub-1.96/util/update-grub_lib.in 2008-04-15 00:15:04.000000000 +0200 +@@ -115,6 +115,8 @@ grub_file_is_not_garbage () + if test -f "$1" ; then + case "$1" in + *.dpkg-dist|*.dpkg-old|*.dpkg-tmp) return 1 ;; # debian dpkg ++ *.rpmnew|*.rpmsave) return 1 ;; # Fedora rpm ++ *.bak|*~|.*.swp) return 1 ;; # backup and swap files from editors + esac + else + return 1 diff --git a/grub-1.97-cfgmode.patch b/grub-1.97-cfgmode.patch new file mode 100644 index 0000000..fad5ce5 --- /dev/null +++ b/grub-1.97-cfgmode.patch @@ -0,0 +1,17 @@ +The configuration file can potentially contain sensitive data, ... +well, passwords are not yet implemented. + +Lubomir Rintel + +diff -urp grub2.orig/util/update-grub.in grub2/util/update-grub.in +--- grub2.orig/util/update-grub.in 2008-08-07 21:58:17.000000000 +0200 ++++ grub2/util/update-grub.in 2008-08-07 22:01:44.000000000 +0200 +@@ -170,7 +170,7 @@ exec > ${grub_cfg}.new + + # Allow this to fail, since /boot/grub/ might need to be fatfs to support some + # firmware implementations (e.g. OFW or EFI). +-chmod 444 ${grub_cfg}.new || true ++chmod 600 ${grub_cfg}.new || true + + echo "Updating ${grub_cfg} ..." >&2 + diff --git a/grub-1.98-linuxsort.patch b/grub-1.98-linuxsort.patch new file mode 100644 index 0000000..84c6a49 --- /dev/null +++ b/grub-1.98-linuxsort.patch @@ -0,0 +1,36 @@ +Until we're able to decide which kernel to make default (e.g with grubby), +pick the most recent one. + +Lubomir Rintel + +Index: util/grub.d/10_linux.in +=================================================================== +--- util/grub.d/10_linux.in (revision 1797) ++++ util/grub.d/10_linux.in (working copy) +@@ -82,23 +82,9 @@ + return $? + } + +-find_latest () +-{ +- local a="" +- for i in $@ ; do +- if test_gt "$i" "$a" ; then +- a="$i" +- fi +- done +- echo "$a" +-} +- +-list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do +- if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi +- done` +- +-while [ "x$list" != "x" ] ; do +- linux=`find_latest $list` ++ls -c /boot/vmlinu[xz]-* /vmlinu[xz]-* 2>/dev/null |while read linux ++do ++ grub_file_is_not_garbage "$linux" || continue + echo "Found linux image: $linux" >&2 + basename=`basename $linux` + dirname=`dirname $linux` diff --git a/grub-1.98-os.patch b/grub-1.98-os.patch new file mode 100644 index 0000000..a495c05 --- /dev/null +++ b/grub-1.98-os.patch @@ -0,0 +1,22 @@ +We're not GNU/Linux. Tell them. + +Lubomir Rintel + +diff -urp grub2.orig/util/grub.d/10_linux.in grub2/util/grub.d/10_linux.in +--- grub2.orig/util/grub.d/10_linux.in 2008-08-08 07:12:30.000000000 +0200 ++++ grub2/util/grub.d/10_linux.in 2008-08-08 07:12:53.000000000 +0200 +@@ -23,11 +23,9 @@ exec_prefix=@exec_prefix@ + libdir=@libdir@ + . ${libdir}/`echo grub | sed ${transform}`/update-grub_lib + +-if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then +- OS=GNU/Linux +-else +- OS="${GRUB_DISTRIBUTOR} GNU/Linux" +-fi ++OS=$(sed 's/ release.*//' /etc/redhat-release) ++[ -z "$OS" ] && OS=$(uname -o) ++[ -z "$OS" ] && OS=Linux + + # loop-AES arranges things so that /dev/loop/X can be our root device, but + # the initrds that Linux uses don't like that. diff --git a/grub-1.98-persistent.patch b/grub-1.98-persistent.patch new file mode 100644 index 0000000..a76d2e7 --- /dev/null +++ b/grub-1.98-persistent.patch @@ -0,0 +1,82 @@ +This adds a section to the configuration file that persists the updates, +so that it's not only grub2-update itself that decides what's in the +configuration. + +Lubomir Rintel + +diff -Nurp grub2.orig/conf/common.rmk grub2/conf/common.rmk +--- grub2.orig/conf/common.rmk 2008-08-07 21:37:16.000000000 +0200 ++++ grub2/conf/common.rmk 2008-08-08 07:14:01.000000000 +0200 +@@ -123,6 +123,12 @@ CLEANFILES += update-grub_lib + update-grub_SCRIPTS = 00_header 10_linux 10_hurd 10_windows 30_os-prober 40_custom + CLEANFILES += $(update-grub_SCRIPTS) + ++90_persistent: util/grub.d/90_persistent.in config.status ++ ./config.status --file=$@:$< ++ chmod +x $@ ++update-grub_SCRIPTS += 90_persistent ++CLEANFILES += 90_persistent ++ + update-grub_DATA += util/grub.d/README + + +diff -Nurp grub2.orig/util/grub.d/90_persistent.in grub2/util/grub.d/90_persistent.in +--- grub2.orig/util/grub.d/90_persistent.in 1970-01-01 01:00:00.000000000 +0100 ++++ grub2/util/grub.d/90_persistent.in 2008-08-08 07:14:01.000000000 +0200 +@@ -0,0 +1,37 @@ ++#! /bin/sh -e ++ ++# update-grub helper script. ++# Copyright (C) 2008 Free Software Foundation, Inc. ++# ++# GRUB is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation, either version 3 of the License, or ++# (at your option) any later version. ++# ++# GRUB is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with GRUB. If not, see . ++ ++# The output of this script is copied from part of grub.cfg ++# that correspond to itself. The achievement is that user can ++# modify that part of grub.cfg directly, and it will be persistent ++# across update-grub runs. ++ ++transform="@program_transform_name@" ++ ++ME=$(echo $0 |sed 's,/,\\/,g') ++GRUBCFG=/boot/`echo grub | sed ${transform}`/grub.cfg ++ ++# Exit gracefully if there's no configuration file yet ++[ -f ${GRUBCFG} ] || exit 0 ++ ++awk " ++ BEGIN {echo = 0} ++ /### BEGIN $ME ###/ {echo = 1; next} ++ /### END $ME ###/ {echo = 0; next} ++ {if (echo) print} ++" ${GRUBCFG} +diff -Nurp grub2.orig/util/update-grub.in grub2/util/update-grub.in +--- grub2.orig/util/update-grub.in 2008-08-08 07:13:41.000000000 +0200 ++++ grub2/util/update-grub.in 2008-08-08 07:14:01.000000000 +0200 +@@ -176,11 +176,12 @@ echo "Updating ${grub_cfg} ..." >&2 + + cat << EOF + # +-# DO NOT EDIT THIS FILE +-# +-# It is automatically generated by $0 using templates ++# This is automatically generated by $0 using templates + # from ${update_grub_dir} and settings from ${sysconfdir}/default/grub + # ++# If you want your changes to persist across updates, add them ++# to 90_persistent section ++# + EOF + + for i in ${update_grub_dir}/* ; do diff --git a/grub-1.98-prototypes.patch b/grub-1.98-prototypes.patch new file mode 100644 index 0000000..5b5c0bf --- /dev/null +++ b/grub-1.98-prototypes.patch @@ -0,0 +1,59 @@ +According to POSIX memmove and memcpy can actually be macros or whatever +(IIRC). We'd better not play with those in code that uses libc's headers +and is to be linked with libc. + +2008-08-08 Lubomir Rintel + + * include/grub/misc.h: Surround memmove and memcpy prototypes with + #ifndef GRUB_UTIL + * kern/misc.c: Surround memmove, memcpy and memset prototypes with + #ifndef GRUB_UTIL + +Index: kern/misc.c +=================================================================== +--- kern/misc.c (revision 1797) ++++ kern/misc.c (working copy) +@@ -44,11 +44,15 @@ + + return dest; + } ++#ifdef GRUB_UTIL ++#include ++#else + void *memmove (void *dest, const void *src, grub_size_t n) + __attribute__ ((alias ("grub_memmove"))); + /* GCC emits references to memcpy() for struct copies etc. */ + void *memcpy (void *dest, const void *src, grub_size_t n) + __attribute__ ((alias ("grub_memmove"))); ++#endif + + char * + grub_strcpy (char *dest, const char *src) +@@ -514,8 +518,10 @@ + + return s; + } ++#ifndef GRUB_UTIL + void *memset (void *s, int c, grub_size_t n) + __attribute__ ((alias ("grub_memset"))); ++#endif + + grub_size_t + grub_strlen (const char *s) +Index: include/grub/misc.h +=================================================================== +--- include/grub/misc.h (revision 1797) ++++ include/grub/misc.h (working copy) +@@ -39,8 +39,12 @@ + char *EXPORT_FUNC(grub_strncat) (char *dest, const char *src, int c); + + /* Prototypes for aliases. */ ++#ifdef GRUB_UTIL ++#include ++#else + void *EXPORT_FUNC(memmove) (void *dest, const void *src, grub_size_t n); + void *EXPORT_FUNC(memcpy) (void *dest, const void *src, grub_size_t n); ++#endif + + int EXPORT_FUNC(grub_memcmp) (const void *s1, const void *s2, grub_size_t n); + int EXPORT_FUNC(grub_strcmp) (const char *s1, const char *s2); diff --git a/grub-1.98-transform.patch b/grub-1.98-transform.patch new file mode 100644 index 0000000..dbc3710 --- /dev/null +++ b/grub-1.98-transform.patch @@ -0,0 +1,162 @@ +Transformations. Anyone, please tell upstream it's useful not to have +them half-baked. This is so that we do not conflict with grub. + +Lubomir Rintel + +diff -urp grub2.orig/Makefile.in grub2/Makefile.in +--- grub2.orig/Makefile.in 2008-08-07 21:37:29.000000000 +0200 ++++ grub2/Makefile.in 2008-08-08 07:43:10.000000000 +0200 +@@ -215,12 +215,12 @@ install-local: all + dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ + $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \ + done +- $(mkinstalldirs) $(DESTDIR)$(libdir)/grub ++ $(mkinstalldirs) $(DESTDIR)$(libdir)/`echo grub | sed '$(transform)'` + @list='$(lib_DATA)'; \ + for file in $$list; do \ + if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ + dest="`echo $$file | sed 's,.*/,,'`"; \ +- $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(libdir)/grub/$$dest; \ ++ $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(libdir)/`echo grub | sed '$(transform)'`/$$dest; \ + done + + install-strip: +diff -urp grub2.orig/util/grub.d/00_header.in grub2/util/grub.d/00_header.in +--- grub2.orig/util/grub.d/00_header.in 2008-08-07 21:37:28.000000000 +0200 ++++ grub2/util/grub.d/00_header.in 2008-08-08 07:43:10.000000000 +0200 +@@ -23,7 +23,7 @@ exec_prefix=@exec_prefix@ + libdir=@libdir@ + grub_prefix=`echo /boot/grub | sed ${transform}` + +-. ${libdir}/grub/update-grub_lib ++. ${libdir}/`echo grub | sed ${transform}`/update-grub_lib + + # Do this as early as possible, since other commands might depend on it. + # (e.g. the `font' command might need lvm or raid modules) +diff -urp grub2.orig/util/grub.d/10_hurd.in grub2/util/grub.d/10_hurd.in +--- grub2.orig/util/grub.d/10_hurd.in 2008-08-07 21:37:28.000000000 +0200 ++++ grub2/util/grub.d/10_hurd.in 2008-08-08 07:44:29.000000000 +0200 +@@ -16,10 +16,12 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + ++transform="@program_transform_name@" ++ + prefix=@prefix@ + exec_prefix=@exec_prefix@ + libdir=@libdir@ +-. ${libdir}/grub/update-grub_lib ++. ${libdir}/`echo grub |sed ${transform}`/update-grub_lib + + if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS=GNU +diff -urp grub2.orig/util/grub.d/10_linux.in grub2/util/grub.d/10_linux.in +--- grub2.orig/util/grub.d/10_linux.in 2008-08-07 21:37:28.000000000 +0200 ++++ grub2/util/grub.d/10_linux.in 2008-08-08 07:43:10.000000000 +0200 +@@ -16,10 +16,12 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + ++transform="@program_transform_name@" ++ + prefix=@prefix@ + exec_prefix=@exec_prefix@ + libdir=@libdir@ +-. ${libdir}/grub/update-grub_lib ++. ${libdir}/`echo grub | sed ${transform}`/update-grub_lib + + if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS=GNU/Linux +diff -urp grub2.orig/util/grub.d/10_windows.in grub2/util/grub.d/10_windows.in +--- grub2.orig/util/grub.d/10_windows.in 2008-08-07 21:37:27.000000000 +0200 ++++ grub2/util/grub.d/10_windows.in 2008-08-08 07:44:13.000000000 +0200 +@@ -16,10 +16,12 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + ++transform="@program_transform_name@" ++ + prefix=@prefix@ + exec_prefix=@exec_prefix@ + libdir=@libdir@ +-. ${libdir}/grub/update-grub_lib ++. ${libdir}/`echo grub |sed ${transform}`/update-grub_lib + + case "`uname 2>/dev/null`" in + CYGWIN*) ;; +diff -urp grub2.orig/util/i386/pc/grub-install.in grub2/util/i386/pc/grub-install.in +--- grub2.orig/util/i386/pc/grub-install.in 2008-08-07 21:37:28.000000000 +0200 ++++ grub2/util/i386/pc/grub-install.in 2008-08-08 07:43:10.000000000 +0200 +@@ -36,7 +36,7 @@ grub_mkimage=${bindir}/`echo grub-mkimag + grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}` + grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` + rootdir= +-grub_prefix=`echo /boot/grub | sed ${transform}` ++grub_prefix=/boot/`echo grub | sed ${transform}` + modules= + + install_device= +@@ -118,7 +118,7 @@ for option in "$@"; do + done + + # for make_system_path_relative_to_its_root() +-. ${libdir}/grub/update-grub_lib ++. ${libdir}/`echo grub | sed ${transform}`/update-grub_lib + + if test "x$install_device" = x; then + echo "install_device not specified." 1>&2 +diff -urp grub2.orig/util/powerpc/ieee1275/grub-mkrescue.in grub2/util/powerpc/ieee1275/grub-mkrescue.in +--- grub2.orig/util/powerpc/ieee1275/grub-mkrescue.in 2008-08-07 21:37:27.000000000 +0200 ++++ grub2/util/powerpc/ieee1275/grub-mkrescue.in 2008-08-08 07:43:10.000000000 +0200 +@@ -100,7 +100,7 @@ grub.img Raw 'UNIX' 'tbxi' + EOF + + iso_dir=`mktemp -d` +-boot_dir=${iso_dir}/boot/grub ++boot_dir=${iso_dir}/boot/`echo grub | sed ${transform}` + mkdir ${iso_dir}/boot + mkdir ${boot_dir} + core_img=${boot_dir}/grub.img +diff -urp grub2.orig/util/update-grub.in grub2/util/update-grub.in +--- grub2.orig/util/update-grub.in 2008-08-07 21:37:28.000000000 +0200 ++++ grub2/util/update-grub.in 2008-08-08 07:43:10.000000000 +0200 +@@ -23,7 +23,7 @@ exec_prefix=@exec_prefix@ + sbindir=@sbindir@ + libdir=@libdir@ + sysconfdir=@sysconfdir@ +-grub_prefix=`echo /boot/grub | sed ${transform}` ++grub_prefix=/boot/`echo /grub | sed ${transform}` + grub_cfg=${grub_prefix}/grub.cfg + update_grub_dir=${sysconfdir}/grub.d + +@@ -65,7 +65,7 @@ for option in "$@"; do + esac + done + +-. ${libdir}/grub/update-grub_lib ++. ${libdir}/`echo grub | sed ${transform}`/update-grub_lib + + if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +@@ -107,7 +107,7 @@ fi + mkdir -p ${grub_prefix} + + if test -e ${grub_prefix}/device.map ; then : ; else +- grub-mkdevicemap ++ ${grub_mkdevicemap} + fi + + # Device containing our userland. Typically used for root= parameter. +diff -urp grub2.orig/util/update-grub_lib.in grub2/util/update-grub_lib.in +--- grub2.orig/util/update-grub_lib.in 2008-08-07 21:37:28.000000000 +0200 ++++ grub2/util/update-grub_lib.in 2008-08-08 07:43:10.000000000 +0200 +@@ -145,7 +145,8 @@ prepare_grub_to_access_device () + + font_path () + { +- for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do ++ for dir in ${pkgdatadir} ${pkgdatadir}/`echo grub | sed ${transform}` \ ++ /boot/`echo grub | sed ${transform}`; do + # FIXME: We prefer ascii because loading complete fonts is too slow (and + # we don't yet provide the gettext magic that would make unicode useful). + for basename in ascii unicode unifont ; do diff --git a/grub.default b/grub.default new file mode 100644 index 0000000..08f5349 --- /dev/null +++ b/grub.default @@ -0,0 +1 @@ +GRUB_CMDLINE_LINUX="quiet rhgb" diff --git a/grub2-dlsym-v4.patch b/grub2-dlsym-v4.patch new file mode 100644 index 0000000..8e35246 --- /dev/null +++ b/grub2-dlsym-v4.patch @@ -0,0 +1,30 @@ +2008-05-07: Lubomir Rintel + + * kern/dl.c (grub_dl_resolve_symbols): Let the + grub_gdb_trapvec symbol be resolved correctly (instead of 0). + +--- grub2/kern/dl.c 2008-01-26 21:34:58.000000000 +0100 ++++ grub2-gdb/kern/dl.c 2008-05-07 09:27:08.000000000 +0200 +@@ -352,16 +352,18 @@ grub_dl_resolve_symbols (grub_dl_t mod, + { + case STT_NOTYPE: + /* Resolve a global symbol. */ +- if (sym->st_name != 0 && sym->st_shndx == 0) ++ if (sym->st_name == 0) ++ break; ++ ++ if (sym->st_shndx == 0) /* external */ + { + sym->st_value = (Elf_Addr) grub_dl_resolve_symbol (name); + if (! sym->st_value) + return grub_error (GRUB_ERR_BAD_MODULE, + "the symbol `%s' not found", name); +- } +- else +- sym->st_value = 0; + break; ++ } ++ /* nonexternal, same as STT_OBJECT */ + + case STT_OBJECT: + sym->st_value += (Elf_Addr) grub_dl_get_section_addr (mod, diff --git a/grub2-preserve-symbols-v4.1.patch b/grub2-preserve-symbols-v4.1.patch new file mode 100644 index 0000000..2d7e15b --- /dev/null +++ b/grub2-preserve-symbols-v4.1.patch @@ -0,0 +1,38 @@ +2008-05-07: Lubomir Rintel + + * genmk.rb: replace strip with objcopy, so unstripped files are + left untouched for debugging purposes. + +diff -urp grub2.orig/genmk.rb grub2/genmk.rb +--- grub2.orig/genmk.rb 2008-08-07 21:37:29.000000000 +0200 ++++ grub2/genmk.rb 2008-08-07 23:31:19.000000000 +0200 +@@ -101,10 +101,11 @@ class PModule + mod_obj = mod_src.suffix('o') + defsym = 'def-' + @name.suffix('lst') + undsym = 'und-' + @name.suffix('lst') ++ exec = @name.suffix('elf') + mod_name = File.basename(@name, '.mod') + symbolic_name = mod_name.sub(/\.[^\.]*$/, '') + +- "CLEANFILES += #{@name} #{mod_obj} #{mod_src} #{pre_obj} #{objs_str} #{undsym} ++ "CLEANFILES += #{@name} #{mod_obj} #{mod_src} #{pre_obj} #{objs_str} #{undsym} #{exec} + ifneq ($(#{prefix}_EXPORTS),no) + CLEANFILES += #{defsym} + DEFSYMFILES += #{defsym} +@@ -112,11 +113,14 @@ endif + MOSTLYCLEANFILES += #{deps_str} + UNDSYMFILES += #{undsym} + +-#{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) ++#{@name}: #{exec} ++ -rm -f $@ ++ $(OBJCOPY) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $^ $@ ++ ++#{exec}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) + -rm -f $@ + $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) $(MODULE_LDFLAGS) -Wl,-r,-d -o $@ #{pre_obj} #{mod_obj} + if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi +- $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@ + + #{pre_obj}: $(#{prefix}_DEPENDENCIES) #{objs_str} + -rm -f $@ diff --git a/grub2.spec b/grub2.spec new file mode 100644 index 0000000..b51f20e --- /dev/null +++ b/grub2.spec @@ -0,0 +1,266 @@ +# Modules always contain just 32-bit code +%define _libdir %{_exec_prefix}/lib + +# 64bit machines use 32bit boot loader +# (We cannot just redefine _target_cpu, as we'd get i386.rpm packages then) +%ifarch x86_64 +%define _target_platform i386-%{_vendor}-%{_target_os}%{?_gnu} +%endif + +# Hack to include debuginfo for files, that find-debuginfo.sh wouldn't +# have spot, because they're either no longer ELF images, such as +# boot images, or are brutally and insensitively stripped, such as +# modules. See %%install. +# It's certainly not the nicest thing you've ever seen. +# THAT IS NOT MY FAULT. +# We do not use find-debuginfo.sh -o here, as it's not supported in RHEL5 +%define __debug_install_post \ + \ + # Gather debuginfo as usual \ + /usr/lib/rpm/find-debuginfo.sh \\\ + %{_builddir}/%{?buildsubdir} \ + mv debugfiles.list debug1.list \ + \ + # Gather debuginfo of modules from shadow build root \ + RPM_BUILD_ROOT=%{_builddir}/%{?buildsubdir}/.debugroot \\\ + /usr/lib/rpm/find-debuginfo.sh \\\ + %{_builddir}/%{?buildsubdir} \ + mv debugfiles.list debug2.list \ + \ + # Merge debuginfos \ + cp -a %{_builddir}/%{?buildsubdir}/.debugroot/usr/lib/debug \\\ + $RPM_BUILD_ROOT/usr/lib \ + cp -a %{_builddir}/%{?buildsubdir}/.debugroot/usr/src/debug \\\ + $RPM_BUILD_ROOT/usr/src \ + sort debug1.list debug2.list |uniq >debugfiles.list \ + \ + %{nil} + +Name: grub2 +Version: 1.98 +Release: 0.2.20080807svn%{?dist} +Summary: Bootloader with support for Linux, Multiboot and more + +Group: System Environment/Base +License: GPLv3+ +URL: http://www.gnu.org/software/grub/ +#Source0: http://alpha.gnu.org/pub/gnu/grub/grub-%{version}.tar.gz +# svn -r1797 co svn://svn.sv.gnu.org/grub/trunk/grub2 +# tar czf grub2.tar.gz --exclude .svn grub2 +Source0: grub2.tar.gz +Source1: 90_persistent +Source2: grub.default +Patch1: grub-1.98-prototypes.patch +Patch2: grub-1.98-transform.patch +Patch4: grub-1.95-grubdir.patch +Patch5: grub-1.98-os.patch +Patch6: grub-1.97-cfgmode.patch +Patch7: grub-1.96-garbage.patch +Patch8: grub-1.98-persistent.patch +Patch9: grub-1.98-linuxsort.patch +Patch10: http://fedorapeople.org/~lkundrak/grub2/grub2-dlsym-v4.patch +#Patch13: http://fedorapeople.org/~lkundrak/grub2/grub2-preserve-symbols-v4.patch +Patch13: grub2-preserve-symbols-v4.1.patch + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +BuildRequires: flex bison ruby binutils +BuildRequires: ncurses-devel lzo-devel +BuildRequires: /usr/lib/crt1.o + +# grubby +Requires(pre): mkinitrd +Requires(post): mkinitrd + +# TODO: ppc and sparc +ExclusiveArch: %{ix86} x86_64 + +%description +This is the second version of the GRUB (Grand Unified Bootloader), +a highly configurable and customizable bootloader with modular +architecture. It support rich scale of kernel formats, file systems, +computer architectures and hardware devices. + + +%prep +%setup -q -n grub2 + +%patch1 -p0 -b .prototypes +%patch2 -p1 -b .transform +%patch4 -p1 -b .grubdir +%patch5 -p1 -b .os +%patch6 -p1 -b .cfgmode +%patch7 -p1 -b .garbage +%patch8 -p1 -b .persistent +%patch9 -p0 -b .linuxsort +%patch10 -p1 -b .dlsym +%patch13 -p1 -b .preserve-symbols + + +%build +# -static is needed so that autoconf script is able to link +# test that looks for _start symbol on 64 bit platforms +%configure TARGET_LDFLAGS=-static \ + --with-platform=pc \ + --enable-grub-emu \ + --program-transform-name=s,grub,%{name}, +# TODO: Other platforms. Use alternatives system? +# --with-platform=ieee1275 \ +# --with-platform=efi \ +# --with-platform=i386-pc \ + + +#make %{?_smp_mflags} +#gcc -Inormal -I./normal -I. -Iinclude -I./include -Wall -W -DGRUB_LIBDIR=\"/usr/lib/`echo grub/i386-pc | sed 's&^&&;s,grub,grub2,'`\" -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DGRUB_UTIL=1 -MD -c -o grub_emu-normal_lexer.o normal/lexer.c +#In file included from normal/lexer.c:23: +#include/grub/script.h:26:29: error: grub_script.tab.h: No such file or directory +make + + +%install +set -e +rm -fr $RPM_BUILD_ROOT +make DESTDIR=$RPM_BUILD_ROOT install + +# Script that makes part of grub.cfg persist across updates +install -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/grub.d/ + +# Ghost config file +install -d $RPM_BUILD_ROOT/boot/%{name} +touch $RPM_BUILD_ROOT/boot/%{name}/grub.cfg +ln -s ../boot/%{name}/grub.cfg $RPM_BUILD_ROOT%{_sysconfdir}/%{name}.cfg + +# Install ELF files modules and images were created from into +# the shadow root, where debuginfo generator will grab them from +find $RPM_BUILD_ROOT -name '*.mod' -o -name '*.img' | +while read MODULE +do + BASE=$(echo $MODULE |sed -r "s,.*/([^/]*)\.(mod|img),\1,") + # Symbols from .img files are in .exec files, while .mod + # modules store symbols in .elf. This is just because we + # have both boot.img and boot.mod ... + EXT=$(echo $MODULE |grep -q '.mod' && echo '.elf' || echo '.exec') + TGT=$(echo $MODULE |sed "s,$RPM_BUILD_ROOT,.debugroot,") + install -m 755 -D $BASE$EXT $TGT +done + +# Defaults +install -m 644 -D %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/default/grub + + +%clean +rm -rf $RPM_BUILD_ROOT + + +%post +exec >/dev/null 2>&1 +# Create device.map or reuse one from GRUB Legacy +cp -u /boot/grub/device.map /boot/%{name}/device.map 2>/dev/null || + %{name}-mkdevicemap +# Determine the partition with /boot +BOOT_PARTITION=$(df -h /boot |(read; awk '{print $1; exit}')) +# Generate core.img, but don't let it be installed in boot sector +%{name}-install --grub-setup=/bin/true $BOOT_PARTITION +# Remove stale menu.lst entries +/sbin/grubby --remove-kernel=/boot/%{name}/core.img +# Add core.img as multiboot kernel to GRUB Legacy menu +/sbin/grubby --add-kernel=/boot/%{name}/core.img --title="GNU GRUB 2, (%{version})" + + +%preun +exec >/dev/null +/sbin/grubby --remove-kernel=/boot/%{name}/core.img +# XXX Ugly +rm -f /boot/%{name}/*.mod +rm -f /boot/%{name}/*.img +rm -f /boot/%{name}/*.lst +rm -f /boot/%{name}/device.map + + +%triggerin -- kernel, kernel-PAE +exec >/dev/null 2>&1 +# Generate grub.cfg +update-%{name} + + +%triggerun -- kernel, kernel-PAE +exec >/dev/null 2>&1 +# Generate grub.cfg +update-%{name} + + +%files +%defattr(-,root,root,-) +%{_libdir}/%{name} +%{_sbindir}/%{name}-mkdevicemap +%{_sbindir}/%{name}-install +%{_sbindir}/%{name}-emu +%{_sbindir}/%{name}-probe +%{_sbindir}/%{name}-setup +%{_sbindir}/update-%{name} +%{_bindir}/%{name}-mkimage +%{_bindir}/%{name}-mkrescue +%{_bindir}/%{name}-editenv +%{_bindir}/%{name}-pe2elf +%dir %{_sysconfdir}/grub.d +%config %{_sysconfdir}/grub.d/??_* +%{_sysconfdir}/grub.d/README +%{_sysconfdir}/%{name}.cfg +%{_sysconfdir}/default/grub +%dir /boot/%{name} +# Actually, this is replaced by update-grub from scriptlets, +# but it takes care of modified persistent part +%config(noreplace) /boot/%{name}/grub.cfg +%doc COPYING INSTALL NEWS README THANKS TODO ChangeLog +%exclude %{_mandir} + + +%changelog +* Fri Aug 08 2008 Lubomir Rintel - 1.98-0.2.20080807svn +- Correct scriptlet dependencies, trigger on kernel-PAE (thanks to Till Maas) +- Fix build on x86_64 (thanks to Marek Mahut) + +* Thu Aug 07 2008 Lubomir Rintel 1.98-0.1.20080807svn +- Another snapshot +- And much more! + +* Mon May 12 2008 Lubomir Kundrak 1.97-0.1.20080512cvs +- CVS snapshot +- buildid patch upstreamed + +* Sat Apr 12 2008 Lubomir Kundrak 1.96-2 +- Pull in 32 bit glibc +- Fix builds on 64 bit + +* Sun Mar 16 2008 Lubomir Kundrak 1.96-1 +- New upstream release +- More transformation fixes +- Generate -debuginfo from modules again. This time for real. +- grubby stub +- Make it possible to do configuration changes directly in grub.cfg +- grub.cfg symlink in /etc + +* Thu Feb 14 2008 Lubomir Kundrak 1.95.cvs20080214-3 +- Update to latest trunk +- Manual pages +- Add pci.c to DISTLIST + +* Mon Nov 26 2007 Lubomir Kundrak 1.95.cvs20071119-2 +- Fix program name transformation in utils +- Moved the modules to /lib +- Generate -debuginfo from modules again + +* Sun Nov 18 2007 Lubomir Kundrak 1.95.cvs20071119-1 +- Synchronized with CVS, major specfile cleanup + +* Mon Jan 30 2007 Lubomir Kundrak 1.95-lkundrak1 +- Removed redundant filelist entries + +* Mon Jan 29 2007 Lubomir Kundrak 1.95-lkundrak0 +- Program name transformation +- Bump to 1.95 +- grub-probefs -> grub-probe +- Add modules to -debuginfo + +* Tue Sep 12 2006 Lubomir Kundrak 1.94-lkundrak0 +- built the package diff --git a/import.log b/import.log new file mode 100644 index 0000000..b359870 --- /dev/null +++ b/import.log @@ -0,0 +1 @@ +grub2-1_98-0_2_20080807svn_el5:HEAD:grub2-1.98-0.2.20080807svn.el5.src.rpm:1219824412 diff --git a/sources b/sources index e69de29..75eaf92 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +e900ada389acd04b579583cb2179ef61 grub2.tar.gz