From 354b24ff32c66e2f4a6e989ccaf1a035f85c129a Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Mon, 21 Jul 2014 13:17:48 -0400 Subject: installers/pc: Prompt for block device --- (limited to 'installers') diff --git a/installers/pc.sh b/installers/pc.sh index 52525e2..a9f5898 100755 --- a/installers/pc.sh +++ b/installers/pc.sh @@ -45,6 +45,10 @@ main() host_arch="${host_arch}-${install_arch#*-}" check_arch_compat "${install_arch}" "${host_arch}" + printf '\nSelect a block device' + printf '\n=====================\n\n' + dev="$(prompt_block_dev)" + printf '\nInstalling base system' printf '\n======================\n\n' @@ -177,4 +181,77 @@ check_arch_compat() fi } +pretty_print_size_dec() +{ + local size="${1}" + + awk -v size=${size} 'BEGIN { + split("B KB MB GB TB", units, " "); + i=1; + while (size >= 1000) { + size /= 1000; + ++i; + }; + printf("%.2f %s\n", size, units[i]); }' +} + +pretty_print_size_bin() +{ + local size="${1}" + + awk -v size=${size} 'BEGIN { + split("B KiB MiB GiB TiB", units, " "); + i=1; + while (size >= 1024) { + size /= 1024; + ++i; + }; + printf("%.2f %s\n", size, units[i]); }' +} + +prompt_block_dev() +{ + local dev= + local vendor= + local model= + local name= + local size= + local size_s= + local desc= + local devs= + + set -- + for dev in /sys/block/*; do + dev="${dev#/sys/block/}" + case "${dev}" in + loop*|sr*) continue;; + esac + if [ -e "/sys/block/${dev}/device/vendor" ]; then + vendor="$(cat "/sys/block/${dev}/device/vendor")" + model="$(cat "/sys/block/${dev}/device/model")" + name="${vendor} ${model}" + else + name="$(cat "/sys/block/${dev}/device/name")" + fi + size="$(cat "/sys/block/${dev}/size")" + size="$(expr ${size} \* 512)" + size_s="$(pretty_print_size_dec "${size}")" + size_s="${size_s} ($(pretty_print_size_bin "${size}"))" + desc="$(printf '%s (%s) - %s\n' "${name}" "${dev}" "${size_s}")" + set -- "${@}" "${desc}" + devs="$(printf '%s\n%s\t%s\n' "${devs}" "${desc}" "${dev}")" + done + + printf 'Select a block device:\n' >&2 + _select "${@}" + + while IFS=' ' read -r desc dev; do + if [ "x${desc}" = "x${select_result}" ]; then + printf '%s\n' "${dev}" + fi + done <<-EOF + ${devs} + EOF +} + main "${@}" -- cgit v0.9.1