All checks were successful
🛡️ Shell Script Linting / 🛡️ Shell Script Linting (push) Successful in 54s
Signed-off-by: Marc S. Weidner <msw@coresecret.dev>
57 lines
1.6 KiB
Bash
57 lines
1.6 KiB
Bash
#!/bin/bash
|
|
#######################################
|
|
# Detects and collects all boot devices for GRUB installation.
|
|
# Supports /dev/sdX, /dev/vdX, /dev/hdX, /dev/nvmeXn1, /dev/mmcblkX.
|
|
# Globals:
|
|
# VAR_RECIPE_HIGHEST_DEVICE
|
|
# ary_bootdev_all
|
|
# grub_bootdev
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# 0: on success
|
|
#######################################
|
|
get_all_boot_devs() {
|
|
### Declare Arrays, HashMaps, and Variables.
|
|
declare -ag ary_bootdev_all=()
|
|
declare dev="" dev_prefix="" dev_path="" letter=""
|
|
declare -i ascii=0 ascii_end=0 ascii_start=0
|
|
|
|
### Determine prefix from grub_bootdev (e.g., "sd", "vd", "nvme", "mmcblk")
|
|
dev_prefix=$(basename "${grub_bootdev}" | sed -E 's/^([a-z]+)[a-z0-9]*$/\1/')
|
|
|
|
case "${dev_prefix}" in
|
|
|
|
sd|vd|hd)
|
|
ascii_start=$(printf '%d' "'a")
|
|
ascii_end=$(printf '%d' "'${VAR_RECIPE_HIGHEST_DEVICE}")
|
|
for ((ascii = ascii_start; ascii <= ascii_end; ascii++)); do
|
|
letter=$(printf "%b" "\\$(printf '%03o' "${ascii}")")
|
|
dev_path="/dev/${dev_prefix}${letter}"
|
|
[[ -b "${dev_path}" ]] && ary_bootdev_all+=("${dev_path}")
|
|
done
|
|
;;
|
|
|
|
nvme)
|
|
# shellcheck disable=SC2312
|
|
while read -r dev; do
|
|
ary_bootdev_all+=("/dev/${dev}")
|
|
done < <(lsblk -dn -o NAME | grep -E '^nvme[0-9]+n1$')
|
|
;;
|
|
|
|
mmcblk)
|
|
# shellcheck disable=SC2312
|
|
while read -r dev; do
|
|
ary_bootdev_all+=("/dev/${dev}")
|
|
done < <(lsblk -dn -o NAME | grep -E '^mmcblk[0-9]+$')
|
|
;;
|
|
|
|
*)
|
|
do_log "warning" "file_only" "4230() Unrecognized boot device prefix: ${dev_prefix}"
|
|
;;
|
|
|
|
esac
|
|
|
|
return 0
|
|
}
|