]> git.ipfire.org Git - people/stevee/ipfire-2.x.git/commitdiff
grub-btrfs: New package
authorStefan Schantl <stefan.schantl@ipfire.org>
Wed, 28 Feb 2024 17:37:21 +0000 (18:37 +0100)
committerStefan Schantl <stefan.schantl@ipfire.org>
Wed, 28 Feb 2024 17:37:21 +0000 (18:37 +0100)
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>
config/rootfiles/common/grub-btrfs [new file with mode: 0644]
config/rootfiles/common/x86_64/initscripts
lfs/grub-btrfs [new file with mode: 0644]
lfs/initscripts
make.sh
src/initscripts/system/grub-btrfsd [new file with mode: 0644]

diff --git a/config/rootfiles/common/grub-btrfs b/config/rootfiles/common/grub-btrfs
new file mode 100644 (file)
index 0000000..a612af0
--- /dev/null
@@ -0,0 +1,14 @@
+boot/grub/grubenv
+etc/default/grub-btrfs
+etc/default/grub-btrfs/config
+etc/grub.d/41_snapshots-btrfs
+usr/bin/grub-btrfsd
+#usr/lib/systemd/system/grub-btrfsd.service
+#usr/share/doc/grub-btrfs
+#usr/share/doc/grub-btrfs/README.md
+#usr/share/doc/grub-btrfs/initramfs-overlayfs.md
+#usr/share/licenses
+#usr/share/licenses/grub-btrfs
+#usr/share/licenses/grub-btrfs/LICENSE
+#usr/share/man/man8/grub-btrfs.8.bz2
+#usr/share/man/man8/grub-btrfsd.8.bz2
index a5e1596fb02f7525b7edc9f95299d30d6664ef9b..2d6fa85dce6bb82dc8ff67dab376b27bbef26ddd 100644 (file)
@@ -26,6 +26,7 @@ etc/rc.d/init.d/firewall
 etc/rc.d/init.d/firstsetup
 etc/rc.d/init.d/fsresize
 etc/rc.d/init.d/functions
+etc/rc.d/init.d/grub-btrfsd
 etc/rc.d/init.d/halt
 etc/rc.d/init.d/ipsec
 etc/rc.d/init.d/leds
@@ -92,6 +93,7 @@ etc/rc.d/init.d/vnstat
 etc/rc.d/init.d/waitdrives
 etc/rc.d/init.d/wlanclient
 #etc/rc.d/rc0.d
+etc/rc.d/rc0.d/K01grub-btrfsd
 #etc/rc.d/rc0.d/K01imspetor
 #etc/rc.d/rc0.d/K01motion
 #etc/rc.d/rc0.d/K01vdradmin
@@ -135,10 +137,12 @@ etc/rc.d/rc3.d/S32apache
 etc/rc.d/rc3.d/S40fcron
 etc/rc.d/rc3.d/S98rc.local
 #etc/rc.d/rc3.d/S98sslh
+etc/rc.d/rc3.d/S99grub-btrfsd
 #etc/rc.d/rc3.d/S99imspetor
 #etc/rc.d/rc3.d/S99motion
 #etc/rc.d/rc3.d/S99vdradmin
 #etc/rc.d/rc6.d
+etc/rc.d/rc6.d/K01grub-btrfsd
 #etc/rc.d/rc6.d/K01imspetor
 #etc/rc.d/rc6.d/K01motion
 #etc/rc.d/rc6.d/K01vdradmin
diff --git a/lfs/grub-btrfs b/lfs/grub-btrfs
new file mode 100644 (file)
index 0000000..8dc0c4f
--- /dev/null
@@ -0,0 +1,79 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2023  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/>.       #
+#                                                                             #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER        = 4.13
+
+THISAPP    = grub-btrfs-$(VER)
+DL_FILE    = $(THISAPP).tar.gz
+DL_FROM    = $(URL_IPFIRE)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_BLAKE2 = e2f11a0a8282e3ec8ff8223e3bad70b5d5c5e81b4d740a1bf3554db412dbe48a8a0f216f4e6c65ae1d11c01a27b8b92bae9b470c60d2389505ce089511536e1a
+
+install : $(TARGET)
+
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
+
+b2 : $(subst %,%_BLAKE2,$(objects))
+
+dist:
+       @$(PAK)
+
+###############################################################################
+# Downloading, checking, b2sum
+###############################################################################
+
+$(patsubst %,$(DIR_CHK)/%,$(objects)) :
+       @$(CHECK)
+
+$(patsubst %,$(DIR_DL)/%,$(objects)) :
+       @$(LOAD)
+
+$(subst %,%_BLAKE2,$(objects)) :
+       @$(B2SUM)
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+       @$(PREBUILD)
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       $(UPDATE_AUTOMAKE)
+       cd $(DIR_APP) && make install
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
index e078632ab378664fb27fffaa96843e941495c472..4d67ee0c48c47b1c3e38434ef88967100c515d75 100644 (file)
@@ -91,6 +91,7 @@ $(TARGET) :
                install -v -m 755 $$i /etc/rc.d/helper/; \
        done
 
+       ln -sf ../init.d/grub-btrfsd            /etc/rc.d/rc0.d/K01grub-btrfsd
        ln -sf ../init.d/imspetor               /etc/rc.d/rc0.d/K01imspetor
        ln -sf ../init.d/motion                 /etc/rc.d/rc0.d/K01motion
        ln -sf ../init.d/vdradmin               /etc/rc.d/rc0.d/K01vdradmin
@@ -132,10 +133,12 @@ $(TARGET) :
        ln -sf ../init.d/fcron                  /etc/rc.d/rc3.d/S40fcron
        ln -sf ../../sysconfig/rc.local         /etc/rc.d/rc3.d/S98rc.local
        ln -sf ../init.d/sslh                   /etc/rc.d/rc3.d/S98sslh
+       ln -sf ../init.d/grub-btrfsd            /etc/rc.d/rc3.d/S99grub-btrfsd
        ln -sf ../init.d/imspetor               /etc/rc.d/rc3.d/S99imspetor
        ln -sf ../init.d/motion                 /etc/rc.d/rc3.d/S99motion
        ln -sf ../init.d/vdradmin               /etc/rc.d/rc3.d/S99vdradmin
 
+       ln -sf ../init.d/grub-btrfsd            /etc/rc.d/rc6.d/K01grub-btrfsd
        ln -sf ../init.d/imspetor               /etc/rc.d/rc6.d/K01imspetor
        ln -sf ../init.d/motion                 /etc/rc.d/rc6.d/K01motion
        ln -sf ../init.d/vdradmin               /etc/rc.d/rc6.d/K01vdradmin
diff --git a/make.sh b/make.sh
index 30bd5f16b1db420e429a6440e2719ffc8df67490..0aa3d26afb4bc6928da23d1e18dd2ce1fea6f50b 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -1713,6 +1713,7 @@ buildipfire() {
   lfsmake2 mympd
   lfsmake2 btrfs-progs
   lfsmake2 inotify-tools
+  lfsmake2 grub-btrfs
 
   # Kernelbuild ... current we have no platform that need
   # multi kernel builds so KCFG is empty
diff --git a/src/initscripts/system/grub-btrfsd b/src/initscripts/system/grub-btrfsd
new file mode 100644 (file)
index 0000000..833f90c
--- /dev/null
@@ -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-btrfsd..."
+               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