Fix indentation

My IDE was set up incorrectly.
Convert all tab indentation to space.
This commit is contained in:
Antynea
2020-10-22 07:07:30 +02:00
committed by GitHub
parent d4b97415b0
commit 0ed5adaf32

View File

@@ -72,12 +72,12 @@ boot_directory=${GRUB_BTRFS_BOOT_DIRNAME:-"/boot"}
## 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:-"false"}" in case "${GRUB_BTRFS_DISABLE_PROTECTION_SUBMENU:-"false"}" in
true) unrestricted_access_submenu="--unrestricted ";; true) unrestricted_access_submenu="--unrestricted ";;
*) unrestricted_access_submenu="" *) unrestricted_access_submenu=""
esac esac
# Authorized users (--users foo,bar) # Authorized users (--users foo,bar)
if [ ! -z "${GRUB_BTRFS_PROTECTION_AUTHORIZED_USERS}" ] ; then if [ ! -z "${GRUB_BTRFS_PROTECTION_AUTHORIZED_USERS}" ] ; then
protection_authorized_users="--users ${GRUB_BTRFS_PROTECTION_AUTHORIZED_USERS} " protection_authorized_users="--users ${GRUB_BTRFS_PROTECTION_AUTHORIZED_USERS} "
fi fi
### variables script ### variables script
@@ -110,30 +110,30 @@ check_uuid_required() {
if [ "x${root_uuid}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \ if [ "x${root_uuid}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
|| ! test -e "/dev/disk/by-uuid/${root_uuid}" \ || ! test -e "/dev/disk/by-uuid/${root_uuid}" \
|| ( test -e "${root_device}" && uses_abstraction "${root_device}" lvm ); then || ( test -e "${root_device}" && uses_abstraction "${root_device}" lvm ); then
LINUX_ROOT_DEVICE=${root_device} LINUX_ROOT_DEVICE=${root_device}
else else
LINUX_ROOT_DEVICE=UUID=${root_uuid} LINUX_ROOT_DEVICE=UUID=${root_uuid}
fi fi
} }
### Error Handling ### Error Handling
print_error() print_error()
{ {
local arg="$@" local arg="$@"
local nothing_to_do="If you think an error has occurred , please file a bug report at \" https://github.com/Antynea/grub-btrfs \"\nNothing to do. Abort.\n" local nothing_to_do="If you think an error has occurred , please file a bug report at \" https://github.com/Antynea/grub-btrfs \"\nNothing to do. Abort.\n"
printf "${arg}\n${nothing_to_do}" >&2 ; printf "${arg}\n${nothing_to_do}" >&2 ;
exit 0 exit 0
} }
test_btrfs() test_btrfs()
{ {
[[ "$root_fs" != "btrfs" ]] && print_error "Root partition isn't a btrfs filesystem.\nThis script only supports snapshots of the btrfs filesystem." [[ "$root_fs" != "btrfs" ]] && print_error "Root partition isn't a btrfs filesystem.\nThis script only supports snapshots of the btrfs filesystem."
set +e set +e
type btrfs >/dev/null 2>&1 type btrfs >/dev/null 2>&1
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
print_error "Unable to retrieve info from btrfs filesystem, make sure you have btrfs-progs on your system." print_error "Unable to retrieve info from btrfs filesystem, make sure you have btrfs-progs on your system."
fi fi
set -e set -e
} }
### Script ### Script
@@ -147,350 +147,348 @@ echo "$@" >> "$grub_directory/grub-btrfs.cfg"
make_menu_entries() make_menu_entries()
{ {
## \" required for snap,kernels,init,microcode with space in their name ## \" required for snap,kernels,init,microcode with space in their name
entry "submenu '$title_menu' { entry "submenu '$title_menu' {
submenu '---> $title_menu <---' { echo }" submenu '---> $title_menu <---' { echo }"
for k in "${name_kernel[@]}"; do for k in "${name_kernel[@]}"; do
[[ ! -f "${boot_dir}"/"${k}" ]] && continue; [[ ! -f "${boot_dir}"/"${k}" ]] && continue;
kversion=${k#*"-"} kversion=${k#*"-"}
for i in "${name_initramfs[@]}"; do for i in "${name_initramfs[@]}"; do
prefix_i=${i%%"-"*} prefix_i=${i%%"-"*}
suffix_i=${i#*"-"} suffix_i=${i#*"-"}
alt_suffix_i=${i##*"-"} alt_suffix_i=${i##*"-"}
if [ "${kversion}" = "${suffix_i}" ]; then i="${i}"; if [ "${kversion}" = "${suffix_i}" ]; then i="${i}";
elif [ "${kversion}.img" = "${suffix_i}" ]; then i="${i}"; elif [ "${kversion}.img" = "${suffix_i}" ]; then i="${i}";
elif [ "${kversion}-fallback.img" = "${suffix_i}" ]; then i="${i}"; elif [ "${kversion}-fallback.img" = "${suffix_i}" ]; then i="${i}";
elif [ "${kversion}.gz" = "${suffix_i}" ]; then i="${i}"; elif [ "${kversion}.gz" = "${suffix_i}" ]; then i="${i}";
else continue ; else continue ;
fi fi
for u in "${name_microcode[@]}"; do for u in "${name_microcode[@]}"; do
if [[ "${name_microcode}" != "x" ]] ; then if [[ "${name_microcode}" != "x" ]] ; then
entry " entry "
menuentry '"${k}" & "${i}" & "${u}"' ${CLASS} "\$menuentry_id_option" 'gnulinux-snapshots-$boot_uuid' {" menuentry '"${k}" & "${i}" & "${u}"' ${CLASS} "\$menuentry_id_option" 'gnulinux-snapshots-$boot_uuid' {"
else else
entry " entry "
menuentry '"${k}" & "${i}"' ${CLASS} "\$menuentry_id_option" 'gnulinux-snapshots-$boot_uuid' {" menuentry '"${k}" & "${i}"' ${CLASS} "\$menuentry_id_option" 'gnulinux-snapshots-$boot_uuid' {"
fi fi
entry "\ entry "\
if [ x\$feature_all_video_module = xy ]; then if [ x\$feature_all_video_module = xy ]; then
insmod all_video insmod all_video
fi fi
set gfxpayload=keep set gfxpayload=keep
insmod ${boot_fs} insmod ${boot_fs}
if [ x\$feature_platform_search_hint = xy ]; then if [ x\$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root ${boot_hs} ${boot_uuid} search --no-floppy --fs-uuid --set=root ${boot_hs} ${boot_uuid}
else else
search --no-floppy --fs-uuid --set=root ${boot_uuid} search --no-floppy --fs-uuid --set=root ${boot_uuid}
fi fi
echo 'Loading Snapshot: "${snap_date_time}" "${snap_dir_name}"' echo 'Loading Snapshot: "${snap_date_time}" "${snap_dir_name}"'
echo 'Loading Kernel: "${k}" ...' echo 'Loading Kernel: "${k}" ...'
linux \"${boot_dir_root_grub}/"${k}"\" root="${LINUX_ROOT_DEVICE}" rw ${kernel_parameters} rootflags=subvol=\""${snap_dir_name}"\"" linux \"${boot_dir_root_grub}/"${k}"\" root="${LINUX_ROOT_DEVICE}" rw ${kernel_parameters} rootflags=subvol=\""${snap_dir_name}"\""
if [[ "${name_microcode}" != "x" ]] ; then if [[ "${name_microcode}" != "x" ]] ; then
entry "\ entry "\
echo 'Loading Microcode & Initramfs: "${u}" "${i}" ...' echo 'Loading Microcode & Initramfs: "${u}" "${i}" ...'
initrd \"${boot_dir_root_grub}/"${u}"\" \"${boot_dir_root_grub}/"${i}"\"" initrd \"${boot_dir_root_grub}/"${u}"\" \"${boot_dir_root_grub}/"${i}"\""
else else
entry "\ entry "\
echo 'Loading Initramfs: "${i}" ...' echo 'Loading Initramfs: "${i}" ...'
initrd \"${boot_dir_root_grub}/"${i}"\"" initrd \"${boot_dir_root_grub}/"${i}"\""
fi fi
entry " }" entry " }"
count_warning_menuentries=$((1+$count_warning_menuentries)) count_warning_menuentries=$((1+$count_warning_menuentries))
done done
done done
done done
entry "}" entry "}"
} }
## Trim a string from leading and trailing whitespaces ## Trim a string from leading and trailing whitespaces
trim() { trim() {
local var="$*" local var="$*"
var="${var#"${var%%[![:space:]]*}"}" var="${var#"${var%%[![:space:]]*}"}"
var="${var%"${var##*[![:space:]]}"}" var="${var%"${var##*[![:space:]]}"}"
echo -n "$var" echo -n "$var"
} }
## List of snapshots on filesystem ## List of snapshots on filesystem
snapshot_list() snapshot_list()
{ {
# Query info from snapper if it is installed # Query info from snapper if it is installed
type snapper >/dev/null 2>&1 type snapper >/dev/null 2>&1
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
if [ -s "/etc/snapper/configs/$snapper_config" ]; then if [ -s "/etc/snapper/configs/$snapper_config" ]; then
printf "Info: snapper detected, using config '$snapper_config'\n" >&2 printf "Info: snapper detected, using config '$snapper_config'\n" >&2
local snapper_ids=($(snapper --no-dbus -t 0 -c "$snapper_config" list --disable-used-space | tail -n +3 | cut -d'|' -f 1)) local snapper_ids=($(snapper --no-dbus -t 0 -c "$snapper_config" list --disable-used-space | tail -n +3 | cut -d'|' -f 1))
local snapper_types=($(snapper --no-dbus -t 0 -c "$snapper_config" list --disable-used-space | tail -n +3 | cut -d'|' -f 2)) local snapper_types=($(snapper --no-dbus -t 0 -c "$snapper_config" list --disable-used-space | tail -n +3 | cut -d'|' -f 2))
IFS=$'\n' IFS=$'\n'
local snapper_descriptions=($(snapper --no-dbus -t 0 -c "$snapper_config" list --disable-used-space | tail -n +3 | rev | cut -d'|' -f 2 | rev)) local snapper_descriptions=($(snapper --no-dbus -t 0 -c "$snapper_config" list --disable-used-space | tail -n +3 | rev | cut -d'|' -f 2 | rev))
else else
printf "Warning: snapper detected but config '$snapper_config' does not exist\n" >&2 printf "Warning: snapper detected but config '$snapper_config' does not exist\n" >&2
fi fi
fi fi
IFS=$'\n' IFS=$'\n'
# Parse btrfs snapshots # Parse btrfs snapshots
local entries=() local entries=()
local ids=() local ids=()
local max_entry_length=0 local max_entry_length=0
for snap in $(btrfs subvolume list -sa "${btrfssubvolsort}" /); do for snap in $(btrfs subvolume list -sa "${btrfssubvolsort}" /); do
IFS=$oldIFS IFS=$oldIFS
snap=($snap) snap=($snap)
local snap_path_name=${snap[@]:13:${#snap[@]}} local snap_path_name=${snap[@]:13:${#snap[@]}}
# Discard deleted snapshots # Discard deleted snapshots
if [ "$snap_path_name" = "DELETED" ]; then continue; fi if [ "$snap_path_name" = "DELETED" ]; then continue; fi
[[ ${snap_path_name%%"/"*} == "<FS_TREE>" ]] && snap_path_name=${snap_path_name#*"/"} [[ ${snap_path_name%%"/"*} == "<FS_TREE>" ]] && snap_path_name=${snap_path_name#*"/"}
# ignore specific path during run "grub-mkconfig" # ignore specific path during run "grub-mkconfig"
if [ ! -z "${GRUB_BTRFS_IGNORE_SPECIFIC_PATH}" ] ; then if [ ! -z "${GRUB_BTRFS_IGNORE_SPECIFIC_PATH}" ] ; then
for isp in ${GRUB_BTRFS_IGNORE_SPECIFIC_PATH[@]} ; do for isp in ${GRUB_BTRFS_IGNORE_SPECIFIC_PATH[@]} ; do
[[ "${snap_path_name}" == "${isp}" ]] && continue 2; [[ "${snap_path_name}" == "${isp}" ]] && continue 2;
done done
fi fi
if [ ! -z "${GRUB_BTRFS_IGNORE_PREFIX_PATH}" ] ; then if [ ! -z "${GRUB_BTRFS_IGNORE_PREFIX_PATH}" ] ; then
for isp in ${GRUB_BTRFS_IGNORE_PREFIX_PATH[@]} ; do for isp in ${GRUB_BTRFS_IGNORE_PREFIX_PATH[@]} ; do
[[ "${snap_path_name}" == "${isp}"/* ]] && continue 2; [[ "${snap_path_name}" == "${isp}"/* ]] && continue 2;
done done
fi fi
# detect if /boot directory exists # detect if /boot directory exists
[[ ! -d "$gbgmp/$snap_path_name/boot" ]] && continue; [[ ! -d "$gbgmp/$snap_path_name/boot" ]] && continue;
local id="${snap_path_name//[!0-9]}" # brutal way to get id: remove everything non-numeric local id="${snap_path_name//[!0-9]}" # brutal way to get id: remove everything non-numeric
ids+=("$id") ids+=("$id")
local entry="${snap[@]:10:2} | ${snap_path_name}" local entry="${snap[@]:10:2} | ${snap_path_name}"
entries+=("$entry") entries+=("$entry")
# Find max length of a snapshot entry, needed for pretty formatting # Find max length of a snapshot entry, needed for pretty formatting
local length="${#entry}" local length="${#entry}"
[[ "$length" -gt "$max_entry_length" ]] && max_entry_length=$length [[ "$length" -gt "$max_entry_length" ]] && max_entry_length=$length
done done
# Find max length of a snapshot type, needed for pretty formatting # Find max length of a snapshot type, needed for pretty formatting
local max_type_length=0 local max_type_length=0
for id in "${ids[@]}"; do for id in "${ids[@]}"; do
for j in "${!snapper_ids[@]}"; do for j in "${!snapper_ids[@]}"; do
local snapper_id="${snapper_ids[$j]//[[:space:]]/}" local snapper_id="${snapper_ids[$j]//[[:space:]]/}"
if [[ "$snapper_id" == "$id" ]]; then if [[ "$snapper_id" == "$id" ]]; then
local snapper_type=$(trim "${snapper_types[$j]}") local snapper_type=$(trim "${snapper_types[$j]}")
local length="${#snapper_type}" local length="${#snapper_type}"
[[ "$length" -gt "$max_type_length" ]] && max_type_length=$length [[ "$length" -gt "$max_type_length" ]] && max_type_length=$length
fi fi
done done
done done
for i in "${!entries[@]}"; do for i in "${!entries[@]}"; do
local id="${ids[$i]}" local id="${ids[$i]}"
local entry="${entries[$i]}" local entry="${entries[$i]}"
for j in "${!snapper_ids[@]}"; do for j in "${!snapper_ids[@]}"; do
local snapper_id="${snapper_ids[$j]//[[:space:]]/}" local snapper_id="${snapper_ids[$j]//[[:space:]]/}"
# remove other non numeric characters # remove other non numeric characters
snapper_id="${snapper_id//\*/}" snapper_id="${snapper_id//\*/}"
snapper_id="${snapper_id//\+/}" snapper_id="${snapper_id//\+/}"
snapper_id="${snapper_id//-/}" snapper_id="${snapper_id//-/}"
if [[ "$snapper_id" == "$id" ]]; then if [[ "$snapper_id" == "$id" ]]; then
local snapper_type=$(trim "${snapper_types[$j]}") local snapper_type=$(trim "${snapper_types[$j]}")
local snapper_description=$(trim "${snapper_descriptions[$j]}") local snapper_description=$(trim "${snapper_descriptions[$j]}")
printf -v entry "%-${max_entry_length}s | %-${max_type_length}s | %s" "$entry" "$snapper_type" "$snapper_description" printf -v entry "%-${max_entry_length}s | %-${max_type_length}s | %s" "$entry" "$snapper_type" "$snapper_description"
break break
fi fi
done done
echo "$entry" echo "$entry"
done done
IFS=$oldIFS IFS=$oldIFS
} }
## Detect kernels in "/boot" ## Detect kernels in "/boot"
detect_kernel() detect_kernel()
{ {
list_kernel=() list_kernel=()
# Original kernel (auto-detect) # Original kernel (auto-detect)
for okernel in "${boot_dir}"/vmlinuz-* \ for okernel in "${boot_dir}"/vmlinuz-* \
"${boot_dir}"/vmlinux-* \ "${boot_dir}"/vmlinux-* \
"${boot_dir}"/kernel-* ; do "${boot_dir}"/kernel-* ; do
[[ ! -f "${okernel}" ]] && continue; [[ ! -f "${okernel}" ]] && continue;
list_kernel+=("$okernel") list_kernel+=("$okernel")
done done
# Custom name kernel in GRUB_BTRFS_NKERNEL # Custom name kernel in GRUB_BTRFS_NKERNEL
if [ ! -z "${GRUB_BTRFS_NKERNEL}" ] ; then if [ ! -z "${GRUB_BTRFS_NKERNEL}" ] ; then
for ckernel in "${boot_dir}/${GRUB_BTRFS_NKERNEL[@]}" ; do for ckernel in "${boot_dir}/${GRUB_BTRFS_NKERNEL[@]}" ; do
[[ ! -f "${ckernel}" ]] && continue; [[ ! -f "${ckernel}" ]] && continue;
list_kernel+=("$ckernel") list_kernel+=("$ckernel")
done done
fi fi
} }
## Detect initramfs in "/boot" ## Detect initramfs in "/boot"
detect_initramfs() detect_initramfs()
{ {
list_initramfs=() list_initramfs=()
# Original initramfs (auto-detect) # Original initramfs (auto-detect)
for oinitramfs in "${boot_dir}"/initrd.img-* \ for oinitramfs in "${boot_dir}"/initrd.img-* \
"${boot_dir}"/initrd-*.img \ "${boot_dir}"/initrd-*.img \
"${boot_dir}"/initrd-*.gz \ "${boot_dir}"/initrd-*.gz \
"${boot_dir}"/initramfs-*.img \ "${boot_dir}"/initramfs-*.img \
"${boot_dir}"/initramfs-*.gz ; do "${boot_dir}"/initramfs-*.gz ; do
[[ ! -f "${oinitramfs}" ]] && continue; [[ ! -f "${oinitramfs}" ]] && continue;
list_initramfs+=("$oinitramfs") list_initramfs+=("$oinitramfs")
done done
# Custom name initramfs in GRUB_BTRFS_NINIT # Custom name initramfs in GRUB_BTRFS_NINIT
if [ ! -z "${GRUB_BTRFS_NINIT}" ] ; then if [ ! -z "${GRUB_BTRFS_NINIT}" ] ; then
for cinitramfs in "${boot_dir}/${GRUB_BTRFS_NINIT[@]}" ; do for cinitramfs in "${boot_dir}/${GRUB_BTRFS_NINIT[@]}" ; do
[[ ! -f "${cinitramfs}" ]] && continue; [[ ! -f "${cinitramfs}" ]] && continue;
list_initramfs+=("$cinitramfs") list_initramfs+=("$cinitramfs")
done done
fi fi
} }
## Detect microcode in "/boot" ## Detect microcode in "/boot"
detect_microcode() detect_microcode()
{ {
list_ucode=() list_ucode=()
# Original intel/amd microcode (auto-detect) # Original intel/amd microcode (auto-detect)
# See "https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html" # See "https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html"
for oiucode in "${boot_dir}"/intel-uc.img \ for oiucode in "${boot_dir}"/intel-uc.img \
"${boot_dir}"/intel-ucode.img \ "${boot_dir}"/intel-ucode.img \
"${boot_dir}"/amd-uc.img \ "${boot_dir}"/amd-uc.img \
"${boot_dir}"/amd-ucode.img \ "${boot_dir}"/amd-ucode.img \
"${boot_dir}"/early_ucode.cpio \ "${boot_dir}"/early_ucode.cpio \
"${boot_dir}"/microcode.cpio; do "${boot_dir}"/microcode.cpio; do
[[ ! -f "${oiucode}" ]] && continue; [[ ! -f "${oiucode}" ]] && continue;
list_ucode+=("$oiucode") list_ucode+=("$oiucode")
done done
# Custom name microcode in GRUB_BTRFS_CUSTOM_MICROCODE # Custom name microcode in GRUB_BTRFS_CUSTOM_MICROCODE
if [ ! -z "${GRUB_BTRFS_CUSTOM_MICROCODE}" ] ; then if [ ! -z "${GRUB_BTRFS_CUSTOM_MICROCODE}" ] ; then
for cucode in "${boot_dir}/${GRUB_BTRFS_CUSTOM_MICROCODE[@]}" ; do for cucode in "${boot_dir}/${GRUB_BTRFS_CUSTOM_MICROCODE[@]}" ; do
[[ ! -f "${cucode}" ]] && continue [[ ! -f "${cucode}" ]] && continue
list_ucode+=("$cucode") list_ucode+=("$cucode")
done done
fi fi
if [ -z "${list_ucode}" ]; then list_ucode=(x); fi if [ -z "${list_ucode}" ]; then list_ucode=(x); fi
} }
## Show full path snapshot or only name ## Show full path snapshot or only name
path_snapshot() path_snapshot()
{ {
case "${GRUB_BTRFS_DISPLAY_PATH_SNAPSHOT:-"true"}" in case "${GRUB_BTRFS_DISPLAY_PATH_SNAPSHOT:-"true"}" in
true) name_snapshot=("${snap_full_name}");; true) name_snapshot=("${snap_full_name}");;
*) name_snapshot=("${snap_full_name#*"/"}") *) name_snapshot=("${snap_full_name#*"/"}")
esac esac
} }
## Title format in grub-menu ## Title format in grub-menu
title_format() title_format()
{ {
case "${GRUB_BTRFS_TITLE_FORMAT:-"p/d/n"}" in case "${GRUB_BTRFS_TITLE_FORMAT:-"p/d/n"}" in
p/n/d) title_menu="${prefixentry} ${name_snapshot} ${snap_date_time}";; p/n/d) title_menu="${prefixentry} ${name_snapshot} ${snap_date_time}";;
p/d) title_menu="${prefixentry} ${snap_date_time}";; p/d) title_menu="${prefixentry} ${snap_date_time}";;
p/n) title_menu="${prefixentry} ${name_snapshot}";; p/n) title_menu="${prefixentry} ${name_snapshot}";;
d/n) title_menu="${snap_date_time} ${name_snapshot}";; d/n) title_menu="${snap_date_time} ${name_snapshot}";;
n/d) title_menu="${name_snapshot} ${snap_date_time}";; n/d) title_menu="${name_snapshot} ${snap_date_time}";;
p) title_menu="${prefixentry}";; p) title_menu="${prefixentry}";;
d) title_menu="${snap_date_time}";; d) title_menu="${snap_date_time}";;
n) title_menu="${name_snapshot}";; n) title_menu="${name_snapshot}";;
*) title_menu="${prefixentry} ${snap_date_time} ${name_snapshot}" *) title_menu="${prefixentry} ${snap_date_time} ${name_snapshot}"
esac esac
} }
## List of kernels, initramfs and microcode in snapshots ## List of kernels, initramfs and microcode in snapshots
boot_bounded() boot_bounded()
{ {
# Initialize menu entries # Initialize menu entries
IFS=$'\n' IFS=$'\n'
for item in $(snapshot_list); do for item in $(snapshot_list); do
[[ ${limit_snap_show} -le 0 ]] && break; # fix: limit_snap_show=0 [[ ${limit_snap_show} -le 0 ]] && break; # fix: limit_snap_show=0
IFS=$oldIFS IFS=$oldIFS
snap_full_name="$(echo "$item" | cut -d'|' -f2-)" # do not trim it to keep nice formatting snap_full_name="$(echo "$item" | cut -d'|' -f2-)" # do not trim it to keep nice formatting
snap_dir_name="$(echo "$item" | cut -d'|' -f2)" snap_dir_name="$(echo "$item" | cut -d'|' -f2)"
snap_dir_name="$(trim "$snap_dir_name")" snap_dir_name="$(trim "$snap_dir_name")"
snap_date_time="$(echo "$item" | cut -d' ' -f1-2)" snap_date_time="$(echo "$item" | cut -d' ' -f1-2)"
snap_date_time="$(trim "$snap_date_time")" snap_date_time="$(trim "$snap_date_time")"
boot_dir="$gbgmp/$snap_dir_name$boot_directory" boot_dir="$gbgmp/$snap_dir_name$boot_directory"
# Kernel (Original + custom kernel) # Kernel (Original + custom kernel)
detect_kernel detect_kernel
if [ -z "${list_kernel}" ]; then continue; fi if [ -z "${list_kernel}" ]; then continue; fi
name_kernel=("${list_kernel[@]##*"/"}") name_kernel=("${list_kernel[@]##*"/"}")
# Initramfs (Original + custom initramfs) # Initramfs (Original + custom initramfs)
detect_initramfs detect_initramfs
if [ -z "${list_initramfs}" ]; then continue; fi if [ -z "${list_initramfs}" ]; then continue; fi
name_initramfs=("${list_initramfs[@]##*"/"}") name_initramfs=("${list_initramfs[@]##*"/"}")
# microcode (auto-detect + custom microcode) # microcode (auto-detect + custom microcode)
detect_microcode detect_microcode
name_microcode=("${list_ucode[@]##*"/"}") name_microcode=("${list_ucode[@]##*"/"}")
# show snapshot found during run "grub-mkconfig" # show snapshot found during run "grub-mkconfig"
if [[ "${GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND:-"true"}" = "true" ]]; then if [[ "${GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND:-"true"}" = "true" ]]; then
printf "Found snapshot: %s\n" "$item" >&2 ; printf "Found snapshot: %s\n" "$item" >&2 ;
fi fi
# Show full path snapshot or only name # Show full path snapshot or only name
path_snapshot path_snapshot
# Title format in grub-menu # Title format in grub-menu
title_format title_format
# convert /boot directory to root of GRUB (e.g /boot become /) # convert /boot directory to root of GRUB (e.g /boot become /)
boot_dir_root_grub="$(make_system_path_relative_to_its_root "${boot_dir}")" boot_dir_root_grub="$(make_system_path_relative_to_its_root "${boot_dir}")"
# Make menuentries # Make menuentries
make_menu_entries make_menu_entries
### Limit snapshots found during run "grub-mkconfig" ### Limit snapshots found during run "grub-mkconfig"
count_limit_snap=$((1+$count_limit_snap)) count_limit_snap=$((1+$count_limit_snap))
[[ $count_limit_snap -ge $limit_snap_show ]] && break; [[ $count_limit_snap -ge $limit_snap_show ]] && break;
# Limit generation of menuentries if exceeds 250 # Limit generation of menuentries if exceeds 250
# [[ $count_warning_menuentries -ge 250 ]] && break; # [[ $count_warning_menuentries -ge 250 ]] && break;
done done
IFS=$oldIFS IFS=$oldIFS
} }
boot_separate() boot_separate()
{ {
boot_dir="${boot_directory}" boot_dir="${boot_directory}"
# convert /boot directory to root of GRUB (e.g /boot become /) # convert /boot directory to root of GRUB (e.g /boot become /)
boot_dir_root_grub="$(make_system_path_relative_to_its_root "${boot_dir}")" boot_dir_root_grub="$(make_system_path_relative_to_its_root "${boot_dir}")"
# Kernel (Original + custom kernel) # Kernel (Original + custom kernel)
detect_kernel detect_kernel
if [ -z "${list_kernel}" ]; then print_error "Kernels not found."; fi if [ -z "${list_kernel}" ]; then print_error "Kernels not found."; fi
name_kernel=("${list_kernel[@]##*"/"}") name_kernel=("${list_kernel[@]##*"/"}")
# Initramfs (Original + custom initramfs)
detect_initramfs
if [ -z "${list_initramfs}" ]; then print_error "Initramfs not found."; fi
name_initramfs=("${list_initramfs[@]##*"/"}")
# microcode (auto-detect + custom microcode)
detect_microcode
name_microcode=("${list_ucode[@]##*"/"}")
# Initramfs (Original + custom initramfs) # Initialize menu entries
detect_initramfs IFS=$'\n'
if [ -z "${list_initramfs}" ]; then print_error "Initramfs not found."; fi for item in $(snapshot_list); do
name_initramfs=("${list_initramfs[@]##*"/"}") [[ ${limit_snap_show} -le 0 ]] && break; # fix: limit_snap_show=0
IFS=$oldIFS
# microcode (auto-detect + custom microcode) snap_full_name="$(echo "$item" | cut -d'|' -f2-)" # do not trim it to keep nice formatting
detect_microcode snap_dir_name="$(echo "$item" | cut -d'|' -f2)"
name_microcode=("${list_ucode[@]##*"/"}") snap_dir_name="$(trim "$snap_dir_name")"
snap_date_time="$(echo "$item" | cut -d' ' -f1-2)"
# Initialize menu entries snap_date_time="$(trim "$snap_date_time")"
IFS=$'\n' # show snapshot found during run "grub-mkconfig"
for item in $(snapshot_list); do if [[ "${GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND:-"true"}" = "true" ]]; then
[[ ${limit_snap_show} -le 0 ]] && break; # fix: limit_snap_show=0 printf "Found snapshot: %s\n" "$item" >&2 ;
IFS=$oldIFS fi
snap_full_name="$(echo "$item" | cut -d'|' -f2-)" # do not trim it to keep nice formatting # Show full path snapshot or only name
snap_dir_name="$(echo "$item" | cut -d'|' -f2)" path_snapshot
snap_dir_name="$(trim "$snap_dir_name")" # Title format in grub-menu
snap_date_time="$(echo "$item" | cut -d' ' -f1-2)" title_format
snap_date_time="$(trim "$snap_date_time")" # Make menuentries
# show snapshot found during run "grub-mkconfig" make_menu_entries
if [[ "${GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND:-"true"}" = "true" ]]; then # Limit snapshots found during run "grub-mkconfig"
printf "Found snapshot: %s\n" "$item" >&2 ; count_limit_snap=$((1+$count_limit_snap))
fi [[ $count_limit_snap -ge $limit_snap_show ]] && break;
# Show full path snapshot or only name # Limit generation of menuentries if exceeds 250
path_snapshot # [[ $count_warning_menuentries -ge 250 ]] && break;
# Title format in grub-menu done
title_format IFS=$oldIFS
# Make menuentries
make_menu_entries
# Limit snapshots found during run "grub-mkconfig"
count_limit_snap=$((1+$count_limit_snap))
[[ $count_limit_snap -ge $limit_snap_show ]] && break;
# Limit generation of menuentries if exceeds 250
# [[ $count_warning_menuentries -ge 250 ]] && break;
done
IFS=$oldIFS
} }
### Start ### Start
@@ -511,16 +509,16 @@ count_limit_snap=0
check_uuid_required check_uuid_required
# Detects if /boot is a separate partition # Detects if /boot is a separate partition
if [[ "${GRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION:-"false"}" == "true" ]]; then if [[ "${GRUB_BTRFS_OVERRIDE_BOOT_PARTITION_DETECTION:-"false"}" == "true" ]]; then
printf "Info: Override boot partition detection : enable \n" >&2 ; printf "Info: Override boot partition detection : enable \n" >&2 ;
boot_separate boot_separate
else else
if [[ "$root_uuid" != "$boot_uuid" ]]; then if [[ "$root_uuid" != "$boot_uuid" ]]; then
printf "Info: Separate boot partition detected \n" >&2 ; printf "Info: Separate boot partition detected \n" >&2 ;
boot_separate boot_separate
else else
printf "Info: Separate boot partition not detected \n" >&2 ; printf "Info: Separate boot partition not detected \n" >&2 ;
boot_bounded boot_bounded
fi fi
fi fi
# unmounting mount point # unmounting mount point
umount $gbgmp umount $gbgmp
@@ -529,16 +527,16 @@ umount $gbgmp
# printf "menuentries = $count_warning_menuentries \n" >&2 ; # printf "menuentries = $count_warning_menuentries \n" >&2 ;
# Show total found snapshots # Show total found snapshots
if [[ "${GRUB_BTRFS_SHOW_TOTAL_SNAPSHOTS_FOUND:-"true"}" = "true" && ! -z "${count_limit_snap}" && "${count_limit_snap}" != "0" ]]; then if [[ "${GRUB_BTRFS_SHOW_TOTAL_SNAPSHOTS_FOUND:-"true"}" = "true" && ! -z "${count_limit_snap}" && "${count_limit_snap}" != "0" ]]; then
printf "Found ${count_limit_snap} snapshot(s)\n" >&2 ; printf "Found ${count_limit_snap} snapshot(s)\n" >&2 ;
fi fi
# if no snapshot found, exit # if no snapshot found, exit
if [[ "${count_limit_snap}" = "0" || -z "${count_limit_snap}" ]]; then if [[ "${count_limit_snap}" = "0" || -z "${count_limit_snap}" ]]; then
print_error "No snapshots found." print_error "No snapshots found."
fi fi
# Make a submenu in GRUB (grub.cfg) # Make a submenu in GRUB (grub.cfg)
cat << EOF cat << EOF
submenu '${submenuname}' ${protection_authorized_users}${unrestricted_access_submenu}{ submenu '${submenuname}' ${protection_authorized_users}${unrestricted_access_submenu}{
configfile "\${prefix}/grub-btrfs.cfg" configfile "\${prefix}/grub-btrfs.cfg"
} }
EOF EOF
### End ### End