[15/17] grub-btrfs: New package

Message ID 20240315191442.3951-16-stefan.schantl@ipfire.org
State Superseded
Headers
Series BTRFS support on IPFire 2.x (experimental) |

Commit Message

Stefan Schantl March 15, 2024, 7:14 p.m. UTC
  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
  

Comments

Michael Tremer March 18, 2024, 4:13 p.m. UTC | #1
> 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 = 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)
> 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 :)

> + 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
>
  
Stefan Schantl March 19, 2024, 8:21 p.m. UTC | #2
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
> > 
>
  
Michael Tremer March 20, 2024, 9:47 a.m. UTC | #3
Btrfs Snapshot Daemon?

GRUB/Btrfs Daemon?

Are we spelling btrfs lowercase everywhere? Wikipedia seems to have gone for a capital B, rest lowercase.

  https://en.wikipedia.org/wiki/Btrfs

-Michael

> On 19 Mar 2024, at 20:21, Stefan Schantl <stefan.schantl@ipfire.org> wrote:
> 
> 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
  
Michael Tremer March 25, 2024, 11:32 a.m. UTC | #4
Hello?!

> On 20 Mar 2024, at 09:47, Michael Tremer <michael.tremer@ipfire.org> wrote:
> 
> Btrfs Snapshot Daemon?
> 
> GRUB/Btrfs Daemon?
> 
> Are we spelling btrfs lowercase everywhere? Wikipedia seems to have gone for a capital B, rest lowercase.
> 
>  https://en.wikipedia.org/wiki/Btrfs
> 
> -Michael
> 
>> On 19 Mar 2024, at 20:21, Stefan Schantl <stefan.schantl@ipfire.org> wrote:
>> 
>> 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
> 
>
  

Patch

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 = 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)
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..."
+		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