gentoo-install/scripts/utils.sh

138 lines
2.5 KiB
Bash
Raw Normal View History

#!/bin/bash
source "$GENTOO_BOOTSTRAP_DIR/scripts/protection.sh" || exit 1
elog() {
echo " * $*"
}
einfo() {
echo " * $*"
}
ewarn() {
echo " * $*" >&2
}
eerror() {
echo " * ERROR: $*" >&2
}
die() {
eerror "$*"
kill "$GENTOO_BOOTSTRAP_SCRIPT_PID"
exit 1
}
for_line_in() {
while IFS="" read -r line || [[ -n "$line" ]]; do
"$2" "$line"
done <"$1"
}
2020-01-04 10:55:31 -01:00
flush_stdin() {
local empty_stdin
while read -r -t 0.01 empty_stdin; do true; done
2020-01-04 10:55:31 -01:00
}
2020-01-04 10:55:31 -01:00
ask() {
local response
while true; do
2020-01-04 10:55:31 -01:00
flush_stdin
2020-01-04 11:09:29 -01:00
read -r -p "$* (Y/n) " response \
|| die "Error in read"
case "${response,,}" in
'') return 0 ;;
y|yes) return 0 ;;
n|no) return 1 ;;
*) continue ;;
esac
done
}
2020-01-04 10:55:31 -01:00
try() {
local response
local cmd_status
2020-01-04 11:09:29 -01:00
local prompt_parens="(Shell/retry/abort/continue/print)"
2020-01-04 10:55:31 -01:00
# Outer loop, allows us to retry the command
while true; do
# Try command
"$@"
cmd_status="$?"
if [[ "$cmd_status" != 0 ]]; then
echo " * Command failed: \$ $*"
echo "Last command failed with exit code $cmd_status"
2020-01-04 10:55:31 -01:00
# Prompt until input is valid
while true; do
echo -n "Specify next action $prompt_parens "
2020-01-04 10:55:31 -01:00
flush_stdin
2020-01-04 11:09:29 -01:00
read -r response \
|| die "Error in read"
2020-01-04 10:55:31 -01:00
case "${response,,}" in
''|s|shell)
echo "You will be prompted for action again after exiting this shell."
/bin/bash --init-file <(echo "init_bash")
2020-01-04 10:55:31 -01:00
;;
r|retry) continue 2 ;;
2020-01-04 11:09:29 -01:00
a|abort) die "Installation aborted" ;;
c|continue) return 0 ;;
p|print) echo "\$ $*" ;;
2020-01-04 11:31:39 -01:00
*) ;;
2020-01-04 10:55:31 -01:00
esac
done
fi
return
2020-01-04 10:55:31 -01:00
done
}
countdown() {
echo -n "$1" >&2
local i="$2"
while [[ $i -gt 0 ]]; do
echo -n "$i " >&2
i=$((i - 1))
sleep 1
done
echo >&2
}
download_stdout() {
wget --quiet --https-only --secure-protocol=PFS -O - -- "$1"
}
download() {
wget --quiet --https-only --secure-protocol=PFS --show-progress -O "$2" -- "$1"
}
get_device_by_partuuid() {
blkid -g \
|| die "Error while executing blkid"
local dev
dev="$(blkid -o export -t PARTUUID="$1")" \
|| die "Error while executing blkid to find PARTUUID=$1"
dev="$(grep DEVNAME <<< "$dev")" \
|| die "Could not find DEVNAME=... in blkid output"
dev="${dev:8}"
echo -n "$dev"
}
load_or_generate_uuid() {
local uuid
local uuid_file="$UUID_STORAGE_DIR/$1"
if [[ -e "$uuid_file" ]]; then
uuid="$(cat "$uuid_file")"
else
uuid="$(uuidgen -r)"
mkdir -p "$UUID_STORAGE_DIR"
echo -n "$uuid" > "$uuid_file"
fi
echo -n "$uuid"
}