From mboxrd@z Thu Jan  1 00:00:00 1970
From: Michael Tremer <michael.tremer@ipfire.org>
To: development@lists.ipfire.org
Subject: Re: [PATCH 15/17] grub-btrfs: New package
Date: Mon, 25 Mar 2024 11:32:54 +0000
Message-ID: <F658AB12-97BF-489F-9B40-04BE7EF84952@ipfire.org>
In-Reply-To: <DB2367F2-C1AD-46B0-869E-8681271F9456@ipfire.org>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="===============7204117325645020910=="
List-Id: <development.lists.ipfire.org>

--===============7204117325645020910==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

Hello?!

> On 20 Mar 2024, at 09:47, Michael Tremer <michael.tremer(a)ipfire.org> wrot=
e:
>=20
> Btrfs Snapshot Daemon?
>=20
> GRUB/Btrfs Daemon?
>=20
> Are we spelling btrfs lowercase everywhere? Wikipedia seems to have gone fo=
r a capital B, rest lowercase.
>=20
>  https://en.wikipedia.org/wiki/Btrfs
>=20
> -Michael
>=20
>> On 19 Mar 2024, at 20:21, Stefan Schantl <stefan.schantl(a)ipfire.org> wro=
te:
>>=20
>> Am Montag, dem 18.03.2024 um 16:13 +0000 schrieb Michael Tremer:
>>>=20
>>>=20
>>>> On 15 Mar 2024, at 19:14, Stefan Schantl
>>>> <stefan.schantl(a)ipfire.org> wrote:
>>>>=20
>>>> 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.
>>>>=20
>>>> 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
>>>>=20
>>>> Signed-off-by: Stefan Schantl <stefan.schantl(a)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
>>>>=20
>>>> 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 @@
>>>> +##################################################################
>>>> #############
>>>> +#                                                                =20
>>>>            #
>>>> +# IPFire.org - A linux based
>>>> firewall                                         #
>>>> +# Copyright (C) 2007-2023  IPFire Team=20
>>>> <info(a)ipfire.org>                     #
>>>> +#                                                                =20
>>>>            #
>>>> +# 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.                                         #
>>>> +#                                                                =20
>>>>            #
>>>> +# 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.                                #
>>>> +#                                                                =20
>>>>            #
>>>> +# You should have received a copy of the GNU General Public
>>>> License           #
>>>> +# along with this program.  If not, see
>>>> <http://www.gnu.org/licenses/>.       #
>>>> +#                                                                =20
>>>>            #
>>>> +##################################################################
>>>> #############
>>>> +
>>>> +##################################################################
>>>> #############
>>>> +# Definitions
>>>> +##################################################################
>>>> #############
>>>> +
>>>> +include Config
>>>> +
>>>> +VER        =3D 4.13
>>>> +
>>>> +THISAPP    =3D grub-btrfs-$(VER)
>>>> +DL_FILE    =3D $(THISAPP).tar.gz
>>>> +DL_FROM    =3D $(URL_IPFIRE)
>>>> +DIR_APP    =3D $(DIR_SRC)/$(THISAPP)
>>>> +TARGET     =3D $(DIR_INFO)/$(THISAPP)
>>>> +
>>>> +##################################################################
>>>> #############
>>>> +# Top-level Rules
>>>> +##################################################################
>>>> #############
>>>> +
>>>> +objects =3D $(DL_FILE)
>>>> +
>>>> +$(DL_FILE) =3D $(DL_FROM)/$(DL_FILE)
>>>> +
>>>> +$(DL_FILE)_BLAKE2 =3D
>>>> 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
>>>>=20
>>>> + 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
>>>>=20
>>>> + 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
>>>>=20
>>>>  # 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
>>>> +##################################################################
>>>> #############
>>>> +#                                                                =20
>>>>            #
>>>> +# IPFire.org - A linux based
>>>> firewall                                         #
>>>> +# Copyright (C) 2007-2024  IPFire Team=20
>>>> <info(a)ipfire.org>                     #
>>>> +#                                                                =20
>>>>            #
>>>> +# 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.                                         #
>>>> +#                                                                =20
>>>>            #
>>>> +# 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.                                #
>>>> +#                                                                =20
>>>>            #
>>>> +# You should have received a copy of the GNU General Public
>>>> License           #
>>>> +# along with this program.  If not, see
>>>> <http://www.gnu.org/licenses/>.       #
>>>> +#                                                                =20
>>>>            #
>>>> +##################################################################
>>>> #############
>>>> +
>>>> +. /etc/sysconfig/rc
>>>> +. ${rc_functions}
>>>> +
>>>> +SNAPSHOTDIR=3D"/.snapshots"
>>>> +PIDFILE=3D"/run/grub-btrfsd.pid"
>>>> +
>>>> +root_is_btrfs() {
>>>> +    [ "$(stat -f --format=3D"%T" /)" =3D=3D "btrfs" ] || return 1
>>>> +
>>>> +    return 0
>>>> +}
>>>> +
>>>> +case "$1" in
>>>> +        start)
>>>> + root_is_btrfs || exit 0
>>>> +
>>>> + boot_mesg "Starting grub-btrfsd..."
>>>=20
>>> Please give this a more human-readable name. Like the other services
>>> :)
>>=20
>> Okay, any suggestions?
>>=20
>>>=20
>>>> + 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
>>>> --=20
>>>> 2.39.2
>=20
>=20


--===============7204117325645020910==--