It seems that I just can't stop finding weird btrfs setups that break the current script. When you use btrfs with a default subvolume, GRUB will use normal paths, like on ext4. So instead of /@/boot/vmlinuz you have /boot/vmlinuz. The issue is that grub2-mkrelpath doesn't know about that. The script would have to parse the GRUB configuration and fstab, to figure out if btrfs is used with a default subvolume, and then add a flag to the command depending on that. However, instead of adding yet another workaround, let's just forget about grubby and do what we want to do ourselves. Because, as it turns out, not taking a weird detour over the path that GRUB uses to load the kernel makes everything much easier. Since this means that we are dealing with even more filepath and string mangling, I decided to rewrite the script in python. It would work fine in bash, but it would be even more spaghetti code that I don't really want to write. And python is always available in Fedora anyway, because DNF is written in it.
95 lines
2.9 KiB
Diff
95 lines
2.9 KiB
Diff
From 81141a454f41cbc5fd41b778f85b10552c8676e8 Mon Sep 17 00:00:00 2001
|
|
From: Dorian Stoll <dorian.stoll@tmsp.io>
|
|
Date: Sat, 22 Jul 2023 10:41:11 +0200
|
|
Subject: [PATCH] Install scripts and service files for keeping the surface
|
|
kernel the default
|
|
|
|
Signed-off-by: Dorian Stoll <dorian.stoll@tmsp.io>
|
|
---
|
|
redhat/kernel.spec.template | 34 ++++++++++++++++++++++++++++++++++
|
|
1 file changed, 34 insertions(+)
|
|
|
|
diff --git a/redhat/kernel.spec.template b/redhat/kernel.spec.template
|
|
index 43dce82a9d36..28df94e561d4 100644
|
|
--- a/redhat/kernel.spec.template
|
|
+++ b/redhat/kernel.spec.template
|
|
@@ -1025,6 +1025,11 @@ Source4000: README.rst
|
|
Source4001: rpminspect.yaml
|
|
Source4002: gating.yaml
|
|
|
|
+Source4100: linux-surface-default-watchdog.path
|
|
+Source4101: linux-surface-default-watchdog.service
|
|
+Source4102: linux-surface-default-watchdog.py
|
|
+Source4103: 90-linux-surface-default-watchdog.preset
|
|
+
|
|
## Patches needed for building this package
|
|
|
|
%if !%{nopatches}
|
|
@@ -1058,6 +1063,7 @@ Requires(pre): %{initrd_prereq}\
|
|
Requires(pre): ((linux-firmware >= 20150904-56.git6ebf5d57) if linux-firmware)\
|
|
Recommends: linux-firmware\
|
|
Recommends: iptsd\
|
|
+Recommends: %{package_name}-default-watchdog\
|
|
Requires(preun): systemd >= 200\
|
|
Conflicts: xfsprogs < 4.3.0-1\
|
|
Conflicts: xorg-x11-drv-vmmouse < 13.0.99\
|
|
@@ -1072,6 +1078,14 @@ AutoProv: yes\
|
|
%{nil}
|
|
|
|
|
|
+%package default-watchdog
|
|
+Summary: Watchdog service ensuring that the surface kernel stays the default kernel.
|
|
+%description default-watchdog
|
|
+This package provides a systemd service that will automatically keep
|
|
+the surface kernel as the default kernel in GRUB, even if a newer stock
|
|
+kernel has been installed.
|
|
+
|
|
+
|
|
%package doc
|
|
Summary: Various documentation bits found in the kernel source
|
|
Group: Documentation
|
|
@@ -2945,6 +2959,11 @@ find Documentation -type d | xargs chmod u+w
|
|
|
|
cd linux-%{KVERREL}
|
|
|
|
+install -D -m644 "%{SOURCE4100}" -t "%{buildroot}%{_unitdir}"
|
|
+install -D -m644 "%{SOURCE4101}" -t "%{buildroot}%{_unitdir}"
|
|
+install -D -m755 "%{SOURCE4102}" -t "%{buildroot}%{_bindir}"
|
|
+install -D -m755 "%{SOURCE4103}" -t "%{buildroot}%{_presetdir}"
|
|
+
|
|
%if %{with_doc}
|
|
docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{specversion}-%{pkgrelease}
|
|
|
|
@@ -3197,6 +3216,15 @@ popd
|
|
### scripts
|
|
###
|
|
|
|
+%post default-watchdog
|
|
+%systemd_post linux-surface-default-watchdog.path
|
|
+
|
|
+%preun default-watchdog
|
|
+%systemd_preun linux-surface-default-watchdog.path
|
|
+
|
|
+%postun default-watchdog
|
|
+%systemd_postun_with_restart linux-surface-default-watchdog.path
|
|
+
|
|
%if %{with_tools}
|
|
%post -n %{package_name}-tools-libs
|
|
/sbin/ldconfig
|
|
@@ -3609,6 +3637,12 @@ fi\
|
|
%{_libexecdir}/kselftests
|
|
%endif
|
|
|
|
+%files default-watchdog
|
|
+%{_bindir}/linux-surface-default-watchdog.py
|
|
+%{_unitdir}/linux-surface-default-watchdog.path
|
|
+%{_unitdir}/linux-surface-default-watchdog.service
|
|
+%{_presetdir}/90-linux-surface-default-watchdog.preset
|
|
+
|
|
# empty meta-package
|
|
%if %{with_up_base}
|
|
%ifnarch %nobuildarches noarch
|
|
--
|
|
2.41.0
|
|
|