From: Stefan Schantl <stefan.schantl@ipfire.org>
To: development@lists.ipfire.org
Subject: Re: [PATCH 15/17] grub-btrfs: New package
Date: Tue, 19 Mar 2024 21:21:10 +0100 [thread overview]
Message-ID: <026e8baa5505d9e92c959255998bc7f610d264c3.camel@ipfire.org> (raw)
In-Reply-To: <2753EE8D-A67D-4EF6-AAFF-0D9A9F7CC90A@ipfire.org>
[-- Attachment #1: Type: text/plain, Size: 13117 bytes --]
Am Montag, dem 18.03.2024 um 16:13 +0000 schrieb Michael Tremer:
>
>
> > On 15 Mar 2024, at 19:14, Stefan Schantl
> > <stefan.schantl(a)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(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
> >
> > 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(a)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(a)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
> >
>
next prev parent reply other threads:[~2024-03-19 20:21 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-15 19:14 [PATCH 00/17] BTRFS support on IPFire 2.x (experimental) Stefan Schantl
2024-03-15 19:14 ` [PATCH 01/17] btrfs-progs: New package Stefan Schantl
2024-03-18 16:02 ` Michael Tremer
2024-03-19 19:53 ` Stefan Schantl
2024-03-15 19:14 ` [PATCH 02/17] installer: Allow to install IPFire on BTRFS Stefan Schantl
2024-03-18 16:03 ` Michael Tremer
2024-03-15 19:14 ` [PATCH 03/17] installer: Ensure to always create the /boot directory Stefan Schantl
2024-03-15 19:14 ` [PATCH 04/17] installer: Disable seperate boot partition Stefan Schantl
2024-03-18 16:05 ` Michael Tremer
2024-03-15 19:14 ` [PATCH 05/17] installer: Add code to create a BTRFS subvolume layout Stefan Schantl
2024-03-18 16:09 ` Michael Tremer
2024-03-19 20:05 ` Stefan Schantl
2024-03-22 16:21 ` Michael Tremer
2024-03-15 19:14 ` [PATCH 06/17] installer: Correctly umount main BTRFS partition Stefan Schantl
2024-03-15 19:14 ` [PATCH 07/17] installer: Add recurisve mkdir function Stefan Schantl
2024-03-15 19:14 ` [PATCH 08/17] installer: Mount BTRFS layout before installing the system Stefan Schantl
2024-03-18 16:11 ` Michael Tremer
2024-03-19 20:09 ` Stefan Schantl
2024-03-15 19:14 ` [PATCH 09/17] installer: Add /var/tmp to the BTRFS layout Stefan Schantl
2024-03-15 19:14 ` [PATCH 10/17] installer: Fix using BTRFS mount options when mounting the layout Stefan Schantl
2024-03-15 19:14 ` [PATCH 11/17] installer: Add code to proper unmount the BTRFS layout Stefan Schantl
2024-03-15 19:14 ` [PATCH 12/17] installer: Add code to correctly write the fstab when installing on BTRFS Stefan Schantl
2024-03-15 19:14 ` [PATCH 13/17] installer: Define common mount options for BTRFS volumes Stefan Schantl
2024-03-18 16:13 ` Michael Tremer
2024-03-19 20:19 ` Stefan Schantl
2024-03-22 16:23 ` Michael Tremer
2024-03-15 19:14 ` [PATCH 14/17] inotify-tools: New package Stefan Schantl
2024-03-15 19:14 ` [PATCH 15/17] grub-btrfs: " Stefan Schantl
2024-03-18 16:13 ` Michael Tremer
2024-03-19 20:21 ` Stefan Schantl [this message]
2024-03-20 9:47 ` Michael Tremer
2024-03-25 11:32 ` Michael Tremer
2024-03-15 19:14 ` [PATCH 16/17] installer: Mark BTRFS support as experimental Stefan Schantl
2024-03-18 16:14 ` Michael Tremer
2024-03-15 19:14 ` [PATCH 17/17] installer: Adjust BTRFS layout Stefan Schantl
2024-03-18 16:18 ` [PATCH 00/17] BTRFS support on IPFire 2.x (experimental) Michael Tremer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=026e8baa5505d9e92c959255998bc7f610d264c3.camel@ipfire.org \
--to=stefan.schantl@ipfire.org \
--cc=development@lists.ipfire.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox