diff --git a/Makefile b/Makefile index 42b2b4e7..28d1a527 100644 --- a/Makefile +++ b/Makefile @@ -44,3 +44,6 @@ install: install-units ln -f ${DESTDIR}$(LIBEXECDIR)/bootupd ${DESTDIR}$(PREFIX)/bin/bootupctl install -d "${DESTDIR}$(PREFIX)/lib/systemd/system/multi-user.target.wants" ln -s ../bootupd.socket "${DESTDIR}$(PREFIX)/lib/systemd/system/multi-user.target.wants" + +install-grub-static: + install -D -t ${DESTDIR}$(PREFIX)/lib/bootupd/grub2-static src/grub2/*.cfg \ No newline at end of file diff --git a/contrib/packaging/bootupd.spec b/contrib/packaging/bootupd.spec index 83aafdab..e6b00aa4 100644 --- a/contrib/packaging/bootupd.spec +++ b/contrib/packaging/bootupd.spec @@ -44,11 +44,21 @@ replace-with = "vendored-sources" directory = "vendor" EOF +%package grub2-static +Summary: Static grub2 configuration files for CoreOS-alike systems + +%description grub2-static +This package includes static grub2 configuration files. + +%files grub2-static +%{_prefix}/lib/bootupd + %build cargo build --release %install %make_install INSTALL="install -p -c" +make install-grub-static DESTDIR=%{?buildroot} INSTALL="%{__install} -p" %post -n %{crate} %systemd_post bootupd.service bootupd.socket diff --git a/src/grub2/README.md b/src/grub2/README.md new file mode 100644 index 00000000..79d9b889 --- /dev/null +++ b/src/grub2/README.md @@ -0,0 +1,3 @@ +# Static GRUB configuration files + +These static files were taken from https://github.com/coreos/coreos-assembler/blob/5824720ec3a9ec291532b23b349b6d8d8b2e9edd/src/grub.cfg diff --git a/src/grub2/grub-static-efi.cfg b/src/grub2/grub-static-efi.cfg new file mode 100644 index 00000000..bf38ca90 --- /dev/null +++ b/src/grub2/grub-static-efi.cfg @@ -0,0 +1,19 @@ +if [ -e (md/md-boot) ]; then + # The search command might pick a RAID component rather than the RAID, + # since the /boot RAID currently uses superblock 1.0. See the comment in + # the main grub.cfg. + set prefix=md/md-boot +else + if [ -f ${config_directory}/bootuuid.cfg ]; then + source ${config_directory}/bootuuid.cfg + fi + if [ -n "${BOOT_UUID}" ]; then + search --fs-uuid "${BOOT_UUID}" --set prefix --no-floppy + else + search --label boot --set prefix --no-floppy + fi +fi +set prefix=($prefix)/grub2 +configfile $prefix/grub.cfg +boot + diff --git a/src/grub2/grub-static.cfg b/src/grub2/grub-static.cfg new file mode 100644 index 00000000..878357d1 --- /dev/null +++ b/src/grub2/grub-static.cfg @@ -0,0 +1,83 @@ +# This file is copied from https://github.com/coreos/coreos-assembler/blob/main/src/grub.cfg +# Changes: +# - Dropped Ignition glue, that can be injected into platform.cfg +set pager=1 +# petitboot doesn't support -e and doesn't support an empty path part +if [ -d (md/md-boot)/grub2 ]; then + # fcct currently creates /boot RAID with superblock 1.0, which allows + # component partitions to be read directly as filesystems. This is + # necessary because transposefs doesn't yet rerun grub2-install on BIOS, + # so GRUB still expects /boot to be a partition on the first disk. + # + # There are two consequences: + # 1. On BIOS and UEFI, the search command might pick an individual RAID + # component, but we want it to use the full RAID in case there are bad + # sectors etc. The undocumented --hint option is supposed to support + # this sort of override, but it doesn't seem to work, so we set $boot + # directly. + # 2. On BIOS, the "normal" module has already been loaded from an + # individual RAID component, and $prefix still points there. We want + # future module loads to come from the RAID, so we reset $prefix. + # (On UEFI, the stub grub.cfg has already set $prefix properly.) + set boot=md/md-boot + set prefix=($boot)/grub2 +else + if [ -f ${config_directory}/bootuuid.cfg ]; then + source ${config_directory}/bootuuid.cfg + fi + if [ -n "${BOOT_UUID}" ]; then + search --fs-uuid "${BOOT_UUID}" --set boot --no-floppy + else + search --label boot --set boot --no-floppy + fi +fi +set root=$boot + +if [ -f ${config_directory}/grubenv ]; then + load_env -f ${config_directory}/grubenv +elif [ -s $prefix/grubenv ]; then + load_env +fi + +if [ x"${feature_menuentry_id}" = xy ]; then + menuentry_id_option="--id" +else + menuentry_id_option="" +fi + +function load_video { + if [ x$feature_all_video_module = xy ]; then + insmod all_video + else + insmod efi_gop + insmod efi_uga + insmod ieee1275_fb + insmod vbe + insmod vga + insmod video_bochs + insmod video_cirrus + fi +} + +# tracker: https://github.com/coreos/fedora-coreos-tracker/issues/805 +if [ -f $prefix/platform.cfg ]; then + source $prefix/platform.cfg +fi + +if [ x$feature_timeout_style = xy ] ; then + set timeout_style=menu + set timeout=1 +# Fallback normal timeout code in case the timeout_style feature is +# unavailable. +else + set timeout=1 +fi + +# Import user defined configuration +# tracker: https://github.com/coreos/fedora-coreos-tracker/issues/805 +if [ -f $prefix/user.cfg ]; then + source $prefix/user.cfg +fi + +blscfg +