Name: grub-btrfs Version: 4.14 Release: 2%{?dist} Summary: Include btrfs snapshots in GRUB boot menu (auto-update on snapshot change) License: GPL-3.0-or-later URL: https://github.com/Antynea/grub-btrfs Source0: https://github.com/Antynea/grub-btrfs/archive/v%{version}.tar.gz # Fedora/RHEL: daemon tuned like Arch extra/grub-btrfs + upstream README (inotify + /.snapshots) Source1: grub-btrfsd.service.fedora Source2: 90-grub-btrfs.preset BuildArch: noarch Requires: grub2 Requires: btrfs-progs Requires: bash Requires: gawk # grub-btrfsd uses inotifywait — same as Arch README / manual install Requires: inotify-tools %description grub-btrfs improves GRUB by automatically adding btrfs snapshots to the boot menu. You can boot your system from a snapshot directly from the GRUB menu.. %prep %autosetup -n grub-btrfs-%{version} # Fedora/RHEL paths in config (grub2-mkconfig, /boot/grub2) sed -i 's|^#GRUB_BTRFS_GRUB_DIRNAME=.*|GRUB_BTRFS_GRUB_DIRNAME="/boot/grub2"|' config sed -i 's|^#GRUB_BTRFS_MKCONFIG=.*|GRUB_BTRFS_MKCONFIG=/usr/bin/grub2-mkconfig|' config sed -i 's|^#GRUB_BTRFS_SCRIPT_CHECK=.*|GRUB_BTRFS_SCRIPT_CHECK=grub2-script-check|' config %build : %install install -Dm644 manpages/grub-btrfs.8.man %{buildroot}%{_mandir}/man8/grub-btrfs.8 install -Dm644 manpages/grub-btrfsd.8.man %{buildroot}%{_mandir}/man8/grub-btrfsd.8 install -Dm755 41_snapshots-btrfs %{buildroot}%{_sysconfdir}/grub.d/41_snapshots-btrfs install -Dm644 config %{buildroot}%{_sysconfdir}/default/grub-btrfs/config install -Dm755 grub-btrfsd %{buildroot}%{_bindir}/grub-btrfsd install -Dm644 %{SOURCE1} %{buildroot}%{_unitdir}/grub-btrfsd.service install -Dm644 %{SOURCE2} %{buildroot}%{_prefix}/lib/systemd/system-preset/90-grub-btrfs.preset install -Dm644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE install -Dm644 README.md %{buildroot}%{_datadir}/doc/%{name}/README.md install -Dm644 initramfs/readme.md %{buildroot}%{_datadir}/doc/%{name}/initramfs-overlayfs.md install -Dm644 %{SOURCE3} %{buildroot}%{_datadir}/doc/%{name}/GRUB-BTRFSD-SNAPSHOTS.md %files %license %{_datadir}/licenses/%{name}/LICENSE %doc %{_datadir}/doc/%{name}/README.md %doc %{_datadir}/doc/%{name}/initramfs-overlayfs.md %config(noreplace) %{_sysconfdir}/default/grub-btrfs/config %{_sysconfdir}/grub.d/41_snapshots-btrfs %{_bindir}/grub-btrfsd %{_unitdir}/grub-btrfsd.service %{_prefix}/lib/systemd/system-preset/90-grub-btrfs.preset %{_mandir}/man8/grub-btrfs.8* %{_mandir}/man8/grub-btrfsd.8* %post if [ -x /usr/bin/grub2-mkconfig ] && [ -d /boot/grub2 ]; then if [ -f /boot/grub2/grub.cfg ]; then /usr/bin/grub2-mkconfig -o /boot/grub2/grub.cfg 2>/dev/null || true fi for efi_cfg in /boot/efi/EFI/*/grub.cfg /boot/efi/EFI/BOOT/grub.cfg; do if [ -f "$efi_cfg" ]; then grub2-mkconfig -o "$efi_cfg" 2>/dev/null || true fi done fi if [ $1 -eq 1 ]; then %systemd_post grub-btrfsd.service # Enable + start so every new snapshot triggers grub2-mkconfig (same idea as Arch / upstream) systemctl enable grub-btrfsd.service >/dev/null 2>&1 || true systemctl start grub-btrfsd.service >/dev/null 2>&1 || true fi %preun if [ $1 -eq 0 ]; then %systemd_preun grub-btrfsd.service fi %postun if [ $1 -eq 0 ] && [ -x /usr/bin/grub2-mkconfig ]; then if [ -f /boot/grub2/grub.cfg ]; then /usr/bin/grub2-mkconfig -o /boot/grub2/grub.cfg 2>/dev/null || true fi for efi_cfg in /boot/efi/EFI/*/grub.cfg /boot/efi/EFI/BOOT/grub.cfg; do if [ -f "$efi_cfg" ]; then grub2-mkconfig -o "$efi_cfg" 2>/dev/null || true fi done fi %changelog * Thu Mar 12 2026 Brandon Lester - 4.14-2 - add grub-btrfs daemon * Sat Mar 07 2026 Brandon Lester - 4.14-1 - initial package