mirror of
https://github.com/Antynea/grub-btrfs.git
synced 2026-03-04 21:15:02 +08:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f22fd8630 | ||
|
|
88a0320d62 | ||
|
|
87b816345b | ||
|
|
d68fdf5fff | ||
|
|
87168d2d50 | ||
|
|
a437b80a35 |
@@ -115,6 +115,13 @@ else
|
||||
LINUX_ROOT_DEVICE=UUID=${root_uuid}
|
||||
fi
|
||||
}
|
||||
## Detect rootflags
|
||||
detect_rootflags()
|
||||
{
|
||||
local fstabflags=$(grep -oE '^\s*[^#][[:graph:]]+\s+/\s+btrfs\s+[[:graph:]]+' "${gbgmp}/${snap_dir_name}/etc/fstab" \
|
||||
| sed -E 's/^.*[[:space:]]([[:graph:]]+)$/\1/;s/,?subvol(id)?=[^,$]+//g;s/^,//')
|
||||
rootflags="rootflags=${fstabflags:+$fstabflags,}${GRUB_BTRFS_ROOTFLAGS:+$GRUB_BTRFS_ROOTFLAGS,}"
|
||||
}
|
||||
|
||||
### Error Handling
|
||||
print_error()
|
||||
@@ -183,7 +190,7 @@ make_menu_entries()
|
||||
fi
|
||||
echo 'Loading Snapshot: "${snap_date_time}" "${snap_dir_name}"'
|
||||
echo 'Loading Kernel: "${k}" ...'
|
||||
linux \"${boot_dir_root_grub}/"${k}"\" root="${LINUX_ROOT_DEVICE}" rw ${kernel_parameters} rootflags=subvol=\""${snap_dir_name}"\""
|
||||
linux \"${boot_dir_root_grub}/"${k}"\" root="${LINUX_ROOT_DEVICE}" ${kernel_parameters} ${rootflags}subvol=\""${snap_dir_name}"\""
|
||||
if [[ "${name_microcode}" != "x" ]] ; then
|
||||
entry "\
|
||||
echo 'Loading Microcode & Initramfs: "${u}" "${i}" ...'
|
||||
@@ -417,6 +424,8 @@ boot_bounded()
|
||||
detect_kernel
|
||||
if [ -z "${list_kernel}" ]; then continue; fi
|
||||
name_kernel=("${list_kernel[@]##*"/"}")
|
||||
# Detect rootflags
|
||||
detect_rootflags
|
||||
# Initramfs (Original + custom initramfs)
|
||||
detect_initramfs
|
||||
if [ -z "${list_initramfs}" ]; then continue; fi
|
||||
@@ -472,6 +481,8 @@ boot_separate()
|
||||
snap_dir_name="$(trim "$snap_dir_name")"
|
||||
snap_date_time="$(echo "$item" | cut -d' ' -f1-2)"
|
||||
snap_date_time="$(trim "$snap_date_time")"
|
||||
# Detect rootflags
|
||||
detect_rootflags
|
||||
# show snapshot found during run "grub-mkconfig"
|
||||
if [[ "${GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND:-"true"}" = "true" ]]; then
|
||||
printf "Found snapshot: %s\n" "$item" >&2 ;
|
||||
|
||||
60
Makefile
60
Makefile
@@ -1,10 +1,12 @@
|
||||
PKGNAME ?= grub-btrfs
|
||||
PREFIX ?= /usr
|
||||
|
||||
INITCPIO ?= false
|
||||
|
||||
SHARE_DIR = $(DESTDIR)$(PREFIX)/share
|
||||
LIB_DIR = $(DESTDIR)$(PREFIX)/lib
|
||||
|
||||
.PHONY: install
|
||||
.PHONY: install uninstall help
|
||||
|
||||
install:
|
||||
@install -Dm755 -t "$(DESTDIR)/etc/grub.d/" 41_snapshots-btrfs
|
||||
@@ -12,20 +14,50 @@ install:
|
||||
@install -Dm644 -t "$(LIB_DIR)/systemd/system/" grub-btrfs.service
|
||||
@install -Dm644 -t "$(LIB_DIR)/systemd/system/" grub-btrfs.path
|
||||
@install -Dm644 -t "$(SHARE_DIR)/licenses/$(PKGNAME)/" LICENSE
|
||||
@install -Dm644 "initramfs/Arch Linux/overlay_snap_ro-install" "$(LIB_DIR)/initcpio/install/grub-btrfs-overlayfs" # Arch Linux only
|
||||
@install -Dm644 "initramfs/Arch Linux/overlay_snap_ro-hook" "$(LIB_DIR)/initcpio/hooks/grub-btrfs-overlayfs" # Arch Linux only
|
||||
@# Arch Linux like distros only :
|
||||
@if test "$(INITCPIO)" = true; then \
|
||||
install -Dm644 "initramfs/Arch Linux/overlay_snap_ro-install" "$(LIB_DIR)/initcpio/install/grub-btrfs-overlayfs"; \
|
||||
install -Dm644 "initramfs/Arch Linux/overlay_snap_ro-hook" "$(LIB_DIR)/initcpio/hooks/grub-btrfs-overlayfs"; \
|
||||
fi
|
||||
@install -Dm644 -t "$(SHARE_DIR)/doc/$(PKGNAME)/" README.md
|
||||
@install -Dm644 "initramfs/readme.md" "$(SHARE_DIR)/doc/$(PKGNAME)/initramfs-overlayfs.md"
|
||||
|
||||
uninstall:
|
||||
rm -f "$(DESTDIR)/etc/grub.d/41_snapshots-btrfs"
|
||||
rm -f "$(DESTDIR)/etc/default/grub-btrfs/config"
|
||||
rm -f "$(LIB_DIR)/systemd/system/grub-btrfs.service"
|
||||
rm -f "$(LIB_DIR)/systemd/system/grub-btrfs.path"
|
||||
rm -f "$(SHARE_DIR)/licenses/$(PKGNAME)/LICENSE"
|
||||
rm -f "$(DESTDIR)/boot/grub/grub-btrfs.cfg"
|
||||
rm -f "$(LIB_DIR)/initcpio/install/grub-btrfs-overlayfs" # Arch Linux only
|
||||
rm -f "$(LIB_DIR)/initcpio/hooks/grub-btrfs-overlayfs" # Arch Linux only
|
||||
rm -rf "$(SHARE_DIR)/doc/$(PKGNAME)/" README.md
|
||||
rm -rf "$(SHARE_DIR)/doc/$(PKGNAME)/initramfs-overlayfs.md"
|
||||
rmdir --ignore-fail-on-non-empty "$(DESTDIR)/etc/default/grub-btrfs"
|
||||
@grub_dirname="$$(grep -oP '^[[:space:]]*GRUB_BTRFS_GRUB_DIRNAME=\K.*' "$(DESTDIR)/etc/default/grub-btrfs/config" | sed "s|\s*#.*||;s|(\s*\(.\+\)\s*)|\1|;s|['\"]||g")"; \
|
||||
rm -f "$${grub_dirname:-/boot/grub}/grub-btrfs.cfg"
|
||||
@rm -f "$(DESTDIR)/etc/default/grub-btrfs/config"
|
||||
@rm -f "$(DESTDIR)/etc/grub.d/41_snapshots-btrfs"
|
||||
@rm -f "$(LIB_DIR)/systemd/system/grub-btrfs.service"
|
||||
@rm -f "$(LIB_DIR)/systemd/system/grub-btrfs.path"
|
||||
@rm -f "$(LIB_DIR)/initcpio/install/grub-btrfs-overlayfs"
|
||||
@rm -f "$(LIB_DIR)/initcpio/hooks/grub-btrfs-overlayfs"
|
||||
@# Arch Linux UNlike distros only :
|
||||
@if test "$(INITCPIO)" != true && test -d "$(LIB_DIR)/initcpio"; then \
|
||||
rmdir --ignore-fail-on-non-empty "$(LIB_DIR)/initcpio/install" || :; \
|
||||
rmdir --ignore-fail-on-non-empty "$(LIB_DIR)/initcpio/hooks" || :; \
|
||||
rmdir --ignore-fail-on-non-empty "$(LIB_DIR)/initcpio" || :; \
|
||||
fi
|
||||
@rm -f "$(SHARE_DIR)/doc/$(PKGNAME)/README.md"
|
||||
@rm -f "$(SHARE_DIR)/doc/$(PKGNAME)/initramfs-overlayfs.md"
|
||||
@rm -f "$(SHARE_DIR)/licenses/$(PKGNAME)/LICENSE"
|
||||
@rmdir --ignore-fail-on-non-empty "$(SHARE_DIR)/doc/$(PKGNAME)/" || :
|
||||
@rmdir --ignore-fail-on-non-empty "$(SHARE_DIR)/licenses/$(PKGNAME)/" || :
|
||||
@rmdir --ignore-fail-on-non-empty "$(DESTDIR)/etc/default/grub-btrfs" || :
|
||||
|
||||
help:
|
||||
@echo
|
||||
@echo "Usage: $(MAKE) [ <parameter>=<value> ... ] [ <action> ]"
|
||||
@echo
|
||||
@echo " actions: install"
|
||||
@echo " uninstall"
|
||||
@echo " help"
|
||||
@echo
|
||||
@echo " parameter | type | description | defaults"
|
||||
@echo " ----------+------+--------------------------------+----------------------------"
|
||||
@echo " DESTDIR | path | install destination | <unset>"
|
||||
@echo " PREFIX | path | system tree prefix | '/usr'"
|
||||
@echo " SHARE_DIR | path | shared data location | '\$$(DESTDIR)\$$(PREFIX)/share'"
|
||||
@echo " LIB_DIR | path | system libraries location | '\$$(DESTDIR)\$$(PREFIX)/lib'"
|
||||
@echo " PKGNAME | name | name of the ditributed package | 'grub-btrfs'"
|
||||
@echo " INITCPIO | bool | include mkinitcpio hook | false"
|
||||
@echo
|
||||
|
||||
@@ -68,6 +68,10 @@ If you would like Grub to automatically update when a snapshot is made or delete
|
||||
and finally save.
|
||||
* You can view your change to `systemctl cat grub-btrfs.path`.
|
||||
* To revert change use `systemctl revert grub-btrfs.path`.
|
||||
##### Warning:
|
||||
by default, `grub-mkconfig` command is used.
|
||||
Might be `grub2-mkconfig` on some systems (Fedora ...).
|
||||
Edit `GRUB_BTRFS_MKCONFIG` variable in `/etc/default/grub-btrfs/config` file to reflect this.
|
||||
##
|
||||
### Special thanks for assistance and contributions
|
||||
* [maximbaz](https://github.com/maximbaz)
|
||||
|
||||
17
config
17
config
@@ -54,6 +54,14 @@
|
||||
# Default: ("")
|
||||
#GRUB_BTRFS_CUSTOM_MICROCODE=("custom-ucode.img" "custom-uc.img "custom_ucode.cpio")
|
||||
|
||||
# Comma seperated mount options to be used when booting a snapshot.
|
||||
# They can be defined here as well as in the "/" line inside the respective snapshots'
|
||||
# "/etc/fstab" files. Mount options found in both places are combined, and this variable
|
||||
# takes priority over `fstab` entries.
|
||||
# NB: Do NOT include "subvol=..." or "subvolid=..." here.
|
||||
# Default: ""
|
||||
#GRUB_BTRFS_ROOTFLAGS="space_cache,commit=10,norecovery"
|
||||
|
||||
# Ignore specific path during run "grub-mkconfig".
|
||||
# Only exact paths are ignored.
|
||||
# e.g : if `specific path` = @, only `@` snapshot will be ignored.
|
||||
@@ -85,10 +93,13 @@ GRUB_BTRFS_IGNORE_PREFIX_PATH=("var/lib/docker" "@var/lib/docker" "@/var/lib/doc
|
||||
# Default: "/boot"
|
||||
#GRUB_BTRFS_BOOT_DIRNAME="/boot"
|
||||
|
||||
# Name/path of grub-mkconfig, use by "grub-btrfs.service"
|
||||
# Might be 'grub2-mkconfig' on some systems
|
||||
# Name/path of grub-mkconfig command, use by "grub-btrfs.service"
|
||||
# Might be 'grub2-mkconfig' on some systems (Fedora ...)
|
||||
# Default paths are /sbin:/bin:/usr/sbin:/usr/bin,
|
||||
# if your path is missing, report it on the upstream project.
|
||||
# For example, on Fedora : "/sbin/grub2-mkconfig"
|
||||
# Default: /usr/bin/grub-mkconfig
|
||||
# You can use only name or full path.
|
||||
# Default: grub-mkconfig
|
||||
#GRUB_BTRFS_MKCONFIG=/usr/bin/grub2-mkconfig
|
||||
|
||||
# Snapper
|
||||
|
||||
@@ -8,4 +8,4 @@ Environment="PATH=/sbin:/bin:/usr/sbin:/usr/bin"
|
||||
# Load environment variables from the configuration
|
||||
EnvironmentFile=/etc/default/grub-btrfs/config
|
||||
# Regenerate just '/boot/grub/grub-btrfs.cfg' if it exists and is not empty, else regenerate the whole grub menu
|
||||
ExecStart=/bin/bash -c 'if [ -s "${GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub-btrfs.cfg" ]; then /etc/grub.d/41_snapshots-btrfs; else ${GRUB_BTRFS_MKCONFIG:-/usr/bin/grub-mkconfig} -o ${GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub.cfg; fi'
|
||||
ExecStart=bash -c 'if [ -s "${GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub-btrfs.cfg" ]; then /etc/grub.d/41_snapshots-btrfs; else ${GRUB_BTRFS_MKCONFIG:-grub-mkconfig} -o ${GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub.cfg; fi'
|
||||
|
||||
Reference in New Issue
Block a user