# # spec file for package grub2 # # Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # Name: grub2 %ifarch x86_64 ppc64 BuildRequires: freetype2-devel-32bit BuildRequires: gcc-32bit BuildRequires: glibc-32bit BuildRequires: glibc-devel-32bit BuildRequires: libncurses5-32bit BuildRequires: libusb-1_0-devel-32bit BuildRequires: ncurses-devel-32bit %else BuildRequires: freetype2-devel BuildRequires: gcc BuildRequires: glibc-devel BuildRequires: libncurses5 BuildRequires: libusb-1_0-devel BuildRequires: ncurses-devel %endif BuildRequires: autogen BuildRequires: automake BuildRequires: bison BuildRequires: device-mapper-devel BuildRequires: fdupes BuildRequires: flex BuildRequires: fuse-devel BuildRequires: gnu-unifont BuildRequires: lzma BuildRequires: makeinfo BuildRequires: python BuildRequires: ruby BuildRequires: xz-devel %if 0%{?suse_version} == 1210 BuildRequires: guile %endif # Modules always contain just 32-bit code %define _libdir %{_exec_prefix}/lib %ifarch ppc ppc64 %define platform ieee1275 %else %define platform pc %endif # build efi bootloader on some platforms only: %if ! 0%{?efi} %global efi %{ix86} x86_64 ia64 %endif Version: 2.00 Release: 0 Summary: Bootloader with support for Linux, Multiboot and more License: GPL-3.0+ Group: System/Boot Url: http://www.gnu.org/software/grub/ %define rev 20120622 Source0: grub-%{version}.tar.xz Source1: 90_persistent Source2: grub.default Source3: README.openSUSE Source4: grub2.rpmlintrc # rsync -Lrtvz translationproject.org::tp/latest/grub/ po Source5: translations-20120622.tar.xz Source6: grub2-once Source7: 20_memtest86+ Source1000: PATCH_POLICY Patch0: grub2-correct-font-path.patch Patch1: rename-grub-info-file-to-grub2.patch Patch2: grub2-linux.patch Patch3: use-grub2-as-a-package-name.patch Patch6: grub2-iterate-and-hook-for-extended-partition.patch Patch7: grub2-install-opt-skip-fs-probe.patch Patch8: grub2-ppc-terminfo.patch Patch9: grub2-GRUB_CMDLINE_LINUX_RECOVERY-for-recovery-mode.patch Patch10: grub2-fix-error-terminal-gfxterm-isn-t-found.patch Patch11: grub2-fix-mo-not-copied-to-grubdir-locale.patch Patch12: grub2-fix-menu-in-xen-host-server.patch Patch13: grub2-enable-theme-for-terminal-window.patch Patch14: grub2-stdio.in.patch Patch15: not-display-menu-when-boot-once.patch Patch16: grub2-fix-Grub2-with-SUSE-Xen-package-install.patch Patch17: grub2-pass-corret-root-for-nfsroot.patch Patch18: grub2-fix-locale-en.mo.gz-not-found-error-message.patch Patch99: use-grub2-efi-as-a-package-name.patch PreReq: perl-Bootloader Requires: gettext-runtime Requires: os-prober Requires(post): /sbin/install-info Requires(preun):/sbin/install-info BuildRoot: %{_tmppath}/%{name}-%{version}-build ExclusiveArch: %{ix86} x86_64 ppc ppc64 %description This is the second version of the GRUB (Grand Unified Bootloader), a highly configurable and customizable bootloader with modular architecture. It supports rich scale of kernel formats, file systems, computer architectures and hardware devices. PLEASE NOTE: This is a development snapshot, and as such will not replace grub if you install it, but will be merely added as another kernel to your existing GRUB menu. Do not replace GRUB (grub package) with it unless you know what are you doing. Refer to README.openSUSE file that is part of this package's documentation for more information. %ifarch %{efi} %package efi Summary: GRUB2 for EFI systems Group: System/Boot %ifarch ia64 x86_64 #Package is available on ia64 and x86_64 only and not necessarily needed Requires: efibootmgr %endif Requires: grub2 %description efi The GRand Unified Bootloader (GRUB) is a highly configurable and customizable bootloader with modular architecture. It supports rich variety of kernel formats, file systems, computer architectures and hardware devices. This subpackage provides support for EFI systems. %endif %prep # We create (if we build for efi) two copies of the sources in the Builddir %setup -q -T -c -n grub-%{version} -a 0 -a 5 cp -r po grub-%{version}/ cd grub-%{version} (cd po && ls *.po | cut -d. -f1 | xargs) >po/LINGUAS %patch0 -p1 %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch6 -p1 %patch7 -p1 %patch8 -p1 %patch9 -p1 %patch10 -p1 %patch11 -p1 %patch12 -p1 # disable and back to use black colored terminal window (bnc#776244) # we could enable it when # 1 we have background with better contrast to the font's color # 2 we confirm it's eligible to set the terminal background this way #%patch13 -p1 %patch14 -p2 %patch15 -p1 %patch16 -p1 %patch17 -p1 %patch18 -p1 cd .. # README.openSUSE cp %{SOURCE3} grub-%{version}/ %ifarch %{efi} (cp -a grub-%{version} grub-efi-%{version}) cd grub-efi-%{version} %patch99 -p1 cd .. %endif %build %ifarch %{efi} cd grub-efi-%{version} ./autogen.sh # we don't want to let rpm to override *FLAGS by bogus ones CFLAGS="-fno-strict-aliasing " CXXFLAGS=" " FFLAGS=" " export CFLAGS CXXFLAGS FFLAGS %configure \ TARGET_LDFLAGS=-static \ --target=%{_target_platform} \ --with-platform=efi \ --program-transform-name=s,grub,%{name}-efi, make %{?_smp_mflags} %ifarch %{ix86} %define grubefiarch i386-efi %else %define grubefiarch %{_arch}-efi %endif ./grub-mkimage -O %{grubefiarch} -o grub.efi -d grub-core part_gpt hfsplus fat \ ext2 btrfs normal chain boot configfile linux appleldr minicmd \ loadbios reboot halt search font gfxterm cd .. %endif cd grub-%{version} ./autogen.sh # we don't want to let rpm to override *FLAGS by bogus ones CFLAGS="-fno-strict-aliasing " CXXFLAGS=" " FFLAGS=" " export CFLAGS CXXFLAGS FFLAGS # 64-bit x86-64 machines use 32-bit 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 %ifnarch ppc ppc64 %define extraconfigure --enable-grub-emu-usb %endif # -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 \ --target=%{_target_platform} \ --with-platform=%{platform} \ %{extraconfigure} \ --program-transform-name=s,grub,%{name}, make %{?_smp_mflags} %install %ifarch %{efi} cd grub-efi-%{version} make DESTDIR=$RPM_BUILD_ROOT install # Ghost config file install -d $RPM_BUILD_ROOT/boot/%{name}-efi touch $RPM_BUILD_ROOT/boot/%{name}-efi/grub.cfg install -m 755 -d $RPM_BUILD_ROOT/boot/efi/EFI/opensuse/ install -m 755 grub.efi $RPM_BUILD_ROOT/boot/efi/EFI/opensuse/grub.efi # Remove devel files rm $RPM_BUILD_ROOT/%{_libdir}/%{name}-efi/*/*.h rm $RPM_BUILD_ROOT%{_datadir}/%{name}-efi/*.h %find_lang %{name}-efi cd .. %endif cd grub-%{version} 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/ # Script to generate memtest86+ menu entry install -m 755 %{SOURCE7} $RPM_BUILD_ROOT%{_sysconfdir}/grub.d/ # Ghost config file install -d $RPM_BUILD_ROOT/boot/%{name} touch $RPM_BUILD_ROOT/boot/%{name}/grub.cfg # Remove devel files rm $RPM_BUILD_ROOT/%{_libdir}/%{name}/*/*.h rm $RPM_BUILD_ROOT%{_datadir}/%{name}/*.h # Defaults install -m 644 -D %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/default/grub install -m 755 -D %{SOURCE6} $RPM_BUILD_ROOT%{_sbindir}/grub2-once %find_lang %{name} %fdupes %buildroot%{_bindir} %post /sbin/install-info %{_infodir}/grub-dev.info %{_infodir}/dir || : /sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || : # To check by current loader settings if [ -f %{_sysconfdir}/sysconfig/bootloader ]; then . %{_sysconfdir}/sysconfig/bootloader fi # If the grub is the current loader, we'll handle the grub2 testing entry if [ "x${LOADER_TYPE}" = "xgrub" ]; then exec >/dev/null 2>&1 # check if entry for grub2's core.img exists in the config # if yes, we will correct obsoleted path and update grub2 stuff and config to make it work # if no, do nothing if [ -f /boot/grub/menu.lst ]; then # If grub config contains obsolete core.img path, remove and use the new one if /usr/bin/grep -l "^\s*kernel\s*.*/boot/%{name}/core.img" /boot/grub/menu.lst; then /sbin/update-bootloader --remove --image /boot/%{name}/core.img || true /sbin/update-bootloader --add --image /boot/%{name}/i386-pc/core.img --name "GNU GRUB 2" || true fi # Install grub2 stuff and config to make the grub2 testing entry to work with updated version if /usr/bin/grep -l "^\s*kernel\s*.*/boot/%{name}/i386-pc/core.img" /boot/grub/menu.lst; then # 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 || true # Create a working grub2 config, otherwise that entry is un-bootable /usr/sbin/grub2-mkconfig -o /boot/%{name}/grub.cfg fi fi elif [ "x${LOADER_TYPE}" = "xgrub2" ]; then # It's enought to call update-bootloader --refesh to install grub2 and update it's config /sbin/update-bootloader --refresh || true fi %ifarch %{efi} %post efi /sbin/install-info %{_infodir}/grub-dev.info %{_infodir}/dir || : /sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || : # To check by current loader settings if [ -f %{_sysconfdir}/sysconfig/bootloader ]; then . %{_sysconfdir}/etc/sysconfig/bootloader fi if [ "x${LOADER_TYPE}" = "xgrub2-efi" ]; then # It's enought to call update-bootloader --refesh to install grub2 and update it's config /sbin/update-bootloader --refresh || true fi %endif %preun if [ $1 = 0 ]; then /sbin/install-info --delete %{_infodir}/grub-dev.info %{_infodir}/dir || : /sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || : # To check by current loader settings if [ -f %{_sysconfdir}/sysconfig/bootloader ]; then . %{_sysconfdir}/sysconfig/bootloader fi if [ "x${LOADER_TYPE}" = "xgrub" ]; then exec >/dev/null 2>&1 if [ -f /boot/grub/menu.lst ]; then # Remove grub2 testing entry in menu.lst if has any for i in /boot/%{name}/core.img /boot/%{name}/i386-pc/core.img; do if /usr/bin/grep -l "^\s*kernel\s*.*$i" /boot/grub/menu.lst; then /sbin/update-bootloader --remove --image "$i" || true fi done fi # Cleanup config, to not confuse some tools determining bootloader in use rm -f /boot/%{name}/grub.cfg # Cleanup installed files # Unless grub2 provides grub2-uninstall, we don't remove any file because # we have no idea what's been installed. (And a blind remove is dangerous # to remove user's or other package's file accidently ..) fi fi %ifarch %{efi} %preun efi if [ $1 = 0 ]; then /sbin/install-info --delete %{_infodir}/grub-dev.info %{_infodir}/dir || : /sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || : fi %endif %files -f grub-%{version}/%{name}.lang %defattr(-,root,root,-) %doc grub-%{version}/COPYING grub-%{version}/NEWS grub-%{version}/README %doc grub-%{version}/THANKS grub-%{version}/TODO grub-%{version}/ChangeLog %doc grub-%{version}/README.openSUSE %dir /boot/%{name} %ghost /boot/%{name}/grub.cfg %{_sysconfdir}/bash_completion.d/grub %config(noreplace) %{_sysconfdir}/default/grub %dir %{_sysconfdir}/grub.d %{_sysconfdir}/grub.d/README %config %{_sysconfdir}/grub.d/??_* %{_sbindir}/%{name}-bios-setup %{_sbindir}/%{name}-install %{_sbindir}/%{name}-mkconfig %{_sbindir}/%{name}-mknetdir %{_sbindir}/%{name}-once %{_sbindir}/%{name}-ofpathname %{_sbindir}/%{name}-probe %{_sbindir}/%{name}-reboot %{_sbindir}/%{name}-set-default %{_sbindir}/%{name}-sparc64-setup %{_bindir}/%{name}-editenv %{_bindir}/%{name}-fstest %{_bindir}/%{name}-kbdcomp %{_bindir}/%{name}-menulst2cfg %{_bindir}/%{name}-mkfont %{_bindir}/%{name}-mkimage %{_bindir}/%{name}-mklayout %{_bindir}/%{name}-mkpasswd-pbkdf2 %{_bindir}/%{name}-mkrelpath %{_bindir}/%{name}-mkrescue %{_bindir}/%{name}-mkstandalone %{_bindir}/%{name}-mount %{_bindir}/%{name}-script-check %dir %{_libdir}/%{name}/ %dir %{_libdir}/%{name}/*/ %ifnarch ppc ppc64 %{_libdir}/%{name}/*/*.image %endif %{_libdir}/%{name}/*/*.img %{_libdir}/%{name}/*/*.lst %{_libdir}/%{name}/*/*.mod %{_libdir}/%{name}/*/*.module %ifarch x86_64 %{_libdir}/%{name}/*/efiemu*.o %endif %{_libdir}/%{name}/*/gdb_grub2 %{_libdir}/%{name}/*/gmodule.pl %{_libdir}/%{name}/*/kernel.exec %{_libdir}/%{name}/*/modinfo.sh %dir %{_datadir}/%{name} %{_datadir}/%{name}/*.pf2 %{_datadir}/%{name}/grub-mkconfig_lib %{_infodir}/grub-dev.info* %{_infodir}/%{name}.info* %ifarch %{efi} %files efi -f grub-efi-%{version}/%{name}-efi.lang %defattr(-,root,root,-) %dir /boot/efi %dir /boot/efi/EFI %dir /boot/efi/EFI/opensuse %attr(0755,root,root)/boot/efi/EFI/opensuse/grub.efi %dir /boot/grub2-efi %ghost /boot/grub2-efi/grub.cfg %{_sbindir}/grub2-efi-bios-setup %{_sbindir}/grub2-efi-install %{_sbindir}/grub2-efi-mkconfig %{_sbindir}/grub2-efi-mknetdir %{_sbindir}/grub2-efi-ofpathname %{_sbindir}/grub2-efi-probe %{_sbindir}/grub2-efi-reboot %{_sbindir}/grub2-efi-set-default %{_sbindir}/grub2-efi-sparc64-setup %{_bindir}/grub2-efi-editenv %{_bindir}/grub2-efi-fstest %{_bindir}/grub2-efi-kbdcomp %{_bindir}/grub2-efi-menulst2cfg %{_bindir}/grub2-efi-mkstandalone %{_bindir}/grub2-efi-mkfont %{_bindir}/grub2-efi-mklayout %{_bindir}/grub2-efi-mkimage %{_bindir}/grub2-efi-mkpasswd-pbkdf2 %{_bindir}/grub2-efi-mkrelpath %ifnarch %{sparc} ppc ppc64 %{_bindir}/grub2-efi-mkrescue %endif %{_bindir}/grub2-efi-mount %{_bindir}/grub2-efi-script-check %dir %{_libdir}/%{name}-efi/ %dir %{_libdir}/%{name}-efi/*/ %{_libdir}/%{name}-efi/*/*.img %{_libdir}/%{name}-efi/*/*.lst %{_libdir}/%{name}-efi/*/*.mod %{_libdir}/%{name}-efi/*/*.module %{_libdir}/%{name}-efi/*/gdb_grub2-efi %{_libdir}/%{name}-efi/*/gmodule.pl %{_libdir}/%{name}-efi/*/kernel.exec %{_libdir}/%{name}-efi/*/modinfo.sh %dir %{_datadir}/%{name}-efi %{_datadir}/%{name}-efi/grub-mkconfig_lib %{_datadir}/%{name}-efi/*.pf2 %endif %changelog