grub-btrfs: New package

This kind of grub addon will extend the grub boot menu by a additional
submenu where a BTRFS snapshot can be selected to directly use as root
volume and boot into it.

The grub-btrfsd daemon is using inotify(tools) to watch the snapshot directory for
new or deleted snapshots and calls grub-mkconfig to adjust the snapshot grub submenu

Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
This commit is contained in:
Stefan Schantl
2024-03-24 13:39:53 +01:00
committed by Arne Fitzenreiter
parent 32d81fdc2e
commit a6d5b71f2c
6 changed files with 162 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
#!/bin/sh
###############################################################################
# #
# IPFire.org - A linux based firewall #
# Copyright (C) 2007-2024 IPFire Team <info@ipfire.org> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
# #
###############################################################################
. /etc/sysconfig/rc
. ${rc_functions}
SNAPSHOTDIR="/.snapshots"
PIDFILE="/run/grub-btrfsd.pid"
root_is_btrfs() {
[ "$(stat -f --format="%T" /)" == "btrfs" ] || return 1
return 0
}
case "$1" in
start)
root_is_btrfs || exit 0
boot_mesg "Starting Grub/Btrfs snapshot manager..."
loadproc -b -p "$PIDFILE" /usr/bin/grub-btrfsd --syslog "$SNAPSHOTDIR"
# Store the gained PID to the defined pidfile
echo "$!" > "$PIDFILE"
;;
stop)
boot_mesg "Stopping grub-btrfsd..."
killproc -p "$PIDFILE" /usr/bin/grub-btrfsd
sleep 1;
;;
restart)
$0 stop
sleep 2
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac