2 # - reap out which in probe scripts and drop R: which
3 # - subpackages? e.g. modules and utils
4 # - check where is that locale path: /boot/grub/locale and fix it or change it
6 # --enable-grub-emu-usb conflicts with --enable-grub-emu-pci, emu-pci seems experimental
7 # - to build and install the `grub-emu' debugging utility we need to re-run build with --target=emu
8 # - put grub-emu to subpackage if it is fixed
11 %bcond_with grubemu # build grub-emu debugging utility
12 %bcond_without efiemu # build efiemu runtimes
13 %bcond_without pc # do not build for PC BIOS platform
14 %bcond_without efi # do not build for EFI platform
16 %ifnarch %{ix86} %{x8664}
19 %ifnarch %{ix86} %{x8664}
24 # non-x86_64 arch doesn't support this
28 # the 'most natural' platform should go last
29 %ifarch %{ix86} %{x8664}
30 %define platforms %{?with_efi:efi} %{?with_pc:pc}
33 Summary: GRand Unified Bootloader
34 Summary(de.UTF-8): GRUB2 - ein Bootloader für x86
35 Summary(hu.UTF-8): GRUB2 - rendszerbetöltő x86 gépekhez
36 Summary(pl.UTF-8): GRUB2 - bootloader dla x86
37 Summary(pt_BR.UTF-8): Gerenciador de inicialização GRUB2
44 # 1. Download and unpack latest official beta snapshot from http://git.savannah.gnu.org/cgit/grub.git
45 # 2. Run ./autogen.sh and ./linguas.sh
46 # 3. Recompress and upload to DF
47 Source0: grub-%{version}-%{beta}.tar.xz
48 # Source0-md5: f262e61eba2e76a6f60b39a810814284
50 Source2: update-grub.8
51 Source3: grub.sysconfig
52 Source4: grub-custom.cfg
53 Patch1: pld-sysconfdir.patch
54 Patch2: grub-garbage.patch
55 Patch3: grub-lvmdevice.patch
56 Patch4: pld-mkconfigdir.patch
57 Patch5: grub-mkconfig-diagnostics.patch
59 Patch7: %{name}-fonts_path.patch
60 Patch8: add-vlan-tag-support.patch
61 Patch9: just-say-linux.patch
62 Patch10: ignore-kernel-symlinks.patch
63 Patch11: choose-preferred-initrd.patch
64 Patch12: %{name}-cfg.patch
65 URL: http://www.gnu.org/software/grub/
66 BuildRequires: autoconf >= 2.53
67 BuildRequires: automake >= 1:1.11.1-1
69 BuildRequires: device-mapper-devel
70 BuildRequires: flex >= 2.5.35
71 BuildRequires: fonts-TTF-DejaVu
72 BuildRequires: freetype-devel >= 2
74 BuildRequires: gettext-devel
75 BuildRequires: glibc-localedb-all
76 BuildRequires: glibc-static
77 BuildRequires: help2man
78 BuildRequires: libfuse-devel
79 BuildRequires: libtool
80 BuildRequires: ncurses-devel
82 BuildRequires: python-modules
83 BuildRequires: rpm >= 4.4.9-56
84 BuildRequires: rpmbuild(macros) >= 1.213
85 BuildRequires: sed >= 4.0
86 BuildRequires: tar >= 1:1.22
87 BuildRequires: texinfo
89 BuildRequires: xz-devel
91 BuildRequires: /usr/lib/libc.so
92 %if "%{pld_release}" == "ac"
93 BuildRequires: libgcc32
95 BuildRequires: gcc-multilib
98 Requires: %{name}-platform = %{version}-%{release}
101 %ifarch %{ix86} %{x8664}
102 Suggests: %{name}-platform-pc
104 Suggests: cdrkit-mkisofs
108 ExclusiveArch: %{ix86} %{x8664}
109 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
111 %define _sbindir /sbin
112 %define _bindir %{_sbindir}
114 %define _datadir %{_libdir}
115 %define _libexecdir %{_libdir}/grub
116 %define _grubdir /boot/grub
117 %define _localedir /usr/share/locale
119 # part of grub code is not relocable (these are not Linux libs)
120 # stack protector also breaks non-Linux binaries
121 # any kind of forced optimizations makes grub2 unreliable (random
122 # reboots and hangs on boot menu screen)
123 %define filterout_c -fPIC -O.
124 %undefine _ssp_cflags
125 %undefine _fortify_cflags
128 GRUB is a GPLed bootloader intended to unify bootloading across x86
129 operating systems. In addition to loading the Linux and *BSD kernels,
130 it implements the Multiboot standard, which allows for flexible
131 loading of multiple boot images (needed for modular kernels such as
134 GRUB 2 is derived from PUPA which was a research project to
135 investigate the next generation of GRUB. GRUB 2 has been rewritten
136 from scratch to clean up everything for modularity and portability.
138 GRUB 2 targets at the following goals:
139 - Scripting support, such as conditionals, loops, variables and
141 - Graphical interface.
142 - Dynamic loading of modules in order to extend itself at the run time
143 rather than at the build time.
144 - Portability for various architectures.
145 - Internationalization. This includes support for non-ASCII character
146 code, message catalogs like gettext, fonts, graphics console, and so
148 - Real memory management, to make GNU GRUB more extensible.
149 - Modular, hierarchical, object-oriented framework for file systems,
150 files, devices, drives, terminals, commands, partition tables and OS
152 - Cross-platform installation which allows for installing GRUB from a
153 different architecture.
154 - Rescue mode saves unbootable cases. Stage 1.5 was eliminated.
155 - Fix design mistakes in GRUB Legacy, which could not be solved for
156 backward-compatibility, such as the way of numbering partitions.
158 %description -l de.UTF-8
159 GRUB (GRand Unified Boot-loader) ist ein Bootloader, der oft auf
160 Rechnern eingesetzt wird, auf denen das freie Betriebssystem Linux
161 läuft. GRUB löst den betagten LILO (Linux-Loader) ab.
163 GRUB wurde innerhalb des GNU Hurd-Projektes als Boot-Loader entwickelt
164 und wird unter der GPL vertrieben. Aufgrund seiner höheren
165 Flexibilität verdrängt GRUB in vielen Linux-Distributionen den
166 traditionellen Boot-Loader LILO.
168 %description -l hu.UTF-8
169 GRUB egy GPL liszenszű rendszerbetöltő. Linux és *BSD kernelek
170 betöltése mellett támogatja a Multiboot standard-ot, amely lehetővé
171 teszi boot képek betöltését (moduláris kerneleknek kell, mint pl. a
174 GRUB2 céljai a következők:
175 - szkriptelés támogatása, úgymint feltételek, ciklusok, változók,
178 - modulok dinamikus betöltése futási időben
179 - hordozhatóság több architektúrára
180 - többnyelvűség: nem-ASCII karakterek támogatása, üzenetkatalógusok,
181 mint gettext, betűtípusok, grafikus konzolon, és így tovább
182 - valós memória kezelés, amellyel még bővíthetőbbé tehetjük
183 - moduláris, hierarchikus, objektum-orientált keretrendszer
184 fájlrendszerekhez, fájlokhoz, eszközökhöz, meghajtókhoz,
185 terminálokhoz, parancsokhoz, partíciós táblákhoz és OS betöltőkhöz
187 %description -l es.UTF-8
188 Éste es GRUB - Grand Unified Boot Loader - un administrador de
189 inicialización capaz de entrar en la mayoría de los sistemas
190 operacionales libres - Linux, FreeBSD, NetBSD, GNU Mach, etc. como
191 también en la mayoría de los sistemas operacionales comerciales para
194 El administrador GRUB puede ser una buena alternativa a LILO, para
195 usuarios conmás experiencia y que deseen obtener más recursos de su
196 cargador de inicialización (boot loader).
198 %description -l pl.UTF-8
199 GRUB jest bootloaderem na licencji GNU GPL, mającym na celu unifikację
200 procesu bootowania na systemach x86. Potrafi nie tylko ładować jądra
201 Linuksa i *BSD: posiada również implementację standardu Multiboot,
202 który pozwala na elastyczne ładowanie wielu obrazów bootowalnych
203 (czego wymagają modułowe jądra, takie jak GNU Hurd).
205 %description -l pt_BR.UTF-8
206 Esse é o GRUB - Grand Unified Boot Loader - um gerenciador de boot
207 capaz de entrar na maioria dos sistemas operacionais livres - Linux,
208 FreeBSD, NetBSD, GNU Mach, etc. assim como na maioria dos sistemas
209 operacionais comerciais para PC.
211 O GRUB pode ser uma boa alternativa ao LILO, para usuários mais
212 avançados e que querem mais recursos de seu boot loader.
214 %package -n bash-completion-%{name}
215 Summary: bash-completion for GRUB
216 Summary(pl.UTF-8): Bashowe uzupełnianie nazw dla GRUB-a
217 Group: Applications/Shells
218 Requires: bash-completion
220 %description -n bash-completion-%{name}
221 This package provides bash-completion for GRUB.
223 %description -n bash-completion-%{name} -l pl.UTF-8
224 Pakiet ten dostarcza bashowe uzupełnianie nazw dla GRUB-a.
227 Summary: PC BIOS platform support for GRUB
228 Summary(pl.UTF-8): Obsługa platformy PC BIOS dla GRUB-a
230 Provides: %{name}-platform = %{version}-%{release}
232 %description platform-pc
233 PC BIOS platform support for GRUB.
235 %description platform-pc -l pl.UTF-8
236 Obsługa platformy PC BIOS dla GRUB-a.
238 %package platform-efi
239 Summary: (U)EFI platform support for GRUB
240 Summary(pl.UTF-8): Obsługa platformy (U)EFI dla GRUB-a
243 Provides: %{name}-platform = %{version}-%{release}
245 %description platform-efi
246 (U)EFI platform support for GRUB.
248 %description platform-efi -l pl.UTF-8
249 Obsługa platformy (U)EFI dla GRUB-a.
252 Summary: GRUB font files converter
253 Summary(pl.UTF-8): Konwerter plików fontów GRUB-a
257 Converts common font file formats into PF2.
259 %description mkfont -l pl.UTF-8
260 Program do konwersji popularnych formatów plików fontów do PF2.
262 %package theme-starfield
263 Summary: starfield theme for GRUB
264 Summary(pl.UTF-8): Motyw starfield dla GRUB-a
267 %description theme-starfield
268 starfield theme for GRUB.
270 %description theme-starfield -l pl.UTF-8
271 Motyw starfield dla GRUB-a.
274 %setup -q -n grub-%{version}-%{beta}
288 # we don't have C.utf-8 and need an UTF-8 locale for build
289 sed -i -e 's/LC_ALL=C.UTF-8/LC_ALL=en_US.utf-8/g' po/Makefile* po/Rules*
292 # if gold is used then grub doesn't even boot
293 # https://savannah.gnu.org/bugs/?34539
294 # http://sourceware.org/bugzilla/show_bug.cgi?id=14196
296 ln -s /usr/bin/ld.bfd our-ld/ld
297 export PATH=$(pwd)/our-ld:$PATH
299 ## not only the typicall autotools stuff
308 for platform in %{platforms} ; do
309 install -d build-${platform}
312 if [ "$platform" != "efi" ] ; then
313 platform_opts="--enable-efiemu%{!?with_efiemu:=no}"
319 # mawk stalls at ./genmoddep.awk, so force gawk
322 --with-platform=${platform} \
325 --enable-grub-emu-usb \
326 --enable-grub-emu-sdl \
327 --enable-grub-emu-pci \
330 TARGET_LDFLAGS=-static
332 %{__make} -j1 -C po update-gmo
338 rm -rf $RPM_BUILD_ROOT
340 for platform in %{platforms} ; do
343 pkgdatadir=%{_libexecdir} \
344 pkglibdir=%{_libexecdir} \
345 DESTDIR=$RPM_BUILD_ROOT
350 %{__rm} -r $RPM_BUILD_ROOT%{_localedir}/de@hebrew
351 %{__rm} -r $RPM_BUILD_ROOT%{_localedir}/en@{arabic,cyrillic,greek,hebrew,piglatin}
355 # this must be after 'make install'
356 install -d $RPM_BUILD_ROOT%{_libexecdir}/locale
358 install -d $RPM_BUILD_ROOT%{_grubdir}
359 cp -p docs/grub.cfg $RPM_BUILD_ROOT%{_grubdir}
362 cp -p %{SOURCE4} $RPM_BUILD_ROOT%{_grubdir}/custom.cfg
363 %{__rm} $RPM_BUILD_ROOT/lib/grub.d/40_custom
365 install -p %{SOURCE1} $RPM_BUILD_ROOT%{_sbindir}/update-grub
366 cp -p %{SOURCE2} $RPM_BUILD_ROOT%{_mandir}/man8/update-grub.8
368 install -d $RPM_BUILD_ROOT/etc/sysconfig
369 cp -p %{SOURCE3} $RPM_BUILD_ROOT/etc/sysconfig/grub
371 # rm -f, because it sometimes exists, sometimes not, depending which texlive you have installed
372 rm -f $RPM_BUILD_ROOT%{_infodir}/dir
374 # platform specific, unnecessarily always installed
375 %ifnarch %{ix86} %{x8664}
376 %{__rm} $RPM_BUILD_ROOT{%{_sbindir}/grub-bios-setup,%{_mandir}/man8/grub-bios-setup.8}
378 %{__rm} $RPM_BUILD_ROOT{%{_sbindir}/grub-sparc64-setup,%{_mandir}/man8/grub-sparc64-setup.8}
380 # core.img - bootable image generated by grub-mkimage(1) via grub-install(1)
381 touch $RPM_BUILD_ROOT%{_grubdir}/core.img
382 touch $RPM_BUILD_ROOT%{_grubdir}/device.map
384 # needs to be exactly 1KiB
385 # but we're ghosting it. so whom are we kidding here? :P (maybe %config it in future?)
386 dd bs=1024 if=/dev/zero count=1 of=$RPM_BUILD_ROOT%{_grubdir}/grubenv
389 rm -rf $RPM_BUILD_ROOT
391 %post -p %{_sbindir}/postshell
392 -/usr/sbin/fix-info-dir -c %{_infodir}
394 %postun -p %{_sbindir}/postshell
395 -/usr/sbin/fix-info-dir -c %{_infodir}
397 %triggerpostun -- %{name} < 2.00-2
398 # Note this trigger on version upgrade needed only for upgrade from
399 # old grub2 packages which contained modules in /boot/grub
400 # or were built with optimizations enabled
401 # don't do anything on --downgrade
402 if [ $1 -le 1 ]; then
405 echo "Grub was upgraded, trying to setup it to boot sector"
406 /sbin/grub-install '(hd0)' || :
408 %triggerpostun -- %{name} < 1.99-7.3
409 # migrate /etc/grub.d/custom.cfg.rpmsave -> /boot/grub/custom.cfg
410 if [ -f %{_sysconfdir}/grub.d/custom.cfg.rpmsave ]; then
411 cp -f %{_grubdir}/custom.cfg{,.rpmnew}
412 mv -f %{_sysconfdir}/grub.d/custom.cfg.rpmsave %{_grubdir}/custom.cfg
416 %defattr(644,root,root,755)
417 %doc AUTHORS ChangeLog NEWS README THANKS TODO
418 %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/grub
419 %attr(755,root,root) %{_sbindir}/grub-editenv
420 %attr(755,root,root) %{_sbindir}/grub-fstest
421 %attr(755,root,root) %{_sbindir}/grub-file
422 %attr(755,root,root) %{_sbindir}/grub-glue-efi
423 %attr(755,root,root) %{_sbindir}/grub-kbdcomp
424 %attr(755,root,root) %{_sbindir}/grub-install
425 %attr(755,root,root) %{_sbindir}/grub-macbless
426 %attr(755,root,root) %{_sbindir}/grub-menulst2cfg
427 %attr(755,root,root) %{_sbindir}/grub-mkconfig
428 %attr(755,root,root) %{_sbindir}/grub-mklayout
429 %attr(755,root,root) %{_sbindir}/grub-mknetdir
430 %attr(755,root,root) %{_sbindir}/grub-mkpasswd-pbkdf2
431 %attr(755,root,root) %{_sbindir}/grub-mkrelpath
432 %attr(755,root,root) %{_sbindir}/grub-mkrescue
433 %attr(755,root,root) %{_sbindir}/grub-mkstandalone
434 %attr(755,root,root) %{_sbindir}/grub-mount
435 %attr(755,root,root) %{_sbindir}/grub-ofpathname
436 %attr(755,root,root) %{_sbindir}/grub-reboot
437 %attr(755,root,root) %{_sbindir}/grub-render-label
438 %attr(755,root,root) %{_sbindir}/grub-script-check
439 %attr(755,root,root) %{_sbindir}/grub-set-default
440 %attr(755,root,root) %{_sbindir}/grub-syslinux2cfg
441 %attr(755,root,root) %{_sbindir}/update-grub
442 %ifarch %{ix86} %{x8664}
443 %attr(755,root,root) %{_sbindir}/grub-bios-setup
444 %{_mandir}/man8/grub-bios-setup.8*
446 %ifarch %{ix86} %{x8664}
447 %attr(755,root,root) %{_sbindir}/grub-mkimage
448 %{_mandir}/man1/grub-mkimage.1*
450 %attr(755,root,root) %{_sbindir}/grub-probe
451 %{_mandir}/man8/grub-probe.8*
453 %{_mandir}/man1/grub-editenv.1*
454 %{_mandir}/man1/grub-file.1*
455 %{_mandir}/man1/grub-fstest.1*
456 %{_mandir}/man1/grub-glue-efi.1*
457 %{_mandir}/man1/grub-kbdcomp.1*
458 %{_mandir}/man1/grub-macbless.1*
459 %{_mandir}/man1/grub-menulst2cfg.1*
460 %{_mandir}/man1/grub-mklayout.1*
461 %{_mandir}/man1/grub-mknetdir.1*
462 %{_mandir}/man1/grub-mkpasswd-pbkdf2.1*
463 %{_mandir}/man1/grub-mkrelpath.1*
464 %{_mandir}/man1/grub-mkrescue.1*
465 %{_mandir}/man1/grub-mkstandalone.1*
466 %{_mandir}/man1/grub-mount.1*
467 %{_mandir}/man1/grub-render-label.1*
468 %{_mandir}/man1/grub-script-check.1*
469 %{_mandir}/man1/grub-syslinux2cfg.1*
470 %{_mandir}/man8/grub-install.8*
471 %{_mandir}/man8/grub-mkconfig.8*
472 %{_mandir}/man8/grub-ofpathname.8*
473 %{_mandir}/man8/grub-reboot.8*
474 %{_mandir}/man8/grub-set-default.8*
475 %{_mandir}/man8/update-grub.8*
477 %attr(755,root,root) %{_sbindir}/grub-emu
478 %{_mandir}/man8/grub-emu.8*
480 %{_libexecdir}/grub-mkconfig_lib
484 # XXX: check this locale dir location and if it is neccesaary to exist on /boot
486 %dir %{_libexecdir}/locale
487 %config(noreplace) %verify(not md5 mtime size) %{_grubdir}/grub.cfg
488 %config(noreplace) %verify(not md5 mtime size) %{_grubdir}/custom.cfg
490 # generated by grub at runtime
491 %ghost %{_grubdir}/device.map
492 %ghost %{_grubdir}/core.img
493 %ghost %{_grubdir}/grubenv
496 %doc /lib/grub.d/README
497 %attr(755,root,root) /lib/grub.d/00_header
498 %attr(755,root,root) /lib/grub.d/10_linux
499 %attr(755,root,root) /lib/grub.d/20_linux_xen
500 %attr(755,root,root) /lib/grub.d/30_os-prober
501 %attr(755,root,root) /lib/grub.d/41_custom
503 # these are now installed only on matching hosts
504 #%attr(755,root,root) /lib/grub.d/10_hurd
505 #%attr(755,root,root) /lib/grub.d/10_illumos
506 #%attr(755,root,root) /lib/grub.d/10_kfreebsd
507 #%attr(755,root,root) /lib/grub.d/10_netbsd
508 #%attr(755,root,root) /lib/grub.d/10_xnu
510 %ifarch %{ix86} %{x8664}
511 %attr(755,root,root) %{_sbindir}/grub-probe
512 %{_mandir}/man8/grub-probe.8*
515 %{_infodir}/grub*.info*
517 %dir %{_datadir}/grub/themes
521 %defattr(644,root,root,755)
522 %dir %{_libexecdir}/*-pc
523 %{_libexecdir}/*-pc/modinfo.sh
524 %{_libexecdir}/*-pc/*.exec
525 %{_libexecdir}/*-pc/*.image
526 %{_libexecdir}/*-pc/*.lst
527 %{_libexecdir}/*-pc/*.mod
528 %{_libexecdir}/*-pc/*.module
529 %{_libexecdir}/*-pc/lzma_decompress.img
530 %{_libexecdir}/*-pc/config.h
531 %{_libexecdir}/*-pc/gdb_grub
532 %{_libexecdir}/*-pc/gmodule.pl
534 %{_libexecdir}/*-pc/efiemu*.o
536 %{_libexecdir}/*-pc/kernel.img
541 %defattr(644,root,root,755)
542 %dir %{_libexecdir}/*-efi
543 %{_libexecdir}/*-efi/modinfo.sh
544 %{_libexecdir}/*-efi/*.exec
545 %{_libexecdir}/*-efi/*.lst
546 %{_libexecdir}/*-efi/*.mod
547 %{_libexecdir}/*-efi/*.module
548 %{_libexecdir}/*-efi/config.h
549 %{_libexecdir}/*-efi/gdb_grub
550 %{_libexecdir}/*-efi/gmodule.pl
551 %{_libexecdir}/*-efi/kernel.img
555 %defattr(644,root,root,755)
556 %attr(755,root,root) %{_sbindir}/grub-mkfont
557 %{_mandir}/man1/grub-mkfont.1*
559 %files theme-starfield
560 %defattr(644,root,root,755)
561 %{_datadir}/grub/themes/starfield
563 %files -n bash-completion-%{name}
564 %defattr(644,root,root,755)
565 /etc/bash_completion.d/grub