Compare commits

..

4 Commits

Author SHA1 Message Date
Pascal Jäger
efc4657aab grub-btrfsd: fixed message about flag dependencies
Signed-off-by: Pascal Jäger <pascal.jaeger@leimstift.de>
2022-11-26 15:06:44 +01:00
Pascal Jäger
6f154329c7 grub-btrfsd: fix if...else in daemon
add description of feature in manpage
fix non sh compatible commands in daemon

Signed-off-by: Pascal Jäger <pascal.jaeger@leimstift.de>
2022-11-26 10:06:19 +01:00
Pascal Jäger
4942989d7f grub-btrfsd: add flag or old timeshift
Signed-off-by: Pascal Jäger <pascal.jaeger@leimstift.de>
2022-11-25 16:58:07 +01:00
Pascal Jäger
91c4aac82c grub-btrfsd: make dir check of snapshots dir a warning
Bug #234

Signed-off-by: Pascal Jäger <pascal.jaeger@leimstift.de>
2022-11-25 08:52:49 +01:00
8 changed files with 89 additions and 147 deletions

View File

@@ -91,10 +91,6 @@ btrfs_subvolume_sort="--sort=${GRUB_BTRFS_SUBVOLUME_SORT:-"-rootid"}"
grub_directory=${GRUB_BTRFS_GRUB_DIRNAME:-"/boot/grub"} grub_directory=${GRUB_BTRFS_GRUB_DIRNAME:-"/boot/grub"}
## Customize BOOT directory, where kernels/initrams/microcode is saved. ## Customize BOOT directory, where kernels/initrams/microcode is saved.
boot_directory=${GRUB_BTRFS_BOOT_DIRNAME:-"/boot"} boot_directory=${GRUB_BTRFS_BOOT_DIRNAME:-"/boot"}
## Customize GRUB-BTRFS.cfg directory, where "grub-btrfs.cfg" file is saved
grub_btrfs_directory=${GRUB_BTRFS_GBTRFS_DIRNAME:-"/boot/grub"}
## Customize directory where "grub-btrfs.cfg" file is searched for by grub
grub_btrfs_search_directory=${GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME:-"\${prefix}"}
## Password protection management for submenu ## Password protection management for submenu
# Protection support for submenu (--unrestricted) # Protection support for submenu (--unrestricted)
case "${GRUB_BTRFS_DISABLE_PROTECTION_SUBMENU,,}" in case "${GRUB_BTRFS_DISABLE_PROTECTION_SUBMENU,,}" in
@@ -181,7 +177,7 @@ fi
## Create entry ## Create entry
entry() entry()
{ {
echo "$@" >> "$grub_btrfs_directory/grub-btrfs.new" echo "$@" >> "$grub_directory/grub-btrfs.new"
} }
## menu entries ## menu entries
@@ -498,7 +494,7 @@ header_menu()
local lenght_title_column_right=$(((${#var}-lenght_title_column_left)+1)) #+1 is necessary for extra "|" character local lenght_title_column_right=$(((${#var}-lenght_title_column_left)+1)) #+1 is necessary for extra "|" character
header_entry+=$(printf "%${lenght_title_column_left}s%${lenght_title_column_right}s" "${title_column[${GRUB_BTRFS_TITLE_FORMAT[$key],,}]}" "|") # Final "|" is for visuals only header_entry+=$(printf "%${lenght_title_column_left}s%${lenght_title_column_right}s" "${title_column[${GRUB_BTRFS_TITLE_FORMAT[$key],,}]}" "|") # Final "|" is for visuals only
done done
sed -i "1imenuentry '|${header_entry}' { echo }" "$grub_btrfs_directory/grub-btrfs.new" # First "|" is for visuals only sed -i "1imenuentry '|${header_entry}' { echo }" "$grub_directory/grub-btrfs.new" # First "|" is for visuals only
} }
## List of kernels, initramfs and microcode in snapshots ## List of kernels, initramfs and microcode in snapshots
@@ -565,8 +561,8 @@ boot_separate()
IFS=$oldIFS IFS=$oldIFS
} }
rm -f "$grub_btrfs_directory/grub-btrfs.new" rm -f "$grub_directory/grub-btrfs.new"
> "$grub_btrfs_directory/grub-btrfs.new" # Create a "grub-btrfs.new" file in "grub_btrfs_directory" > "$grub_directory/grub-btrfs.new" # Create a "grub-btrfs.new" file in "grub_directory"
# Create mount point then mounting # Create mount point then mounting
[[ ! -d $grub_btrfs_mount_point ]] && mkdir -p "$grub_btrfs_mount_point" [[ ! -d $grub_btrfs_mount_point ]] && mkdir -p "$grub_btrfs_mount_point"
mount -o ro,subvolid=5 /dev/disk/by-uuid/"$root_uuid" "$grub_btrfs_mount_point/" mount -o ro,subvolid=5 /dev/disk/by-uuid/"$root_uuid" "$grub_btrfs_mount_point/"
@@ -589,16 +585,16 @@ if [[ "${count_limit_snap}" = "0" || -z "${count_limit_snap}" ]]; then
fi fi
# Make a submenu in GRUB (grub.cfg) and move "grub-btrfs.new" to "grub-btrfs.cfg" # Make a submenu in GRUB (grub.cfg) and move "grub-btrfs.new" to "grub-btrfs.cfg"
header_menu header_menu
if "${bindir}/${GRUB_BTRFS_SCRIPT_CHECK:-grub-script-check}" "$grub_btrfs_directory/grub-btrfs.new"; then if "${bindir}/${GRUB_BTRFS_SCRIPT_CHECK:-grub-script-check}" "$grub_directory/grub-btrfs.new"; then
cat "$grub_btrfs_directory/grub-btrfs.new" > "$grub_btrfs_directory/grub-btrfs.cfg" cat "$grub_directory/grub-btrfs.new" > "$grub_directory/grub-btrfs.cfg"
rm -f "$grub_btrfs_directory/grub-btrfs.new" rm -f "$grub_directory/grub-btrfs.new"
cat << EOF cat << EOF
submenu '${submenuname}' ${protection_authorized_users}${unrestricted_access_submenu}{ submenu '${submenuname}' ${protection_authorized_users}${unrestricted_access_submenu}{
configfile "${grub_btrfs_search_directory}/grub-btrfs.cfg" configfile "\${prefix}/grub-btrfs.cfg"
} }
EOF EOF
else else
print_error "Syntax errors were detected in generated ${grub_btrfs_directory}/grub-btrfs.new file. Old grub-btrfs.cfg (if present) was not replaced." print_error "Syntax errors were detected in generated ${grub_directory}/grub-btrfs.new file. Old grub-btrfs.cfg (if present) was not replaced."
fi fi
# warn when this script is run but there is no entry in grub.cfg # warn when this script is run but there is no entry in grub.cfg

View File

@@ -383,23 +383,6 @@ sudo /usr/bin/grub-btrfsd /.snapshots --verbose` (for snapper)
Or pass `--verbose` to the daemon using the Systemd .service-file or the OpenRC conf.d file respectively. (see Daemon installation instructions how to do that) Or pass `--verbose` to the daemon using the Systemd .service-file or the OpenRC conf.d file respectively. (see Daemon installation instructions how to do that)
- - - - - -
### Development
Grub-btrfs uses a rudimentary system of automatic versioning to tell apart different commits. This is helpful when users report problems and it is not immediately clear what version they are using.
We therefore have the following script in `.git/hooks/pre-commit`:
``` bash
#!/bin/sh
echo "Doing pre commit hook with version bump"
version="$(git describe --tags --abbrev=0)-$(git rev-parse --abbrev-ref HEAD)-$(date -u -Iseconds)"
echo "New version is ${version}"
sed -i "s/GRUB_BTRFS_VERSION=.*/GRUB_BTRFS_VERSION=${version}/" config
git add config
```
This automatically sets the version in the `config`-file to `[lasttag]-[branch-name]-[current-date-in-UTC]`.
In order to create a Tag we don't want to have this long version. In this case we set the version manually in `config` and commit with `git commit --no-verify`. This avoids running the hook.
### Special thanks for assistance and contributions ### Special thanks for assistance and contributions
* [Maxim Baz](https://github.com/maximbaz) * [Maxim Baz](https://github.com/maximbaz)
* [Schievel1](https://github.com/Antynea/grub-btrfs/discussions/173#discussioncomment-1438790) * [Schievel1](https://github.com/Antynea/grub-btrfs/discussions/173#discussioncomment-1438790)

20
config
View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
GRUB_BTRFS_VERSION=4.12-improve-version-generation-2022-11-26T14:03:10+00:00 GRUB_BTRFS_VERSION=4.12-fix-snap-dir-check-2022-11-26T14:06:44+00:00
# Disable grub-btrfs. # Disable grub-btrfs.
# Default: "false" # Default: "false"
@@ -99,24 +99,6 @@ GRUB_BTRFS_IGNORE_PREFIX_PATH=("var/lib/docker" "@var/lib/docker" "@/var/lib/doc
# Default: "/boot" # Default: "/boot"
#GRUB_BTRFS_BOOT_DIRNAME="/boot" #GRUB_BTRFS_BOOT_DIRNAME="/boot"
# Location where grub-btrfs.cfg should be saved.
# Some distributions (like OpenSuSE) store those file at the snapshot directory
# instead of boot. Be aware that this direcory must be available for grub during
# startup of the system.
# Default: "/boot/grub"
#GRUB_BTRFS_GBTRFS_DIRNAME="/boot/grub"
# Location of the directory where Grub searches for the grub-btrfs.cfg file.
# Some distributions (like OpenSuSE) store those file at the snapshot directory
# instead of boot. Be aware that this direcory must be available for grub during
# startup of the system.
# Default: "\${prefix}" # This is a grub variable that resolves to where grub is
# installed. (like /boot/grub, /boot/efi/grub)
# NOTE: If variables of grub are used here (like ${prefix}) they need to be escaped
# with `\` before the `$`
#GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME="\${prefix}"
# Name/path of grub-mkconfig command, use by "grub-btrfs.service" # Name/path of grub-mkconfig command, use by "grub-btrfs.service"
# Might be 'grub2-mkconfig' on some systems (Fedora ...) # Might be 'grub2-mkconfig' on some systems (Fedora ...)
# Default paths are /sbin:/bin:/usr/sbin:/usr/bin, # Default paths are /sbin:/bin:/usr/sbin:/usr/bin,

View File

@@ -9,6 +9,7 @@ watchtime=0
logfile=0 logfile=0
snapshots=-1 snapshots=-1
timeshift_auto=false timeshift_auto=false
timeshift_old=false
verbose=false verbose=false
syslog=false syslog=false
@@ -31,8 +32,8 @@ setcolors true # normally we want colors
sysconfdir="/etc" sysconfdir="/etc"
grub_btrfs_config="${sysconfdir}/default/grub-btrfs/config" grub_btrfs_config="${sysconfdir}/default/grub-btrfs/config"
# source config file # source config file
[[ -f "$grub_btrfs_config" ]] && . "$grub_btrfs_config" [ -f "$grub_btrfs_config" ] && . "$grub_btrfs_config"
[[ -f "${sysconfdir}/default/grub" ]] && . "${sysconfdir}/default/grub" [ -f "${sysconfdir}/default/grub" ] && . "${sysconfdir}/default/grub"
print_help() { print_help() {
echo "${CYAN}[?] Usage:" echo "${CYAN}[?] Usage:"
@@ -44,6 +45,7 @@ print_help() {
echo "-c, --no-color Disable colors in output" echo "-c, --no-color Disable colors in output"
echo "-l, --log-file Specify a logfile to write to" echo "-l, --log-file Specify a logfile to write to"
echo "-s, --syslog Write to syslog" echo "-s, --syslog Write to syslog"
echo "-o, --timeshift-old Look for snapshots in directory of Timeshift <v22.06 (requires --timeshift-auto)"
echo "-t, --timeshift-auto Automatically detect Timeshifts snapshot directory" echo "-t, --timeshift-auto Automatically detect Timeshifts snapshot directory"
echo "-v, --verbose Let the log of the daemon be more verbose" echo "-v, --verbose Let the log of the daemon be more verbose"
echo "-h, --help Display this message" echo "-h, --help Display this message"
@@ -97,6 +99,9 @@ while getopts :l:ctvsh-: opt; do
timeshift-auto) timeshift-auto)
timeshift_auto=true timeshift_auto=true
;; ;;
timeshift-old)
timeshift_old=true
;;
verbose) verbose)
verbose=true verbose=true
;; ;;
@@ -125,6 +130,9 @@ while getopts :l:ctvsh-: opt; do
t) t)
timeshift_auto=true timeshift_auto=true
;; ;;
o)
timeshift_old=true
;;
v) v)
verbose=true verbose=true
;; ;;
@@ -168,9 +176,15 @@ else
inotify_qiet_flag=" -q -q " inotify_qiet_flag=" -q -q "
fi fi
if [ ${timeshift_auto} = false ] && [ ${timeshift_old} = true ]; then
err "[!] Flag --timeshift-old requires flag --timeshift-auto" "${RED}" >&2
exit 1
fi
vlog "Arguments:" vlog "Arguments:"
vlog "Snapshot directory: $snapshots" vlog "Snapshot directory: $snapshots"
vlog "Timestift autodetection: $timeshift_auto" vlog "Timestift autodetection: $timeshift_auto"
vlog "Timeshift old: $timeshift_old"
vlog "Logfile: $logfile" vlog "Logfile: $logfile"
if ! [ -d "$snapshots" ] && ! [ ${timeshift_auto} = true ]; then if ! [ -d "$snapshots" ] && ! [ ${timeshift_auto} = true ]; then
@@ -204,6 +218,15 @@ create_grub_menu() {
fi fi
} }
set_snapshot_dir() {
# old timeshift has it's snapshot dir in a different location
if [ "${timeshift_old}" = true ]; then
snapshots="/run/timeshift/backup/timeshift-btrfs/snapshots"
else
snapshots="/run/timeshift/${timeshift_pid}/backup/timeshift-btrfs/snapshots"
fi
}
# start the actual daemon # start the actual daemon
vlog "Snapshot dir watchtimeout: $watchtime" vlog "Snapshot dir watchtimeout: $watchtime"
vlog "Entering infinite while" "${GREEN}" vlog "Entering infinite while" "${GREEN}"
@@ -217,7 +240,7 @@ while true; do
fi fi
timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}') timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}')
if [ "${#timeshift_pid}" -gt 0 ]; then if [ "${#timeshift_pid}" -gt 0 ]; then
snapshots="/run/timeshift/${timeshift_pid}/backup/timeshift-btrfs/snapshots" set_snapshot_dir
log "detected running Timeshift at daemon startup, PID is: $timeshift_pid" log "detected running Timeshift at daemon startup, PID is: $timeshift_pid"
vlog "new snapshots directory is $snapshots" vlog "new snapshots directory is $snapshots"
else else
@@ -225,7 +248,7 @@ while true; do
inotifywait ${inotify_qiet_flag} -e create -e delete /run/timeshift && { inotifywait ${inotify_qiet_flag} -e create -e delete /run/timeshift && {
sleep 1 sleep 1
timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}') timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}')
snapshots="/run/timeshift/${timeshift_pid}/backup/timeshift-btrfs/snapshots" set_snapshot_dir
log "detected Timeshift startup, PID is: $timeshift_pid" "${CYAN}" log "detected Timeshift startup, PID is: $timeshift_pid" "${CYAN}"
vlog "new snapshots directory is $snapshots" "${CYAN}" vlog "new snapshots directory is $snapshots" "${CYAN}"
(create_grub_menu) # create the grub menu once immidiatly in a forking process. Snapshots from commandline using timeshift --create need this (create_grub_menu) # create the grub menu once immidiatly in a forking process. Snapshots from commandline using timeshift --create need this

View File

@@ -48,16 +48,16 @@ Example: \fCGRUB_BTRFS_DISABLE="true"\fP
The snapshot entries submenu in Grub are added according to this line. It is possible to change to order of the fields. The snapshot entries submenu in Grub are added according to this line. It is possible to change to order of the fields.
.IP \(em 4 .IP \(em 4
Default: (“date” “snapshot” “type” “description”) Default: (“date” “snapshot” “type” “description”)
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_TITLE_FORMAT=("date" "snapshot" "type" "description")\fP -Example: \fCGRUB_BTRFS_TITLE_FORMAT=("date" "snapshot" "type" "description")\fP
.SS "\fCGRUB_BTRFS_LIMIT\fP" .SS "\fCGRUB_BTRFS_LIMIT\fP"
.PP .PP
Maximum number of snapshots in the GRUB snapshots sub menu. Maximum number of snapshots in the GRUB snapshots sub menu.
.IP \(em 4 .IP \(em 4
Default: “50” Default: “50”
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_LIMIT="50"\fP -Example: \fCGRUB_BTRFS_LIMIT="50"\fP
.SS "\fCGRUB_BTRFS_SUBVOLUME_SORT\fP" .SS "\fCGRUB_BTRFS_SUBVOLUME_SORT\fP"
.PP .PP
@@ -69,16 +69,16 @@ See Sorting section in
“-rootid” means list snapshot by new ones first. “-rootid” means list snapshot by new ones first.
.IP \(em 4 .IP \(em 4
Default: “-rootid” Default: “-rootid”
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_SUBVOLUME_SORT="+ogen,\-gen,path,rootid"\fP -Example: \fCGRUB_BTRFS_SUBVOLUME_SORT="+ogen,\-gen,path,rootid"\fP
.SS "\fCGRUB_BTRFS_SHOW_SNAPSHOTS_FOUND\fP" .SS "\fCGRUB_BTRFS_SHOW_SNAPSHOTS_FOUND\fP"
.PP .PP
Show snapshots found during run “grub-mkconfig” Show snapshots found during run “grub-mkconfig”
.IP \(em 4 .IP \(em 4
Default: “true” Default: “true”
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_SHOW_SNAPSHOTS_FOUND="false"\fP -Example: \fCGRUB_BTRFS_SHOW_SNAPSHOTS_FOUND="false"\fP
.SS "\fCGRUB_BTRFS_ROOTFLAGS\fP" .SS "\fCGRUB_BTRFS_ROOTFLAGS\fP"
.PP .PP
@@ -89,8 +89,8 @@ takes priority over `fstab` entries.
NB: Do NOT include “subvol=...” or “subvolid=...” here. NB: Do NOT include “subvol=...” or “subvolid=...” here.
.IP \(em 4 .IP \(em 4
Default: “” Default: “”
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_ROOTFLAGS="space_cache,commit=10,norecovery"\fP -Example: \fCGRUB_BTRFS_ROOTFLAGS="space_cache,commit=10,norecovery"\fP
.SS "\fCGRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION\fP" .SS "\fCGRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION\fP"
.PP .PP
@@ -99,8 +99,8 @@ either located at the system root or on a separate partition or in a subvolume,
Change to “true” if your boot partition is not detected as separate. Change to “true” if your boot partition is not detected as separate.
.IP \(em 4 .IP \(em 4
Default: “false” Default: “false”
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION="true"\fP -Example: \fCGRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION="true"\fP
.SS "CUSTOM KERNELS" .SS "CUSTOM KERNELS"
.SS "\fCGRUB_BTRFS_NKERNEL\fP / \fCGRUB_BTRFS_NINIT\fP / \fCGRUB_BTRFS_CUSTOM_MICROCODE\fP" .SS "\fCGRUB_BTRFS_NKERNEL\fP / \fCGRUB_BTRFS_NINIT\fP / \fCGRUB_BTRFS_CUSTOM_MICROCODE\fP"
@@ -109,10 +109,10 @@ By default, “grub-btrfs” automatically detects most existing kernels, initra
Customs kernel, initramfs and microcodes that are not detected can be added in these variables. Customs kernel, initramfs and microcodes that are not detected can be added in these variables.
.IP \(em 4 .IP \(em 4
Default: (“”) Default: (“”)
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_NKERNEL=("kernel\-5.19.4\-custom" "vmlinux\-5.19.4\-custom")\fP -Example: \fCGRUB_BTRFS_NKERNEL=("kernel\-5.19.4\-custom" "vmlinux\-5.19.4\-custom")\fP
\fCGRUB_BTRFS_NINIT=("initramfs\-5.19.4\-custom.img" "initrd\-5.19.4\-custom.img" "otherinit\-5.19.4\-custom.gz")\fP \fCGRUB_BTRFS_NINIT=("initramfs\-5.19.4\-custom.img" "initrd\-5.19.4\-custom.img" "otherinit\-5.19.4\-custom.gz")\fP
\fCGRUB_BTRFS_CUSTOM_MICROCODE=("custom\-ucode.img" "custom\-uc.img "custom_ucode.cpio")\fP \fCGRUB_BTRFS_CUSTOM_MICROCODE=("custom\-ucode.img" "custom\-uc.img "custom_ucode.cpio")\fP
.SS "SNAPSHOT FILTERING" .SS "SNAPSHOT FILTERING"
.SS "\fCGRUB_BTRFS_IGNORE_SPECIFIC_PATH\fP" .SS "\fCGRUB_BTRFS_IGNORE_SPECIFIC_PATH\fP"
@@ -122,8 +122,8 @@ Only exact paths are ignored.
e.g : if `specific path` = @, only `@` snapshot will be ignored. e.g : if `specific path` = @, only `@` snapshot will be ignored.
.IP \(em 4 .IP \(em 4
Default: (“@”) Default: (“@”)
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_IGNORE_SPECIFIC_PATH=("@home")\fP -Example: \fCGRUB_BTRFS_IGNORE_SPECIFIC_PATH=("@home")\fP
.SS "\fCGRUB_BTRFS_IGNORE_PREFIX_PATH\fP" .SS "\fCGRUB_BTRFS_IGNORE_PREFIX_PATH\fP"
.PP .PP
@@ -132,8 +132,8 @@ Any path starting with the specified string will be ignored.
e.g : if `prefix path` = @, all snapshots beginning with “@/...” will be ignored. e.g : if `prefix path` = @, all snapshots beginning with “@/...” will be ignored.
.IP \(em 4 .IP \(em 4
Default: (“var/lib/docker” “@var/lib/docker” “@/var/lib/docker”) Default: (“var/lib/docker” “@var/lib/docker” “@/var/lib/docker”)
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_IGNORE_PREFIX_PATH=("var/lib/docker" "@var/lib/docker" "@/var/lib/docker")\fP -Example: \fCGRUB_BTRFS_IGNORE_PREFIX_PATH=("var/lib/docker" "@var/lib/docker" "@/var/lib/docker")\fP
.SS "\fCGRUB_BTRFS_IGNORE_SNAPSHOT_TYPE\fP" .SS "\fCGRUB_BTRFS_IGNORE_SNAPSHOT_TYPE\fP"
.PP .PP
@@ -144,16 +144,16 @@ For Timeshift:
Tag = boot, ondemand, hourly, daily, weekly, monthly. Tag = boot, ondemand, hourly, daily, weekly, monthly.
.IP \(em 4 .IP \(em 4
Default: (“”) Default: (“”)
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_IGNORE_SNAPSHOT_TYPE=("ondemand")\fP -Example: \fCGRUB_BTRFS_IGNORE_SNAPSHOT_TYPE=("ondemand")\fP
.SS "\fCGRUB_BTRFS_IGNORE_SNAPSHOT_DESCRIPTION\fP" .SS "\fCGRUB_BTRFS_IGNORE_SNAPSHOT_DESCRIPTION\fP"
.PP .PP
Ignore specific description of snapshot during run “grub-mkconfig”. Ignore specific description of snapshot during run “grub-mkconfig”.
.IP \(em 4 .IP \(em 4
Default: (“”) Default: (“”)
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_IGNORE_SNAPSHOT_DESCRIPTION=("timeline")\fP -Example: \fCGRUB_BTRFS_IGNORE_SNAPSHOT_DESCRIPTION=("timeline")\fP
.SS "DISTRIBUTION DEPENDENT SETTINGS" .SS "DISTRIBUTION DEPENDENT SETTINGS"
.SS "\fCGRUB_BTRFS_BOOT_DIRNAME\fP" .SS "\fCGRUB_BTRFS_BOOT_DIRNAME\fP"
@@ -162,8 +162,8 @@ Location of kernels/initramfs/microcode.
Used by “grub-btrfs” to detect the boot partition and the location of kernels, initramfs and microcodes. Used by “grub-btrfs” to detect the boot partition and the location of kernels, initramfs and microcodes.
.IP \(em 4 .IP \(em 4
Default: “/boot” Default: “/boot”
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_BOOT_DIRNAME="/"\fP -Example: \fCGRUB_BTRFS_BOOT_DIRNAME="/"\fP
.SS "\fCGRUB_BTRFS_GRUB_DIRNAME\fP" .SS "\fCGRUB_BTRFS_GRUB_DIRNAME\fP"
.PP .PP
@@ -173,37 +173,8 @@ Might be grub2 on some systems.
For example, on Fedora with EFI : “/boot/efi/EFI/fedora” For example, on Fedora with EFI : “/boot/efi/EFI/fedora”
.IP \(em 4 .IP \(em 4
Default: “/boot/grub” Default: “/boot/grub”
.IP \(em 4
Example: \fCGRUB_BTRFS_GRUB_DIRNAME="/boot/grub2"\fP
.SS "\fCGRUB_BTRFS_GBTRFS_DIRNAME\fP"
.PP .PP
Location where grub-btrfs.cfg should be saved. -Example: \fCGRUB_BTRFS_GRUB_DIRNAME="/boot/grub2"\fP
Some distributions (like OpenSuSE) store those file at the snapshot directory
instead of boot. Be aware that this direcory must be available for grub during
startup of the system.
.IP \(em 4
Default: “/boot/grub”
.IP \(em 4
Example GRUB\d\s-2BTRFS\s+2\u\d\s-2GBTRFS\s+2\u\d\s-2DIRNAME\s+2\u=“/boot/grub”
.SS "\fCGRUB_BTRFS_GBTRFS_SEARCH_DIRNAME\fP"
.PP
Location of the directory where Grub searches for the grub-btrfs.cfg file.
Some distributions (like OpenSuSE) store those file at the snapshot directory
instead of boot. Be aware that this direcory must be available for grub during
startup of the system.
.IP \(em 4
Default: “\${prefix}” (This is a grub variable that resolves to where grub is
.PP
installed. (like /boot/grub, /boot/efi/grub))
.IP \(em 4
NOTE: If variables of grub are used here like ${prefix}, they need to be escaped
.PP
with `$\` before the `$`
.IP \(em 4
Example: GRUB\d\s-2BTRFS\s+2\u\d\s-2GBTRFS\s+2\u\d\s-2SEARCH\s+2\u\d\s-2DIRNAME\s+2\u=“\${prefix}”
.SS "\fCGRUB_BTRFS_MKCONFIG\fP" .SS "\fCGRUB_BTRFS_MKCONFIG\fP"
.PP .PP
@@ -213,8 +184,8 @@ Default paths are /sbin:/bin:/usr/sbin:/usr/bin, if your path is missing, report
You can use the name of the command only or full the path. You can use the name of the command only or full the path.
.IP \(em 4 .IP \(em 4
Default: grub-mkconfig Default: grub-mkconfig
.IP \(em 4 .PP
Example: \fCGRUB_BTRFS_MKCONFIG=/sbin/grub2\-mkconfig\fP -Example: \fCGRUB_BTRFS_MKCONFIG=/sbin/grub2\-mkconfig\fP
.SS "\fCGRUB_BTRFS_SCRIPT_CHECK\fP" .SS "\fCGRUB_BTRFS_SCRIPT_CHECK\fP"
.PP .PP

View File

@@ -35,12 +35,12 @@ Disable grub-btrfs if true.
*** ~GRUB_BTRFS_TITLE_FORMAT~ *** ~GRUB_BTRFS_TITLE_FORMAT~
The snapshot entries submenu in Grub are added according to this line. It is possible to change to order of the fields. The snapshot entries submenu in Grub are added according to this line. It is possible to change to order of the fields.
- Default: ("date" "snapshot" "type" "description") - Default: ("date" "snapshot" "type" "description")
- Example: ~GRUB_BTRFS_TITLE_FORMAT=("date" "snapshot" "type" "description")~ -Example: ~GRUB_BTRFS_TITLE_FORMAT=("date" "snapshot" "type" "description")~
*** ~GRUB_BTRFS_LIMIT~ *** ~GRUB_BTRFS_LIMIT~
Maximum number of snapshots in the GRUB snapshots sub menu. Maximum number of snapshots in the GRUB snapshots sub menu.
- Default: "50" - Default: "50"
- Example: ~GRUB_BTRFS_LIMIT="50"~ -Example: ~GRUB_BTRFS_LIMIT="50"~
*** ~GRUB_BTRFS_SUBVOLUME_SORT~ *** ~GRUB_BTRFS_SUBVOLUME_SORT~
Sort the found subvolumes by "ogeneration" or "generation" or "path" or "rootid". Sort the found subvolumes by "ogeneration" or "generation" or "path" or "rootid".
@@ -50,12 +50,12 @@ Sort the found subvolumes by "ogeneration" or "generation" or "path" or "rootid"
#+END_MAN #+END_MAN
"-rootid" means list snapshot by new ones first. "-rootid" means list snapshot by new ones first.
- Default: "-rootid" - Default: "-rootid"
- Example: ~GRUB_BTRFS_SUBVOLUME_SORT="+ogen,-gen,path,rootid"~ -Example: ~GRUB_BTRFS_SUBVOLUME_SORT="+ogen,-gen,path,rootid"~
*** ~GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND~ *** ~GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND~
Show snapshots found during run "grub-mkconfig" Show snapshots found during run "grub-mkconfig"
- Default: "true" - Default: "true"
- Example: ~GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND="false"~ -Example: ~GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND="false"~
*** ~GRUB_BTRFS_ROOTFLAGS~ *** ~GRUB_BTRFS_ROOTFLAGS~
Comma seperated mount options to be used when booting a snapshot. Comma seperated mount options to be used when booting a snapshot.
@@ -64,14 +64,14 @@ They can be defined here as well as in the "/" line inside the respective snapsh
takes priority over `fstab` entries. takes priority over `fstab` entries.
NB: Do NOT include "subvol=..." or "subvolid=..." here. NB: Do NOT include "subvol=..." or "subvolid=..." here.
- Default: "" - Default: ""
- Example: ~GRUB_BTRFS_ROOTFLAGS="space_cache,commit=10,norecovery"~ -Example: ~GRUB_BTRFS_ROOTFLAGS="space_cache,commit=10,norecovery"~
*** ~GRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION~ *** ~GRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION~
By default "grub-btrfs" automatically detects your boot partition, By default "grub-btrfs" automatically detects your boot partition,
either located at the system root or on a separate partition or in a subvolume, either located at the system root or on a separate partition or in a subvolume,
Change to "true" if your boot partition is not detected as separate. Change to "true" if your boot partition is not detected as separate.
- Default: "false" - Default: "false"
- Example: ~GRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION="true"~ -Example: ~GRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION="true"~
** CUSTOM KERNELS ** CUSTOM KERNELS
@@ -79,7 +79,7 @@ Change to "true" if your boot partition is not detected as separate.
By default, "grub-btrfs" automatically detects most existing kernels, initramfs and microcode. By default, "grub-btrfs" automatically detects most existing kernels, initramfs and microcode.
Customs kernel, initramfs and microcodes that are not detected can be added in these variables. Customs kernel, initramfs and microcodes that are not detected can be added in these variables.
- Default: ("") - Default: ("")
- Example: ~GRUB_BTRFS_NKERNEL=("kernel-5.19.4-custom" "vmlinux-5.19.4-custom")~ -Example: ~GRUB_BTRFS_NKERNEL=("kernel-5.19.4-custom" "vmlinux-5.19.4-custom")~
~GRUB_BTRFS_NINIT=("initramfs-5.19.4-custom.img" "initrd-5.19.4-custom.img" "otherinit-5.19.4-custom.gz")~ ~GRUB_BTRFS_NINIT=("initramfs-5.19.4-custom.img" "initrd-5.19.4-custom.img" "otherinit-5.19.4-custom.gz")~
~GRUB_BTRFS_CUSTOM_MICROCODE=("custom-ucode.img" "custom-uc.img "custom_ucode.cpio")~ ~GRUB_BTRFS_CUSTOM_MICROCODE=("custom-ucode.img" "custom-uc.img "custom_ucode.cpio")~
@@ -90,14 +90,14 @@ Ignore specific path during run "grub-mkconfig".
Only exact paths are ignored. Only exact paths are ignored.
e.g : if `specific path` = @, only `@` snapshot will be ignored. e.g : if `specific path` = @, only `@` snapshot will be ignored.
- Default: ("@") - Default: ("@")
- Example: ~GRUB_BTRFS_IGNORE_SPECIFIC_PATH=("@home")~ -Example: ~GRUB_BTRFS_IGNORE_SPECIFIC_PATH=("@home")~
*** ~GRUB_BTRFS_IGNORE_PREFIX_PATH~ *** ~GRUB_BTRFS_IGNORE_PREFIX_PATH~
Ignore prefix path during run "grub-mkconfig". Ignore prefix path during run "grub-mkconfig".
Any path starting with the specified string will be ignored. Any path starting with the specified string will be ignored.
e.g : if `prefix path` = @, all snapshots beginning with "@/..." will be ignored. e.g : if `prefix path` = @, all snapshots beginning with "@/..." will be ignored.
- Default: ("var/lib/docker" "@var/lib/docker" "@/var/lib/docker") - Default: ("var/lib/docker" "@var/lib/docker" "@/var/lib/docker")
- Example: ~GRUB_BTRFS_IGNORE_PREFIX_PATH=("var/lib/docker" "@var/lib/docker" "@/var/lib/docker")~ -Example: ~GRUB_BTRFS_IGNORE_PREFIX_PATH=("var/lib/docker" "@var/lib/docker" "@/var/lib/docker")~
*** ~GRUB_BTRFS_IGNORE_SNAPSHOT_TYPE~ *** ~GRUB_BTRFS_IGNORE_SNAPSHOT_TYPE~
Ignore specific type/tag of snapshot during run "grub-mkconfig". Ignore specific type/tag of snapshot during run "grub-mkconfig".
@@ -106,12 +106,12 @@ Type = single, pre, post.
For Timeshift: For Timeshift:
Tag = boot, ondemand, hourly, daily, weekly, monthly. Tag = boot, ondemand, hourly, daily, weekly, monthly.
- Default: ("") - Default: ("")
- Example: ~GRUB_BTRFS_IGNORE_SNAPSHOT_TYPE=("ondemand")~ -Example: ~GRUB_BTRFS_IGNORE_SNAPSHOT_TYPE=("ondemand")~
*** ~GRUB_BTRFS_IGNORE_SNAPSHOT_DESCRIPTION~ *** ~GRUB_BTRFS_IGNORE_SNAPSHOT_DESCRIPTION~
Ignore specific description of snapshot during run "grub-mkconfig". Ignore specific description of snapshot during run "grub-mkconfig".
- Default: ("") - Default: ("")
- Example: ~GRUB_BTRFS_IGNORE_SNAPSHOT_DESCRIPTION=("timeline")~ -Example: ~GRUB_BTRFS_IGNORE_SNAPSHOT_DESCRIPTION=("timeline")~
** DISTRIBUTION DEPENDENT SETTINGS ** DISTRIBUTION DEPENDENT SETTINGS
@@ -119,7 +119,7 @@ Ignore specific description of snapshot during run "grub-mkconfig".
Location of kernels/initramfs/microcode. Location of kernels/initramfs/microcode.
Used by "grub-btrfs" to detect the boot partition and the location of kernels, initramfs and microcodes. Used by "grub-btrfs" to detect the boot partition and the location of kernels, initramfs and microcodes.
- Default: "/boot" - Default: "/boot"
- Example: ~GRUB_BTRFS_BOOT_DIRNAME="/"~ -Example: ~GRUB_BTRFS_BOOT_DIRNAME="/"~
*** ~GRUB_BTRFS_GRUB_DIRNAME~ *** ~GRUB_BTRFS_GRUB_DIRNAME~
Location of the folder containing the "grub.cfg" file. Location of the folder containing the "grub.cfg" file.
@@ -127,27 +127,7 @@ Used by grub-btrfs to save the file "grub-btrfs.cfg".
Might be grub2 on some systems. Might be grub2 on some systems.
For example, on Fedora with EFI : "/boot/efi/EFI/fedora" For example, on Fedora with EFI : "/boot/efi/EFI/fedora"
- Default: "/boot/grub" - Default: "/boot/grub"
- Example: ~GRUB_BTRFS_GRUB_DIRNAME="/boot/grub2"~ -Example: ~GRUB_BTRFS_GRUB_DIRNAME="/boot/grub2"~
*** ~GRUB_BTRFS_GBTRFS_DIRNAME~
Location where grub-btrfs.cfg should be saved.
Some distributions (like OpenSuSE) store those file at the snapshot directory
instead of boot. Be aware that this direcory must be available for grub during
startup of the system.
- Default: "/boot/grub"
- Example GRUB_BTRFS_GBTRFS_DIRNAME="/boot/grub"
*** ~GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME~
Location of the directory where Grub searches for the grub-btrfs.cfg file.
Some distributions (like OpenSuSE) store those file at the snapshot directory
instead of boot. Be aware that this direcory must be available for grub during
startup of the system.
- Default: "\${prefix}" (This is a grub variable that resolves to where grub is
installed. (like /boot/grub, /boot/efi/grub))
- NOTE: If variables of grub are used here like ${prefix}, they need to be escaped
with `\` before the `$`
- Example: GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME="\${prefix}"
*** ~GRUB_BTRFS_MKCONFIG~ *** ~GRUB_BTRFS_MKCONFIG~
Name/path of the command to generate the grub menu, used by "grub-btrfs.service" Name/path of the command to generate the grub menu, used by "grub-btrfs.service"
@@ -155,7 +135,7 @@ Might be 'grub2-mkconfig' on some systems (e.g. Fedora)
Default paths are /sbin:/bin:/usr/sbin:/usr/bin, if your path is missing, report it on the upstream project. Default paths are /sbin:/bin:/usr/sbin:/usr/bin, if your path is missing, report it on the upstream project.
You can use the name of the command only or full the path. You can use the name of the command only or full the path.
- Default: grub-mkconfig - Default: grub-mkconfig
- Example: ~GRUB_BTRFS_MKCONFIG=/sbin/grub2-mkconfig~ -Example: ~GRUB_BTRFS_MKCONFIG=/sbin/grub2-mkconfig~
*** ~GRUB_BTRFS_SCRIPT_CHECK~ *** ~GRUB_BTRFS_SCRIPT_CHECK~
Name of grub-script-check command, used by "grub-btrfs" Name of grub-script-check command, used by "grub-btrfs"

View File

@@ -9,7 +9,7 @@ when a new btrfs snapshot is created.
.SH "SYNOPSIS" .SH "SYNOPSIS"
.PP .PP
\fCgrub\-btrfsd [\-h, \-\-help] [\-c, \-\-no\-color] [\-l, \-\-log\-file LOG_FILE] [\-s, \-\-syslog] [\-t, \-\-timeshift\-auto] [\-v, \-\-verbose] SNAPSHOTS_DIR\fP \fCgrub\-btrfsd [\-h, \-\-help] [\-c, \-\-no\-color] [\-l, \-\-log\-file LOG_FILE] [\-s, \-\-syslog] [\-t, \-\-timeshift\-auto] [\-o, \-\-timeshift\-old] [\-v, \-\-verbose] SNAPSHOTS_DIR\fP
.SH "DESCRIPTION" .SH "DESCRIPTION"
.PP .PP
@@ -38,6 +38,10 @@ Write to syslog
.PP .PP
This is a flag to activate the auto detection of the path where Timeshift stores snapshots. Newer versions (>=22.06) of Timeshift mount their snapshots to \fC/run/timeshift/$PID/backup/timeshift\-btrfs\fP. Where \fC$PID\fP is the process ID of the currently running Timeshift session. The PID is changing every time Timeshift is opened. grub-btrfsd can automatically take care of the detection of the correct PID and directory if this flag is set. In this case the argument \fCSNAPSHOTS_DIR\fP has no effect. This is a flag to activate the auto detection of the path where Timeshift stores snapshots. Newer versions (>=22.06) of Timeshift mount their snapshots to \fC/run/timeshift/$PID/backup/timeshift\-btrfs\fP. Where \fC$PID\fP is the process ID of the currently running Timeshift session. The PID is changing every time Timeshift is opened. grub-btrfsd can automatically take care of the detection of the correct PID and directory if this flag is set. In this case the argument \fCSNAPSHOTS_DIR\fP has no effect.
.SS "\fC\-o / \-\-timeshift\-old\fP"
.PP
Look for snapshots in \fC/run/timeshift/backup/timeshift\-btrfs\fP instead of \fC/run/timeshift/$PID/backup/timeshift\-btrfs\fP. This is to be used for Timeshift versions <22.06.
.SS "\fC\-v / \-\-verbose\fP" .SS "\fC\-v / \-\-verbose\fP"
.PP .PP
Let the log of the daemon be more verbose Let the log of the daemon be more verbose

View File

@@ -10,7 +10,7 @@ grub-btrfsd - An OpenRC daemon to automatically update the grub menu with
when a new btrfs snapshot is created. when a new btrfs snapshot is created.
* SYNOPSIS * SYNOPSIS
~grub-btrfsd [-h, --help] [-c, --no-color] [-l, --log-file LOG_FILE] [-s, --syslog] [-t, --timeshift-auto] [-v, --verbose] SNAPSHOTS_DIR~ ~grub-btrfsd [-h, --help] [-c, --no-color] [-l, --log-file LOG_FILE] [-s, --syslog] [-t, --timeshift-auto] [-o, --timeshift-old] [-v, --verbose] SNAPSHOTS_DIR~
* DESCRIPTION * DESCRIPTION
Grub-btrfsd is a shell script which is meant to be run as a daemon. Grub-btrfsd is a shell script which is meant to be run as a daemon.
@@ -33,6 +33,9 @@ Write to syslog
** ~-t / --timeshift-auto~ ** ~-t / --timeshift-auto~
This is a flag to activate the auto detection of the path where Timeshift stores snapshots. Newer versions (>=22.06) of Timeshift mount their snapshots to ~/run/timeshift/$PID/backup/timeshift-btrfs~. Where ~$PID~ is the process ID of the currently running Timeshift session. The PID is changing every time Timeshift is opened. grub-btrfsd can automatically take care of the detection of the correct PID and directory if this flag is set. In this case the argument ~SNAPSHOTS_DIR~ has no effect. This is a flag to activate the auto detection of the path where Timeshift stores snapshots. Newer versions (>=22.06) of Timeshift mount their snapshots to ~/run/timeshift/$PID/backup/timeshift-btrfs~. Where ~$PID~ is the process ID of the currently running Timeshift session. The PID is changing every time Timeshift is opened. grub-btrfsd can automatically take care of the detection of the correct PID and directory if this flag is set. In this case the argument ~SNAPSHOTS_DIR~ has no effect.
** ~-o / --timeshift-old~
Look for snapshots in ~/run/timeshift/backup/timeshift-btrfs~ instead of ~/run/timeshift/$PID/backup/timeshift-btrfs~. This is to be used for Timeshift versions <22.06.
** ~-v / --verbose~ ** ~-v / --verbose~
Let the log of the daemon be more verbose Let the log of the daemon be more verbose