From 13a7186aaf8f6071047d047e45409bd0f1f8ac16 Mon Sep 17 00:00:00 2001 From: Crafter6432 Date: Sat, 30 Jun 2018 14:46:30 +0200 Subject: [PATCH] Add systemd.path as option to monitor for new Snapshots (#53) * Use systemd.path to regenerate grub-btrfs.cfg * Added option GRUB_BTRFS_DIRNAME * Updated README --- 41_snapshots-btrfs | 16 +++++++++------- 41_snapshots-btrfs_config | 1 + README.md | 6 ++++++ grub-btrfs.path | 8 ++++++++ grub-btrfs.service | 10 ++++++++++ 5 files changed, 34 insertions(+), 7 deletions(-) create mode 100755 grub-btrfs.path create mode 100755 grub-btrfs.service diff --git a/41_snapshots-btrfs b/41_snapshots-btrfs index ff770ff..3fedaf4 100755 --- a/41_snapshots-btrfs +++ b/41_snapshots-btrfs @@ -20,7 +20,7 @@ # - Refer 41_snapshots-btrfs_config for the list of available options and their default values. # - Place your configurations to either /etc/grub.d/41_snapshots-btrfs_config or /etc/default/grub. # -# - Generate grub.cfg (on Arch Linux use grub-mkconfig -o /boot/grub/grub.cfg) +# - Generate grub.cfg (on Arch Linux use grub-mkconfig -o /boot/$grub_directory/grub.cfg) # # - grub-btrfs automatically generates snapshots entries. # - You will see it appear different entries (e.g : Snapshot: [2014-02-12 11:24:37] my snapshot name overkill) @@ -86,6 +86,8 @@ ignore_specific_path=("${GRUB_BTRFS_IGNORE_SPECIFIC_PATH[@]}") ## snapper's config name snapper_config=${GRUB_BTRFS_SNAPPER_CONFIG:-"root"} +grub_directory=${GRUB_BTRFS_DIRNAME:-"grub"} + ######################## ### variables script ### ######################## @@ -147,10 +149,10 @@ test_btrfs() ## Create entry entry() { -echo "$@" >> "/boot/grub/grub-btrfs.cfg" +echo "$@" >> "/boot/$grub_directory/grub-btrfs.cfg" # local arg="$@" -# echo "${arg}" >> "/boot/grub/grub-btrfs.cfg" -# cat << EOF >> "/boot/grub/grub-btrfs.cfg" +# echo "${arg}" >> "/boot/$grub_directory/grub-btrfs.cfg" +# cat << EOF >> "/boot/$grub_directory/grub-btrfs.cfg" # ${arg} # EOF } @@ -492,8 +494,8 @@ printf "###### - Grub-btrfs: Snapshot detection started - ######\n" >&2 ; # if btrfs prog isn't installed, exit test_btrfs # Delete existing config -#rm -f --preserve-root "/boot/grub/grub-btrfs.cfg" -> "/boot/grub/grub-btrfs.cfg" +#rm -f --preserve-root "/boot/$grub_directory/grub-btrfs.cfg" +> "/boot/$grub_directory/grub-btrfs.cfg" # Create mount point then mounting [[ ! -d $gbgmp ]] && mkdir -p $gbgmp mount -o subvolid=5 /dev/disk/by-uuid/$root_uuid $gbgmp/ @@ -524,7 +526,7 @@ fi if [[ "${count_limit_snap}" = "0" || -z "${count_limit_snap}" ]]; then print_error "No snapshots found." fi -root_grub="$(make_system_path_relative_to_its_root /boot/grub)" +root_grub="$(make_system_path_relative_to_its_root /boot/$grub_directory)" # Make a submenu in GRUB (grub.cfg) cat << EOF submenu '${submenuname}' { diff --git a/41_snapshots-btrfs_config b/41_snapshots-btrfs_config index 18c5057..14b02df 100644 --- a/41_snapshots-btrfs_config +++ b/41_snapshots-btrfs_config @@ -14,3 +14,4 @@ # GRUB_BTRFS_IGNORE_SPECIFIC_PATH=("var/lib/docker") # Ignore specific path during run "grub-mkconfig" # GRUB_BTRFS_SNAPPER_CONFIG="root" # Snapper's config name to use # GRUB_BTRFS_DISABLE="false" # Disable Grub-btrfs +# GRUB_BTRFS_DIRNAME=grub # Might be grub2 on some systems ex. /boot/grub2/... diff --git a/README.md b/README.md index 78e33f7..45b54f3 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,10 @@ Add this lines to /etc/default/grub: (Disable grub-btrfs) +* GRUB_BTRFS_DIRNAME="grub" + + (Name of the grub folder on /boot/) + Generate grub.cfg (on Arch linux use grub-mkconfig -o /boot/grub/grub.cfg ) @@ -100,6 +104,8 @@ If you would like grub to automatically update when Snapper timeline snapshots a - `/etc/systemd/system/snapper-timeline.service.d/` - `/etc/systemd/system/snapper-cleanup.service.d/` +Or copy `grub-btrfs.path` and `grub-btrfs.service` to `/etc/systemd/system/` + Once the configuration files are in place, `systemctl daemon-reload` should be run to reload the units and make the changes active. ## diff --git a/grub-btrfs.path b/grub-btrfs.path new file mode 100755 index 0000000..205a4d3 --- /dev/null +++ b/grub-btrfs.path @@ -0,0 +1,8 @@ +[Unit] +Description=Monitors for new snapshots + +[Path] +PathModified=/.snapshots + +[Install] +WantedBy=multi-user.target diff --git a/grub-btrfs.service b/grub-btrfs.service new file mode 100755 index 0000000..94646a8 --- /dev/null +++ b/grub-btrfs.service @@ -0,0 +1,10 @@ +[Unit] +Description=Regenerate grub-btrfs.cfg + +[Service] +Type=oneshot +#Inital setup +EnvironmentFile=/etc/grub.d/41_snapshots-btrfs_config +ExecStartPre=-/bin/bash -c '[ ! -f "/boot/${GRUB_BTRFS_DIRNAME:-grub}/grub-btrfs.cfg" ] && grub2-mkconfig -o /boot/${GRUB_BTRFS_DIRNAME:-grub}/grub.cfg' +#Regenerate grub-btrfs.cfg instead of the whole grub menu +ExecStart=/etc/grub.d/41_snapshots-btrfs