Skip to content

Commit

Permalink
Update grub-cereus to 2.12
Browse files Browse the repository at this point in the history
  • Loading branch information
KF-Art committed Jun 25, 2024
1 parent 4411e6d commit 6fa69de
Show file tree
Hide file tree
Showing 6 changed files with 148 additions and 125 deletions.
50 changes: 50 additions & 0 deletions srcpkgs/grub-cereus/patches/devicetree-loading.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
support loading a devicetree based on GRUB_DEFAULT_DTB in /etc/default/grub

looks in /boot/dtbs/dtbs-${version}/${GRUB_DEFAULT_DTB}

based on https://src.fedoraproject.org/rpms/grub2/blob/rawhide/f/0022-Add-devicetree-loading.patch

--- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in
@@ -255,7 +255,8 @@
GRUB_ENABLE_CRYPTODISK \
GRUB_BADRAM \
GRUB_OS_PROBER_SKIP_LIST \
- GRUB_DISABLE_SUBMENU
+ GRUB_DISABLE_SUBMENU \
+ GRUB_DEFAULT_DTB

if test "x${grub_cfg}" != "x"; then
rm -f "${grub_cfg}.new"
--- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in
@@ -129,6 +129,14 @@

echo " insmod gzio" | sed "s/^/$submenu_indentation/"

+ if test -n "${dtb}" ; then
+ message="$(gettext_printf "Loading devicetree ...")"
+ sed "s/^/$submenu_indentation/" << EOF
+ echo '$(echo "$message" | grub_quote)'
+ devicetree ${rel_dirname}/${dtb}
+EOF
+ fi
+
if [ x$dirname = x/ ]; then
if [ -z "${prepare_root_cache}" ]; then
prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)"
@@ -250,6 +258,14 @@
gettext_printf "Found initrd image: %s\n" "$(echo $initrd_display)" >&2
fi

+ dtb=
+ for i in "dtbs-${version}" "dtbs-${alt_version}"; do
+ if test -f "${dirname}/dtbs/${i}/${GRUB_DEFAULT_DTB}" ; then
+ dtb="dtbs/${i}/${GRUB_DEFAULT_DTB}"
+ break
+ fi
+ done
+
config=
for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
if test -e "${i}" ; then
31 changes: 31 additions & 0 deletions srcpkgs/grub-cereus/patches/revert-fwsetup-2.12.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
grub 2.12 introduced the `--is-supported` argument for fwsetup, and runs it for
efi systems to determine whether to show the uefi-firmware menu item.

The problem is that grub 2.06 does not support the `--is-supported` flag yet,
and calling it just crashes grub, causing the machine to reboot.

Showing a menu entry for uefi-firmware that may not work is infinitely better
than crashing and preventing the machine to boot, so remove the condition and
always show the menu entry.

See also: https://bugs.archlinux.org/task/75701

diff --git a/util/grub.d/30_uefi-firmware.in b/util/grub.d/30_uefi-firmware.in
index 1c2365d..b6041b5 100644
--- a/util/grub.d/30_uefi-firmware.in
+++ b/util/grub.d/30_uefi-firmware.in
@@ -32,11 +32,8 @@ gettext_printf "Adding boot menu entry for UEFI Firmware Settings ...\n" >&2

cat << EOF
if [ "\$grub_platform" = "efi" ]; then
- fwsetup --is-supported
- if [ "\$?" = 0 ]; then
- menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' {
- fwsetup
- }
- fi
+ menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' {
+ fwsetup
+ }
fi
EOF
60 changes: 60 additions & 0 deletions srcpkgs/grub-cereus/patches/xfs.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
fixes "unknown filesystem" error when installing grub on a system that
uses XFS for /boot.

From 68dd65cfdaad08b1f8ec01b84949b0bf88bc0d8c Mon Sep 17 00:00:00 2001
From: Jon DeVree <nuxi@vault24.org>
Date: Sun, 11 Feb 2024 10:34:58 -0500
Subject: [PATCH] fs/xfs: Handle non-continuous data blocks in directory
extents

The directory extent list does not have to be a continuous list of data
blocks. When GRUB tries to read a non-existant member of the list,
grub_xfs_read_file() will return a block of zero'ed memory. Checking for
a zero'ed magic number is sufficient to skip this non-existant data block.

Prior to commit 07318ee7e (fs/xfs: Fix XFS directory extent parsing)
this was handled as a subtle side effect of reading the (non-existant)
tail data structure. Since the block was zero'ed the computation of the
number of directory entries in the block would return 0 as well.

Fixes: 07318ee7e (fs/xfs: Fix XFS directory extent parsing)
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2254370

Signed-off-by: Jon DeVree <nuxi@vault24.org>
Reviewed-By: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
---
grub-core/fs/xfs.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c
index bc2224dbb..8e02ab4a3 100644
--- a/grub-core/fs/xfs.c
+++ b/grub-core/fs/xfs.c
@@ -902,6 +902,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
grub_xfs_first_de(dir->data, dirblock);
int entries = -1;
char *end = dirblock + dirblk_size;
+ grub_uint32_t magic;

numread = grub_xfs_read_file (dir, 0, 0,
blk << dirblk_log2,
@@ -912,6 +913,15 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
return 0;
}

+ /*
+ * If this data block isn't actually part of the extent list then
+ * grub_xfs_read_file() returns a block of zeros. So, if the magic
+ * number field is all zeros then this block should be skipped.
+ */
+ magic = *(grub_uint32_t *)(void *) dirblock;
+ if (!magic)
+ continue;
+
/*
* Leaf and tail information are only in the data block if the number
* of extents is 1.
--
2.44.0

62 changes: 0 additions & 62 deletions srcpkgs/grub-cereus/patches/xx-e2fsprogs-1.patch

This file was deleted.

60 changes: 0 additions & 60 deletions srcpkgs/grub-cereus/patches/xx-e2fsprogs-2.patch

This file was deleted.

10 changes: 7 additions & 3 deletions srcpkgs/grub-cereus/template
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Template file for 'grub-cereus'
pkgname=grub-cereus
version=2.06
revision=2
version=2.12
revision=1
hostmakedepends="python3 pkg-config flex freetype-devel font-unifont-bdf help2man
automake gettext-devel-tools"
makedepends="libusb-compat-devel ncurses-devel freetype-devel
Expand All @@ -14,8 +14,9 @@ short_desc="GRand Unified Bootloader 2"
maintainer="Kevin Figueroa <kfdevart@disroot.org>"
license="GPL-3.0-or-later"
homepage="https://www.gnu.org/software/grub/"
changelog="https://git.savannah.gnu.org/cgit/grub.git/plain/NEWS"
distfiles="${GNU_SITE}/grub/grub-${version}.tar.xz"
checksum=b79ea44af91b93d17cd3fe80bdae6ed43770678a9a5ae192ccea803ebb657ee1
checksum=f3c97391f7c4eaa677a78e090c7e97e6dc47b16f655f04683ebd37bef7fe0faa

archs="i686* x86_64* aarch64* ppc ppc-musl ppc64*"
nopie=yes
Expand Down Expand Up @@ -48,6 +49,9 @@ esac

pre_configure() {
autoreconf -fi

# XXX: empty file missing from 2.12 release
touch grub-core/extra_deps.lst
}

do_configure() {
Expand Down

0 comments on commit 6fa69de

Please sign in to comment.