Am Montag, dem 18.03.2024 um 16:13 +0000 schrieb Michael Tremer:
On 15 Mar 2024, at 19:14, Stefan Schantl stefan.schantl@ipfire.org wrote:
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 | 14 ++++ config/rootfiles/common/x86_64/initscripts | 4 ++ lfs/grub-btrfs | 79 ++++++++++++++++++++++ lfs/initscripts | 3 + make.sh | 1 + src/initscripts/system/grub-btrfsd | 61 +++++++++++++++++ 6 files changed, 162 insertions(+) create mode 100644 config/rootfiles/common/grub-btrfs create mode 100644 lfs/grub-btrfs create mode 100644 src/initscripts/system/grub-btrfsd
diff --git a/config/rootfiles/common/grub-btrfs b/config/rootfiles/common/grub-btrfs new file mode 100644 index 000000000..a612af065 --- /dev/null +++ b/config/rootfiles/common/grub-btrfs @@ -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 diff --git a/config/rootfiles/common/x86_64/initscripts b/config/rootfiles/common/x86_64/initscripts index a5e1596fb..2d6fa85dc 100644 --- a/config/rootfiles/common/x86_64/initscripts +++ b/config/rootfiles/common/x86_64/initscripts @@ -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 index 000000000..8dc0c4f3e --- /dev/null +++ b/lfs/grub-btrfs @@ -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 = e2f11a0a8282e3ec8ff8223e3bad70b5d5c5e81b4d740a1bf3554db412dbe48a8a0 f216f4e6c65ae1d11c01a27b8b92bae9b470c60d2389505ce089511536e1a
+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)
diff --git a/lfs/initscripts b/lfs/initscripts index e078632ab..4d67ee0c4 100644 --- a/lfs/initscripts +++ b/lfs/initscripts @@ -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 30bd5f16b..0aa3d26af 100755 --- 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 index 000000000..833f90cb1 --- /dev/null +++ b/src/initscripts/system/grub-btrfsd @@ -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..."
Please give this a more human-readable name. Like the other services :)
Okay, any suggestions?
- 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
2.39.2