From d8263902d530d7cbf6d52160068a45b79658b505 Mon Sep 17 00:00:00 2001 From: Benedikt Brinkmann Date: Sun, 18 Feb 2024 18:14:58 +0100 Subject: [PATCH] grub: update to 2.12. --- .../grub/patches/revert-fwsetup-2.12.patch | 31 ++++++++++ srcpkgs/grub/patches/xfs.patch | 60 ++++++++++++++++++ srcpkgs/grub/patches/xx-e2fsprogs-1.patch | 62 ------------------- srcpkgs/grub/patches/xx-e2fsprogs-2.patch | 60 ------------------ srcpkgs/grub/template | 13 ++-- 5 files changed, 99 insertions(+), 127 deletions(-) create mode 100644 srcpkgs/grub/patches/revert-fwsetup-2.12.patch create mode 100644 srcpkgs/grub/patches/xfs.patch delete mode 100644 srcpkgs/grub/patches/xx-e2fsprogs-1.patch delete mode 100644 srcpkgs/grub/patches/xx-e2fsprogs-2.patch diff --git a/srcpkgs/grub/patches/revert-fwsetup-2.12.patch b/srcpkgs/grub/patches/revert-fwsetup-2.12.patch new file mode 100644 index 00000000000000..85ba31dd5ac5b4 --- /dev/null +++ b/srcpkgs/grub/patches/revert-fwsetup-2.12.patch @@ -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 diff --git a/srcpkgs/grub/patches/xfs.patch b/srcpkgs/grub/patches/xfs.patch new file mode 100644 index 00000000000000..6982be08f66720 --- /dev/null +++ b/srcpkgs/grub/patches/xfs.patch @@ -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 +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 +Reviewed-By: Vladimir Serbinenko +Reviewed-by: Daniel Kiper +--- + 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 + diff --git a/srcpkgs/grub/patches/xx-e2fsprogs-1.patch b/srcpkgs/grub/patches/xx-e2fsprogs-1.patch deleted file mode 100644 index 5cd83273be1a59..00000000000000 --- a/srcpkgs/grub/patches/xx-e2fsprogs-1.patch +++ /dev/null @@ -1,62 +0,0 @@ -Patch-Source: https://git.savannah.gnu.org/cgit/grub.git/commit/?id=7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 -useful because e2fsprogs 1.47 defaults to this enabled, and grub won't touch it --- -From 7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 Mon Sep 17 00:00:00 2001 -From: Javier Martinez Canillas -Date: Fri, 11 Jun 2021 21:36:16 +0200 -Subject: fs/ext2: Ignore checksum seed incompat feature - -This incompat feature is used to denote that the filesystem stored its -metadata checksum seed in the superblock. This is used to allow tune2fs -changing the UUID on a mounted metdata_csum filesystem without having -to rewrite all the disk metadata. However, the GRUB doesn't use the -metadata checksum at all. So, it can just ignore this feature if it -is enabled. This is consistent with the GRUB filesystem code in general -which just does a best effort to access the filesystem's data. - -The checksum seed incompat feature has to be removed from the ignore -list if the support for metadata checksum verification is added to the -GRUB ext2 driver later. - -Suggested-by: Eric Sandeen -Suggested-by: Lukas Czerner -Signed-off-by: Javier Martinez Canillas -Reviewed-by: Lukas Czerner -Reviewed-by: Daniel Kiper ---- - grub-core/fs/ext2.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c -index e7dd78e..4953a15 100644 ---- a/grub-core/fs/ext2.c -+++ b/grub-core/fs/ext2.c -@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+"); - #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 - #define EXT4_FEATURE_INCOMPAT_MMP 0x0100 - #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 -+#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000 - #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000 - - /* The set of back-incompatible features this driver DOES support. Add (OR) -@@ -123,10 +124,15 @@ GRUB_MOD_LICENSE ("GPLv3+"); - * mmp: Not really back-incompatible - was added as such to - * avoid multiple read-write mounts. Safe to ignore for this - * RO driver. -+ * checksum seed: Not really back-incompatible - was added to allow tools -+ * such as tune2fs to change the UUID on a mounted metadata -+ * checksummed filesystem. Safe to ignore for now since the -+ * driver doesn't support checksum verification. However, it -+ * has to be removed from this list if the support is added later. - */ - #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \ -- | EXT4_FEATURE_INCOMPAT_MMP) -- -+ | EXT4_FEATURE_INCOMPAT_MMP \ -+ | EXT4_FEATURE_INCOMPAT_CSUM_SEED) - - #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U - --- -cgit v1.1 - diff --git a/srcpkgs/grub/patches/xx-e2fsprogs-2.patch b/srcpkgs/grub/patches/xx-e2fsprogs-2.patch deleted file mode 100644 index 7e02e2087799ff..00000000000000 --- a/srcpkgs/grub/patches/xx-e2fsprogs-2.patch +++ /dev/null @@ -1,60 +0,0 @@ -Patch-Source: https://git.savannah.gnu.org/cgit/grub.git/patch/?id=2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b -useful to support the large_dir ext4 feature --- -From 2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b Mon Sep 17 00:00:00 2001 -From: Theodore Ts'o -Date: Tue, 30 Aug 2022 22:41:59 -0400 -Subject: fs/ext2: Ignore the large_dir incompat feature - -Recently, ext4 added the large_dir feature, which adds support for -a 3 level htree directory support. - -The GRUB supports existing file systems with htree directories by -ignoring their existence, and since the index nodes for the hash tree -look like deleted directory entries (by design), the GRUB can simply do -a brute force O(n) linear search of directories. The same is true for -3 level deep htrees indicated by large_dir feature flag. - -Hence, it is safe for the GRUB to ignore the large_dir incompat feature. - -Fixes: https://savannah.gnu.org/bugs/?61606 - -Signed-off-by: Theodore Ts'o -Reviewed-by: Daniel Kiper ---- - grub-core/fs/ext2.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c -index 0989e26..e1cc5e6 100644 ---- a/grub-core/fs/ext2.c -+++ b/grub-core/fs/ext2.c -@@ -104,6 +104,7 @@ GRUB_MOD_LICENSE ("GPLv3+"); - #define EXT4_FEATURE_INCOMPAT_MMP 0x0100 - #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 - #define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000 -+#define EXT4_FEATURE_INCOMPAT_LARGEDIR 0x4000 /* >2GB or 3 level htree */ - #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000 - - /* The set of back-incompatible features this driver DOES support. Add (OR) -@@ -129,10 +130,17 @@ GRUB_MOD_LICENSE ("GPLv3+"); - * checksummed filesystem. Safe to ignore for now since the - * driver doesn't support checksum verification. However, it - * has to be removed from this list if the support is added later. -+ * large_dir: Not back-incompatible given that the GRUB ext2 driver does -+ * not implement EXT2_FEATURE_COMPAT_DIR_INDEX. If the GRUB -+ * eventually supports the htree feature (aka dir_index) -+ * it should support 3 level htrees and then move -+ * EXT4_FEATURE_INCOMPAT_LARGEDIR to -+ * EXT2_DRIVER_SUPPORTED_INCOMPAT. - */ - #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \ - | EXT4_FEATURE_INCOMPAT_MMP \ -- | EXT4_FEATURE_INCOMPAT_CSUM_SEED) -+ | EXT4_FEATURE_INCOMPAT_CSUM_SEED \ -+ | EXT4_FEATURE_INCOMPAT_LARGEDIR) - - #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U - --- -cgit v1.1 diff --git a/srcpkgs/grub/template b/srcpkgs/grub/template index 7294fa503f3a73..95c56d1ce32107 100644 --- a/srcpkgs/grub/template +++ b/srcpkgs/grub/template @@ -1,11 +1,11 @@ # Template file for 'grub' pkgname=grub -version=2.06 -revision=3 +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 - liblzma-devel device-mapper-devel fuse-devel" +makedepends="libusb-compat-devel ncurses-devel freetype-devel liblzma-devel + device-mapper-devel fuse-devel" depends="os-prober" conf_files="/etc/default/grub /etc/grub.d/*" short_desc="GRand Unified Bootloader 2" @@ -13,7 +13,7 @@ maintainer="Orphaned " license="GPL-3.0-or-later" homepage="https://www.gnu.org/software/grub/" distfiles="${GNU_SITE}/grub/grub-${version}.tar.xz" -checksum=b79ea44af91b93d17cd3fe80bdae6ed43770678a9a5ae192ccea803ebb657ee1 +checksum=f3c97391f7c4eaa677a78e090c7e97e6dc47b16f655f04683ebd37bef7fe0faa archs="i686* x86_64* aarch64* ppc ppc-musl ppc64*" nopie=yes @@ -46,6 +46,9 @@ esac pre_configure() { autoreconf -fi + + # Required to fix 2.12 build - (empty) file is missing from release + touch $XBPS_BUILDDIR/grub-${version}/grub-core/extra_deps.lst } do_configure() {